From ee029fcefa4826d6d6f5165e32b1a6c0ea8a70ec Mon Sep 17 00:00:00 2001 From: Jack Yu Date: Thu, 20 Jun 2019 17:14:28 -0700 Subject: [PATCH] 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 --- .../java/android/telephony/ServiceState.java | 38 ------------------- .../android/telephony/data/ApnSetting.java | 22 +++++++++++ 2 files changed, 22 insertions(+), 38 deletions(-) diff --git a/telephony/java/android/telephony/ServiceState.java b/telephony/java/android/telephony/ServiceState.java index 518da74eb9e25..5d39a2cc194a2 100644 --- a/telephony/java/android/telephony/ServiceState.java +++ b/telephony/java/android/telephony/ServiceState.java @@ -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) { diff --git a/telephony/java/android/telephony/data/ApnSetting.java b/telephony/java/android/telephony/data/ApnSetting.java index 165be641032c9..116c05129a96f 100644 --- a/telephony/java/android/telephony/data/ApnSetting.java +++ b/telephony/java/android/telephony/data/ApnSetting.java @@ -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 */