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

Commit 69af7793 authored by Jack Yu's avatar Jack Yu
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
Change-Id: I837606d9e91339c66f2e2cff1a3a76d1029750c6
parent fd4dda19
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
@@ -5951,9 +5951,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;