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
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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 */
|
||||
|
||||
Reference in New Issue
Block a user