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

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

Reverted to the old logic for APN selection

Reverted to the old logic that we select APN based on
RAT, but adding a special handling for 2G cases. This can
deal with the case that some APN settings has EHRPD which
we incorrectly thought that APN setting can be used on CDMA
network.

Bug: 134086103
Test: Unit tests
Change-Id: I557f00d32f53498782394ea7824e316e263ca7e7
parent 71acb72c
Loading
Loading
Loading
Loading
+0 −38
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package android.telephony;

import static android.telephony.TelephonyManager.NETWORK_TYPE_BITMASK_UNKNOWN;

import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -1607,12 +1605,6 @@ public class ServiceState implements Parcelable {
        }
    }

    /** @hide */
    public static int networkTypeToAccessNetworkType(@TelephonyManager.NetworkType
            int networkType) {
        return rilRadioTechnologyToAccessNetworkType(networkTypeToRilRadioTechnology(networkType));
    }

    /**
     * Get current data network type.
     *
@@ -1738,36 +1730,6 @@ public class ServiceState implements Parcelable {
        return false;
    }

    /**
     *
     * Returns whether the bearerBitmask includes a networkType that matches the accessNetworkType.
     *
     * The NetworkType refers to NetworkType in TelephonyManager. For example
     * {@link TelephonyManager#NETWORK_TYPE_GPRS}.
     *
     * The accessNetworkType refers to {@link AccessNetworkType}.
     *
     * @hide
     * */
    public static boolean networkBitmaskHasAccessNetworkType(
            @TelephonyManager.NetworkTypeBitMask int networkBitmask, int accessNetworkType) {
        if (networkBitmask == NETWORK_TYPE_BITMASK_UNKNOWN) return true;
        if (accessNetworkType == AccessNetworkType.UNKNOWN) return false;

        int networkType = 1;
        while (networkBitmask != 0) {
            if ((networkBitmask & 1) != 0) {
                if (networkTypeToAccessNetworkType(networkType) == accessNetworkType) {
                    return true;
                }
            }
            networkBitmask = networkBitmask >> 1;
            networkType++;
        }

        return false;
    }

    /** @hide */
    public static int getBitmaskForTech(int radioTech) {
        if (radioTech >= 1) {
+22 −0
Original line number Diff line number Diff line
@@ -1417,6 +1417,28 @@ public class ApnSetting implements Parcelable {
        return port == UNSPECIFIED_INT ? null : Integer.toString(port);
    }

    /**
     * Check if this APN setting can support the given network
     *
     * @param networkType The network type
     * @return {@code true} if this APN setting can support the given network.
     *
     * @hide
     */
    public boolean canSupportNetworkType(@TelephonyManager.NetworkType int networkType) {
        // Do a special checking for GSM. In reality, GSM is a voice only network type and can never
        // be used for data. We allow it here because in some DSDS corner cases, on the non-DDS
        // sub, modem reports data rat unknown. In that case if voice is GSM and this APN supports
        // GPRS or EDGE, this APN setting should be selected.
        if (networkType == TelephonyManager.NETWORK_TYPE_GSM
                && (mNetworkTypeBitmask & (TelephonyManager.NETWORK_TYPE_BITMASK_GPRS
                | TelephonyManager.NETWORK_TYPE_BITMASK_EDGE)) != 0) {
            return true;
        }

        return ServiceState.bitmaskHasTech(mNetworkTypeBitmask, networkType);
    }

    // Implement Parcelable.
    @Override
    /** @hide */