From c40071734b8735e8625e8d4d74732548ae2ffc35 Mon Sep 17 00:00:00 2001 From: Jack Yu Date: Sun, 13 Feb 2022 01:37:30 -0800 Subject: [PATCH] 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 --- .../telephony/CarrierConfigManager.java | 8 +++ .../DataSpecificRegistrationInfo.java | 7 +- .../telephony/NetworkRegistrationInfo.java | 65 ++++++++++++++----- 3 files changed, 63 insertions(+), 17 deletions(-) diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 77e58aaeb2847..ee646d9c9bdb3 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -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, ""); diff --git a/telephony/java/android/telephony/DataSpecificRegistrationInfo.java b/telephony/java/android/telephony/DataSpecificRegistrationInfo.java index 957f683292f78..1d7c18fb08374 100644 --- a/telephony/java/android/telephony/DataSpecificRegistrationInfo.java +++ b/telephony/java/android/telephony/DataSpecificRegistrationInfo.java @@ -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 diff --git a/telephony/java/android/telephony/NetworkRegistrationInfo.java b/telephony/java/android/telephony/NetworkRegistrationInfo.java index 6a807665a1034..1a5a5ae4b2181 100644 --- a/telephony/java/android/telephony/NetworkRegistrationInfo.java +++ b/telephony/java/android/telephony/NetworkRegistrationInfo.java @@ -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 availableServices, - @Nullable CellIdentity cellIdentity, @Nullable String rplmn) { + @RegistrationState int registrationState, + @NetworkType int accessNetworkTechnology, int rejectCause, + boolean emergencyOnly, @Nullable @ServiceType List 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); } } }