Use apn id which contains default type when merging apns
Sungmin Choi [Tue, 21 Jul 2015 08:19:28 +0000 (01:19 -0700)]
In case of the following conditions, UI does not show preferred apn.
1. there are default and mms profile, respectively.
2. apns for default and mms are same.
3. mms profile is prior to default profile.

To fix it, use apn id which contains default type when merging apns.

Bug: 22641500
Change-Id: Ieec521f715f137aa7a827ee010390e3c47b35da1

src/java/com/android/internal/telephony/dataconnection/DcTracker.java

index f6af709..247c922 100644 (file)
@@ -2392,10 +2392,12 @@ public final class DcTracker extends DcTrackerBase {
     }
 
     private ApnSetting mergeApns(ApnSetting dest, ApnSetting src) {
+        int id = dest.id;
         ArrayList<String> resultTypes = new ArrayList<String>();
         resultTypes.addAll(Arrays.asList(dest.types));
         for (String srcType : src.types) {
             if (resultTypes.contains(srcType) == false) resultTypes.add(srcType);
+            if (srcType.equals(PhoneConstants.APN_TYPE_DEFAULT)) id = src.id;
         }
         String mmsc = (TextUtils.isEmpty(dest.mmsc) ? src.mmsc : dest.mmsc);
         String mmsProxy = (TextUtils.isEmpty(dest.mmsProxy) ? src.mmsProxy : dest.mmsProxy);
@@ -2408,7 +2410,7 @@ public final class DcTracker extends DcTrackerBase {
         int bearerBitmask = (dest.bearerBitmask == 0 || src.bearerBitmask == 0) ?
                 0 : (dest.bearerBitmask | src.bearerBitmask);
 
-        return new ApnSetting(dest.id, dest.numeric, dest.carrier, dest.apn,
+        return new ApnSetting(id, dest.numeric, dest.carrier, dest.apn,
                 proxy, port, mmsc, mmsProxy, mmsPort, dest.user, dest.password,
                 dest.authType, resultTypes.toArray(new String[0]), protocol,
                 roamingProtocol, dest.carrierEnabled, 0, bearerBitmask, dest.profileId,