Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f79fd5ff authored by Jack Yu's avatar Jack Yu
Browse files

Changed the onQualifiedNetworkTypesChanged API

Changed the first parameter from apnType to apnTypes so the
caller can update multiple APN types in one single call. This is
useful because in some cases one single APN setting can serve
multiple APN types.

Test: Manual
Bug: 73659459
Change-Id: Ifef463fe92f6933f3efaba74e6e758b8d49ddb93
parent ee497c36
Loading
Loading
Loading
Loading
+39 −18
Original line number Diff line number Diff line
@@ -41,7 +41,9 @@ import android.util.SparseArray;

import com.android.internal.telephony.Phone;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Access network manager manages the qualified/available networks for mobile data connection.
@@ -52,6 +54,16 @@ public class AccessNetworksManager {
    private static final String TAG = AccessNetworksManager.class.getSimpleName();
    private static final boolean DBG = false;

    private static final int[] SUPPORTED_APN_TYPES = {
            ApnSetting.TYPE_DEFAULT,
            ApnSetting.TYPE_MMS,
            ApnSetting.TYPE_FOTA,
            ApnSetting.TYPE_IMS,
            ApnSetting.TYPE_CBS,
            ApnSetting.TYPE_SUPL,
            ApnSetting.TYPE_EMERGENCY
    };

    private final Phone mPhone;

    private final CarrierConfigManager mCarrierConfigManager;
@@ -88,8 +100,7 @@ public class AccessNetworksManager {
     * Represents qualified network types list on a specific APN type.
     */
    public static class QualifiedNetworks {
        @ApnType
        public final int apnType;
        public final @ApnType int apnType;
        public final int[] qualifiedNetworks;
        public QualifiedNetworks(@ApnType int apnType, int[] qualifiedNetworks) {
            this.apnType = apnType;
@@ -132,24 +143,34 @@ public class AccessNetworksManager {
    private final class QualifiedNetworksServiceCallback extends
            IQualifiedNetworksServiceCallback.Stub {
        @Override
        public void onQualifiedNetworkTypesChanged(int apnType, int[] qualifiedNetworkTypesList) {
            log("onQualifiedNetworkTypesChanged. apnType = "
                    + ApnSetting.getApnTypesStringFromBitmask(apnType)
                    + ", networks = " + Arrays.toString(qualifiedNetworkTypesList));

        public void onQualifiedNetworkTypesChanged(int apnTypes, int[] qualifiedNetworkTypes) {
            log("onQualifiedNetworkTypesChanged. apnTypes = "
                    + ApnSetting.getApnTypesStringFromBitmask(apnTypes)
                    + ", networks = " + Arrays.toString(qualifiedNetworkTypes));
            List<QualifiedNetworks> qualifiedNetworksList = new ArrayList<>();
            for (int supportedApnType : SUPPORTED_APN_TYPES) {
                if ((apnTypes & supportedApnType) == supportedApnType) {
                    // TODO: Verify the preference from data settings manager to make sure the order
                    // of the networks do not violate users/carrier's preference.
            if (mAvailableNetworks.get(apnType) != null) {
                if (Arrays.equals(mAvailableNetworks.get(apnType), qualifiedNetworkTypesList)) {
                    if (mAvailableNetworks.get(supportedApnType) != null) {
                        if (Arrays.equals(mAvailableNetworks.get(supportedApnType),
                                qualifiedNetworkTypes)) {
                            log("Available networks for "
                            + ApnSetting.getApnTypesStringFromBitmask(apnType) + " not changed.");
                    return;
                                    + ApnSetting.getApnTypesStringFromBitmask(supportedApnType)
                                    + " not changed.");
                            continue;
                        }
                    }
            mAvailableNetworks.put(apnType, qualifiedNetworkTypesList);
                    mAvailableNetworks.put(supportedApnType, qualifiedNetworkTypes);
                    qualifiedNetworksList.add(new QualifiedNetworks(supportedApnType,
                            qualifiedNetworkTypes));
                }
            }

            if (!qualifiedNetworksList.isEmpty()) {
                mQualifiedNetworksChangedRegistrants.notifyRegistrants(
                    new AsyncResult(null,
                            new QualifiedNetworks(apnType, qualifiedNetworkTypesList), null));
                        new AsyncResult(null, qualifiedNetworksList, null));
            }
        }
    }