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

Commit 6eb9d8ab authored by Jack Yu's avatar Jack Yu Committed by Sarah Chin
Browse files

Added setup/tear down data support

1. Added setup data network support.
2. Hook validation status down to data stall recovery manager.
3. Prelimanary changes before removing TransportManager.
4. Added tear down network support.
5. Added initial attach APN support.
6. Added set data profiles at modem support.

Bug: 196597630
Test: atest DataNetworkControllerTest DataProfileManagerTest DataProfileTest DataNetworkTest
Merged-In: I3fe553c2717ae2feeec3cc821e647d9e2f70a83d
Change-Id: Ia620c19ef29f832b89d49faeef5235c25a162089
parent bd84bca4
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -3583,6 +3583,23 @@ public final class Telephony {
        public static final Uri ENFORCE_MANAGED_URI = Uri.parse(
                "content://telephony/carriers/enforce_managed");

        /**
         * The {@code content://} style URL for the perferred APN used for internet.
         *
         * @hide
         */
        public static final Uri PREFERRED_APN_URI = Uri.parse(
                "content://telephony/carriers/preferapn/subId/");

        /**
         * The {@code content://} style URL for the perferred APN set id.
         *
         * @hide
         */
        public static final Uri PREFERRED_APN_SET_URI = Uri.parse(
                "content://telephony/carriers/preferapnset/subId/");


        /**
         * The column name for ENFORCE_MANAGED_URI, indicates whether DPC-owned APNs are enforced.
         * @hide
+57 −0
Original line number Diff line number Diff line
package android.telephony;

import android.annotation.IntDef;
import android.net.NetworkAgent;
import android.net.NetworkCapabilities;
import android.telecom.Connection;
import android.telephony.data.ApnSetting;

@@ -664,4 +666,59 @@ public class Annotation {
        TelephonyManager.THERMAL_MITIGATION_RESULT_INVALID_STATE,
        TelephonyManager.THERMAL_MITIGATION_RESULT_UNKNOWN_ERROR})
    public @interface ThermalMitigationResult {}

    /**
     * Per Android API guideline 8.15, annotation can't be public APIs. So duplicate
     * android.net.NetworkCapabilities.NetCapability here. Must update here when new capabilities
     * are added in {@link NetworkCapabilities}.
     */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = { "NET_CAPABILITY_" }, value = {
            NetworkCapabilities.NET_CAPABILITY_MMS,
            NetworkCapabilities.NET_CAPABILITY_SUPL,
            NetworkCapabilities.NET_CAPABILITY_DUN,
            NetworkCapabilities.NET_CAPABILITY_FOTA,
            NetworkCapabilities.NET_CAPABILITY_IMS,
            NetworkCapabilities.NET_CAPABILITY_CBS,
            NetworkCapabilities.NET_CAPABILITY_WIFI_P2P,
            NetworkCapabilities.NET_CAPABILITY_IA,
            NetworkCapabilities.NET_CAPABILITY_RCS,
            NetworkCapabilities.NET_CAPABILITY_XCAP,
            NetworkCapabilities.NET_CAPABILITY_EIMS,
            NetworkCapabilities.NET_CAPABILITY_NOT_METERED,
            NetworkCapabilities.NET_CAPABILITY_INTERNET,
            NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED,
            NetworkCapabilities.NET_CAPABILITY_TRUSTED,
            NetworkCapabilities.NET_CAPABILITY_NOT_VPN,
            NetworkCapabilities.NET_CAPABILITY_VALIDATED,
            NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL,
            NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING,
            NetworkCapabilities.NET_CAPABILITY_FOREGROUND,
            NetworkCapabilities.NET_CAPABILITY_NOT_CONGESTED,
            NetworkCapabilities.NET_CAPABILITY_NOT_SUSPENDED,
            NetworkCapabilities.NET_CAPABILITY_OEM_PAID,
            NetworkCapabilities.NET_CAPABILITY_MCX,
            NetworkCapabilities.NET_CAPABILITY_PARTIAL_CONNECTIVITY,
            NetworkCapabilities.NET_CAPABILITY_TEMPORARILY_NOT_METERED,
            NetworkCapabilities.NET_CAPABILITY_OEM_PRIVATE,
            NetworkCapabilities.NET_CAPABILITY_VEHICLE_INTERNAL,
            NetworkCapabilities.NET_CAPABILITY_NOT_VCN_MANAGED,
            NetworkCapabilities.NET_CAPABILITY_ENTERPRISE,
            NetworkCapabilities.NET_CAPABILITY_VSIM,
            NetworkCapabilities.NET_CAPABILITY_BIP,
            NetworkCapabilities.NET_CAPABILITY_HEAD_UNIT,
    })
    public @interface NetCapability { }

    /**
     * Per Android API guideline 8.15, annotation can't be public APIs. So duplicate
     * android.net.NetworkAgent.ValidationStatus here. Must update here when new validation status
     * are added in {@link NetworkAgent}.
     */
    @Retention(RetentionPolicy.SOURCE)
    @IntDef(prefix = { "VALIDATION_STATUS_" }, value = {
            NetworkAgent.VALIDATION_STATUS_VALID,
            NetworkAgent.VALIDATION_STATUS_NOT_VALID
    })
    public @interface ValidationStatus {}
}
+1 −1
Original line number Diff line number Diff line
@@ -6286,9 +6286,9 @@ public class CarrierConfigManager {
                        "capabilities=eims, retry_interval=1000, maximum_retries=20",
                        "fail_causes=8|27|28|29|30|32|33|35|50|51|111|-5|-6|65537|65538|-3|2253|"
                                + "2254, maximum_retries=0", // No retry for those causes
                        "capabilities=mms|supl|cbs, retry_interval=2000",
                        "capabilities=internet|enterprise|dun|ims|fota, retry_interval=2000, "
                                + "backoff=true, maximum_retries=13",
                        "capabilities=mms|supl|cbs, retry_interval=2000"
                });
        sDefaults.putStringArray(KEY_MISSED_INCOMING_CALL_SMS_PATTERN_STRING_ARRAY, new String[0]);
        sDefaults.putBoolean(KEY_DISABLE_DUN_APN_WHILE_ROAMING_WITH_PRESET_APN_BOOL, false);
+7 −0
Original line number Diff line number Diff line
@@ -1076,6 +1076,13 @@ public final class DataFailCause {
     */
    public static final int SERVICE_TEMPORARILY_UNAVAILABLE = 0x10009;

    /**
     * The request is not supported by the vendor.
     *
     * @hide
     */
    public static final int REQUEST_NOT_SUPPORTED = 0x1000A;

    private static final Map<Integer, String> sFailCauseMap;
    static {
        sFailCauseMap = new HashMap<>();
+83 −1
Original line number Diff line number Diff line
@@ -22,9 +22,11 @@ import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.SystemApi;
import android.net.NetworkCapabilities;
import android.os.Parcel;
import android.os.Parcelable;
import android.telephony.Annotation.ApnType;
import android.telephony.Annotation.NetCapability;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager.NetworkTypeBitMask;
import android.telephony.data.ApnSetting.AuthType;
@@ -66,7 +68,7 @@ public final class DataProfile implements Parcelable {

    private final @Nullable TrafficDescriptor mTrafficDescriptor;

    private final boolean mPreferred;
    private boolean mPreferred;

    private DataProfile(@NonNull Builder builder) {
        mApnSetting = builder.mApnSetting;
@@ -290,6 +292,16 @@ public final class DataProfile implements Parcelable {
        return false;
    }

    /**
     * Set the preferred flag for the data profile.
     *
     * @param preferred {@code true} if this data profile is preferred for internet.
     * @hide
     */
    public void setPreferred(boolean preferred) {
        mPreferred = preferred;
    }

    /**
     * @return {@code true} if this data profile was used to bring up the last default
     * (i.e internet) data connection successfully, or the one chosen by the user in Settings'
@@ -315,6 +327,76 @@ public final class DataProfile implements Parcelable {
        return mTrafficDescriptor;
    }

    /**
     * Check if this data profile can satisfy certain network capabilities
     *
     * @param networkCapabilities The network capabilities. Note that the non-APN-type capabilities
     * will be ignored.
     *
     * @return {@code true} if this data profile can satisfy the given network capabilities.
     * @hide
     */
    public boolean canSatisfy(@NonNull @NetCapability int[] networkCapabilities) {
        if (mApnSetting != null) {
            for (int netCap : networkCapabilities) {
                if (!canSatisfy(netCap)) {
                    return false;
                }
            }
            return true;
        }
        return false;
    }

    /**
     * Check if this data profile can satisfy a certain network capability.
     *
     * @param networkCapability The network capability. Note that the non-APN-type capability
     * will always be satisfied.
     * @return {@code true} if this data profile can satisfy the given network capability.
     * @hide
     */
    public boolean canSatisfy(@NetCapability int networkCapability) {
        return mApnSetting != null && mApnSetting.canHandleType(
                networkCapabilityToApnType(networkCapability));
    }

    /**
     * Convert network capability into APN type.
     *
     * @param networkCapability Network capability.
     * @return APN type.
     * @hide
     */
    private static @ApnType int networkCapabilityToApnType(@NetCapability int networkCapability) {
        switch (networkCapability) {
            case NetworkCapabilities.NET_CAPABILITY_MMS:
                return ApnSetting.TYPE_MMS;
            case NetworkCapabilities.NET_CAPABILITY_SUPL:
                return ApnSetting.TYPE_SUPL;
            case NetworkCapabilities.NET_CAPABILITY_DUN:
                return ApnSetting.TYPE_DUN;
            case NetworkCapabilities.NET_CAPABILITY_FOTA:
                return ApnSetting.TYPE_FOTA;
            case NetworkCapabilities.NET_CAPABILITY_IMS:
                return ApnSetting.TYPE_IMS;
            case NetworkCapabilities.NET_CAPABILITY_CBS:
                return ApnSetting.TYPE_CBS;
            case NetworkCapabilities.NET_CAPABILITY_XCAP:
                return ApnSetting.TYPE_XCAP;
            case NetworkCapabilities.NET_CAPABILITY_EIMS:
                return ApnSetting.TYPE_EMERGENCY;
            case NetworkCapabilities.NET_CAPABILITY_INTERNET:
                return ApnSetting.TYPE_DEFAULT;
            case NetworkCapabilities.NET_CAPABILITY_MCX:
                return ApnSetting.TYPE_MCX;
            case NetworkCapabilities.NET_CAPABILITY_IA:
                return ApnSetting.TYPE_IA;
            default:
                return ApnSetting.TYPE_NONE;
        }
    }

    @Override
    public int describeContents() {
        return 0;