Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4007173 authored by Jack Yu's avatar Jack Yu Committed by Sarah Chin
Browse files

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
parent 372b449b
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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, "");
+5 −2
Original line number Diff line number Diff line
@@ -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
+50 −15
Original line number Diff line number Diff line
@@ -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) {
            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);
        }
    }
}