Merge "Add S-NSSAI" am: d7d4b0ca85
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1560540 MUST ONLY BE SUBMITTED BY AUTOMERGER Change-Id: I7ae9b7dad9d7fb8f4f883bbf23f63e041a534200
This commit is contained in:
@@ -40272,6 +40272,7 @@ package android.telephony {
|
|||||||
field public static final int SERVICE_OPTION_OUT_OF_ORDER = 34; // 0x22
|
field public static final int SERVICE_OPTION_OUT_OF_ORDER = 34; // 0x22
|
||||||
field public static final int SIGNAL_LOST = -3; // 0xfffffffd
|
field public static final int SIGNAL_LOST = -3; // 0xfffffffd
|
||||||
field public static final int SIM_CARD_CHANGED = 2043; // 0x7fb
|
field public static final int SIM_CARD_CHANGED = 2043; // 0x7fb
|
||||||
|
field public static final int SLICE_REJECTED = 2252; // 0x8cc
|
||||||
field public static final int SYNCHRONIZATION_FAILURE = 2184; // 0x888
|
field public static final int SYNCHRONIZATION_FAILURE = 2184; // 0x888
|
||||||
field public static final int TEST_LOOPBACK_REGULAR_DEACTIVATION = 2196; // 0x894
|
field public static final int TEST_LOOPBACK_REGULAR_DEACTIVATION = 2196; // 0x894
|
||||||
field public static final int TETHERED_CALL_ACTIVE = -6; // 0xfffffffa
|
field public static final int TETHERED_CALL_ACTIVE = -6; // 0xfffffffa
|
||||||
|
|||||||
@@ -10713,6 +10713,7 @@ package android.telephony.data {
|
|||||||
method public int getPduSessionId();
|
method public int getPduSessionId();
|
||||||
method public int getProtocolType();
|
method public int getProtocolType();
|
||||||
method public long getRetryDurationMillis();
|
method public long getRetryDurationMillis();
|
||||||
|
method @Nullable public android.telephony.data.SliceInfo getSliceInfo();
|
||||||
method @Deprecated public int getSuggestedRetryTime();
|
method @Deprecated public int getSuggestedRetryTime();
|
||||||
method public void writeToParcel(android.os.Parcel, int);
|
method public void writeToParcel(android.os.Parcel, int);
|
||||||
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.DataCallResponse> CREATOR;
|
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.DataCallResponse> CREATOR;
|
||||||
@@ -10747,6 +10748,7 @@ package android.telephony.data {
|
|||||||
method @NonNull public android.telephony.data.DataCallResponse.Builder setPduSessionId(int);
|
method @NonNull public android.telephony.data.DataCallResponse.Builder setPduSessionId(int);
|
||||||
method @NonNull public android.telephony.data.DataCallResponse.Builder setProtocolType(int);
|
method @NonNull public android.telephony.data.DataCallResponse.Builder setProtocolType(int);
|
||||||
method @NonNull public android.telephony.data.DataCallResponse.Builder setRetryDurationMillis(long);
|
method @NonNull public android.telephony.data.DataCallResponse.Builder setRetryDurationMillis(long);
|
||||||
|
method @NonNull public android.telephony.data.DataCallResponse.Builder setSliceInfo(@Nullable android.telephony.data.SliceInfo);
|
||||||
method @Deprecated @NonNull public android.telephony.data.DataCallResponse.Builder setSuggestedRetryTime(int);
|
method @Deprecated @NonNull public android.telephony.data.DataCallResponse.Builder setSuggestedRetryTime(int);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10819,7 +10821,7 @@ package android.telephony.data {
|
|||||||
method public void setDataProfile(@NonNull java.util.List<android.telephony.data.DataProfile>, boolean, @NonNull android.telephony.data.DataServiceCallback);
|
method public void setDataProfile(@NonNull java.util.List<android.telephony.data.DataProfile>, boolean, @NonNull android.telephony.data.DataServiceCallback);
|
||||||
method public void setInitialAttachApn(@NonNull android.telephony.data.DataProfile, boolean, @NonNull android.telephony.data.DataServiceCallback);
|
method public void setInitialAttachApn(@NonNull android.telephony.data.DataProfile, boolean, @NonNull android.telephony.data.DataServiceCallback);
|
||||||
method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @NonNull android.telephony.data.DataServiceCallback);
|
method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @NonNull android.telephony.data.DataServiceCallback);
|
||||||
method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @IntRange(from=0, to=15) int, @NonNull android.telephony.data.DataServiceCallback);
|
method public void setupDataCall(int, @NonNull android.telephony.data.DataProfile, boolean, boolean, int, @Nullable android.net.LinkProperties, @IntRange(from=0, to=15) int, @Nullable android.telephony.data.SliceInfo, @NonNull android.telephony.data.DataServiceCallback);
|
||||||
method public void startHandover(int, @NonNull android.telephony.data.DataServiceCallback);
|
method public void startHandover(int, @NonNull android.telephony.data.DataServiceCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -10867,6 +10869,32 @@ package android.telephony.data {
|
|||||||
method public final void updateQualifiedNetworkTypes(int, @NonNull java.util.List<java.lang.Integer>);
|
method public final void updateQualifiedNetworkTypes(int, @NonNull java.util.List<java.lang.Integer>);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final class SliceInfo implements android.os.Parcelable {
|
||||||
|
method public int describeContents();
|
||||||
|
method @IntRange(from=android.telephony.data.SliceInfo.MIN_SLICE_DIFFERENTIATOR, to=android.telephony.data.SliceInfo.MAX_SLICE_DIFFERENTIATOR) public int getMappedHplmnSliceDifferentiator();
|
||||||
|
method public int getMappedHplmnSliceServiceType();
|
||||||
|
method @IntRange(from=android.telephony.data.SliceInfo.MIN_SLICE_DIFFERENTIATOR, to=android.telephony.data.SliceInfo.MAX_SLICE_DIFFERENTIATOR) public int getSliceDifferentiator();
|
||||||
|
method public int getSliceServiceType();
|
||||||
|
method public void writeToParcel(@NonNull android.os.Parcel, int);
|
||||||
|
field @NonNull public static final android.os.Parcelable.Creator<android.telephony.data.SliceInfo> CREATOR;
|
||||||
|
field public static final int MAX_SLICE_DIFFERENTIATOR = 16777214; // 0xfffffe
|
||||||
|
field public static final int MIN_SLICE_DIFFERENTIATOR = -1; // 0xffffffff
|
||||||
|
field public static final int SLICE_DIFFERENTIATOR_NO_SLICE = -1; // 0xffffffff
|
||||||
|
field public static final int SLICE_SERVICE_TYPE_EMBB = 1; // 0x1
|
||||||
|
field public static final int SLICE_SERVICE_TYPE_MIOT = 3; // 0x3
|
||||||
|
field public static final int SLICE_SERVICE_TYPE_NONE = 0; // 0x0
|
||||||
|
field public static final int SLICE_SERVICE_TYPE_URLLC = 2; // 0x2
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class SliceInfo.Builder {
|
||||||
|
ctor public SliceInfo.Builder();
|
||||||
|
method @NonNull public android.telephony.data.SliceInfo build();
|
||||||
|
method @NonNull public android.telephony.data.SliceInfo.Builder setMappedHplmnSliceDifferentiator(@IntRange(from=android.telephony.data.SliceInfo.MIN_SLICE_DIFFERENTIATOR, to=android.telephony.data.SliceInfo.MAX_SLICE_DIFFERENTIATOR) int);
|
||||||
|
method @NonNull public android.telephony.data.SliceInfo.Builder setMappedHplmnSliceServiceType(int);
|
||||||
|
method @NonNull public android.telephony.data.SliceInfo.Builder setSliceDifferentiator(@IntRange(from=android.telephony.data.SliceInfo.MIN_SLICE_DIFFERENTIATOR, to=android.telephony.data.SliceInfo.MAX_SLICE_DIFFERENTIATOR) int);
|
||||||
|
method @NonNull public android.telephony.data.SliceInfo.Builder setSliceServiceType(int);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
package android.telephony.euicc {
|
package android.telephony.euicc {
|
||||||
|
|||||||
@@ -915,6 +915,8 @@ public final class DataFailCause {
|
|||||||
public static final int IPV6_PREFIX_UNAVAILABLE = 0x8CA;
|
public static final int IPV6_PREFIX_UNAVAILABLE = 0x8CA;
|
||||||
/** System preference change back to SRAT during handoff */
|
/** System preference change back to SRAT during handoff */
|
||||||
public static final int HANDOFF_PREFERENCE_CHANGED = 0x8CB;
|
public static final int HANDOFF_PREFERENCE_CHANGED = 0x8CB;
|
||||||
|
/** Data call fail due to the slice not being allowed for the data call. */
|
||||||
|
public static final int SLICE_REJECTED = 0x8CC;
|
||||||
|
|
||||||
//IKE error notifications message as specified in 3GPP TS 24.302 (Section 8.1.2.2).
|
//IKE error notifications message as specified in 3GPP TS 24.302 (Section 8.1.2.2).
|
||||||
|
|
||||||
@@ -985,7 +987,7 @@ public final class DataFailCause {
|
|||||||
* the authentication failed.
|
* the authentication failed.
|
||||||
*/
|
*/
|
||||||
public static final int IWLAN_IKEV2_AUTH_FAILURE = 0x4001;
|
public static final int IWLAN_IKEV2_AUTH_FAILURE = 0x4001;
|
||||||
/** IKE message timeout, tunnel setup failed due to no response from EPDG */
|
/** IKE message timeout, tunnel setup failed due to no response from EPDG */
|
||||||
public static final int IWLAN_IKEV2_MSG_TIMEOUT = 0x4002;
|
public static final int IWLAN_IKEV2_MSG_TIMEOUT = 0x4002;
|
||||||
/** IKE Certification validation failure */
|
/** IKE Certification validation failure */
|
||||||
public static final int IWLAN_IKEV2_CERT_INVALID = 0x4003;
|
public static final int IWLAN_IKEV2_CERT_INVALID = 0x4003;
|
||||||
@@ -1419,6 +1421,7 @@ public final class DataFailCause {
|
|||||||
sFailCauseMap.put(VSNCP_RECONNECT_NOT_ALLOWED, "VSNCP_RECONNECT_NOT_ALLOWED");
|
sFailCauseMap.put(VSNCP_RECONNECT_NOT_ALLOWED, "VSNCP_RECONNECT_NOT_ALLOWED");
|
||||||
sFailCauseMap.put(IPV6_PREFIX_UNAVAILABLE, "IPV6_PREFIX_UNAVAILABLE");
|
sFailCauseMap.put(IPV6_PREFIX_UNAVAILABLE, "IPV6_PREFIX_UNAVAILABLE");
|
||||||
sFailCauseMap.put(HANDOFF_PREFERENCE_CHANGED, "HANDOFF_PREFERENCE_CHANGED");
|
sFailCauseMap.put(HANDOFF_PREFERENCE_CHANGED, "HANDOFF_PREFERENCE_CHANGED");
|
||||||
|
sFailCauseMap.put(SLICE_REJECTED, "SLICE_REJECTED");
|
||||||
sFailCauseMap.put(IWLAN_PDN_CONNECTION_REJECTION, "IWLAN_PDN_CONNECTION_REJECTION");
|
sFailCauseMap.put(IWLAN_PDN_CONNECTION_REJECTION, "IWLAN_PDN_CONNECTION_REJECTION");
|
||||||
sFailCauseMap.put(IWLAN_MAX_CONNECTION_REACHED, "IWLAN_MAX_CONNECTION_REACHED");
|
sFailCauseMap.put(IWLAN_MAX_CONNECTION_REACHED, "IWLAN_MAX_CONNECTION_REACHED");
|
||||||
sFailCauseMap.put(IWLAN_SEMANTIC_ERROR_IN_THE_TFT_OPERATION,
|
sFailCauseMap.put(IWLAN_SEMANTIC_ERROR_IN_THE_TFT_OPERATION,
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
private final int mPduSessionId;
|
private final int mPduSessionId;
|
||||||
private final Qos mDefaultQos;
|
private final Qos mDefaultQos;
|
||||||
private final List<QosSession> mQosSessions;
|
private final List<QosSession> mQosSessions;
|
||||||
|
private final SliceInfo mSliceInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param cause Data call fail cause. {@link DataFailCause#NONE} indicates no error.
|
* @param cause Data call fail cause. {@link DataFailCause#NONE} indicates no error.
|
||||||
@@ -186,6 +187,7 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
mPduSessionId = PDU_SESSION_ID_NOT_SET;
|
mPduSessionId = PDU_SESSION_ID_NOT_SET;
|
||||||
mDefaultQos = null;
|
mDefaultQos = null;
|
||||||
mQosSessions = new ArrayList<>();
|
mQosSessions = new ArrayList<>();
|
||||||
|
mSliceInfo = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private DataCallResponse(@DataFailureCause int cause, long suggestedRetryTime, int id,
|
private DataCallResponse(@DataFailureCause int cause, long suggestedRetryTime, int id,
|
||||||
@@ -194,7 +196,8 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
@Nullable List<InetAddress> dnsAddresses, @Nullable List<InetAddress> gatewayAddresses,
|
@Nullable List<InetAddress> dnsAddresses, @Nullable List<InetAddress> gatewayAddresses,
|
||||||
@Nullable List<InetAddress> pcscfAddresses, int mtu, int mtuV4, int mtuV6,
|
@Nullable List<InetAddress> pcscfAddresses, int mtu, int mtuV4, int mtuV6,
|
||||||
@HandoverFailureMode int handoverFailureMode, int pduSessionId,
|
@HandoverFailureMode int handoverFailureMode, int pduSessionId,
|
||||||
@Nullable Qos defaultQos, @Nullable List<QosSession> qosSessions) {
|
@Nullable Qos defaultQos, @Nullable List<QosSession> qosSessions,
|
||||||
|
@Nullable SliceInfo sliceInfo) {
|
||||||
mCause = cause;
|
mCause = cause;
|
||||||
mSuggestedRetryTime = suggestedRetryTime;
|
mSuggestedRetryTime = suggestedRetryTime;
|
||||||
mId = id;
|
mId = id;
|
||||||
@@ -216,6 +219,7 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
mPduSessionId = pduSessionId;
|
mPduSessionId = pduSessionId;
|
||||||
mDefaultQos = defaultQos;
|
mDefaultQos = defaultQos;
|
||||||
mQosSessions = qosSessions;
|
mQosSessions = qosSessions;
|
||||||
|
mSliceInfo = sliceInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@@ -243,6 +247,7 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
mDefaultQos = source.readParcelable(Qos.class.getClassLoader());
|
mDefaultQos = source.readParcelable(Qos.class.getClassLoader());
|
||||||
mQosSessions = new ArrayList<>();
|
mQosSessions = new ArrayList<>();
|
||||||
source.readList(mQosSessions, QosSession.class.getClassLoader());
|
source.readList(mQosSessions, QosSession.class.getClassLoader());
|
||||||
|
mSliceInfo = source.readParcelable(SliceInfo.class.getClassLoader());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -368,7 +373,7 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return default QOS of the data call received from the network
|
* @return default QOS of the data connection received from the network
|
||||||
*
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
@@ -379,16 +384,24 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return All the dedicated bearer QOS sessions of the data call received from the network
|
* @return All the dedicated bearer QOS sessions of the data connection received from the
|
||||||
|
* network.
|
||||||
*
|
*
|
||||||
* @hide
|
* @hide
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
public List<QosSession> getQosSessions() {
|
public List<QosSession> getQosSessions() {
|
||||||
return mQosSessions;
|
return mQosSessions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The slice info related to this data connection.
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public SliceInfo getSliceInfo() {
|
||||||
|
return mSliceInfo;
|
||||||
|
}
|
||||||
|
|
||||||
@NonNull
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
@@ -411,6 +424,7 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
.append(" pduSessionId=").append(getPduSessionId())
|
.append(" pduSessionId=").append(getPduSessionId())
|
||||||
.append(" defaultQos=").append(mDefaultQos)
|
.append(" defaultQos=").append(mDefaultQos)
|
||||||
.append(" qosSessions=").append(mQosSessions)
|
.append(" qosSessions=").append(mQosSessions)
|
||||||
|
.append(" sliceInfo=").append(mSliceInfo)
|
||||||
.append("}");
|
.append("}");
|
||||||
return sb.toString();
|
return sb.toString();
|
||||||
}
|
}
|
||||||
@@ -454,7 +468,8 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
&& mHandoverFailureMode == other.mHandoverFailureMode
|
&& mHandoverFailureMode == other.mHandoverFailureMode
|
||||||
&& mPduSessionId == other.mPduSessionId
|
&& mPduSessionId == other.mPduSessionId
|
||||||
&& isQosSame
|
&& isQosSame
|
||||||
&& isQosSessionsSame;
|
&& isQosSessionsSame
|
||||||
|
&& Objects.equals(mSliceInfo, other.mSliceInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -462,7 +477,7 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
return Objects.hash(mCause, mSuggestedRetryTime, mId, mLinkStatus, mProtocolType,
|
return Objects.hash(mCause, mSuggestedRetryTime, mId, mLinkStatus, mProtocolType,
|
||||||
mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses, mPcscfAddresses,
|
mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses, mPcscfAddresses,
|
||||||
mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId, mDefaultQos,
|
mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId, mDefaultQos,
|
||||||
mQosSessions);
|
mQosSessions, mSliceInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -493,6 +508,7 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
dest.writeParcelable((NrQos)mDefaultQos, flags);
|
dest.writeParcelable((NrQos)mDefaultQos, flags);
|
||||||
}
|
}
|
||||||
dest.writeList(mQosSessions);
|
dest.writeList(mQosSessions);
|
||||||
|
dest.writeParcelable(mSliceInfo, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final @android.annotation.NonNull Parcelable.Creator<DataCallResponse> CREATOR =
|
public static final @android.annotation.NonNull Parcelable.Creator<DataCallResponse> CREATOR =
|
||||||
@@ -576,6 +592,8 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
|
|
||||||
private List<QosSession> mQosSessions = new ArrayList<>();
|
private List<QosSession> mQosSessions = new ArrayList<>();
|
||||||
|
|
||||||
|
private SliceInfo mSliceInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Default constructor for Builder.
|
* Default constructor for Builder.
|
||||||
*/
|
*/
|
||||||
@@ -798,6 +816,21 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The Slice used for this data connection.
|
||||||
|
* <p/>
|
||||||
|
* If a handover occurs from EPDG to 5G,
|
||||||
|
* this is the {@link SliceInfo} used in {@link DataService#setupDataCall}.
|
||||||
|
*
|
||||||
|
* @param sliceInfo the slice info for the data call
|
||||||
|
*
|
||||||
|
* @return The same instance of the builder.
|
||||||
|
*/
|
||||||
|
public @NonNull Builder setSliceInfo(@Nullable SliceInfo sliceInfo) {
|
||||||
|
mSliceInfo = sliceInfo;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Build the DataCallResponse.
|
* Build the DataCallResponse.
|
||||||
*
|
*
|
||||||
@@ -807,7 +840,7 @@ public final class DataCallResponse implements Parcelable {
|
|||||||
return new DataCallResponse(mCause, mSuggestedRetryTime, mId, mLinkStatus,
|
return new DataCallResponse(mCause, mSuggestedRetryTime, mId, mLinkStatus,
|
||||||
mProtocolType, mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses,
|
mProtocolType, mInterfaceName, mAddresses, mDnsAddresses, mGatewayAddresses,
|
||||||
mPcscfAddresses, mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId,
|
mPcscfAddresses, mMtu, mMtuV4, mMtuV6, mHandoverFailureMode, mPduSessionId,
|
||||||
mDefaultQos, mQosSessions);
|
mDefaultQos, mQosSessions, mSliceInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -194,13 +194,19 @@ public abstract class DataService extends Service {
|
|||||||
* The standard range of values are 1-15 while 0 means no pdu session id
|
* The standard range of values are 1-15 while 0 means no pdu session id
|
||||||
* was attached to this call. Reference: 3GPP TS 24.007 section
|
* was attached to this call. Reference: 3GPP TS 24.007 section
|
||||||
* 11.2.3.1b.
|
* 11.2.3.1b.
|
||||||
|
* @param sliceInfo used within the data connection when a handover occurs from EPDG to 5G.
|
||||||
|
* The value is null unless the access network is
|
||||||
|
* {@link android.telephony.AccessNetworkConstants.AccessNetworkType#NGRAN} and a
|
||||||
|
* handover is occurring from EPDG to 5G. If the slice passed is rejected, then
|
||||||
|
* {@link DataCallResponse#getCause()} is
|
||||||
|
* {@link android.telephony.DataFailCause#SLICE_REJECTED}.
|
||||||
* @param callback The result callback for this request.
|
* @param callback The result callback for this request.
|
||||||
*/
|
*/
|
||||||
public void setupDataCall(int accessNetworkType, @NonNull DataProfile dataProfile,
|
public void setupDataCall(int accessNetworkType, @NonNull DataProfile dataProfile,
|
||||||
boolean isRoaming, boolean allowRoaming,
|
boolean isRoaming, boolean allowRoaming,
|
||||||
@SetupDataReason int reason,
|
@SetupDataReason int reason,
|
||||||
@Nullable LinkProperties linkProperties,
|
@Nullable LinkProperties linkProperties,
|
||||||
@IntRange(from = 0, to = 15) int pduSessionId,
|
@IntRange(from = 0, to = 15) int pduSessionId, @Nullable SliceInfo sliceInfo,
|
||||||
@NonNull DataServiceCallback callback) {
|
@NonNull DataServiceCallback callback) {
|
||||||
/* Call the old version since the new version isn't supported */
|
/* Call the old version since the new version isn't supported */
|
||||||
setupDataCall(accessNetworkType, dataProfile, isRoaming, allowRoaming, reason,
|
setupDataCall(accessNetworkType, dataProfile, isRoaming, allowRoaming, reason,
|
||||||
@@ -392,10 +398,11 @@ public abstract class DataService extends Service {
|
|||||||
public final int reason;
|
public final int reason;
|
||||||
public final LinkProperties linkProperties;
|
public final LinkProperties linkProperties;
|
||||||
public final int pduSessionId;
|
public final int pduSessionId;
|
||||||
|
public final SliceInfo sliceInfo;
|
||||||
public final IDataServiceCallback callback;
|
public final IDataServiceCallback callback;
|
||||||
SetupDataCallRequest(int accessNetworkType, DataProfile dataProfile, boolean isRoaming,
|
SetupDataCallRequest(int accessNetworkType, DataProfile dataProfile, boolean isRoaming,
|
||||||
boolean allowRoaming, int reason, LinkProperties linkProperties,
|
boolean allowRoaming, int reason, LinkProperties linkProperties,
|
||||||
int pduSessionId, IDataServiceCallback callback) {
|
int pduSessionId, SliceInfo sliceInfo, IDataServiceCallback callback) {
|
||||||
this.accessNetworkType = accessNetworkType;
|
this.accessNetworkType = accessNetworkType;
|
||||||
this.dataProfile = dataProfile;
|
this.dataProfile = dataProfile;
|
||||||
this.isRoaming = isRoaming;
|
this.isRoaming = isRoaming;
|
||||||
@@ -403,6 +410,7 @@ public abstract class DataService extends Service {
|
|||||||
this.linkProperties = linkProperties;
|
this.linkProperties = linkProperties;
|
||||||
this.reason = reason;
|
this.reason = reason;
|
||||||
this.pduSessionId = pduSessionId;
|
this.pduSessionId = pduSessionId;
|
||||||
|
this.sliceInfo = sliceInfo;
|
||||||
this.callback = callback;
|
this.callback = callback;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -513,6 +521,7 @@ public abstract class DataService extends Service {
|
|||||||
setupDataCallRequest.dataProfile, setupDataCallRequest.isRoaming,
|
setupDataCallRequest.dataProfile, setupDataCallRequest.isRoaming,
|
||||||
setupDataCallRequest.allowRoaming, setupDataCallRequest.reason,
|
setupDataCallRequest.allowRoaming, setupDataCallRequest.reason,
|
||||||
setupDataCallRequest.linkProperties, setupDataCallRequest.pduSessionId,
|
setupDataCallRequest.linkProperties, setupDataCallRequest.pduSessionId,
|
||||||
|
setupDataCallRequest.sliceInfo,
|
||||||
(setupDataCallRequest.callback != null)
|
(setupDataCallRequest.callback != null)
|
||||||
? new DataServiceCallback(setupDataCallRequest.callback)
|
? new DataServiceCallback(setupDataCallRequest.callback)
|
||||||
: null);
|
: null);
|
||||||
@@ -676,10 +685,12 @@ public abstract class DataService extends Service {
|
|||||||
@Override
|
@Override
|
||||||
public void setupDataCall(int slotIndex, int accessNetworkType, DataProfile dataProfile,
|
public void setupDataCall(int slotIndex, int accessNetworkType, DataProfile dataProfile,
|
||||||
boolean isRoaming, boolean allowRoaming, int reason,
|
boolean isRoaming, boolean allowRoaming, int reason,
|
||||||
LinkProperties linkProperties, int pduSessionId, IDataServiceCallback callback) {
|
LinkProperties linkProperties, int pduSessionId, SliceInfo sliceInfo,
|
||||||
|
IDataServiceCallback callback) {
|
||||||
mHandler.obtainMessage(DATA_SERVICE_REQUEST_SETUP_DATA_CALL, slotIndex, 0,
|
mHandler.obtainMessage(DATA_SERVICE_REQUEST_SETUP_DATA_CALL, slotIndex, 0,
|
||||||
new SetupDataCallRequest(accessNetworkType, dataProfile, isRoaming,
|
new SetupDataCallRequest(accessNetworkType, dataProfile, isRoaming,
|
||||||
allowRoaming, reason, linkProperties, pduSessionId, callback))
|
allowRoaming, reason, linkProperties, pduSessionId, sliceInfo,
|
||||||
|
callback))
|
||||||
.sendToTarget();
|
.sendToTarget();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ package android.telephony.data;
|
|||||||
import android.net.LinkProperties;
|
import android.net.LinkProperties;
|
||||||
import android.telephony.data.DataProfile;
|
import android.telephony.data.DataProfile;
|
||||||
import android.telephony.data.IDataServiceCallback;
|
import android.telephony.data.IDataServiceCallback;
|
||||||
|
import android.telephony.data.SliceInfo;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@hide}
|
* {@hide}
|
||||||
@@ -29,7 +30,7 @@ oneway interface IDataService
|
|||||||
void removeDataServiceProvider(int slotId);
|
void removeDataServiceProvider(int slotId);
|
||||||
void setupDataCall(int slotId, int accessNetwork, in DataProfile dataProfile, boolean isRoaming,
|
void setupDataCall(int slotId, int accessNetwork, in DataProfile dataProfile, boolean isRoaming,
|
||||||
boolean allowRoaming, int reason, in LinkProperties linkProperties,
|
boolean allowRoaming, int reason, in LinkProperties linkProperties,
|
||||||
int pduSessionId, IDataServiceCallback callback);
|
int pduSessionId, in SliceInfo sliceInfo, IDataServiceCallback callback);
|
||||||
void deactivateDataCall(int slotId, int cid, int reason, IDataServiceCallback callback);
|
void deactivateDataCall(int slotId, int cid, int reason, IDataServiceCallback callback);
|
||||||
void setInitialAttachApn(int slotId, in DataProfile dataProfile, boolean isRoaming,
|
void setInitialAttachApn(int slotId, in DataProfile dataProfile, boolean isRoaming,
|
||||||
IDataServiceCallback callback);
|
IDataServiceCallback callback);
|
||||||
|
|||||||
20
telephony/java/android/telephony/data/SliceInfo.aidl
Normal file
20
telephony/java/android/telephony/data/SliceInfo.aidl
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2020 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
package android.telephony.data;
|
||||||
|
|
||||||
|
parcelable SliceInfo;
|
||||||
342
telephony/java/android/telephony/data/SliceInfo.java
Normal file
342
telephony/java/android/telephony/data/SliceInfo.java
Normal file
@@ -0,0 +1,342 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2020 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package android.telephony.data;
|
||||||
|
|
||||||
|
import android.annotation.IntDef;
|
||||||
|
import android.annotation.IntRange;
|
||||||
|
import android.annotation.NonNull;
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.annotation.SystemApi;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a S-NSSAI as defined in 3GPP TS 24.501.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
@SystemApi
|
||||||
|
public final class SliceInfo implements Parcelable {
|
||||||
|
/**
|
||||||
|
* When set on a Slice Differentiator, this value indicates that there is no corresponding
|
||||||
|
* Slice.
|
||||||
|
*/
|
||||||
|
public static final int SLICE_DIFFERENTIATOR_NO_SLICE = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates that the service type is not present.
|
||||||
|
*/
|
||||||
|
public static final int SLICE_SERVICE_TYPE_NONE = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Slice suitable for the handling of 5G enhanced Mobile Broadband.
|
||||||
|
*/
|
||||||
|
public static final int SLICE_SERVICE_TYPE_EMBB = 1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Slice suitable for the handling of ultra-reliable low latency communications.
|
||||||
|
*/
|
||||||
|
public static final int SLICE_SERVICE_TYPE_URLLC = 2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Slice suitable for the handling of massive IoT.
|
||||||
|
*/
|
||||||
|
public static final int SLICE_SERVICE_TYPE_MIOT = 3;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The min acceptable value for a Slice Differentiator
|
||||||
|
*/
|
||||||
|
@SuppressLint("MinMaxConstant")
|
||||||
|
public static final int MIN_SLICE_DIFFERENTIATOR = -1;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The max acceptable value for a Slice Differentiator
|
||||||
|
*/
|
||||||
|
@SuppressLint("MinMaxConstant")
|
||||||
|
public static final int MAX_SLICE_DIFFERENTIATOR = 0xFFFFFE;
|
||||||
|
|
||||||
|
/** @hide */
|
||||||
|
@IntDef(prefix = { "SLICE_SERVICE_TYPE_" }, value = {
|
||||||
|
SLICE_SERVICE_TYPE_NONE,
|
||||||
|
SLICE_SERVICE_TYPE_EMBB,
|
||||||
|
SLICE_SERVICE_TYPE_URLLC,
|
||||||
|
SLICE_SERVICE_TYPE_MIOT,
|
||||||
|
})
|
||||||
|
@Retention(RetentionPolicy.SOURCE)
|
||||||
|
public @interface SliceServiceType {}
|
||||||
|
|
||||||
|
|
||||||
|
@SliceServiceType
|
||||||
|
private final int mSliceServiceType;
|
||||||
|
@IntRange(from = MIN_SLICE_DIFFERENTIATOR, to = MAX_SLICE_DIFFERENTIATOR)
|
||||||
|
private final int mSliceDifferentiator;
|
||||||
|
@SliceServiceType
|
||||||
|
private final int mMappedHplmnSliceServiceType;
|
||||||
|
@IntRange(from = MIN_SLICE_DIFFERENTIATOR, to = MAX_SLICE_DIFFERENTIATOR)
|
||||||
|
private final int mMappedHplmnSliceDifferentiator;
|
||||||
|
|
||||||
|
private SliceInfo(@SliceServiceType int sliceServiceType,
|
||||||
|
int sliceDifferentiator, int mappedHplmnSliceServiceType,
|
||||||
|
int mappedHplmnSliceDifferentiator) {
|
||||||
|
mSliceServiceType = sliceServiceType;
|
||||||
|
mSliceDifferentiator = sliceDifferentiator;
|
||||||
|
mMappedHplmnSliceDifferentiator = mappedHplmnSliceDifferentiator;
|
||||||
|
mMappedHplmnSliceServiceType = mappedHplmnSliceServiceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The type of service provided by the slice.
|
||||||
|
* <p/>
|
||||||
|
* see: 3GPP TS 24.501 Section 9.11.2.8.
|
||||||
|
*/
|
||||||
|
@SliceServiceType
|
||||||
|
public int getSliceServiceType() {
|
||||||
|
return mSliceServiceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Identifies the slice from others with the same Slice Service Type.
|
||||||
|
* <p/>
|
||||||
|
* Returns {@link #SLICE_DIFFERENTIATOR_NO_SLICE} if {@link #getSliceServiceType} returns
|
||||||
|
* {@link #SLICE_SERVICE_TYPE_NONE}.
|
||||||
|
* <p/>
|
||||||
|
* see: 3GPP TS 24.501 Section 9.11.2.8.
|
||||||
|
*/
|
||||||
|
@IntRange(from = MIN_SLICE_DIFFERENTIATOR, to = MAX_SLICE_DIFFERENTIATOR)
|
||||||
|
public int getSliceDifferentiator() {
|
||||||
|
return mSliceDifferentiator;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Corresponds to a Slice Info (S-NSSAI) of the HPLMN.
|
||||||
|
* <p/>
|
||||||
|
* see: 3GPP TS 24.501 Section 9.11.2.8.
|
||||||
|
*/
|
||||||
|
@SliceServiceType
|
||||||
|
public int getMappedHplmnSliceServiceType() {
|
||||||
|
return mMappedHplmnSliceServiceType;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This Slice Differentiator corresponds to a {@link SliceInfo} (S-NSSAI) of the HPLMN;
|
||||||
|
* {@link #getSliceDifferentiator()} is mapped to this value.
|
||||||
|
* <p/>
|
||||||
|
* Returns {@link #SLICE_DIFFERENTIATOR_NO_SLICE} if either of the following are true:
|
||||||
|
* <ul>
|
||||||
|
* <li>{@link #getSliceDifferentiator()} returns {@link #SLICE_DIFFERENTIATOR_NO_SLICE}</li>
|
||||||
|
* <li>{@link #getMappedHplmnSliceServiceType()} returns {@link #SLICE_SERVICE_TYPE_NONE}</li>
|
||||||
|
* </ul>
|
||||||
|
* <p/>
|
||||||
|
* see: 3GPP TS 24.501 Section 9.11.2.8.
|
||||||
|
*/
|
||||||
|
@IntRange(from = MIN_SLICE_DIFFERENTIATOR, to = MAX_SLICE_DIFFERENTIATOR)
|
||||||
|
public int getMappedHplmnSliceDifferentiator() {
|
||||||
|
return mMappedHplmnSliceDifferentiator;
|
||||||
|
}
|
||||||
|
|
||||||
|
private SliceInfo(@NonNull Parcel in) {
|
||||||
|
mSliceServiceType = in.readInt();
|
||||||
|
mSliceDifferentiator = in.readInt();
|
||||||
|
mMappedHplmnSliceServiceType = in.readInt();
|
||||||
|
mMappedHplmnSliceDifferentiator = in.readInt();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(@NonNull Parcel dest, int flags) {
|
||||||
|
dest.writeInt(mSliceServiceType);
|
||||||
|
dest.writeInt(mSliceDifferentiator);
|
||||||
|
dest.writeInt(mMappedHplmnSliceServiceType);
|
||||||
|
dest.writeInt(mMappedHplmnSliceDifferentiator);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final @android.annotation.NonNull Parcelable.Creator<SliceInfo> CREATOR =
|
||||||
|
new Parcelable.Creator<SliceInfo>() {
|
||||||
|
@Override
|
||||||
|
@NonNull
|
||||||
|
public SliceInfo createFromParcel(@NonNull Parcel source) {
|
||||||
|
return new SliceInfo(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@NonNull
|
||||||
|
public SliceInfo[] newArray(int size) {
|
||||||
|
return new SliceInfo[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "SliceInfo{"
|
||||||
|
+ "mSliceServiceType=" + sliceServiceTypeToString(mSliceServiceType)
|
||||||
|
+ ", mSliceDifferentiator=" + mSliceDifferentiator
|
||||||
|
+ ", mMappedHplmnSliceServiceType="
|
||||||
|
+ sliceServiceTypeToString(mMappedHplmnSliceServiceType)
|
||||||
|
+ ", mMappedHplmnSliceDifferentiator=" + mMappedHplmnSliceDifferentiator
|
||||||
|
+ '}';
|
||||||
|
}
|
||||||
|
|
||||||
|
private static String sliceServiceTypeToString(@SliceServiceType int sliceServiceType) {
|
||||||
|
switch(sliceServiceType) {
|
||||||
|
case SLICE_SERVICE_TYPE_NONE:
|
||||||
|
return "NONE";
|
||||||
|
case SLICE_SERVICE_TYPE_EMBB:
|
||||||
|
return "EMBB";
|
||||||
|
case SLICE_SERVICE_TYPE_URLLC:
|
||||||
|
return "URLLC";
|
||||||
|
case SLICE_SERVICE_TYPE_MIOT:
|
||||||
|
return "MIOT";
|
||||||
|
default:
|
||||||
|
return Integer.toString(sliceServiceType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) return true;
|
||||||
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
|
SliceInfo sliceInfo = (SliceInfo) o;
|
||||||
|
return mSliceServiceType == sliceInfo.mSliceServiceType
|
||||||
|
&& mSliceDifferentiator == sliceInfo.mSliceDifferentiator
|
||||||
|
&& mMappedHplmnSliceServiceType == sliceInfo.mMappedHplmnSliceServiceType
|
||||||
|
&& mMappedHplmnSliceDifferentiator == sliceInfo.mMappedHplmnSliceDifferentiator;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return Objects.hash(mSliceServiceType, mSliceDifferentiator, mMappedHplmnSliceServiceType,
|
||||||
|
mMappedHplmnSliceDifferentiator);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides a convenient way to set the fields of a {@link SliceInfo} when creating a
|
||||||
|
* new instance.
|
||||||
|
*
|
||||||
|
* <p>The example below shows how you might create a new {@code SliceInfo}:
|
||||||
|
*
|
||||||
|
* <pre><code>
|
||||||
|
*
|
||||||
|
* SliceInfo response = new SliceInfo.Builder()
|
||||||
|
* .setSliceServiceType(SLICE_SERVICE_TYPE_URLLC)
|
||||||
|
* .build();
|
||||||
|
* </code></pre>
|
||||||
|
*/
|
||||||
|
public static final class Builder {
|
||||||
|
@SliceServiceType
|
||||||
|
private int mSliceServiceType = SLICE_SERVICE_TYPE_NONE;
|
||||||
|
@IntRange(from = MIN_SLICE_DIFFERENTIATOR, to = MAX_SLICE_DIFFERENTIATOR)
|
||||||
|
private int mSliceDifferentiator = SLICE_DIFFERENTIATOR_NO_SLICE;
|
||||||
|
@SliceServiceType
|
||||||
|
private int mMappedHplmnSliceServiceType = SLICE_SERVICE_TYPE_NONE;
|
||||||
|
@IntRange(from = MIN_SLICE_DIFFERENTIATOR, to = MAX_SLICE_DIFFERENTIATOR)
|
||||||
|
private int mMappedHplmnSliceDifferentiator = SLICE_DIFFERENTIATOR_NO_SLICE;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default constructor for Builder.
|
||||||
|
*/
|
||||||
|
public Builder() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the Slice Service Type.
|
||||||
|
*
|
||||||
|
* @return The same instance of the builder.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public Builder setSliceServiceType(@SliceServiceType int mSliceServiceType) {
|
||||||
|
this.mSliceServiceType = mSliceServiceType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the Slice Differentiator.
|
||||||
|
* <p/>
|
||||||
|
* A value of {@link #SLICE_DIFFERENTIATOR_NO_SLICE} indicates that there is no
|
||||||
|
* corresponding Slice.
|
||||||
|
*
|
||||||
|
* @throws IllegalArgumentException if the parameter is not between
|
||||||
|
* {@link #MIN_SLICE_DIFFERENTIATOR} and {@link #MAX_SLICE_DIFFERENTIATOR}.
|
||||||
|
*
|
||||||
|
* @return The same instance of the builder.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public Builder setSliceDifferentiator(
|
||||||
|
@IntRange(from = MIN_SLICE_DIFFERENTIATOR, to = MAX_SLICE_DIFFERENTIATOR)
|
||||||
|
int sliceDifferentiator) {
|
||||||
|
if (sliceDifferentiator < MIN_SLICE_DIFFERENTIATOR
|
||||||
|
|| sliceDifferentiator > MAX_SLICE_DIFFERENTIATOR) {
|
||||||
|
throw new IllegalArgumentException("The slice diffentiator value is out of range");
|
||||||
|
}
|
||||||
|
this.mSliceDifferentiator = sliceDifferentiator;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the HPLMN Slice Service Type.
|
||||||
|
*
|
||||||
|
* @return The same instance of the builder.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public Builder setMappedHplmnSliceServiceType(
|
||||||
|
@SliceServiceType int mappedHplmnSliceServiceType) {
|
||||||
|
this.mMappedHplmnSliceServiceType = mappedHplmnSliceServiceType;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the HPLMN Slice Differentiator.
|
||||||
|
* <p/>
|
||||||
|
* A value of {@link #SLICE_DIFFERENTIATOR_NO_SLICE} indicates that there is no
|
||||||
|
* corresponding Slice of the HPLMN.
|
||||||
|
*
|
||||||
|
* @throws IllegalArgumentException if the parameter is not between
|
||||||
|
* {@link #MIN_SLICE_DIFFERENTIATOR} and {@link #MAX_SLICE_DIFFERENTIATOR}.
|
||||||
|
*
|
||||||
|
* @return The same instance of the builder.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public Builder setMappedHplmnSliceDifferentiator(
|
||||||
|
@IntRange(from = MIN_SLICE_DIFFERENTIATOR, to = MAX_SLICE_DIFFERENTIATOR)
|
||||||
|
int mappedHplmnSliceDifferentiator) {
|
||||||
|
if (mappedHplmnSliceDifferentiator < MIN_SLICE_DIFFERENTIATOR
|
||||||
|
|| mappedHplmnSliceDifferentiator > MAX_SLICE_DIFFERENTIATOR) {
|
||||||
|
throw new IllegalArgumentException("The slice diffentiator value is out of range");
|
||||||
|
}
|
||||||
|
this.mMappedHplmnSliceDifferentiator = mappedHplmnSliceDifferentiator;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build the {@link SliceInfo}.
|
||||||
|
*
|
||||||
|
* @return the {@link SliceInfo} object.
|
||||||
|
*/
|
||||||
|
@NonNull
|
||||||
|
public SliceInfo build() {
|
||||||
|
return new SliceInfo(this.mSliceServiceType, this.mSliceDifferentiator,
|
||||||
|
this.mMappedHplmnSliceServiceType, this.mMappedHplmnSliceDifferentiator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user