Add new fields to ApnSetting/DataProfileInfo

Add fields for lingering bearer bitmask and is always on
Update values for MTU V4 and MTU V6

Test: atest DataProfileTest
Bug: 198822816
Change-Id: Ia007f22a5c976fa139e61d981779a65b5e3ffd3e
This commit is contained in:
Sarah Chin
2021-11-16 12:43:44 -08:00
parent ba3dd28a69
commit 5b1d166589
3 changed files with 162 additions and 22 deletions

View File

@@ -9726,7 +9726,9 @@ package android.provider {
field public static final int MATCH_ALL_APN_SET_ID = -1; // 0xffffffff field public static final int MATCH_ALL_APN_SET_ID = -1; // 0xffffffff
field public static final String MAX_CONNECTIONS = "max_conns"; field public static final String MAX_CONNECTIONS = "max_conns";
field public static final String MODEM_PERSIST = "modem_cognitive"; field public static final String MODEM_PERSIST = "modem_cognitive";
field public static final String MTU = "mtu"; field @Deprecated public static final String MTU = "mtu";
field public static final String MTU_V4 = "mtu_v4";
field public static final String MTU_V6 = "mtu_v6";
field public static final int NO_APN_SET_ID = 0; // 0x0 field public static final int NO_APN_SET_ID = 0; // 0x0
field public static final String TIME_LIMIT_FOR_MAX_CONNECTIONS = "max_conns_time"; field public static final String TIME_LIMIT_FOR_MAX_CONNECTIONS = "max_conns_time";
field public static final int UNEDITED = 0; // 0x0 field public static final int UNEDITED = 0; // 0x0

View File

@@ -3774,6 +3774,25 @@ public final class Telephony {
*/ */
public static final String NETWORK_TYPE_BITMASK = "network_type_bitmask"; public static final String NETWORK_TYPE_BITMASK = "network_type_bitmask";
/**
* Lingering radio technology (network type) bitmask.
* To check what values can be contained, refer to the NETWORK_TYPE_ constants in
* {@link android.telephony.TelephonyManager}.
* Bitmask for a radio tech R is (1 << (R - 1))
* <P>Type: INTEGER (long)</P>
* @hide
*/
public static final String LINGERING_NETWORK_TYPE_BITMASK =
"lingering_network_type_bitmask";
/**
* Sets whether the PDU session brought up by this APN should always be on.
* See 3GPP TS 23.501 section 5.6.13
* <P>Type: INTEGER</P>
* @hide
*/
public static final String ALWAYS_ON = "always_on";
/** /**
* MVNO type: * MVNO type:
* {@code SPN (Service Provider Name), IMSI, GID (Group Identifier Level 1)}. * {@code SPN (Service Provider Name), IMSI, GID (Group Identifier Level 1)}.
@@ -3852,10 +3871,30 @@ public final class Telephony {
* connected, in bytes. * connected, in bytes.
* <p>Type: INTEGER </p> * <p>Type: INTEGER </p>
* @hide * @hide
* @deprecated use {@link #MTU_V4} or {@link #MTU_V6} instead
*/ */
@SystemApi @SystemApi
@Deprecated
public static final String MTU = "mtu"; public static final String MTU = "mtu";
/**
* The MTU (maximum transmit unit) size of the mobile interface for IPv4 to which the APN is
* connected, in bytes.
* <p>Type: INTEGER </p>
* @hide
*/
@SystemApi
public static final String MTU_V4 = "mtu_v4";
/**
* The MTU (maximum transmit unit) size of the mobile interface for IPv6 to which the APN is
* connected, in bytes.
* <p>Type: INTEGER </p>
* @hide
*/
@SystemApi
public static final String MTU_V6 = "mtu_v6";
/** /**
* APN edit status. APN could be added/edited/deleted by a user or carrier. * APN edit status. APN could be added/edited/deleted by a user or carrier.
* see all possible returned APN edit status. * see all possible returned APN edit status.

View File

@@ -328,8 +328,6 @@ public class ApnSetting implements Parcelable {
@SystemApi @SystemApi
public static final String TYPE_XCAP_STRING = "xcap"; public static final String TYPE_XCAP_STRING = "xcap";
/** /**
* APN type for Virtual SIM service. * APN type for Virtual SIM service.
* *
@@ -506,27 +504,21 @@ public class ApnSetting implements Parcelable {
private final int mRoamingProtocol; private final int mRoamingProtocol;
private final int mMtuV4; private final int mMtuV4;
private final int mMtuV6; private final int mMtuV6;
private final boolean mCarrierEnabled; private final boolean mCarrierEnabled;
private final @TelephonyManager.NetworkTypeBitMask int mNetworkTypeBitmask;
private final int mNetworkTypeBitmask; private final @TelephonyManager.NetworkTypeBitMask long mLingeringNetworkTypeBitmask;
private final int mProfileId; private final int mProfileId;
private final boolean mPersistent; private final boolean mPersistent;
private final int mMaxConns; private final int mMaxConns;
private final int mWaitTime; private final int mWaitTime;
private final int mMaxConnsTime; private final int mMaxConnsTime;
private final int mMvnoType; private final int mMvnoType;
private final String mMvnoMatchData; private final String mMvnoMatchData;
private final int mApnSetId; private final int mApnSetId;
private boolean mPermanentFailed = false; private boolean mPermanentFailed = false;
private final int mCarrierId; private final int mCarrierId;
private final int mSkip464Xlat; private final int mSkip464Xlat;
private final boolean mAlwaysOn;
/** /**
* Returns the MTU size of the IPv4 mobile interface to which the APN connected. Note this value * Returns the MTU size of the IPv4 mobile interface to which the APN connected. Note this value
@@ -843,19 +835,36 @@ public class ApnSetting implements Parcelable {
} }
/** /**
* Returns a bitmask describing the Radio Technologies(Network Types) which this APN may use. * Returns a bitmask describing the Radio Technologies (Network Types) which this APN may use.
* *
* NetworkType bitmask is calculated from NETWORK_TYPE defined in {@link TelephonyManager}. * NetworkType bitmask is calculated from NETWORK_TYPE defined in {@link TelephonyManager}.
* *
* Examples of Network Types include {@link TelephonyManager#NETWORK_TYPE_UNKNOWN}, * Examples of Network Types include {@link TelephonyManager#NETWORK_TYPE_UNKNOWN},
* {@link TelephonyManager#NETWORK_TYPE_GPRS}, {@link TelephonyManager#NETWORK_TYPE_EDGE}. * {@link TelephonyManager#NETWORK_TYPE_GPRS}, {@link TelephonyManager#NETWORK_TYPE_EDGE}.
* *
* @return a bitmask describing the Radio Technologies(Network Types) * @return a bitmask describing the Radio Technologies (Network Types) or 0 if it is undefined.
*/ */
public int getNetworkTypeBitmask() { public int getNetworkTypeBitmask() {
return mNetworkTypeBitmask; return mNetworkTypeBitmask;
} }
/**
* Returns a bitmask describing the Radio Technologies (Network Types) that should not be torn
* down if it exists or brought up if it already exists for this APN.
*
* NetworkType bitmask is calculated from NETWORK_TYPE defined in {@link TelephonyManager}.
*
* Examples of Network Types include {@link TelephonyManager#NETWORK_TYPE_UNKNOWN},
* {@link TelephonyManager#NETWORK_TYPE_GPRS}, {@link TelephonyManager#NETWORK_TYPE_EDGE}.
*
* @return a bitmask describing the Radio Technologies (Network Types) that should linger
* or 0 if it is undefined.
* @hide
*/
public @TelephonyManager.NetworkTypeBitMask long getLingeringNetworkTypeBitmask() {
return mLingeringNetworkTypeBitmask;
}
/** /**
* Returns the MVNO match type for this APN. * Returns the MVNO match type for this APN.
* *
@@ -888,6 +897,18 @@ public class ApnSetting implements Parcelable {
return mSkip464Xlat; return mSkip464Xlat;
} }
/**
* Returns whether User Plane resources have to be activated during every transition from
* CM-IDLE mode to CM-CONNECTED state for this APN
* See 3GPP TS 23.501 section 5.6.13
*
* @return True if the PDU session for this APN should always be on and false otherwise
* @hide
*/
public boolean isAlwaysOn() {
return mAlwaysOn;
}
private ApnSetting(Builder builder) { private ApnSetting(Builder builder) {
this.mEntryName = builder.mEntryName; this.mEntryName = builder.mEntryName;
this.mApnName = builder.mApnName; this.mApnName = builder.mApnName;
@@ -912,6 +933,7 @@ public class ApnSetting implements Parcelable {
this.mMtuV6 = builder.mMtuV6; this.mMtuV6 = builder.mMtuV6;
this.mCarrierEnabled = builder.mCarrierEnabled; this.mCarrierEnabled = builder.mCarrierEnabled;
this.mNetworkTypeBitmask = builder.mNetworkTypeBitmask; this.mNetworkTypeBitmask = builder.mNetworkTypeBitmask;
this.mLingeringNetworkTypeBitmask = builder.mLingeringNetworkTypeBitmask;
this.mProfileId = builder.mProfileId; this.mProfileId = builder.mProfileId;
this.mPersistent = builder.mModemCognitive; this.mPersistent = builder.mModemCognitive;
this.mMaxConns = builder.mMaxConns; this.mMaxConns = builder.mMaxConns;
@@ -922,6 +944,7 @@ public class ApnSetting implements Parcelable {
this.mApnSetId = builder.mApnSetId; this.mApnSetId = builder.mApnSetId;
this.mCarrierId = builder.mCarrierId; this.mCarrierId = builder.mCarrierId;
this.mSkip464Xlat = builder.mSkip464Xlat; this.mSkip464Xlat = builder.mSkip464Xlat;
this.mAlwaysOn = builder.mAlwaysOn;
} }
/** /**
@@ -938,6 +961,10 @@ public class ApnSetting implements Parcelable {
networkTypeBitmask = networkTypeBitmask =
ServiceState.convertBearerBitmaskToNetworkTypeBitmask(bearerBitmask); ServiceState.convertBearerBitmaskToNetworkTypeBitmask(bearerBitmask);
} }
int mtuV4 = cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.MTU_V4));
if (mtuV4 == -1) {
mtuV4 = cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.MTU));
}
return new Builder() return new Builder()
.setId(cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers._ID))) .setId(cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers._ID)))
@@ -972,6 +999,8 @@ public class ApnSetting implements Parcelable {
.setCarrierEnabled(cursor.getInt(cursor.getColumnIndexOrThrow( .setCarrierEnabled(cursor.getInt(cursor.getColumnIndexOrThrow(
Telephony.Carriers.CARRIER_ENABLED)) == 1) Telephony.Carriers.CARRIER_ENABLED)) == 1)
.setNetworkTypeBitmask(networkTypeBitmask) .setNetworkTypeBitmask(networkTypeBitmask)
.setLingeringNetworkTypeBitmask(cursor.getInt(cursor.getColumnIndexOrThrow(
Carriers.LINGERING_NETWORK_TYPE_BITMASK)))
.setProfileId(cursor.getInt( .setProfileId(cursor.getInt(
cursor.getColumnIndexOrThrow(Telephony.Carriers.PROFILE_ID))) cursor.getColumnIndexOrThrow(Telephony.Carriers.PROFILE_ID)))
.setModemCognitive(cursor.getInt(cursor.getColumnIndexOrThrow( .setModemCognitive(cursor.getInt(cursor.getColumnIndexOrThrow(
@@ -982,8 +1011,8 @@ public class ApnSetting implements Parcelable {
cursor.getColumnIndexOrThrow(Telephony.Carriers.WAIT_TIME_RETRY))) cursor.getColumnIndexOrThrow(Telephony.Carriers.WAIT_TIME_RETRY)))
.setMaxConnsTime(cursor.getInt(cursor.getColumnIndexOrThrow( .setMaxConnsTime(cursor.getInt(cursor.getColumnIndexOrThrow(
Telephony.Carriers.TIME_LIMIT_FOR_MAX_CONNECTIONS))) Telephony.Carriers.TIME_LIMIT_FOR_MAX_CONNECTIONS)))
.setMtuV4(cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.MTU))) .setMtuV4(mtuV4)
.setMtuV6(UNSET_MTU) // TODO: Add corresponding support in telephony provider .setMtuV6(cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.MTU_V6)))
.setMvnoType(getMvnoTypeIntFromString( .setMvnoType(getMvnoTypeIntFromString(
cursor.getString(cursor.getColumnIndexOrThrow( cursor.getString(cursor.getColumnIndexOrThrow(
Telephony.Carriers.MVNO_TYPE)))) Telephony.Carriers.MVNO_TYPE))))
@@ -994,6 +1023,7 @@ public class ApnSetting implements Parcelable {
.setCarrierId(cursor.getInt( .setCarrierId(cursor.getInt(
cursor.getColumnIndexOrThrow(Telephony.Carriers.CARRIER_ID))) cursor.getColumnIndexOrThrow(Telephony.Carriers.CARRIER_ID)))
.setSkip464Xlat(cursor.getInt(cursor.getColumnIndexOrThrow(Carriers.SKIP_464XLAT))) .setSkip464Xlat(cursor.getInt(cursor.getColumnIndexOrThrow(Carriers.SKIP_464XLAT)))
.setAlwaysOn(cursor.getInt(cursor.getColumnIndexOrThrow(Carriers.ALWAYS_ON)) == 1)
.buildWithoutCheck(); .buildWithoutCheck();
} }
@@ -1019,6 +1049,7 @@ public class ApnSetting implements Parcelable {
.setRoamingProtocol(apn.mRoamingProtocol) .setRoamingProtocol(apn.mRoamingProtocol)
.setCarrierEnabled(apn.mCarrierEnabled) .setCarrierEnabled(apn.mCarrierEnabled)
.setNetworkTypeBitmask(apn.mNetworkTypeBitmask) .setNetworkTypeBitmask(apn.mNetworkTypeBitmask)
.setLingeringNetworkTypeBitmask(apn.mLingeringNetworkTypeBitmask)
.setProfileId(apn.mProfileId) .setProfileId(apn.mProfileId)
.setModemCognitive(apn.mPersistent) .setModemCognitive(apn.mPersistent)
.setMaxConns(apn.mMaxConns) .setMaxConns(apn.mMaxConns)
@@ -1031,6 +1062,7 @@ public class ApnSetting implements Parcelable {
.setApnSetId(apn.mApnSetId) .setApnSetId(apn.mApnSetId)
.setCarrierId(apn.mCarrierId) .setCarrierId(apn.mCarrierId)
.setSkip464Xlat(apn.mSkip464Xlat) .setSkip464Xlat(apn.mSkip464Xlat)
.setAlwaysOn(apn.mAlwaysOn)
.buildWithoutCheck(); .buildWithoutCheck();
} }
@@ -1069,9 +1101,11 @@ public class ApnSetting implements Parcelable {
sb.append(", ").append(mMvnoMatchData); sb.append(", ").append(mMvnoMatchData);
sb.append(", ").append(mPermanentFailed); sb.append(", ").append(mPermanentFailed);
sb.append(", ").append(mNetworkTypeBitmask); sb.append(", ").append(mNetworkTypeBitmask);
sb.append(", ").append(mLingeringNetworkTypeBitmask);
sb.append(", ").append(mApnSetId); sb.append(", ").append(mApnSetId);
sb.append(", ").append(mCarrierId); sb.append(", ").append(mCarrierId);
sb.append(", ").append(mSkip464Xlat); sb.append(", ").append(mSkip464Xlat);
sb.append(", ").append(mAlwaysOn);
return sb.toString(); return sb.toString();
} }
@@ -1136,8 +1170,9 @@ public class ApnSetting implements Parcelable {
return Objects.hash(mApnName, mProxyAddress, mProxyPort, mMmsc, mMmsProxyAddress, return Objects.hash(mApnName, mProxyAddress, mProxyPort, mMmsc, mMmsProxyAddress,
mMmsProxyPort, mUser, mPassword, mAuthType, mApnTypeBitmask, mId, mOperatorNumeric, mMmsProxyPort, mUser, mPassword, mAuthType, mApnTypeBitmask, mId, mOperatorNumeric,
mProtocol, mRoamingProtocol, mMtuV4, mMtuV6, mCarrierEnabled, mNetworkTypeBitmask, mProtocol, mRoamingProtocol, mMtuV4, mMtuV6, mCarrierEnabled, mNetworkTypeBitmask,
mProfileId, mPersistent, mMaxConns, mWaitTime, mMaxConnsTime, mMvnoType, mLingeringNetworkTypeBitmask, mProfileId, mPersistent, mMaxConns, mWaitTime,
mMvnoMatchData, mApnSetId, mCarrierId, mSkip464Xlat); mMaxConnsTime, mMvnoType, mMvnoMatchData, mApnSetId, mCarrierId, mSkip464Xlat,
mAlwaysOn);
} }
@Override @Override
@@ -1174,9 +1209,11 @@ public class ApnSetting implements Parcelable {
&& Objects.equals(mMvnoType, other.mMvnoType) && Objects.equals(mMvnoType, other.mMvnoType)
&& Objects.equals(mMvnoMatchData, other.mMvnoMatchData) && Objects.equals(mMvnoMatchData, other.mMvnoMatchData)
&& Objects.equals(mNetworkTypeBitmask, other.mNetworkTypeBitmask) && Objects.equals(mNetworkTypeBitmask, other.mNetworkTypeBitmask)
&& Objects.equals(mLingeringNetworkTypeBitmask, other.mLingeringNetworkTypeBitmask)
&& Objects.equals(mApnSetId, other.mApnSetId) && Objects.equals(mApnSetId, other.mApnSetId)
&& Objects.equals(mCarrierId, other.mCarrierId) && Objects.equals(mCarrierId, other.mCarrierId)
&& Objects.equals(mSkip464Xlat, other.mSkip464Xlat); && Objects.equals(mSkip464Xlat, other.mSkip464Xlat)
&& Objects.equals(mAlwaysOn, other.mAlwaysOn);
} }
/** /**
@@ -1210,6 +1247,7 @@ public class ApnSetting implements Parcelable {
&& Objects.equals(mPassword, other.mPassword) && Objects.equals(mPassword, other.mPassword)
&& Objects.equals(mAuthType, other.mAuthType) && Objects.equals(mAuthType, other.mAuthType)
&& Objects.equals(mApnTypeBitmask, other.mApnTypeBitmask) && Objects.equals(mApnTypeBitmask, other.mApnTypeBitmask)
&& Objects.equals(mLingeringNetworkTypeBitmask, other.mLingeringNetworkTypeBitmask)
&& (isDataRoaming || Objects.equals(mProtocol, other.mProtocol)) && (isDataRoaming || Objects.equals(mProtocol, other.mProtocol))
&& (!isDataRoaming || Objects.equals(mRoamingProtocol, other.mRoamingProtocol)) && (!isDataRoaming || Objects.equals(mRoamingProtocol, other.mRoamingProtocol))
&& Objects.equals(mCarrierEnabled, other.mCarrierEnabled) && Objects.equals(mCarrierEnabled, other.mCarrierEnabled)
@@ -1224,7 +1262,8 @@ public class ApnSetting implements Parcelable {
&& Objects.equals(mMvnoMatchData, other.mMvnoMatchData) && Objects.equals(mMvnoMatchData, other.mMvnoMatchData)
&& Objects.equals(mApnSetId, other.mApnSetId) && Objects.equals(mApnSetId, other.mApnSetId)
&& Objects.equals(mCarrierId, other.mCarrierId) && Objects.equals(mCarrierId, other.mCarrierId)
&& Objects.equals(mSkip464Xlat, other.mSkip464Xlat); && Objects.equals(mSkip464Xlat, other.mSkip464Xlat)
&& Objects.equals(mAlwaysOn, other.mAlwaysOn);
} }
/** /**
@@ -1304,9 +1343,13 @@ public class ApnSetting implements Parcelable {
apnValue.put(Telephony.Carriers.CARRIER_ENABLED, mCarrierEnabled); apnValue.put(Telephony.Carriers.CARRIER_ENABLED, mCarrierEnabled);
apnValue.put(Telephony.Carriers.MVNO_TYPE, getMvnoTypeStringFromInt(mMvnoType)); apnValue.put(Telephony.Carriers.MVNO_TYPE, getMvnoTypeStringFromInt(mMvnoType));
apnValue.put(Telephony.Carriers.NETWORK_TYPE_BITMASK, mNetworkTypeBitmask); apnValue.put(Telephony.Carriers.NETWORK_TYPE_BITMASK, mNetworkTypeBitmask);
apnValue.put(Telephony.Carriers.LINGERING_NETWORK_TYPE_BITMASK,
mLingeringNetworkTypeBitmask);
apnValue.put(Telephony.Carriers.MTU_V4, mMtuV4);
apnValue.put(Telephony.Carriers.MTU_V6, mMtuV6);
apnValue.put(Telephony.Carriers.CARRIER_ID, mCarrierId); apnValue.put(Telephony.Carriers.CARRIER_ID, mCarrierId);
apnValue.put(Telephony.Carriers.SKIP_464XLAT, mSkip464Xlat); apnValue.put(Telephony.Carriers.SKIP_464XLAT, mSkip464Xlat);
apnValue.put(Telephony.Carriers.ALWAYS_ON, mAlwaysOn);
return apnValue; return apnValue;
} }
@@ -1510,6 +1553,31 @@ public class ApnSetting implements Parcelable {
return ServiceState.bitmaskHasTech(mNetworkTypeBitmask, networkType); return ServiceState.bitmaskHasTech(mNetworkTypeBitmask, networkType);
} }
/**
* Check if this APN setting can support the given lingering network
*
* @param networkType The lingering network type
* @return {@code true} if this APN setting can support the given lingering network.
*
* @hide
*/
public boolean canSupportLingeringNetworkType(@NetworkType int networkType) {
if (networkType == 0) {
return canSupportNetworkType(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
&& (mLingeringNetworkTypeBitmask & (TelephonyManager.NETWORK_TYPE_BITMASK_GPRS
| TelephonyManager.NETWORK_TYPE_BITMASK_EDGE)) != 0) {
return true;
}
return ServiceState.bitmaskHasTech((int) mLingeringNetworkTypeBitmask, networkType);
}
// Implement Parcelable. // Implement Parcelable.
@Override @Override
/** @hide */ /** @hide */
@@ -1537,6 +1605,7 @@ public class ApnSetting implements Parcelable {
dest.writeInt(mRoamingProtocol); dest.writeInt(mRoamingProtocol);
dest.writeBoolean(mCarrierEnabled); dest.writeBoolean(mCarrierEnabled);
dest.writeInt(mNetworkTypeBitmask); dest.writeInt(mNetworkTypeBitmask);
dest.writeLong(mLingeringNetworkTypeBitmask);
dest.writeInt(mProfileId); dest.writeInt(mProfileId);
dest.writeBoolean(mPersistent); dest.writeBoolean(mPersistent);
dest.writeInt(mMaxConns); dest.writeInt(mMaxConns);
@@ -1549,6 +1618,7 @@ public class ApnSetting implements Parcelable {
dest.writeInt(mApnSetId); dest.writeInt(mApnSetId);
dest.writeInt(mCarrierId); dest.writeInt(mCarrierId);
dest.writeInt(mSkip464Xlat); dest.writeInt(mSkip464Xlat);
dest.writeBoolean(mAlwaysOn);
} }
private static ApnSetting readFromParcel(Parcel in) { private static ApnSetting readFromParcel(Parcel in) {
@@ -1570,6 +1640,7 @@ public class ApnSetting implements Parcelable {
.setRoamingProtocol(in.readInt()) .setRoamingProtocol(in.readInt())
.setCarrierEnabled(in.readBoolean()) .setCarrierEnabled(in.readBoolean())
.setNetworkTypeBitmask(in.readInt()) .setNetworkTypeBitmask(in.readInt())
.setLingeringNetworkTypeBitmask(in.readLong())
.setProfileId(in.readInt()) .setProfileId(in.readInt())
.setModemCognitive(in.readBoolean()) .setModemCognitive(in.readBoolean())
.setMaxConns(in.readInt()) .setMaxConns(in.readInt())
@@ -1582,6 +1653,7 @@ public class ApnSetting implements Parcelable {
.setApnSetId(in.readInt()) .setApnSetId(in.readInt())
.setCarrierId(in.readInt()) .setCarrierId(in.readInt())
.setSkip464Xlat(in.readInt()) .setSkip464Xlat(in.readInt())
.setAlwaysOn(in.readBoolean())
.buildWithoutCheck(); .buildWithoutCheck();
} }
@@ -1649,7 +1721,8 @@ public class ApnSetting implements Parcelable {
private int mRoamingProtocol = UNSPECIFIED_INT; private int mRoamingProtocol = UNSPECIFIED_INT;
private int mMtuV4; private int mMtuV4;
private int mMtuV6; private int mMtuV6;
private int mNetworkTypeBitmask; private @TelephonyManager.NetworkTypeBitMask int mNetworkTypeBitmask;
private @TelephonyManager.NetworkTypeBitMask long mLingeringNetworkTypeBitmask;
private boolean mCarrierEnabled; private boolean mCarrierEnabled;
private int mProfileId; private int mProfileId;
private boolean mModemCognitive; private boolean mModemCognitive;
@@ -1661,6 +1734,7 @@ public class ApnSetting implements Parcelable {
private int mApnSetId; private int mApnSetId;
private int mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID; private int mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID;
private int mSkip464Xlat = Carriers.SKIP_464XLAT_DEFAULT; private int mSkip464Xlat = Carriers.SKIP_464XLAT_DEFAULT;
private boolean mAlwaysOn;
/** /**
* Default constructor for Builder. * Default constructor for Builder.
@@ -2011,6 +2085,19 @@ public class ApnSetting implements Parcelable {
return this; return this;
} }
/**
* Sets lingering Radio Technology (Network Type) for this APN.
*
* @param lingeringNetworkTypeBitmask the Radio Technology (Network Type) that should linger
* @hide
*/
@NonNull
public Builder setLingeringNetworkTypeBitmask(@TelephonyManager.NetworkTypeBitMask
long lingeringNetworkTypeBitmask) {
this.mLingeringNetworkTypeBitmask = lingeringNetworkTypeBitmask;
return this;
}
/** /**
* Sets the MVNO match type for this APN. * Sets the MVNO match type for this APN.
* *
@@ -2047,6 +2134,18 @@ public class ApnSetting implements Parcelable {
return this; return this;
} }
/**
* Sets whether the PDU session brought up by this APN should always be on.
* See 3GPP TS 23.501 section 5.6.13
*
* @param alwaysOn the always on status to set for this APN
* @hide
*/
public Builder setAlwaysOn(boolean alwaysOn) {
this.mAlwaysOn = alwaysOn;
return this;
}
/** /**
* Builds {@link ApnSetting} from this builder. * Builds {@link ApnSetting} from this builder.
* *