diff --git a/core/api/current.txt b/core/api/current.txt index 2719144ffeb5f..79ba209236b90 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -42609,7 +42609,7 @@ package android.telephony { method public String getNetworkOperator(); method public String getNetworkOperatorName(); method @RequiresPermission(anyOf={"android.permission.READ_PRIVILEGED_PHONE_STATE", android.Manifest.permission.READ_PRECISE_PHONE_STATE}) public int getNetworkSelectionMode(); - method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getNetworkSlicingConfiguration(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); + method @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public void getNetworkSlicingConfiguration(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver); method public String getNetworkSpecifier(); method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int getNetworkType(); method @Nullable @RequiresPermission("android.permission.READ_PRIVILEGED_PHONE_STATE") public android.telecom.PhoneAccountHandle getPhoneAccountHandle(); @@ -42660,6 +42660,7 @@ package android.telephony { method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public boolean isModemEnabledForSlot(int); method @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public int isMultiSimSupported(); method public boolean isNetworkRoaming(); + method public boolean isRadioInterfaceCapabilitySupported(@NonNull String); method public boolean isRttSupported(); method public boolean isSmsCapable(); method @Deprecated public boolean isTtyModeSupported(); @@ -42859,11 +42860,13 @@ package android.telephony { field public static final int ERROR_TIMEOUT = 1; // 0x1 } - public static class TelephonyManager.SlicingException extends java.lang.Exception { - ctor public TelephonyManager.SlicingException(int); - method public int getErrorCode(); - field public static final int ERROR_MODEM_ERROR = 2; // 0x2 - field public static final int ERROR_TIMEOUT = 1; // 0x1 + public class TelephonyManager.ModemErrorException extends android.telephony.TelephonyManager.NetworkSlicingException { + } + + public static class TelephonyManager.NetworkSlicingException extends java.lang.Exception { + } + + public class TelephonyManager.TimeoutException extends android.telephony.TelephonyManager.NetworkSlicingException { } public abstract static class TelephonyManager.UssdResponseCallback { @@ -43073,6 +43076,15 @@ package android.telephony.data { method @NonNull public android.telephony.data.NetworkSliceInfo.Builder setStatus(int); } + public final class NetworkSlicingConfig implements android.os.Parcelable { + ctor public NetworkSlicingConfig(); + method public int describeContents(); + method @NonNull public java.util.List getSliceInfo(); + method @NonNull public java.util.List getUrspRules(); + method public void writeToParcel(@NonNull android.os.Parcel, int); + field @NonNull public static final android.os.Parcelable.Creator CREATOR; + } + public final class RouteSelectionDescriptor implements android.os.Parcelable { method public int describeContents(); method @NonNull public java.util.List getDataNetworkName(); @@ -43090,15 +43102,6 @@ package android.telephony.data { field public static final int SESSION_TYPE_IPV6 = 1; // 0x1 } - public final class SlicingConfig implements android.os.Parcelable { - ctor public SlicingConfig(); - method public int describeContents(); - method @NonNull public java.util.List getSliceInfo(); - method @NonNull public java.util.List getUrspRules(); - method public void writeToParcel(@NonNull android.os.Parcel, int); - field @NonNull public static final android.os.Parcelable.Creator CREATOR; - } - public final class TrafficDescriptor implements android.os.Parcelable { method public int describeContents(); method @Nullable public String getDataNetworkName(); diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 80c533cbdd862..f0f134a067eb4 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -11934,7 +11934,6 @@ package android.telephony { method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isOffhook(); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isOpportunisticNetworkEnabled(); method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public boolean isPotentialEmergencyNumber(@NonNull String); - method public boolean isRadioInterfaceCapabilitySupported(@NonNull String); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRadioOn(); method @Deprecated @RequiresPermission(anyOf={android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, android.Manifest.permission.READ_PHONE_STATE}) public boolean isRinging(); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean isTetheringApnRequired(); diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index c8e5e56031bc1..7ec14b6a16202 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -90,7 +90,7 @@ import android.telephony.CallForwardingInfo.CallForwardingReason; import android.telephony.VisualVoicemailService.VisualVoicemailTask; import android.telephony.data.ApnSetting; import android.telephony.data.ApnSetting.MvnoType; -import android.telephony.data.SlicingConfig; +import android.telephony.data.NetworkSlicingConfig; import android.telephony.emergency.EmergencyNumber; import android.telephony.emergency.EmergencyNumber.EmergencyServiceCategories; import android.telephony.gba.UaSecurityProtocolIdentifier; @@ -15065,13 +15065,20 @@ public class TelephonyManager { public static final String CAPABILITY_SLICING_CONFIG_SUPPORTED = "CAPABILITY_SLICING_CONFIG_SUPPORTED"; - /** @hide */ + /** + * A list of the radio interface capability values with public valid constants. + * + * Here is a related list for the systemapi-only valid constants: + * CAPABILITY_SECONDARY_LINK_BANDWIDTH_VISIBLE + * CAPABILITY_ALLOWED_NETWORK_TYPES_USED + * CAPABILITY_NR_DUAL_CONNECTIVITY_CONFIGURATION_AVAILABLE + * CAPABILITY_THERMAL_MITIGATION_DATA_THROTTLING + * + * @hide + * TODO(b/185508047): Doc generation for mixed public/systemapi StringDefs formats badly. + */ @Retention(RetentionPolicy.SOURCE) @StringDef(prefix = "CAPABILITY_", value = { - CAPABILITY_SECONDARY_LINK_BANDWIDTH_VISIBLE, - CAPABILITY_ALLOWED_NETWORK_TYPES_USED, - CAPABILITY_NR_DUAL_CONNECTIVITY_CONFIGURATION_AVAILABLE, - CAPABILITY_THERMAL_MITIGATION_DATA_THROTTLING, CAPABILITY_SLICING_CONFIG_SUPPORTED, }) public @interface RadioInterfaceCapability {} @@ -15083,10 +15090,7 @@ public class TelephonyManager { * * @param capability the name of the capability to check for * @return the availability of the capability - * - * @hide */ - @SystemApi public boolean isRadioInterfaceCapabilitySupported( @NonNull @RadioInterfaceCapability String capability) { try { @@ -15670,7 +15674,7 @@ public class TelephonyManager { * Exception that may be supplied to the callback in {@link #getNetworkSlicingConfiguration} if * something goes awry. */ - public static class SlicingException extends Exception { + public static class NetworkSlicingException extends Exception { /** * Getting the current slicing configuration successfully. Used internally only. * @hide @@ -15679,11 +15683,13 @@ public class TelephonyManager { /** * The system timed out waiting for a response from the Radio. + * @hide */ public static final int ERROR_TIMEOUT = 1; /** * The modem returned a failure. + * @hide */ public static final int ERROR_MODEM_ERROR = 2; @@ -15693,20 +15699,44 @@ public class TelephonyManager { ERROR_MODEM_ERROR, }) @Retention(RetentionPolicy.SOURCE) - public @interface SlicingError {} + public @interface NetworkSlicingError {} private final int mErrorCode; - public SlicingException(@SlicingError int errorCode) { + /** @hide */ + public NetworkSlicingException(@NetworkSlicingError int errorCode) { mErrorCode = errorCode; } - /** - * Fetches the error code associated with this exception. - * @return An error code. - */ - public @SlicingError int getErrorCode() { - return mErrorCode; + @Override + public String toString() { + switch (mErrorCode) { + case ERROR_TIMEOUT: return "ERROR_TIMEOUT"; + case ERROR_MODEM_ERROR: return "ERROR_MODEM_ERROR"; + default: return "UNDEFINED"; + } + } + } + + /** + * Exception that is supplied to the callback in {@link #getNetworkSlicingConfiguration} if the + * system timed out waiting for a response from the Radio. + */ + public class TimeoutException extends NetworkSlicingException { + /** @hide */ + public TimeoutException(int errorCode) { + super(errorCode); + } + } + + /** + * Exception that is supplied to the callback in {@link #getNetworkSlicingConfiguration} if the + * modem returned a failure. + */ + public class ModemErrorException extends NetworkSlicingException { + /** @hide */ + public ModemErrorException(int errorCode) { + super(errorCode); } } @@ -15737,7 +15767,7 @@ public class TelephonyManager { @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void getNetworkSlicingConfiguration( @NonNull @CallbackExecutor Executor executor, - @NonNull OutcomeReceiver callback) { + @NonNull OutcomeReceiver callback) { Objects.requireNonNull(executor); Objects.requireNonNull(callback); @@ -15749,12 +15779,17 @@ public class TelephonyManager { telephony.getSlicingConfig(new ResultReceiver(null) { @Override protected void onReceiveResult(int resultCode, Bundle result) { - if (resultCode != SlicingException.SUCCESS) { + if (resultCode == NetworkSlicingException.ERROR_TIMEOUT) { executor.execute(() -> callback.onError( - new SlicingException(resultCode))); + new TimeoutException(resultCode))); + return; + } else if (resultCode == NetworkSlicingException.ERROR_MODEM_ERROR) { + executor.execute(() -> callback.onError( + new ModemErrorException(resultCode))); return; } - SlicingConfig slicingConfig = + + NetworkSlicingConfig slicingConfig = result.getParcelable(KEY_SLICING_CONFIG_HANDLE); executor.execute(() -> callback.onResult(slicingConfig)); } diff --git a/telephony/java/android/telephony/data/SlicingConfig.aidl b/telephony/java/android/telephony/data/NetworkSlicingConfig.aidl similarity index 95% rename from telephony/java/android/telephony/data/SlicingConfig.aidl rename to telephony/java/android/telephony/data/NetworkSlicingConfig.aidl index ad93d8cafeba4..cd4a8f1e45be6 100644 --- a/telephony/java/android/telephony/data/SlicingConfig.aidl +++ b/telephony/java/android/telephony/data/NetworkSlicingConfig.aidl @@ -16,4 +16,4 @@ package android.telephony.data; -parcelable SlicingConfig; +parcelable NetworkSlicingConfig; diff --git a/telephony/java/android/telephony/data/SlicingConfig.java b/telephony/java/android/telephony/data/NetworkSlicingConfig.java similarity index 83% rename from telephony/java/android/telephony/data/SlicingConfig.java rename to telephony/java/android/telephony/data/NetworkSlicingConfig.java index 990e4d218930b..dec787f40ff26 100644 --- a/telephony/java/android/telephony/data/SlicingConfig.java +++ b/telephony/java/android/telephony/data/NetworkSlicingConfig.java @@ -28,22 +28,22 @@ import java.util.Objects; /** * Represents a slicing configuration */ -public final class SlicingConfig implements Parcelable { +public final class NetworkSlicingConfig implements Parcelable { private final List mUrspRules; private final List mSliceInfo; - public SlicingConfig() { + public NetworkSlicingConfig() { mUrspRules = new ArrayList(); mSliceInfo = new ArrayList(); } /** @hide */ - public SlicingConfig(android.hardware.radio.V1_6.SlicingConfig sc) { + public NetworkSlicingConfig(android.hardware.radio.V1_6.SlicingConfig sc) { this(sc.urspRules, sc.sliceInfo); } /** @hide */ - public SlicingConfig(List urspRules, + public NetworkSlicingConfig(List urspRules, List sliceInfo) { mUrspRules = new ArrayList(); for (android.hardware.radio.V1_6.UrspRule ur : urspRules) { @@ -69,7 +69,7 @@ public final class SlicingConfig implements Parcelable { } /** @hide */ - public SlicingConfig(Parcel p) { + public NetworkSlicingConfig(Parcel p) { mUrspRules = p.createTypedArrayList(UrspRule.CREATOR); mSliceInfo = p.createTypedArrayList(NetworkSliceInfo.CREATOR); } @@ -96,16 +96,16 @@ public final class SlicingConfig implements Parcelable { dest.writeTypedList(mSliceInfo, flags); } - public static final @NonNull Parcelable.Creator CREATOR = - new Parcelable.Creator() { + public static final @NonNull Parcelable.Creator CREATOR = + new Parcelable.Creator() { @Override - public SlicingConfig createFromParcel(Parcel source) { - return new SlicingConfig(source); + public NetworkSlicingConfig createFromParcel(Parcel source) { + return new NetworkSlicingConfig(source); } @Override - public SlicingConfig[] newArray(int size) { - return new SlicingConfig[size]; + public NetworkSlicingConfig[] newArray(int size) { + return new NetworkSlicingConfig[size]; } }; @@ -118,7 +118,7 @@ public final class SlicingConfig implements Parcelable { public boolean equals(@Nullable Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; - SlicingConfig that = (SlicingConfig) o; + NetworkSlicingConfig that = (NetworkSlicingConfig) o; return mUrspRules.size() == that.mUrspRules.size() && mUrspRules.containsAll(that.mUrspRules) && mSliceInfo.size() == that.mSliceInfo.size()