Supported network capability MMTEL
Allowed IMS service to request an IMS network that supports VoPS by sending a network request with IMS and MMTEL capability. When network reports VoPS is not supported, the existing IMS network will be torn down. This does not affect the network request that only has IMS capability. Also support delay IMS tear down until voice call ends. This can be configured through carrier config. Test: atest DataNetworkControllerTest Fix: 219110278 Change-Id: I845029fb68ce013d252fa6ffd59c868c9157ef92 Merged-In: I845029fb68ce013d252fa6ffd59c868c9157ef92
This commit is contained in:
@@ -5640,6 +5640,13 @@ public class CarrierConfigManager {
|
||||
public static final String KEY_TELEPHONY_DATA_HANDOVER_RETRY_RULES_STRING_ARRAY =
|
||||
"telephony_data_handover_retry_rules_string_array";
|
||||
|
||||
/**
|
||||
* Indicates whether delay tearing down IMS data network until voice call ends.
|
||||
* @hide
|
||||
*/
|
||||
public static final String KEY_DELAY_IMS_TEAR_DOWN_UNTIL_CALL_END_BOOL =
|
||||
"delay_ims_tear_down_until_call_end_bool";
|
||||
|
||||
/**
|
||||
* The patterns of missed incoming call sms. This is the regular expression used for
|
||||
* matching the missed incoming call's date, time, and caller id. The pattern should match
|
||||
@@ -6458,6 +6465,7 @@ public class CarrierConfigManager {
|
||||
KEY_TELEPHONY_DATA_HANDOVER_RETRY_RULES_STRING_ARRAY, new String[] {
|
||||
"retry_interval=1000|2000|4000|8000|16000, maximum_retries=5"
|
||||
});
|
||||
sDefaults.putBoolean(KEY_DELAY_IMS_TEAR_DOWN_UNTIL_CALL_END_BOOL, false);
|
||||
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);
|
||||
sDefaults.putString(KEY_DEFAULT_PREFERRED_APN_NAME_STRING, "");
|
||||
|
||||
@@ -22,6 +22,8 @@ import android.annotation.SystemApi;
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
|
||||
@@ -76,7 +78,8 @@ public final class DataSpecificRegistrationInfo implements Parcelable {
|
||||
/**
|
||||
* @hide
|
||||
*/
|
||||
DataSpecificRegistrationInfo(
|
||||
@VisibleForTesting
|
||||
public DataSpecificRegistrationInfo(
|
||||
int maxDataCalls, boolean isDcNrRestricted, boolean isNrAvailable,
|
||||
boolean isEnDcAvailable, @Nullable VopsSupportInfo vops) {
|
||||
this.maxDataCalls = maxDataCalls;
|
||||
@@ -186,7 +189,7 @@ public final class DataSpecificRegistrationInfo implements Parcelable {
|
||||
/**
|
||||
* @return The VOPS (Voice over Packet Switched) support information.
|
||||
*
|
||||
* The instance of {@link LTEVopsSupportInfo}, or {@link NrVopsSupportInfo},
|
||||
* The instance of {@link LteVopsSupportInfo}, or {@link NrVopsSupportInfo},
|
||||
* null if there is there is no VOPS support information available.
|
||||
*/
|
||||
@Nullable
|
||||
|
||||
@@ -242,13 +242,16 @@ public final class NetworkRegistrationInfo implements Parcelable {
|
||||
* @param cellIdentity The identity representing a unique cell or wifi AP. Set to null if the
|
||||
* information is not available.
|
||||
* @param rplmn the registered plmn or the last plmn for attempted registration if reg failed.
|
||||
* @param voiceSpecificInfo Voice specific registration information.
|
||||
* @param dataSpecificInfo Data specific registration information.
|
||||
*/
|
||||
private NetworkRegistrationInfo(@Domain int domain, @TransportType int transportType,
|
||||
@RegistrationState int registrationState,
|
||||
@NetworkType int accessNetworkTechnology, int rejectCause,
|
||||
boolean emergencyOnly,
|
||||
@Nullable @ServiceType List<Integer> availableServices,
|
||||
@Nullable CellIdentity cellIdentity, @Nullable String rplmn) {
|
||||
@RegistrationState int registrationState,
|
||||
@NetworkType int accessNetworkTechnology, int rejectCause,
|
||||
boolean emergencyOnly, @Nullable @ServiceType List<Integer> availableServices,
|
||||
@Nullable CellIdentity cellIdentity, @Nullable String rplmn,
|
||||
@Nullable VoiceSpecificRegistrationInfo voiceSpecificInfo,
|
||||
@Nullable DataSpecificRegistrationInfo dataSpecificInfo) {
|
||||
mDomain = domain;
|
||||
mTransportType = transportType;
|
||||
mRegistrationState = registrationState;
|
||||
@@ -262,6 +265,10 @@ public final class NetworkRegistrationInfo implements Parcelable {
|
||||
mEmergencyOnly = emergencyOnly;
|
||||
mNrState = NR_STATE_NONE;
|
||||
mRplmn = rplmn;
|
||||
mVoiceSpecificInfo = voiceSpecificInfo;
|
||||
mDataSpecificInfo = dataSpecificInfo;
|
||||
|
||||
updateNrState();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -276,10 +283,9 @@ public final class NetworkRegistrationInfo implements Parcelable {
|
||||
boolean cssSupported, int roamingIndicator, int systemIsInPrl,
|
||||
int defaultRoamingIndicator) {
|
||||
this(domain, transportType, registrationState, accessNetworkTechnology, rejectCause,
|
||||
emergencyOnly, availableServices, cellIdentity, rplmn);
|
||||
|
||||
mVoiceSpecificInfo = new VoiceSpecificRegistrationInfo(cssSupported, roamingIndicator,
|
||||
systemIsInPrl, defaultRoamingIndicator);
|
||||
emergencyOnly, availableServices, cellIdentity, rplmn,
|
||||
new VoiceSpecificRegistrationInfo(cssSupported, roamingIndicator,
|
||||
systemIsInPrl, defaultRoamingIndicator), null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -295,11 +301,9 @@ public final class NetworkRegistrationInfo implements Parcelable {
|
||||
boolean isNrAvailable, boolean isEndcAvailable,
|
||||
@Nullable VopsSupportInfo vopsSupportInfo) {
|
||||
this(domain, transportType, registrationState, accessNetworkTechnology, rejectCause,
|
||||
emergencyOnly, availableServices, cellIdentity, rplmn);
|
||||
mDataSpecificInfo = new DataSpecificRegistrationInfo(
|
||||
maxDataCalls, isDcNrRestricted, isNrAvailable,
|
||||
isEndcAvailable, vopsSupportInfo);
|
||||
updateNrState();
|
||||
emergencyOnly, availableServices, cellIdentity, rplmn, null,
|
||||
new DataSpecificRegistrationInfo(maxDataCalls, isDcNrRestricted, isNrAvailable,
|
||||
isEndcAvailable, vopsSupportInfo));
|
||||
}
|
||||
|
||||
private NetworkRegistrationInfo(Parcel source) {
|
||||
@@ -804,6 +808,12 @@ public final class NetworkRegistrationInfo implements Parcelable {
|
||||
@NonNull
|
||||
private String mRplmn = "";
|
||||
|
||||
@Nullable
|
||||
private DataSpecificRegistrationInfo mDataSpecificRegistrationInfo;
|
||||
|
||||
@Nullable
|
||||
private VoiceSpecificRegistrationInfo mVoiceSpecificRegistrationInfo;
|
||||
|
||||
/**
|
||||
* Default constructor for Builder.
|
||||
*/
|
||||
@@ -929,6 +939,30 @@ public final class NetworkRegistrationInfo implements Parcelable {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set voice specific registration information.
|
||||
*
|
||||
* @param info The voice specific registration information.
|
||||
* @return The builder.
|
||||
* @hide
|
||||
*/
|
||||
public @NonNull Builder setVoiceSpecificInfo(@NonNull VoiceSpecificRegistrationInfo info) {
|
||||
mVoiceSpecificRegistrationInfo = info;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set data specific registration information.
|
||||
*
|
||||
* @param info The data specific registration information.
|
||||
* @return The builder.
|
||||
* @hide
|
||||
*/
|
||||
public @NonNull Builder setDataSpecificInfo(@NonNull DataSpecificRegistrationInfo info) {
|
||||
mDataSpecificRegistrationInfo = info;
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the NetworkRegistrationInfo.
|
||||
* @return the NetworkRegistrationInfo object.
|
||||
@@ -938,7 +972,8 @@ public final class NetworkRegistrationInfo implements Parcelable {
|
||||
public @NonNull NetworkRegistrationInfo build() {
|
||||
return new NetworkRegistrationInfo(mDomain, mTransportType, mRegistrationState,
|
||||
mAccessNetworkTechnology, mRejectCause, mEmergencyOnly, mAvailableServices,
|
||||
mCellIdentity, mRplmn);
|
||||
mCellIdentity, mRplmn, mVoiceSpecificRegistrationInfo,
|
||||
mDataSpecificRegistrationInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user