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

Commit 4efcf7cf authored by Hunsuk Choi's avatar Hunsuk Choi Committed by Android (Google) Code Review
Browse files

Merge "Remap IMS_EMERGENCY_TEMP_FAILURE to EMERGENCY_TEMP_FAILURE" into main

parents 46521851 620d1d93
Loading
Loading
Loading
Loading
+16 −1
Original line number Diff line number Diff line
@@ -37,10 +37,12 @@ import android.telephony.Annotation.NetCapability;
import android.telephony.DomainSelectionService;
import android.telephony.EmergencyRegistrationResult;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.PreciseDisconnectCause;
import android.telephony.data.ApnSetting;
import android.telephony.ims.ImsReasonInfo;

import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.CallFailCause;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.data.AccessNetworksManager;
import com.android.internal.telephony.data.AccessNetworksManager.QualifiedNetworks;
@@ -215,6 +217,19 @@ public class EmergencyCallDomainSelectionConnection extends DomainSelectionConne
            @NonNull String callId, @NonNull String number, boolean isTest,
            int callFailCause, @Nullable ImsReasonInfo imsReasonInfo,
            @Nullable EmergencyRegistrationResult emergencyRegResult) {

        int preciseDisconnectCause = callFailCause;
        switch (callFailCause) {
            case CallFailCause.IMS_EMERGENCY_TEMP_FAILURE:
                preciseDisconnectCause = PreciseDisconnectCause.EMERGENCY_TEMP_FAILURE;
                break;
            case CallFailCause.IMS_EMERGENCY_PERM_FAILURE:
                preciseDisconnectCause = PreciseDisconnectCause.EMERGENCY_PERM_FAILURE;
                break;
            default:
                break;
        }

        DomainSelectionService.SelectionAttributes.Builder builder =
                new DomainSelectionService.SelectionAttributes.Builder(
                        slotId, subId, SELECTOR_TYPE_CALLING)
@@ -223,7 +238,7 @@ public class EmergencyCallDomainSelectionConnection extends DomainSelectionConne
                .setExitedFromAirplaneMode(exited)
                .setCallId(callId)
                .setAddress(Uri.fromParts(PhoneAccount.SCHEME_TEL, number, null))
                .setCsDisconnectCause(callFailCause);
                .setCsDisconnectCause(preciseDisconnectCause);

        if (imsReasonInfo != null) builder.setPsDisconnectCause(imsReasonInfo);
        if (emergencyRegResult != null) builder.setEmergencyRegistrationResult(emergencyRegResult);
+35 −0
Original line number Diff line number Diff line
@@ -44,12 +44,14 @@ import android.telephony.AccessNetworkConstants.AccessNetworkType;
import android.telephony.DomainSelectionService;
import android.telephony.EmergencyRegistrationResult;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.PreciseDisconnectCause;
import android.telephony.data.ApnSetting;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;

import androidx.test.filters.SmallTest;

import com.android.internal.telephony.CallFailCause;
import com.android.internal.telephony.ITransportSelectorCallback;
import com.android.internal.telephony.ITransportSelectorResultCallback;
import com.android.internal.telephony.IWwanSelectorCallback;
@@ -258,6 +260,39 @@ public class EmergencyCallDomainSelectionConnectionTest extends TelephonyTest {
        verify(mAnm).unregisterForQualifiedNetworksChanged(any());
    }

    @Test
    @SmallTest
    public void testGetSelectionAttributesEmergencyTempOrPermFailure() {
        DomainSelectionService.SelectionAttributes attr =
                EmergencyCallDomainSelectionConnection.getSelectionAttributes(
                        mPhone.getPhoneId(), mPhone.getSubId(), false,
                        TELECOM_CALL_ID1, "911", false,
                        CallFailCause.IMS_EMERGENCY_TEMP_FAILURE, null, null);

        assertEquals(PreciseDisconnectCause.EMERGENCY_TEMP_FAILURE, attr.getCsDisconnectCause());

        attr = EmergencyCallDomainSelectionConnection.getSelectionAttributes(
                        mPhone.getPhoneId(), mPhone.getSubId(), false,
                        TELECOM_CALL_ID1, "911", false,
                        CallFailCause.IMS_EMERGENCY_PERM_FAILURE, null, null);

        assertEquals(PreciseDisconnectCause.EMERGENCY_PERM_FAILURE, attr.getCsDisconnectCause());

        attr = EmergencyCallDomainSelectionConnection.getSelectionAttributes(
                        mPhone.getPhoneId(), mPhone.getSubId(), false,
                        TELECOM_CALL_ID1, "911", false,
                        CallFailCause.EMERGENCY_TEMP_FAILURE, null, null);

        assertEquals(PreciseDisconnectCause.EMERGENCY_TEMP_FAILURE, attr.getCsDisconnectCause());

        attr = EmergencyCallDomainSelectionConnection.getSelectionAttributes(
                        mPhone.getPhoneId(), mPhone.getSubId(), false,
                        TELECOM_CALL_ID1, "911", false,
                        CallFailCause.EMERGENCY_PERM_FAILURE, null, null);

        assertEquals(PreciseDisconnectCause.EMERGENCY_PERM_FAILURE, attr.getCsDisconnectCause());
    }

    private IWwanSelectorCallback onWwanSelected(ITransportSelectorCallback transportCallback)
            throws Exception {
        ITransportSelectorResultCallback cb = Mockito.mock(ITransportSelectorResultCallback.class);