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

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

Merge "Set ImsReasonInfo for all reasons in onCallStartFailed" into main

parents f4123383 c5b6c829
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -3580,14 +3580,13 @@ public class ImsPhoneCallTracker extends CallTracker implements ImsPullCall {
                ImsPhoneConnection conn = findConnection(imsCall);
                // Since onCallInitiating and onCallProgressing reset mPendingMO,
                // we can't depend on mPendingMO.
                if ((reasonInfo.getCode() == ImsReasonInfo.CODE_SIP_ALTERNATE_EMERGENCY_CALL
                        || reasonInfo.getCode() == ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED
                        || reasonInfo.getCode() == ImsReasonInfo.CODE_LOCAL_CALL_CS_RETRY_REQUIRED)
                        && conn != null) {
                if (conn != null) {
                    logi("onCallStartFailed eccCategory=" + eccCategory);
                    if (reasonInfo.getCode() == ImsReasonInfo.CODE_SIP_ALTERNATE_EMERGENCY_CALL
                            || reasonInfo.getExtraCode()
                                    == ImsReasonInfo.EXTRA_CODE_CALL_RETRY_EMERGENCY) {
                    int reason = reasonInfo.getCode();
                    int extraCode = reasonInfo.getExtraCode();
                    if ((reason == ImsReasonInfo.CODE_LOCAL_CALL_CS_RETRY_REQUIRED
                            && extraCode == ImsReasonInfo.EXTRA_CODE_CALL_RETRY_EMERGENCY)
                            || (reason == ImsReasonInfo.CODE_SIP_ALTERNATE_EMERGENCY_CALL)) {
                        conn.setNonDetectableEmergencyCallInfo(eccCategory);
                    }
                    conn.setImsReasonInfo(reasonInfo);
+28 −0
Original line number Diff line number Diff line
@@ -2496,6 +2496,34 @@ public class ImsPhoneCallTrackerTest extends TelephonyTest {
                emergencyNumber.getEmergencyServiceCategoryBitmask());
    }

    @Test
    @SmallTest
    public void testDomainSelectionEmergencyPermFailure() {
        doReturn(true).when(mDomainSelectionResolver).isDomainSelectionSupported();
        startOutgoingCall();
        ImsPhoneConnection c = mCTUT.mForegroundCall.getFirstConnection();
        mImsCallListener.onCallStartFailed(mSecondImsCall,
                new ImsReasonInfo(ImsReasonInfo.CODE_EMERGENCY_PERM_FAILURE, -1));
        processAllMessages();
        assertNotNull(c.getImsReasonInfo());
        assertEquals(ImsReasonInfo.CODE_EMERGENCY_PERM_FAILURE,
                c.getImsReasonInfo().getCode());
    }

    @Test
    @SmallTest
    public void testDomainSelectionEmergencyTempFailure() {
        doReturn(true).when(mDomainSelectionResolver).isDomainSelectionSupported();
        startOutgoingCall();
        ImsPhoneConnection c = mCTUT.mForegroundCall.getFirstConnection();
        mImsCallListener.onCallStartFailed(mSecondImsCall,
                new ImsReasonInfo(ImsReasonInfo.CODE_EMERGENCY_TEMP_FAILURE, -1));
        processAllMessages();
        assertNotNull(c.getImsReasonInfo());
        assertEquals(ImsReasonInfo.CODE_EMERGENCY_TEMP_FAILURE,
                c.getImsReasonInfo().getCode());
    }

    @Test
    public void testUpdateImsCallStatusIncoming() throws Exception {
        // Incoming call