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

Commit 5a5f5556 authored by Sarah Chin's avatar Sarah Chin
Browse files

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
Merged-In: Ia007f22a5c976fa139e61d981779a65b5e3ffd3e
parent da0880a0
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -9447,7 +9447,9 @@ package android.provider {
    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 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 String TIME_LIMIT_FOR_MAX_CONNECTIONS = "max_conns_time";
    field public static final int UNEDITED = 0; // 0x0
+39 −0
Original line number Diff line number Diff line
@@ -3757,6 +3757,25 @@ public final class Telephony {
         */
        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:
         * {@code SPN (Service Provider Name), IMSI, GID (Group Identifier Level 1)}.
@@ -3835,10 +3854,30 @@ public final class Telephony {
         * connected, in bytes.
         * <p>Type: INTEGER </p>
         * @hide
         * @deprecated use {@link #MTU_V4} or {@link #MTU_V6} instead
         */
        @SystemApi
        @Deprecated
        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.
         * see all possible returned APN edit status.
+120 −21
Original line number Diff line number Diff line
@@ -328,8 +328,6 @@ public class ApnSetting implements Parcelable {
    @SystemApi
    public static final String TYPE_XCAP_STRING = "xcap";



    /**
     * APN type for Virtual SIM service.
     *
@@ -506,27 +504,21 @@ public class ApnSetting implements Parcelable {
    private final int mRoamingProtocol;
    private final int mMtuV4;
    private final int mMtuV6;

    private final boolean mCarrierEnabled;

    private final int mNetworkTypeBitmask;

    private final @TelephonyManager.NetworkTypeBitMask int mNetworkTypeBitmask;
    private final @TelephonyManager.NetworkTypeBitMask long mLingeringNetworkTypeBitmask;
    private final int mProfileId;

    private final boolean mPersistent;
    private final int mMaxConns;
    private final int mWaitTime;
    private final int mMaxConnsTime;

    private final int mMvnoType;
    private final String mMvnoMatchData;

    private final int mApnSetId;

    private boolean mPermanentFailed = false;
    private final int mCarrierId;

    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
@@ -850,12 +842,29 @@ public class ApnSetting implements Parcelable {
     * 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)
     * @return a bitmask describing the Radio Technologies (Network Types) or 0 if it is undefined.
     */
    public int getNetworkTypeBitmask() {
        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.
     *
@@ -888,6 +897,18 @@ public class ApnSetting implements Parcelable {
        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) {
        this.mEntryName = builder.mEntryName;
        this.mApnName = builder.mApnName;
@@ -912,6 +933,7 @@ public class ApnSetting implements Parcelable {
        this.mMtuV6 = builder.mMtuV6;
        this.mCarrierEnabled = builder.mCarrierEnabled;
        this.mNetworkTypeBitmask = builder.mNetworkTypeBitmask;
        this.mLingeringNetworkTypeBitmask = builder.mLingeringNetworkTypeBitmask;
        this.mProfileId = builder.mProfileId;
        this.mPersistent = builder.mModemCognitive;
        this.mMaxConns = builder.mMaxConns;
@@ -922,6 +944,7 @@ public class ApnSetting implements Parcelable {
        this.mApnSetId = builder.mApnSetId;
        this.mCarrierId = builder.mCarrierId;
        this.mSkip464Xlat = builder.mSkip464Xlat;
        this.mAlwaysOn = builder.mAlwaysOn;
    }

    /**
@@ -938,6 +961,10 @@ public class ApnSetting implements Parcelable {
            networkTypeBitmask =
                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()
                .setId(cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers._ID)))
@@ -972,6 +999,8 @@ public class ApnSetting implements Parcelable {
                .setCarrierEnabled(cursor.getInt(cursor.getColumnIndexOrThrow(
                        Telephony.Carriers.CARRIER_ENABLED)) == 1)
                .setNetworkTypeBitmask(networkTypeBitmask)
                .setLingeringNetworkTypeBitmask(cursor.getInt(cursor.getColumnIndexOrThrow(
                        Carriers.LINGERING_NETWORK_TYPE_BITMASK)))
                .setProfileId(cursor.getInt(
                        cursor.getColumnIndexOrThrow(Telephony.Carriers.PROFILE_ID)))
                .setModemCognitive(cursor.getInt(cursor.getColumnIndexOrThrow(
@@ -982,8 +1011,8 @@ public class ApnSetting implements Parcelable {
                        cursor.getColumnIndexOrThrow(Telephony.Carriers.WAIT_TIME_RETRY)))
                .setMaxConnsTime(cursor.getInt(cursor.getColumnIndexOrThrow(
                        Telephony.Carriers.TIME_LIMIT_FOR_MAX_CONNECTIONS)))
                .setMtuV4(cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.MTU)))
                .setMtuV6(UNSET_MTU) // TODO: Add corresponding support in telephony provider
                .setMtuV4(mtuV4)
                .setMtuV6(cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.MTU_V6)))
                .setMvnoType(getMvnoTypeIntFromString(
                        cursor.getString(cursor.getColumnIndexOrThrow(
                                Telephony.Carriers.MVNO_TYPE))))
@@ -994,6 +1023,7 @@ public class ApnSetting implements Parcelable {
                .setCarrierId(cursor.getInt(
                        cursor.getColumnIndexOrThrow(Telephony.Carriers.CARRIER_ID)))
                .setSkip464Xlat(cursor.getInt(cursor.getColumnIndexOrThrow(Carriers.SKIP_464XLAT)))
                .setAlwaysOn(cursor.getInt(cursor.getColumnIndexOrThrow(Carriers.ALWAYS_ON)) == 1)
                .buildWithoutCheck();
    }

@@ -1019,6 +1049,7 @@ public class ApnSetting implements Parcelable {
                .setRoamingProtocol(apn.mRoamingProtocol)
                .setCarrierEnabled(apn.mCarrierEnabled)
                .setNetworkTypeBitmask(apn.mNetworkTypeBitmask)
                .setLingeringNetworkTypeBitmask(apn.mLingeringNetworkTypeBitmask)
                .setProfileId(apn.mProfileId)
                .setModemCognitive(apn.mPersistent)
                .setMaxConns(apn.mMaxConns)
@@ -1031,6 +1062,7 @@ public class ApnSetting implements Parcelable {
                .setApnSetId(apn.mApnSetId)
                .setCarrierId(apn.mCarrierId)
                .setSkip464Xlat(apn.mSkip464Xlat)
                .setAlwaysOn(apn.mAlwaysOn)
                .buildWithoutCheck();
    }

@@ -1069,9 +1101,11 @@ public class ApnSetting implements Parcelable {
        sb.append(", ").append(mMvnoMatchData);
        sb.append(", ").append(mPermanentFailed);
        sb.append(", ").append(mNetworkTypeBitmask);
        sb.append(", ").append(mLingeringNetworkTypeBitmask);
        sb.append(", ").append(mApnSetId);
        sb.append(", ").append(mCarrierId);
        sb.append(", ").append(mSkip464Xlat);
        sb.append(", ").append(mAlwaysOn);
        return sb.toString();
    }

@@ -1136,8 +1170,9 @@ public class ApnSetting implements Parcelable {
        return Objects.hash(mApnName, mProxyAddress, mProxyPort, mMmsc, mMmsProxyAddress,
                mMmsProxyPort, mUser, mPassword, mAuthType, mApnTypeBitmask, mId, mOperatorNumeric,
                mProtocol, mRoamingProtocol, mMtuV4, mMtuV6, mCarrierEnabled, mNetworkTypeBitmask,
                mProfileId, mPersistent, mMaxConns, mWaitTime, mMaxConnsTime, mMvnoType,
                mMvnoMatchData, mApnSetId, mCarrierId, mSkip464Xlat);
                mLingeringNetworkTypeBitmask, mProfileId, mPersistent, mMaxConns, mWaitTime,
                mMaxConnsTime, mMvnoType, mMvnoMatchData, mApnSetId, mCarrierId, mSkip464Xlat,
                mAlwaysOn);
    }

    @Override
@@ -1174,9 +1209,11 @@ public class ApnSetting implements Parcelable {
                && Objects.equals(mMvnoType, other.mMvnoType)
                && Objects.equals(mMvnoMatchData, other.mMvnoMatchData)
                && Objects.equals(mNetworkTypeBitmask, other.mNetworkTypeBitmask)
                && Objects.equals(mLingeringNetworkTypeBitmask, other.mLingeringNetworkTypeBitmask)
                && Objects.equals(mApnSetId, other.mApnSetId)
                && 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(mAuthType, other.mAuthType)
                && Objects.equals(mApnTypeBitmask, other.mApnTypeBitmask)
                && Objects.equals(mLingeringNetworkTypeBitmask, other.mLingeringNetworkTypeBitmask)
                && (isDataRoaming || Objects.equals(mProtocol, other.mProtocol))
                && (!isDataRoaming || Objects.equals(mRoamingProtocol, other.mRoamingProtocol))
                && Objects.equals(mCarrierEnabled, other.mCarrierEnabled)
@@ -1224,7 +1262,8 @@ public class ApnSetting implements Parcelable {
                && Objects.equals(mMvnoMatchData, other.mMvnoMatchData)
                && Objects.equals(mApnSetId, other.mApnSetId)
                && 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.MVNO_TYPE, getMvnoTypeStringFromInt(mMvnoType));
        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.SKIP_464XLAT, mSkip464Xlat);

        apnValue.put(Telephony.Carriers.ALWAYS_ON, mAlwaysOn);
        return apnValue;
    }

@@ -1510,6 +1553,31 @@ public class ApnSetting implements Parcelable {
        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.
    @Override
    /** @hide */
@@ -1537,6 +1605,7 @@ public class ApnSetting implements Parcelable {
        dest.writeInt(mRoamingProtocol);
        dest.writeBoolean(mCarrierEnabled);
        dest.writeInt(mNetworkTypeBitmask);
        dest.writeLong(mLingeringNetworkTypeBitmask);
        dest.writeInt(mProfileId);
        dest.writeBoolean(mPersistent);
        dest.writeInt(mMaxConns);
@@ -1549,6 +1618,7 @@ public class ApnSetting implements Parcelable {
        dest.writeInt(mApnSetId);
        dest.writeInt(mCarrierId);
        dest.writeInt(mSkip464Xlat);
        dest.writeBoolean(mAlwaysOn);
    }

    private static ApnSetting readFromParcel(Parcel in) {
@@ -1570,6 +1640,7 @@ public class ApnSetting implements Parcelable {
                .setRoamingProtocol(in.readInt())
                .setCarrierEnabled(in.readBoolean())
                .setNetworkTypeBitmask(in.readInt())
                .setLingeringNetworkTypeBitmask(in.readLong())
                .setProfileId(in.readInt())
                .setModemCognitive(in.readBoolean())
                .setMaxConns(in.readInt())
@@ -1582,6 +1653,7 @@ public class ApnSetting implements Parcelable {
                .setApnSetId(in.readInt())
                .setCarrierId(in.readInt())
                .setSkip464Xlat(in.readInt())
                .setAlwaysOn(in.readBoolean())
                .buildWithoutCheck();
    }

@@ -1649,7 +1721,8 @@ public class ApnSetting implements Parcelable {
        private int mRoamingProtocol = UNSPECIFIED_INT;
        private int mMtuV4;
        private int mMtuV6;
        private int mNetworkTypeBitmask;
        private @TelephonyManager.NetworkTypeBitMask int mNetworkTypeBitmask;
        private @TelephonyManager.NetworkTypeBitMask long mLingeringNetworkTypeBitmask;
        private boolean mCarrierEnabled;
        private int mProfileId;
        private boolean mModemCognitive;
@@ -1661,6 +1734,7 @@ public class ApnSetting implements Parcelable {
        private int mApnSetId;
        private int mCarrierId = TelephonyManager.UNKNOWN_CARRIER_ID;
        private int mSkip464Xlat = Carriers.SKIP_464XLAT_DEFAULT;
        private boolean mAlwaysOn;

        /**
         * Default constructor for Builder.
@@ -2011,6 +2085,19 @@ public class ApnSetting implements Parcelable {
            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.
         *
@@ -2047,6 +2134,18 @@ public class ApnSetting implements Parcelable {
            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.
         *