Merge "Refactored DataProfile and ApnSetting"
diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java
index 5aa91f7..29e12e1 100644
--- a/src/java/com/android/internal/telephony/RIL.java
+++ b/src/java/com/android/internal/telephony/RIL.java
@@ -704,6 +704,7 @@
 
     private void handleRadioProxyExceptionForRR(RILRequest rr, String caller, Exception e) {
         riljLoge(caller + ": " + e);
+        e.printStackTrace();
         resetProxyAndRequestList();
     }
 
diff --git a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
index 85d3974..a4447ad 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DataConnection.java
@@ -743,9 +743,9 @@
             return;
         }
 
-        if (apn != null && apn.getMtu() != PhoneConstants.UNSET_MTU) {
-            lp.setMtu(apn.getMtu());
-            if (DBG) log("MTU set by APN to: " + apn.getMtu());
+        if (apn != null && apn.getMtuV4() != PhoneConstants.UNSET_MTU) {
+            lp.setMtu(apn.getMtuV4());
+            if (DBG) log("MTU set by APN to: " + apn.getMtuV4());
             return;
         }
 
@@ -883,8 +883,10 @@
         Message msg = obtainMessage(EVENT_SETUP_DATA_CONNECTION_DONE, cp);
         msg.obj = cp;
 
-        DataProfile dp = DcTracker.createDataProfile(mApnSetting, cp.mProfileId,
-                cp.mIsPreferredApn);
+        DataProfile dp = new DataProfile.Builder()
+                .setApnSetting(mApnSetting)
+                .setPreferred(cp.mIsPreferredApn)
+                .build();
 
         // We need to use the actual modem roaming state instead of the framework roaming state
         // here. This flag is only passed down to ril_service for picking the correct protocol (for
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
index 6305e06..2cc0dec 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcTracker.java
@@ -2016,14 +2016,6 @@
         ArrayList<ApnSetting> dunCandidates = new ArrayList<ApnSetting>();
         ArrayList<ApnSetting> retDunSettings = new ArrayList<ApnSetting>();
 
-        // Places to look for tether APN in order: TETHER_DUN_APN setting (to be deprecated soon),
-        // APN database
-        String apnData = Settings.Global.getString(mResolver, Settings.Global.TETHER_DUN_APN);
-        if (!TextUtils.isEmpty(apnData)) {
-            dunCandidates.addAll(ApnSetting.arrayFromString(apnData));
-            if (VDBG) log("fetchDunApns: dunCandidates from Setting: " + dunCandidates);
-        }
-
         if (dunCandidates.isEmpty()) {
             if (!ArrayUtils.isEmpty(mAllApnSettings)) {
                 for (ApnSetting apn : mAllApnSettings) {
@@ -2321,8 +2313,10 @@
             if (DBG) log("setInitialAttachApn: X There in no available apn.");
         } else {
             if (DBG) log("setInitialAttachApn: X selected APN=" + apnSetting);
-            mDataServiceManager.setInitialAttachApn(createDataProfile(apnSetting,
-                    apnSetting.equals(getPreferredApn())),
+            mDataServiceManager.setInitialAttachApn(new DataProfile.Builder()
+                    .setApnSetting(apnSetting)
+                    .setPreferred(apnSetting.equals(getPreferredApn()))
+                    .build(),
                     mPhone.getServiceState().getDataRoamingFromRegistration(), null);
         }
     }
@@ -3492,7 +3486,10 @@
         for (ApnSetting apn : mAllApnSettings) {
             if (apn.getApnSetId() == Telephony.Carriers.MATCH_ALL_APN_SET_ID
                     || preferredApnSetId == apn.getApnSetId()) {
-                DataProfile dp = createDataProfile(apn, apn.equals(getPreferredApn()));
+                DataProfile dp = new DataProfile.Builder()
+                        .setApnSetting(apn)
+                        .setPreferred(apn.equals(getPreferredApn()))
+                        .build();
                 if (!dataProfileList.contains(dp)) {
                     dataProfileList.add(dp);
                 }
@@ -3608,15 +3605,37 @@
         int networkTypeBitmask = (dest.getNetworkTypeBitmask() == 0
                 || src.getNetworkTypeBitmask() == 0)
                 ? 0 : (dest.getNetworkTypeBitmask() | src.getNetworkTypeBitmask());
-
-        return ApnSetting.makeApnSetting(id, dest.getOperatorNumeric(), dest.getEntryName(),
-            dest.getApnName(), proxy, port, mmsc, mmsProxy, mmsPort, dest.getUser(),
-            dest.getPassword(), dest.getAuthType(), resultApnType, protocol, roamingProtocol,
-            dest.isEnabled(), networkTypeBitmask, dest.getProfileId(),
-            (dest.isPersistent() || src.isPersistent()), dest.getMaxConns(),
-            dest.getWaitTime(), dest.getMaxConnsTime(), dest.getMtu(), dest.getMvnoType(),
-            dest.getMvnoMatchData(), dest.getApnSetId(), dest.getCarrierId(),
-            dest.getSkip464Xlat());
+        return new ApnSetting.Builder()
+                .setId(id)
+                .setOperatorNumeric(dest.getOperatorNumeric())
+                .setEntryName(dest.getEntryName())
+                .setApnName(dest.getApnName())
+                .setProxyAddress(proxy)
+                .setProxyPort(port)
+                .setMmsc(mmsc)
+                .setMmsProxyAddress(mmsProxy)
+                .setMmsProxyPort(mmsPort)
+                .setUser(dest.getUser())
+                .setPassword(dest.getPassword())
+                .setAuthType(dest.getAuthType())
+                .setApnTypeBitmask(resultApnType)
+                .setProtocol(protocol)
+                .setRoamingProtocol(roamingProtocol)
+                .setCarrierEnabled(dest.isEnabled())
+                .setNetworkTypeBitmask(networkTypeBitmask)
+                .setProfileId(dest.getProfileId())
+                .setModemCognitive(dest.isPersistent() || src.isPersistent())
+                .setMaxConns(dest.getMaxConns())
+                .setWaitTime(dest.getWaitTime())
+                .setMaxConnsTime(dest.getMaxConnsTime())
+                .setMtuV4(dest.getMtuV4())
+                .setMtuV6(dest.getMtuV6())
+                .setMvnoType(dest.getMvnoType())
+                .setMvnoMatchData(dest.getMvnoMatchData())
+                .setApnSetId(dest.getApnSetId())
+                .setCarrierId(dest.getCarrierId())
+                .setSkip464Xlat(dest.getSkip464Xlat())
+                .build();
     }
 
     private DataConnection createDataConnection() {
@@ -5489,50 +5508,6 @@
         mWatchdog = false;
     }
 
-    private static DataProfile createDataProfile(ApnSetting apn, boolean isPreferred) {
-        return createDataProfile(apn, apn.getProfileId(), isPreferred);
-    }
-
-    @VisibleForTesting
-    public static DataProfile createDataProfile(ApnSetting apn, int profileId,
-                                                boolean isPreferred) {
-        int profileType;
-
-        int networkTypeBitmask = apn.getNetworkTypeBitmask();
-
-        if (networkTypeBitmask == 0) {
-            profileType = DataProfile.TYPE_COMMON;
-        } else if ((networkTypeBitmask & TelephonyManager.NETWORK_STANDARDS_FAMILY_BITMASK_3GPP2)
-                == networkTypeBitmask) {
-            profileType = DataProfile.TYPE_3GPP2;
-        } else if ((networkTypeBitmask & TelephonyManager.NETWORK_STANDARDS_FAMILY_BITMASK_3GPP)
-                == networkTypeBitmask) {
-            profileType = DataProfile.TYPE_3GPP;
-        } else {
-            profileType = DataProfile.TYPE_COMMON;
-        }
-
-        return new DataProfile.Builder()
-                .setProfileId(profileId)
-                .setApn(apn.getApnName())
-                .setProtocolType(apn.getProtocol())
-                .setAuthType(apn.getAuthType())
-                .setUserName(apn.getUser() == null ? "" : apn.getUser())
-                .setPassword(apn.getPassword() == null ? "" : apn.getPassword())
-                .setType(profileType)
-                .setMaxConnectionsTime(apn.getMaxConnsTime())
-                .setMaxConnections(apn.getMaxConns())
-                .setWaitTime(apn.getWaitTime())
-                .enable(apn.isEnabled())
-                .setSupportedApnTypesBitmask(apn.getApnTypeBitmask())
-                .setRoamingProtocolType(apn.getRoamingProtocol())
-                .setBearerBitmask(networkTypeBitmask)
-                .setMtu(apn.getMtu())
-                .setPersistent(apn.isPersistent())
-                .setPreferred(isPreferred)
-                .build();
-    }
-
     private void onDataServiceBindingChanged(boolean bound) {
         if (!bound) {
             if (mTransportType == AccessNetworkConstants.TRANSPORT_TYPE_WLAN) {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/RILTest.java b/tests/telephonytests/src/com/android/internal/telephony/RILTest.java
index 149115a..8c7f848 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/RILTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/RILTest.java
@@ -167,8 +167,6 @@
 
 import androidx.test.filters.FlakyTest;
 
-import com.android.internal.telephony.dataconnection.DcTracker;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -272,14 +270,14 @@
     private static final int AUTH_TYPE = 0;
     private static final String USER_NAME = "username";
     private static final String PASSWORD = "password";
-    private static final int TYPE = 0;
-    private static final int MAX_CONNS_TIME = 1;
-    private static final int MAX_CONNS = 3;
-    private static final int WAIT_TIME = 10;
+    private static final int TYPE = DataProfile.TYPE_3GPP;
     private static final boolean APN_ENABLED = true;
-    private static final int SUPPORTED_APN_TYPES_BITMASK = 123456;
+    private static final int SUPPORTED_APN_TYPES_BITMASK = ApnSetting.TYPE_CBS
+            | ApnSetting.TYPE_IMS;
+    private static final int SUPPORTED_NETWORK_TYPES_BITMASK =
+            (int) (TelephonyManager.NETWORK_TYPE_BITMASK_UMTS
+                    | TelephonyManager.NETWORK_TYPE_BITMASK_LTE);
     private static final int ROAMING_PROTOCOL = ApnSetting.PROTOCOL_IPV6;
-    private static final int BEARER_BITMASK = 123123;
     private static final int MTU = 1234;
     private static final boolean PERSISTENT = true;
 
@@ -1024,12 +1022,21 @@
     @FlakyTest
     @Test
     public void testSetInitialAttachApn() throws Exception {
-        ApnSetting apnSetting = ApnSetting.makeApnSetting(
-                -1, "22210", "Vodafone IT", "web.omnitel.it", null, -1,
-                null, null, -1, "", "", 0, ApnSetting.TYPE_DUN, ApnSetting.PROTOCOL_IP,
-                ApnSetting.PROTOCOL_IP, true, 0, 0, false, 0, 0, 0, 0, -1, "");
-        DataProfile dataProfile = DcTracker.createDataProfile(
-                apnSetting, apnSetting.getProfileId(), false);
+        ApnSetting apnSetting = new ApnSetting.Builder()
+                .setId(-1)
+                .setOperatorNumeric("22210")
+                .setEntryName("Vodafone IT")
+                .setApnName("web.omnitel.it")
+                .setApnTypeBitmask(ApnSetting.TYPE_DUN)
+                .setProtocol(ApnSetting.PROTOCOL_IP)
+                .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+                .setCarrierEnabled(true)
+                .build();
+
+        DataProfile dataProfile = new DataProfile.Builder()
+                .setApnSetting(apnSetting)
+                .setPreferred(false)
+                .build();
         boolean isRoaming = false;
 
         mRILUnderTest.setInitialAttachApn(dataProfile, isRoaming, obtainMessage());
@@ -2588,23 +2595,25 @@
 
     @Test
     public void testSetupDataCall() throws Exception {
-        DataProfile dp = new DataProfile.Builder()
+        ApnSetting apn = new ApnSetting.Builder()
+                .setId(1234)
+                .setEntryName(APN)
+                .setApnName(APN)
+                .setApnTypeBitmask(SUPPORTED_APN_TYPES_BITMASK)
+                .setProtocol(ApnSetting.PROTOCOL_IPV6)
+                .setRoamingProtocol(ApnSetting.PROTOCOL_IPV6)
+                .setCarrierEnabled(true)
                 .setProfileId(PROFILE_ID)
-                .setApn(APN)
-                .setProtocolType(PROTOCOL)
                 .setAuthType(AUTH_TYPE)
-                .setUserName(USER_NAME)
+                .setUser(USER_NAME)
                 .setPassword(PASSWORD)
-                .setType(TYPE)
-                .setMaxConnectionsTime(MAX_CONNS_TIME)
-                .setMaxConnections(MAX_CONNS)
-                .setWaitTime(WAIT_TIME)
-                .enable(APN_ENABLED)
-                .setSupportedApnTypesBitmask(SUPPORTED_APN_TYPES_BITMASK)
-                .setRoamingProtocolType(ROAMING_PROTOCOL)
-                .setBearerBitmask(BEARER_BITMASK)
-                .setMtu(MTU)
-                .setPersistent(PERSISTENT)
+                .setNetworkTypeBitmask(SUPPORTED_NETWORK_TYPES_BITMASK)
+                .setMtuV4(MTU)
+                .setModemCognitive(true)
+                .build();
+
+        DataProfile dp = new DataProfile.Builder()
+                .setApnSetting(apn)
                 .setPreferred(false)
                 .build();
 
@@ -2625,14 +2634,11 @@
         assertEquals(USER_NAME, dpi.user);
         assertEquals(PASSWORD, dpi.password);
         assertEquals(TYPE, dpi.type);
-        assertEquals(MAX_CONNS_TIME, dpi.maxConnsTime);
-        assertEquals(MAX_CONNS, dpi.maxConns);
-        assertEquals(WAIT_TIME, dpi.waitTime);
         assertEquals(APN_ENABLED, dpi.enabled);
         assertEquals(SUPPORTED_APN_TYPES_BITMASK, dpi.supportedApnTypesBitmap);
         assertEquals(ROAMING_PROTOCOL, ApnSetting.getProtocolIntFromString(dpi.protocol));
         assertEquals(
-                BEARER_BITMASK,
+                SUPPORTED_NETWORK_TYPES_BITMASK,
                 ServiceState.convertBearerBitmaskToNetworkTypeBitmask(dpi.bearerBitmap >> 1));
         assertEquals(MTU, dpi.mtu);
     }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnContextTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnContextTest.java
index 85d1e5e..729a6c2 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnContextTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnContextTest.java
@@ -198,32 +198,16 @@
     public void testProvisionApn() throws Exception {
         mContextFixture.putResource(R.string.mobile_provisioning_apn, "fake_apn");
 
-        ApnSetting myApn = ApnSetting.makeApnSetting(
-                2163,                   // id
-                "44010",                // numeric
-                "sp-mode",              // name
-                "fake_apn",             // apn
-                null,                     // proxy
-                -1,                     // port
-                null,                     // mmsc
-                null,                     // mmsproxy
-                -1,                     // mmsport
-                "",                     // user
-                "",                     // password
-                -1,                     // authtype
-                ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL,     // types
-                ApnSetting.PROTOCOL_IP,                   // protocol
-                ApnSetting.PROTOCOL_IP,                   // roaming_protocol
-                true,                   // carrier_enabled
-                0,                      // networktype_bismask
-                0,                      // profile_id
-                false,                  // modem_cognitive
-                0,                      // max_conns
-                0,                      // wait_time
-                0,                      // max_conns_time
-                0,                      // mtu
-                -1,                     // mvno_type
-                "");                    // mnvo_match_data
+        ApnSetting myApn = new ApnSetting.Builder()
+                .setId(2163)
+                .setOperatorNumeric("44010")
+                .setEntryName("sp-mode")
+                .setApnName("fake_apn")
+                .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL)
+                .setProtocol(ApnSetting.PROTOCOL_IP)
+                .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+                .setCarrierEnabled(true)
+                .build();
 
         mApnContext.setApnSetting(myApn);
         assertTrue(mApnContext.isProvisioningApn());
diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnSettingTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnSettingTest.java
index 0b19baf..504fe94 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnSettingTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/ApnSettingTest.java
@@ -24,6 +24,7 @@
 import static org.mockito.Mockito.doReturn;
 
 import android.net.Uri;
+import android.os.Parcel;
 import android.os.PersistableBundle;
 import android.telephony.CarrierConfigManager;
 import android.telephony.ServiceState;
@@ -40,7 +41,6 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
 import java.net.InetAddress;
-import java.util.ArrayList;
 import java.util.List;
 
 public class ApnSettingTest extends TelephonyTest {
@@ -67,32 +67,16 @@
     }
 
     private static ApnSetting createApnSettingInternal(int apnTypeBitmask, boolean carrierEnabled) {
-        return ApnSetting.makeApnSetting(
-                2163,                   // id
-                "44010",                // numeric
-                "sp-mode",              // name
-                "spmode.ne.jp",         // apn
-                null,                   // proxy
-                -1,                     // port
-                null,                   // mmsc
-                null,                   // mmsproxy
-                -1,                     // mmsport
-                "",                     // user
-                "",                     // password
-                -1,                     // authtype
-                apnTypeBitmask,         // types
-                ApnSetting.PROTOCOL_IP, // protocol
-                ApnSetting.PROTOCOL_IP, // roaming_protocol
-                carrierEnabled,         // carrier_enabled
-                0,                      // networktype_bitmask
-                0,                      // profile_id
-                false,                  // modem_cognitive
-                0,                      // max_conns
-                0,                      // wait_time
-                0,                      // max_conns_time
-                0,                      // mtu
-                -1,                     // mvno_type
-                "");                    // mnvo_match_data
+        return new ApnSetting.Builder()
+                .setId(2163)
+                .setOperatorNumeric("44010")
+                .setEntryName("sp-mode")
+                .setApnName("fake_apn")
+                .setApnTypeBitmask(apnTypeBitmask)
+                .setProtocol(ApnSetting.PROTOCOL_IP)
+                .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+                .setCarrierEnabled(carrierEnabled)
+                .build();
     }
 
     private static void assertApnSettingsEqual(List<ApnSetting> a1, List<ApnSetting> a2) {
@@ -124,7 +108,7 @@
         assertEquals(a1.getMaxConns(), a2.getMaxConns());
         assertEquals(a1.getWaitTime(), a2.getWaitTime());
         assertEquals(a1.getMaxConnsTime(), a2.getMaxConnsTime());
-        assertEquals(a1.getMtu(), a2.getMtu());
+        assertEquals(a1.getMtuV4(), a2.getMtuV4());
         assertEquals(a1.getMvnoType(), a2.getMvnoType());
         assertEquals(a1.getMvnoMatchData(), a2.getMvnoMatchData());
         assertEquals(a1.getNetworkTypeBitmask(), a2.getNetworkTypeBitmask());
@@ -134,194 +118,6 @@
 
     @Test
     @SmallTest
-    public void testFromString() {
-        final int dunTypesBitmask = ApnSetting.TYPE_DUN;
-        final int mmsTypesBitmask = ApnSetting.TYPE_MMS | ApnSetting.TYPE_ALL;
-
-        ApnSetting expectedApn;
-        String testString;
-
-        // A real-world v1 example string.
-        testString = "Vodafone IT,web.omnitel.it,,,,,,,,,222,10,,DUN";
-        expectedApn = ApnSetting.makeApnSetting(
-                -1, "22210", "Vodafone IT", "web.omnitel.it", "", -1, null, "", -1, "", "", 0,
-                dunTypesBitmask, ApnSetting.PROTOCOL_IP, ApnSetting.PROTOCOL_IP, true,
-                0, 0, false, 0, 0, 0, 0, -1, "");
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        // A v2 string.
-        testString = "[ApnSettingV2] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,14";
-        int networkTypeBitmask = 1 << (13 - 1);
-        expectedApn = ApnSetting.makeApnSetting(
-                -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                networkTypeBitmask, 0, false, 0, 0, 0, 0, -1, "");
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        // A v2 string with spaces.
-        testString = "[ApnSettingV2] Name,apn, ,,,,,,,,123,45,,mms|*,IPV6, IP,true,14";
-        expectedApn = ApnSetting.makeApnSetting(
-                -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                networkTypeBitmask, 0, false, 0, 0, 0, 0, -1, "");
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        // A v3 string.
-        testString = "[ApnSettingV3] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,14,,,,,,,spn,testspn";
-        expectedApn = ApnSetting.makeApnSetting(
-                -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                networkTypeBitmask, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn");
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        // A v4 string with network type bitmask.
-        testString =
-                "[ApnSettingV4] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn,6";
-        networkTypeBitmask = 1 << (6 - 1);
-        expectedApn = ApnSetting.makeApnSetting(
-                -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                networkTypeBitmask, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn");
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        testString =
-                "[ApnSettingV4] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn,"
-                        + "4|5|6|7|8|12|13|14|19";
-        // The value was calculated by adding "4|5|6|7|8|12|13|14|19".
-        networkTypeBitmask = 276728;
-        expectedApn = ApnSetting.makeApnSetting(
-                -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                networkTypeBitmask, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn");
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        // A v4 string with network type bitmask and compatible bearer bitmask.
-        testString =
-                "[ApnSettingV4] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,8,,,,,,,spn,testspn, 6";
-        networkTypeBitmask = 1 << (6 - 1);
-        expectedApn = ApnSetting.makeApnSetting(
-                -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                networkTypeBitmask, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn");
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        // A v4 string with network type bitmask and incompatible bearer bitmask.
-        testString =
-                "[ApnSettingV4] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,9,,,,,,,spn,testspn, 6";
-        expectedApn = ApnSetting.makeApnSetting(
-                -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                networkTypeBitmask, 0, false, 0,
-                0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn");
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        // A v5 string with apnSetId=0
-        testString =
-                "[ApnSettingV5] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn,0,0";
-        expectedApn = ApnSetting.makeApnSetting(
-                -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                0, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn");
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        // A v5 string with apnSetId=3
-        testString =
-                "[ApnSettingV5] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn,0,3";
-        expectedApn = ApnSetting.makeApnSetting(
-                -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                0, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn", 3, -1, -1);
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        // A v6 string with carrierId=100
-        testString =
-            "[ApnSettingV5] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn,0,3,"
-                + "100";
-        expectedApn = ApnSetting.makeApnSetting(
-            -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-            mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-            0, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn", 3, 100, -1);
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        // A v7 string with skip_464xlat=1
-        testString =
-            "[ApnSettingV7] Name,apn,,,,,,,,,123,45,,mms|*,IPV6,IP,true,0,,,,,,,spn,testspn,0,3,"
-                + "-1, 1";
-        expectedApn = ApnSetting.makeApnSetting(
-            -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-            mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-            0, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn", 3, -1, 1);
-        assertApnSettingEqual(expectedApn, ApnSetting.fromString(testString));
-
-        // Return no apn if insufficient fields given.
-        testString = "[ApnSettingV3] Name,apn,,,,,,,,,123, 45,,mms|*";
-        assertEquals(null, ApnSetting.fromString(testString));
-
-        testString = "Name,apn,,,,,,,,,123, 45,";
-        assertEquals(null, ApnSetting.fromString(testString));
-    }
-
-    @Test
-    @SmallTest
-    public void testArrayFromString() {
-        final int mmsTypesBitmask = ApnSetting.TYPE_MMS;
-        // Test a multiple v3 string.
-        String testString =
-                "[ApnSettingV3] Name,apn,,,,,,,,,123,45,,mms,IPV6,IP,true,14,,,,,,,spn,testspn";
-        testString +=
-                " ;[ApnSettingV3] Name1,apn1,,,,,,,,,123,46,,mms,IPV6,IP,true,12,,,,,,,gid,testGid";
-        testString +=
-                " ;[ApnSettingV3] Name1,apn2,,,,,,,,,123,46,,mms,IPV6,IP,true,12,,,,,,,,";
-        testString +=
-                " ;[ApnSettingV5] Name1,apn2,,,,,,,,,123,46,,mms,IPV6,IP,true,0,,,,,,,,,,3";
-        List<ApnSetting> expectedApns = new ArrayList<ApnSetting>();
-        expectedApns.add(ApnSetting.makeApnSetting(
-                -1, "12345", "Name", "apn", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                1 << (13 - 1), 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "testspn"));
-        expectedApns.add(ApnSetting.makeApnSetting(
-                -1, "12346", "Name1", "apn1", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                1 << (12 - 1), 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_GID, "testGid"));
-        expectedApns.add(ApnSetting.makeApnSetting(
-                -1, "12346", "Name1", "apn2", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                1 << (12 - 1), 0, false, 0, 0, 0, 0, -1, ""));
-        expectedApns.add(ApnSetting.makeApnSetting(
-                -1, "12346", "Name1", "apn2", "", -1, null, "", -1, "", "", 0,
-                mmsTypesBitmask, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                0, 0, false, 0, 0, 0, 0, -1, "", 3, -1, -1));
-        assertApnSettingsEqual(expectedApns, ApnSetting.arrayFromString(testString));
-    }
-
-    @Test
-    @SmallTest
-    public void testToString() {
-        // Use default apn_set_id constructor.
-        ApnSetting apn = ApnSetting.makeApnSetting(
-                99, "12345", "Name", "apn", null, 10,
-                null, null, -1, "user", "password", 0,
-                ApnSetting.TYPE_DEFAULT, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                4096, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "");
-        String expected = "[ApnSettingV7] Name, 99, 12345, apn, null, "
-                + "null, null, null, 10, 0, hipri | default, "
-                + "IPV6, IP, true, 0, false, 0, 0, 0, 0, spn, , false, 4096, 0, -1, -1";
-        assertEquals(expected, apn.toString());
-
-        final int networkTypeBitmask = 1 << (14 - 1);
-        apn = ApnSetting.makeApnSetting(
-                99, "12345", "Name", "apn", null, 10,
-                null, null, -1, "user", "password", 0,
-                ApnSetting.TYPE_DEFAULT, ApnSetting.PROTOCOL_IPV6, ApnSetting.PROTOCOL_IP, true,
-                networkTypeBitmask, 0, false, 0, 0, 0, 0, ApnSetting.MVNO_TYPE_SPN, "", 3, -1, 1);
-        expected = "[ApnSettingV7] Name, 99, 12345, apn, null, "
-                + "null, null, null, 10, 0, hipri | default, "
-                + "IPV6, IP, true, 0, false, 0, 0, 0, 0, spn, , false, 8192, 3, -1, 1";
-        assertEquals(expected, apn.toString());
-    }
-
-    @Test
-    @SmallTest
     public void testIsMetered() {
         mBundle.putStringArray(CarrierConfigManager.KEY_CARRIER_METERED_APN_TYPES_STRINGS,
                 new String[]{ApnSetting.TYPE_DEFAULT_STRING, ApnSetting.TYPE_MMS_STRING});
@@ -652,59 +448,32 @@
     @Test
     @SmallTest
     public void testEqualsRoamingProtocol() {
-        ApnSetting apn1 = ApnSetting.makeApnSetting(
-                1234,
-                "310260",
-                "",
-                "ims",
-                null,
-                -1,
-                null,
-                null,
-                -1,
-                "",
-                "",
-                -1,
-                ApnSetting.TYPE_IMS,
-                ApnSetting.PROTOCOL_IPV6,
-                -1,
-                true,
-                ServiceState.convertBearerBitmaskToNetworkTypeBitmask(131071),
-                0,
-                false,
-                0,
-                0,
-                0,
-                1440,
-                -1,
-                "");
+        ApnSetting apn1 = new ApnSetting.Builder()
+                .setId(1234)
+                .setOperatorNumeric("310260")
+                .setEntryName("ims")
+                .setApnName("ims")
+                .setApnTypeBitmask(ApnSetting.TYPE_IMS)
+                .setProtocol(ApnSetting.PROTOCOL_IPV6)
+                .setNetworkTypeBitmask(
+                        ServiceState.convertBearerBitmaskToNetworkTypeBitmask(131071))
+                .setMtuV4(1440)
+                .setCarrierEnabled(true)
+                .build();
 
-        ApnSetting apn2 = ApnSetting.makeApnSetting(
-                1235,
-                "310260",
-                "",
-                "ims",
-                null,
-                -1,
-                null,
-                null,
-                -1,
-                "",
-                "",
-                -1,
-                ApnSetting.TYPE_IMS,
-                ApnSetting.PROTOCOL_IPV6,
-                ApnSetting.PROTOCOL_IPV6,
-                true,
-                ServiceState.convertBearerBitmaskToNetworkTypeBitmask(131072),
-                0,
-                false,
-                0,
-                0,
-                0,
-                1440,
-                -1,
-                "");
+        ApnSetting apn2 = new ApnSetting.Builder()
+                .setId(1235)
+                .setOperatorNumeric("310260")
+                .setEntryName("ims")
+                .setApnName("ims")
+                .setApnTypeBitmask(ApnSetting.TYPE_IMS)
+                .setProtocol(ApnSetting.PROTOCOL_IPV6)
+                .setRoamingProtocol(ApnSetting.PROTOCOL_IPV6)
+                .setNetworkTypeBitmask(
+                        ServiceState.convertBearerBitmaskToNetworkTypeBitmask(131072))
+                .setMtuV4(1440)
+                .setCarrierEnabled(true)
+                .build();
 
         assertTrue(apn1.equals(apn2, false));
         assertFalse(apn1.equals(apn2, true));
@@ -713,61 +482,32 @@
     @Test
     @SmallTest
     public void testCanHandleNetwork() {
-        ApnSetting apn1 = ApnSetting.makeApnSetting(
-                1234,
-                "310260",
-                "",
-                "ims",
-                null,
-                -1,
-                null,
-                null,
-                -1,
-                "",
-                "",
-                -1,
-                ApnSetting.TYPE_IMS,
-                ApnSetting.PROTOCOL_IPV6,
-                -1,
-                true,
-                (int) (TelephonyManager.NETWORK_TYPE_BITMASK_LTE
-                        | TelephonyManager.NETWORK_TYPE_BITMASK_UMTS),
-                0,
-                false,
-                0,
-                0,
-                0,
-                1440,
-                -1,
-                "");
+        ApnSetting apn1 = new ApnSetting.Builder()
+                .setId(1234)
+                .setOperatorNumeric("310260")
+                .setEntryName("ims")
+                .setApnName("ims")
+                .setApnTypeBitmask(ApnSetting.TYPE_IMS)
+                .setProtocol(ApnSetting.PROTOCOL_IPV6)
+                .setNetworkTypeBitmask((int) (TelephonyManager.NETWORK_TYPE_BITMASK_LTE
+                        | TelephonyManager.NETWORK_TYPE_BITMASK_UMTS))
+                .setMtuV4(1440)
+                .setCarrierEnabled(true)
+                .build();
 
-        ApnSetting apn2 = ApnSetting.makeApnSetting(
-                1235,
-                "310260",
-                "",
-                "ims",
-                null,
-                -1,
-                null,
-                null,
-                -1,
-                "",
-                "",
-                -1,
-                ApnSetting.TYPE_IMS,
-                ApnSetting.PROTOCOL_IPV6,
-                ApnSetting.PROTOCOL_IPV6,
-                true,
-                (int) (TelephonyManager.NETWORK_TYPE_BITMASK_EDGE
-                        | TelephonyManager.NETWORK_TYPE_BITMASK_GPRS),
-                0,
-                false,
-                0,
-                0,
-                0,
-                1440,
-                -1,
-                "");
+        ApnSetting apn2 = new ApnSetting.Builder()
+                .setId(1235)
+                .setOperatorNumeric("310260")
+                .setEntryName("ims")
+                .setApnName("ims")
+                .setApnTypeBitmask(ApnSetting.TYPE_IMS)
+                .setProtocol(ApnSetting.PROTOCOL_IPV6)
+                .setRoamingProtocol(ApnSetting.PROTOCOL_IPV6)
+                .setNetworkTypeBitmask((int) (TelephonyManager.NETWORK_TYPE_BITMASK_EDGE
+                        | TelephonyManager.NETWORK_TYPE_BITMASK_GPRS))
+                .setMtuV4(1440)
+                .setCarrierEnabled(true)
+                .build();
 
         assertFalse(apn1.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_1xRTT));
         assertTrue(apn1.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_LTE));
@@ -780,4 +520,19 @@
 
         assertTrue(apn2.canSupportNetworkType(TelephonyManager.NETWORK_TYPE_GSM));
     }
+
+    @Test
+    public void testParcel() {
+        ApnSetting apn = createApnSetting(ApnSetting.TYPE_DEFAULT);
+
+        Parcel parcel = Parcel.obtain();
+        apn.writeToParcel(parcel, 0 /* flags */);
+        parcel.setDataPosition(0);
+
+        ApnSetting fromParcel = ApnSetting.CREATOR.createFromParcel(parcel);
+
+        assertEquals(apn, fromParcel);
+
+        parcel.recycle();
+    }
 }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java
index ca8abeb..84a26fa 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataConnectionTest.java
@@ -54,6 +54,7 @@
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.Message;
+import android.provider.Telephony;
 import android.telephony.AccessNetworkConstants;
 import android.telephony.AccessNetworkConstants.AccessNetworkType;
 import android.telephony.CarrierConfigManager;
@@ -118,173 +119,75 @@
     private DataConnectionTestHandler mDataConnectionTestHandler;
     private DcController mDcc;
 
-    private ApnSetting mApn1 = ApnSetting.makeApnSetting(
-            2163,                   // id
-            "44010",                // numeric
-            "sp-mode",              // name
-            "spmode.ne.jp",         // apn
-            null,                   // proxy
-            -1,                     // port
-            null,                   // mmsc
-            null,                   // mmsproxy
-            -1,                     // mmsport
-            "",                     // user
-            "",                     // password
-            -1,                     // authtype
-            ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL, // types
-            ApnSetting.PROTOCOL_IP, // protocol
-            ApnSetting.PROTOCOL_IP, // roaming_protocol
-            true,                   // carrier_enabled
-            0,                      // networktype_bitmask
-            0,                      // profile_id
-            false,                  // modem_cognitive
-            0,                      // max_conns
-            0,                      // wait_time
-            0,                      // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "");                    // mnvo_match_data
+    private ApnSetting mApn1 = new ApnSetting.Builder()
+            .setId(2163)
+            .setOperatorNumeric("44010")
+            .setEntryName("sp-mode")
+            .setApnName("spmode.ne.jp")
+            .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL)
+            .setProtocol(ApnSetting.PROTOCOL_IP)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .build();
 
-    private ApnSetting mApn2 = ApnSetting.makeApnSetting(
-            2164,                   // id
-            "44010",                // numeric
-            "sp-mode",              // name
-            "spmode.ne.jp",         // apn
-            null,                   // proxy
-            -1,                     // port
-            null,                   // mmsc
-            null,                   // mmsproxy
-            -1,                     // mmsport
-            "",                     // user
-            "",                     // password
-            -1,                     // authtype
-            ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_DUN, // types
-            ApnSetting.PROTOCOL_IP, // protocol
-            ApnSetting.PROTOCOL_IP, // roaming_protocol
-            true,                   // carrier_enabled
-            0,                      // networktype_bitmask
-            0,                      // profile_id
-            false,                  // modem_cognitive
-            0,                      // max_conns
-            0,                      // wait_time
-            0,                      // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "");                    // mnvo_match_data
+    private ApnSetting mApn2 = new ApnSetting.Builder()
+            .setId(2164)
+            .setOperatorNumeric("44010")
+            .setEntryName("sp-mode")
+            .setApnName("spmode.ne.jp")
+            .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_DUN)
+            .setProtocol(ApnSetting.PROTOCOL_IP)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .build();
 
-    private ApnSetting mApn3 = ApnSetting.makeApnSetting(
-            2165,                   // id
-            "44010",                // numeric
-            "sp-mode",              // name
-            "spmode.ne.jp",         // apn
-            null,                   // proxy
-            -1,                     // port
-            null,                   // mmsc
-            null,                   // mmsproxy
-            -1,                     // mmsport
-            "",                     // user
-            "",                     // password
-            -1,                     // authtype
-            ApnSetting.TYPE_DEFAULT, // types
-            ApnSetting.PROTOCOL_IPV6, // protocol
-            ApnSetting.PROTOCOL_IP, // roaming_protocol
-            true,                   // carrier_enabled
-            0,                      // networktype_bitmask
-            0,                      // profile_id
-            false,                  // modem_cognitive
-            0,                      // max_conns
-            0,                      // wait_time
-            0,                      // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "",                     // mnvo_match_data
-            0,                      // apn_set_id
-            -1,                     // carrier_id
-            1);                     // skip_464xlat
+    private ApnSetting mApn3 = new ApnSetting.Builder()
+            .setId(2165)
+            .setOperatorNumeric("44010")
+            .setEntryName("sp-mode")
+            .setApnName("spmode.ne.jp")
+            .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT)
+            .setProtocol(ApnSetting.PROTOCOL_IPV6)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setNetworkTypeBitmask(0)
+            .setCarrierEnabled(true)
+            .setCarrierId(1)
+            .setSkip464Xlat(1)
+            .build();
 
-    private ApnSetting mApn4 = ApnSetting.makeApnSetting(
-            2166,                   // id
-            "44010",                // numeric
-            "sp-mode",              // name
-            "spmode.ne.jp",         // apn
-            null,                   // proxy
-            -1,                     // port
-            null,                   // mmsc
-            null,                   // mmsproxy
-            -1,                     // mmsport
-            "",                     // user
-            "",                     // password
-            -1,                     // authtype
-            ApnSetting.TYPE_IMS,    // types
-            ApnSetting.PROTOCOL_IPV6, // protocol
-            ApnSetting.PROTOCOL_IP, // roaming_protocol
-            true,                   // carrier_enabled
-            0,                      // networktype_bitmask
-            0,                      // profile_id
-            false,                  // modem_cognitive
-            0,                      // max_conns
-            0,                      // wait_time
-            0,                      // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "");                    // mnvo_match_data
+    private ApnSetting mApn4 = new ApnSetting.Builder()
+            .setId(2166)
+            .setOperatorNumeric("44010")
+            .setEntryName("sp-mode")
+            .setApnName("spmode.ne.jp")
+            .setApnTypeBitmask(ApnSetting.TYPE_IMS)
+            .setProtocol(ApnSetting.PROTOCOL_IPV6)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .build();
 
-    private ApnSetting mApn5 = ApnSetting.makeApnSetting(
-            2167,                   // id
-            "44010",                // numeric
-            "sp-mode",              // name
-            "spmode.ne.jp",         // apn
-            null,                   // proxy
-            -1,                     // port
-            null,                   // mmsc
-            null,                   // mmsproxy
-            -1,                     // mmsport
-            "",                     // user
-            "",                     // password
-            -1,                     // authtype
-            ApnSetting.TYPE_IMS,    // types
-            ApnSetting.PROTOCOL_IPV6, // protocol
-            ApnSetting.PROTOCOL_IP, // roaming_protocol
-            true,                   // carrier_enabled
-            0,                      // networktype_bitmask
-            0,                      // profile_id
-            false,                  // modem_cognitive
-            0,                      // max_conns
-            0,                      // wait_time
-            0,                      // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "",                     // mnvo_match_data
-            0,                      // apn_set_id
-            -1,                     // carrier_id
-            0);                     // skip_464xlat
+    private ApnSetting mApn5 = new ApnSetting.Builder()
+            .setId(2167)
+            .setOperatorNumeric("44010")
+            .setEntryName("sp-mode")
+            .setApnName("spmode.ne.jp")
+            .setApnTypeBitmask(ApnSetting.TYPE_IMS)
+            .setProtocol(ApnSetting.PROTOCOL_IPV6)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .setSkip464Xlat(Telephony.Carriers.SKIP_464XLAT_DISABLE)
+            .build();
 
-    private ApnSetting mApn6 = ApnSetting.makeApnSetting(
-            2168,                   // id
-            "44010",                // numeric
-            "sp-mode",              // name
-            "spmode.ne.jp",         // apn
-            null,                   // proxy
-            -1,                     // port
-            null,                   // mmsc
-            null,                   // mmsproxy
-            -1,                     // mmsport
-            "",                     // user
-            "",                     // password
-            -1,                     // authtype
-            ApnSetting.TYPE_EMERGENCY, // types
-            ApnSetting.PROTOCOL_IP, // protocol
-            ApnSetting.PROTOCOL_IP, // roaming_protocol
-            true,                   // carrier_enabled
-            0,                      // networktype_bitmask
-            0,                      // profile_id
-            false,                  // modem_cognitive
-            0,                      // max_conns
-            0,                      // wait_time
-            0,                      // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "");                    // mnvo_match_data
+    private ApnSetting mApn6 = new ApnSetting.Builder()
+            .setId(2168)
+            .setOperatorNumeric("44010")
+            .setEntryName("sp-mode")
+            .setApnName("spmode.ne.jp")
+            .setApnTypeBitmask(ApnSetting.TYPE_EMERGENCY)
+            .setProtocol(ApnSetting.PROTOCOL_IP)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .build();
 
     private class DataConnectionTestHandler extends HandlerThread {
 
diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataProfileTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataProfileTest.java
index b641ecd..565f098 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataProfileTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DataProfileTest.java
@@ -16,127 +16,98 @@
 
 package com.android.internal.telephony.dataconnection;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+
+import android.os.Parcel;
 import android.telephony.data.ApnSetting;
 import android.telephony.data.DataProfile;
-import android.test.suitebuilder.annotation.SmallTest;
 
 import com.android.internal.telephony.RILConstants;
 
-import junit.framework.TestCase;
+import org.junit.Test;
 
-public class DataProfileTest extends TestCase {
+public class DataProfileTest {
 
-    private ApnSetting mApn1 = ApnSetting.makeApnSetting(
-            2163,                   // id
-            "44010",                // numeric
-            "sp-mode",              // name
-            "fake_apn",             // apn
-            null,                     // proxy
-            -1,                     // port
-            null,                     // mmsc
-            null,                     // mmsproxy
-            -1,                     // mmsport
-            "user",                 // user
-            "passwd",               // password
-            -1,                     // authtype
-            ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL,     // types
-            ApnSetting.PROTOCOL_IPV6,                 // protocol
-            ApnSetting.PROTOCOL_IP,                   // roaming_protocol
-            true,                   // carrier_enabled
-            0,                      // networktype_bitmask
-            1234,                   // profile_id
-            false,                  // modem_cognitive
-            321,                    // max_conns
-            456,                    // wait_time
-            789,                    // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "");                    // mnvo_match_data
+    private ApnSetting mApn1 = new ApnSetting.Builder()
+            .setId(2163)
+            .setOperatorNumeric("44010")
+            .setEntryName("sp-mode")
+            .setApnName("fake_apn")
+            .setUser("user")
+            .setPassword("passwd")
+            .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL)
+            .setProtocol(ApnSetting.PROTOCOL_IPV6)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .setNetworkTypeBitmask(0)
+            .setProfileId(1234)
+            .setMaxConns(321)
+            .setWaitTime(456)
+            .setMaxConnsTime(789)
+            .build();
 
-    private ApnSetting mApn2 = ApnSetting.makeApnSetting(
-            2163,                   // id
-            "44010",                // numeric
-            "sp-mode",              // name
-            "fake_apn",             // apn
-            null,                     // proxy
-            -1,                     // port
-            null,                     // mmsc
-            null,                     // mmsproxy
-            -1,                     // mmsport
-            "user",                 // user
-            "passwd",               // password
-            -1,                     // authtype
-            ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL,     // types
-            ApnSetting.PROTOCOL_IP,                 // protocol
-            ApnSetting.PROTOCOL_IP,                   // roaming_protocol
-            true,                   // carrier_enabled
-            0,                      // networktype_bitmask
-            1234,                   // profile_id
-            false,                  // modem_cognitive
-            111,                    // max_conns
-            456,                    // wait_time
-            789,                    // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "");                    // mnvo_match_data
+    private ApnSetting mApn2 = new ApnSetting.Builder()
+            .setId(2163)
+            .setOperatorNumeric("44010")
+            .setEntryName("sp-mode")
+            .setApnName("fake_apn")
+            .setUser("user")
+            .setPassword("passwd")
+            .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL)
+            .setProtocol(ApnSetting.PROTOCOL_IP)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .setNetworkTypeBitmask(0)
+            .setProfileId(1234)
+            .setMaxConns(111)
+            .setWaitTime(456)
+            .setMaxConnsTime(789)
+            .build();
 
-    private ApnSetting mApn3 = ApnSetting.makeApnSetting(
-            2163,                   // id
-            "44010",                // numeric
-            "sp-mode",              // name
-            "fake_apn",             // apn
-            null,                     // proxy
-            -1,                     // port
-            null,                     // mmsc
-            null,                     // mmsproxy
-            -1,                     // mmsport
-            "user",                 // user
-            "passwd",               // password
-            -1,                     // authtype
-            ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL,     // types
-            ApnSetting.PROTOCOL_IP,                 // protocol
-            ApnSetting.PROTOCOL_IP,                   // roaming_protocol
-            true,                   // carrier_enabled
-            276600,                      // networktype_bitmask
-            1234,                   // profile_id
-            false,                  // modem_cognitive
-            111,                    // max_conns
-            456,                    // wait_time
-            789,                    // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "");                    // mnvo_match_data
+    private ApnSetting mApn3 = new ApnSetting.Builder()
+            .setId(2163)
+            .setOperatorNumeric("44010")
+            .setEntryName("sp-mode")
+            .setApnName("fake_apn")
+            .setUser("user")
+            .setPassword("passwd")
+            .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL)
+            .setProtocol(ApnSetting.PROTOCOL_IP)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .setNetworkTypeBitmask(276600)
+            .setProfileId(1234)
+            .setMaxConns(111)
+            .setWaitTime(456)
+            .setMaxConnsTime(789)
+            .build();
 
-    private ApnSetting mApn4 = ApnSetting.makeApnSetting(
-            2163,                   // id
-            "44010",                // numeric
-            "sp-mode",              // name
-            "fake_apn",             // apn
-            null,                   // proxy
-            -1,                     // port
-            null,                   // mmsc
-            null,                   // mmsproxy
-            -1,                     // mmsport
-            "user",                 // user
-            "passwd",               // password
-            -1,                     // authtype
-            ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL,   // types
-            ApnSetting.PROTOCOL_IP,                 // protocol
-            ApnSetting.PROTOCOL_IP,                 // roaming_protocol
-            true,                   // carrier_enabled
-            10360,                  // networktype_bitmask
-            1234,                   // profile_id
-            false,                  // modem_cognitive
-            111,                    // max_conns
-            456,                    // wait_time
-            789,                    // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "");                    // mnvo_match_data
+    private ApnSetting mApn4 = new ApnSetting.Builder()
+            .setId(2163)
+            .setOperatorNumeric("44010")
+            .setEntryName("sp-mode")
+            .setApnName("fake_apn")
+            .setUser("user")
+            .setPassword("passwd")
+            .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL)
+            .setProtocol(ApnSetting.PROTOCOL_IP)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .setNetworkTypeBitmask(10360)
+            .setProfileId(1234)
+            .setMaxConns(111)
+            .setWaitTime(456)
+            .setMaxConnsTime(789)
+            .build();
 
-    @SmallTest
+    @Test
     public void testCreateFromApnSetting() throws Exception {
-        DataProfile dp = DcTracker.createDataProfile(mApn1, mApn1.getProfileId(), false);
+        DataProfile dp = new DataProfile.Builder()
+                .setApnSetting(mApn1)
+                .setPreferred(false)
+                .build();
         assertEquals(mApn1.getProfileId(), dp.getProfileId());
         assertEquals(mApn1.getApnName(), dp.getApn());
         assertEquals(mApn1.getProtocol(), dp.getProtocolType());
@@ -150,9 +121,12 @@
         assertFalse(dp.isPreferred());
     }
 
-    @SmallTest
+    @Test
     public void testCreateFromApnSettingWithNetworkTypeBitmask() throws Exception {
-        DataProfile dp = DcTracker.createDataProfile(mApn3, mApn3.getProfileId(), false);
+        DataProfile dp = new DataProfile.Builder()
+                .setApnSetting(mApn3)
+                .setPreferred(false)
+                .build();
         assertEquals(mApn3.getProfileId(), dp.getProfileId());
         assertEquals(mApn3.getApnName(), dp.getApn());
         assertEquals(mApn3.getProtocol(), dp.getProtocolType());
@@ -164,17 +138,47 @@
         assertEquals(mApn3.isEnabled(), dp.isEnabled());
         int expectedBearerBitmap = mApn3.getNetworkTypeBitmask();
         assertEquals(expectedBearerBitmap, dp.getBearerBitmask());
-        dp = DcTracker.createDataProfile(mApn4, mApn4.getProfileId(), false);
+        dp = new DataProfile.Builder()
+                .setApnSetting(mApn4)
+                .setPreferred(false)
+                .build();
         assertEquals(2, dp.getType());  // TYPE_3GPP2
     }
 
-    @SmallTest
+    @Test
     public void testEquals() throws Exception {
-        DataProfile dp1 = DcTracker.createDataProfile(mApn1, mApn1.getProfileId(), false);
-        DataProfile dp2 = DcTracker.createDataProfile(mApn1, mApn1.getProfileId(), false);
+        DataProfile dp1 = new DataProfile.Builder()
+                .setApnSetting(mApn1)
+                .setPreferred(false)
+                .build();
+        DataProfile dp2 = new DataProfile.Builder()
+                .setApnSetting(mApn1)
+                .setPreferred(false)
+                .build();
         assertEquals(dp1, dp2);
 
-        dp2 = DcTracker.createDataProfile(mApn2, mApn2.getProfileId(), false);
-        assertFalse(dp1.equals(dp2));
+        dp2 = new DataProfile.Builder()
+                .setApnSetting(mApn2)
+                .setPreferred(false)
+                .build();
+        assertNotEquals(dp1, dp2);
+    }
+
+    @Test
+    public void testParcel() {
+        DataProfile dp = new DataProfile.Builder()
+                .setApnSetting(mApn1)
+                .setPreferred(false)
+                .build();
+
+        Parcel parcel = Parcel.obtain();
+        dp.writeToParcel(parcel, 0 /* flags */);
+        parcel.setDataPosition(0);
+
+        DataProfile fromParcel = DataProfile.CREATOR.createFromParcel(parcel);
+
+        assertEquals(dp, fromParcel);
+
+        parcel.recycle();
     }
 }
diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DcTrackerTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DcTrackerTest.java
index f0e2b88..a29df1a 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DcTrackerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/DcTrackerTest.java
@@ -35,7 +35,6 @@
 import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.timeout;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
@@ -364,7 +363,7 @@
                     1,                      // carrier_enabled
                     0,                      // bearer
                     0,                      // bearer_bitmask
-                    0,                      // profile_id
+                    2,                      // profile_id
                     1,                      // modem_cognitive
                     0,                      // max_conns
                     0,                      // wait_time
@@ -539,7 +538,7 @@
                     1,                      // carrier_enabled
                     ServiceState.RIL_RADIO_TECHNOLOGY_LTE, // bearer
                     0,                      // bearer_bitmask
-                    0,                      // profile_id
+                    2,                      // profile_id
                     1,                      // modem_cognitive
                     0,                      // max_conns
                     0,                      // wait_time
@@ -1759,101 +1758,6 @@
         assertTrue(mDct.isAnyDataConnected());
     }
 
-    // Test for fetchDunApns()
-    @Test
-    @SmallTest
-    public void testFetchDunApn() {
-
-        sendInitializationEvents();
-
-        String dunApnString = "[ApnSettingV3]HOT mobile PC,pc.hotm,,,,,,,,,440,10,,DUN,,,true,"
-                + "0,,,,,,,,";
-        ApnSetting dunApnExpected = ApnSetting.fromString(dunApnString);
-
-        Settings.Global.putString(mContext.getContentResolver(),
-                Settings.Global.TETHER_DUN_APN, dunApnString);
-        // should return APN from Setting
-        ApnSetting dunApn = mDct.fetchDunApns().get(0);
-        assertTrue(dunApnExpected.equals(dunApn));
-
-        Settings.Global.putString(mContext.getContentResolver(),
-                Settings.Global.TETHER_DUN_APN, null);
-        // should return APN from db
-        dunApn = mDct.fetchDunApns().get(0);
-        assertEquals(FAKE_APN5, dunApn.getApnName());
-    }
-
-    // Test for fetchDunApns() with apn set id
-    @Test
-    @SmallTest
-    public void testFetchDunApnWithPreferredApnSet() {
-        sendCarrierConfigChanged("testFetchDunApnWithPreferredApnSet: ");
-
-        // apnSetId=1
-        String dunApnString1 = "[ApnSettingV5]HOT mobile PC,pc.hotm,,,,,,,,,440,10,,DUN,,,true,"
-                + "0,,,,,,,,,,1";
-        // apnSetId=0
-        String dunApnString2 = "[ApnSettingV5]HOT mobile PC,pc.coldm,,,,,,,,,440,10,,DUN,,,true,"
-                + "0,,,,,,,,,,2";
-
-        ApnSetting dunApnExpected = ApnSetting.fromString(dunApnString1);
-
-        ContentResolver cr = mContext.getContentResolver();
-        Settings.Global.putString(cr, Settings.Global.TETHER_DUN_APN,
-                dunApnString1 + ";" + dunApnString2);
-
-        // set that we prefer apn set 1
-        ContentValues values = new ContentValues();
-        values.put(Telephony.Carriers.APN_SET_ID, 1);
-        cr.update(PREFERAPN_URI, values, null, null);
-
-        // return APN from Setting with apnSetId=1
-        ArrayList<ApnSetting> dunApns = mDct.fetchDunApns();
-        assertEquals(1, dunApns.size());
-        assertEquals(1, dunApns.get(0).getApnSetId());
-        assertTrue(dunApnExpected.equals(dunApns.get(0)));
-
-        // set that we prefer apn set 2
-        values = new ContentValues();
-        values.put(Telephony.Carriers.APN_SET_ID, 2);
-        cr.update(PREFERAPN_URI, values, null, null);
-
-        // return APN from Setting with apnSetId=2
-        dunApns = mDct.fetchDunApns();
-        assertEquals(1, dunApns.size());
-        assertEquals(2, dunApns.get(0).getApnSetId());
-        dunApnExpected = ApnSetting.fromString(dunApnString2);
-        assertTrue(dunApnExpected.equals(dunApns.get(0)));
-    }
-
-    @Test
-    @SmallTest
-    public void testFetchDunApnWhileRoaming() {
-        doReturn(true).when(mServiceState).getRoaming();
-        mBundle.putBoolean(CarrierConfigManager
-                .KEY_DISABLE_DUN_APN_WHILE_ROAMING_WITH_PRESET_APN_BOOL, true);
-
-        sendInitializationEvents();
-
-        String dunApnString = "[ApnSettingV3]HOT mobile PC,pc.hotm,,,,,,,,,440,10,,DUN,,,true,"
-                + "0,,,,,,,,";
-
-        Settings.Global.putString(mContext.getContentResolver(),
-                Settings.Global.TETHER_DUN_APN, dunApnString);
-
-        DcTracker spyDct = spy(mDct);
-        doReturn(true).when(spyDct).isPreferredApnUserEdited();
-        // Expect non-empty DUN APN list
-        assertEquals(1, spyDct.fetchDunApns().size());
-
-        doReturn(false).when(spyDct).isPreferredApnUserEdited();
-        // Expect empty DUN APN list
-        assertEquals(0, spyDct.fetchDunApns().size());
-
-        Settings.Global.putString(mContext.getContentResolver(),
-                Settings.Global.TETHER_DUN_APN, null);
-    }
-
     /**
      * Test that fetchDunApns() returns list that prioritize the preferred APN when the preferred
      * APN including DUN type.
diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/RetryManagerTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/RetryManagerTest.java
index 159e204..514418f 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/RetryManagerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/RetryManagerTest.java
@@ -44,86 +44,38 @@
 public class RetryManagerTest extends TelephonyTest {
 
     // This is the real APN data for the Japanese carrier NTT Docomo.
-    private ApnSetting mApn1 = ApnSetting.makeApnSetting(
-            2163,                   // id
-            "44010",                // numeric
-            "sp-mode",              // name
-            "spmode.ne.jp",         // apn
-            null,                     // proxy
-            -1,                     // port
-            null,                     // mmsc
-            null,                     // mmsproxy
-            -1,                     // mmsport
-            "",                     // user
-            "",                     // password
-            -1,                     // authtype
-            ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL, // types
-            ApnSetting.PROTOCOL_IP, // protocol
-            ApnSetting.PROTOCOL_IP, // roaming_protocol
-            true,                   // carrier_enabled
-            0,                      // networktype_bitmask
-            0,                      // profile_id
-            false,                  // modem_cognitive
-            0,                      // max_conns
-            0,                      // wait_time
-            0,                      // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "");                    // mnvo_match_data
+    private ApnSetting mApn1 = new ApnSetting.Builder()
+            .setId(2163)
+            .setOperatorNumeric("44010")
+            .setEntryName("sp-mode")
+            .setApnName("spmode.ne.jp")
+            .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL)
+            .setProtocol(ApnSetting.PROTOCOL_IP)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .build();
 
-    private ApnSetting mApn2 = ApnSetting.makeApnSetting(
-            2164,                   // id
-            "44010",                // numeric
-            "mopera U",             // name
-            "mopera.net",           // apn
-            null,                     // proxy
-            -1,                     // port
-            null,                     // mmsc
-            null,                     // mmsproxy
-            -1,                     // mmsport
-            "",                     // user
-            "",                     // password
-            -1,                     // authtype
-            ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL,     // types
-            ApnSetting.PROTOCOL_IP,                   // protocol
-            ApnSetting.PROTOCOL_IP,                   // roaming_protocol
-            true,                   // carrier_enabled
-            0,                      // networktype_bitmask
-            0,                      // profile_id
-            false,                  // modem_cognitive
-            0,                      // max_conns
-            0,                      // wait_time
-            0,                      // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "");                    // mnvo_match_data
+    private ApnSetting mApn2 = new ApnSetting.Builder()
+            .setId(2164)
+            .setOperatorNumeric("44010")
+            .setEntryName("mopera U")
+            .setApnName("mopera.net")
+            .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL)
+            .setProtocol(ApnSetting.PROTOCOL_IP)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .build();
 
-    private ApnSetting mApn3 = ApnSetting.makeApnSetting(
-            2165,                   // id
-            "44010",                // numeric
-            "b-mobile for Nexus",   // name
-            "bmobile.ne.jp",        // apn
-            null,                     // proxy
-            -1,                     // port
-            null,                     // mmsc
-            null,                     // mmsproxy
-            -1,                     // mmsport
-            "",                     // user
-            "",                     // password
-            3,                      // authtype
-            ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL,     // types
-            ApnSetting.PROTOCOL_IP,                   // protocol
-            ApnSetting.PROTOCOL_IP,                   // roaming_protocol
-            true,                   // carrier_enabled
-            0,                      // networktype_bitmask
-            0,                      // profile_id
-            false,                  // modem_cognitive
-            0,                      // max_conns
-            0,                      // wait_time
-            0,                      // max_conns_time
-            0,                      // mtu
-            -1,                     // mvno_type
-            "");                    // mnvo_match_data
+    private ApnSetting mApn3 = new ApnSetting.Builder()
+            .setId(2165)
+            .setOperatorNumeric("44010")
+            .setEntryName("b-mobile for Nexus")
+            .setApnName("bmobile.ne.jp")
+            .setApnTypeBitmask(ApnSetting.TYPE_DEFAULT | ApnSetting.TYPE_SUPL)
+            .setProtocol(ApnSetting.PROTOCOL_IP)
+            .setRoamingProtocol(ApnSetting.PROTOCOL_IP)
+            .setCarrierEnabled(true)
+            .build();
 
     private PersistableBundle mBundle;