diff options
| author | 2021-10-17 18:15:32 -0700 | |
|---|---|---|
| committer | 2021-12-16 14:47:05 -0800 | |
| commit | 09c6189ae40e75e291bfa31bb0166c375feff61c (patch) | |
| tree | 1fc7b6f5b5e3a44ff1a1d076f7a55a1fcb60aae6 | |
| parent | 70d456d06cf5f2ea7c2effb4e452a00c7759b787 (diff) | |
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: I837606d9e91339c66f2e2cff1a3a76d1029750c6
Change-Id: I837606d9e91339c66f2e2cff1a3a76d1029750c6
(cherry picked from commit 69af77931e347c73ce2975e0ee54c5150a41203f)
| -rw-r--r-- | core/java/android/provider/Telephony.java | 17 | ||||
| -rw-r--r-- | telephony/java/android/telephony/Annotation.java | 57 | ||||
| -rw-r--r-- | telephony/java/android/telephony/DataFailCause.java | 7 | ||||
| -rw-r--r-- | telephony/java/android/telephony/data/DataProfile.java | 84 |
4 files changed, 164 insertions, 1 deletions
diff --git a/core/java/android/provider/Telephony.java b/core/java/android/provider/Telephony.java index 0adc00e56bf1..b28bfbf32cc0 100644 --- a/core/java/android/provider/Telephony.java +++ b/core/java/android/provider/Telephony.java @@ -3584,6 +3584,23 @@ public final class Telephony { "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 */ diff --git a/telephony/java/android/telephony/Annotation.java b/telephony/java/android/telephony/Annotation.java index 23cf5116b2da..e88106cb95fe 100644 --- a/telephony/java/android/telephony/Annotation.java +++ b/telephony/java/android/telephony/Annotation.java @@ -1,6 +1,8 @@ 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 {} } diff --git a/telephony/java/android/telephony/DataFailCause.java b/telephony/java/android/telephony/DataFailCause.java index 88efe1f6a4a7..56bf3039d209 100644 --- a/telephony/java/android/telephony/DataFailCause.java +++ b/telephony/java/android/telephony/DataFailCause.java @@ -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<>(); diff --git a/telephony/java/android/telephony/data/DataProfile.java b/telephony/java/android/telephony/data/DataProfile.java index 93903d2658cd..43ad982f2e1e 100644 --- a/telephony/java/android/telephony/data/DataProfile.java +++ b/telephony/java/android/telephony/data/DataProfile.java @@ -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; @@ -291,6 +293,16 @@ public final class DataProfile implements Parcelable { } /** + * 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' * APN editor. For one carrier there can be only one profiled preferred. @@ -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; |