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

Commit af96f41f authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Clean up calls gracefully on phone type switch."

parents d33414fb ea172968
Loading
Loading
Loading
Loading
+5 −4
Original line number Original line Diff line number Diff line
@@ -40,6 +40,7 @@ import android.telephony.gsm.GsmCellLocation;
import android.text.TextUtils;
import android.text.TextUtils;
import android.util.EventLog;
import android.util.EventLog;


import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.metrics.TelephonyMetrics;


@@ -68,7 +69,8 @@ public class GsmCdmaCallTracker extends CallTracker {
    private static final int MAX_CONNECTIONS_PER_CALL_CDMA = 1; //only 1 connection allowed per call
    private static final int MAX_CONNECTIONS_PER_CALL_CDMA = 1; //only 1 connection allowed per call


    //***** Instance Variables
    //***** Instance Variables
    private GsmCdmaConnection mConnections[];
    @VisibleForTesting
    public GsmCdmaConnection[] mConnections;
    private RegistrantList mVoiceCallEndedRegistrants = new RegistrantList();
    private RegistrantList mVoiceCallEndedRegistrants = new RegistrantList();
    private RegistrantList mVoiceCallStartedRegistrants = new RegistrantList();
    private RegistrantList mVoiceCallStartedRegistrants = new RegistrantList();


@@ -187,10 +189,9 @@ public class GsmCdmaCallTracker extends CallTracker {
    private void reset() {
    private void reset() {
        Rlog.d(LOG_TAG, "reset");
        Rlog.d(LOG_TAG, "reset");


        clearDisconnected();

        for (GsmCdmaConnection gsmCdmaConnection : mConnections) {
        for (GsmCdmaConnection gsmCdmaConnection : mConnections) {
            if (gsmCdmaConnection != null) {
            if (gsmCdmaConnection != null) {
                gsmCdmaConnection.onDisconnect(DisconnectCause.ERROR_UNSPECIFIED);
                gsmCdmaConnection.dispose();
                gsmCdmaConnection.dispose();
            }
            }
        }
        }
@@ -201,7 +202,7 @@ public class GsmCdmaCallTracker extends CallTracker {


        mConnections = null;
        mConnections = null;
        mPendingMO = null;
        mPendingMO = null;
        mState = PhoneConstants.State.IDLE;
        clearDisconnected();
    }
    }


    @Override
    @Override
+35 −10
Original line number Original line Diff line number Diff line
@@ -53,7 +53,7 @@ public class GsmCdmaCallTrackerTest extends TelephonyTest {
    private GsmCdmaCallTracker mCTUT;
    private GsmCdmaCallTracker mCTUT;
    private GsmCdmaCTHandlerThread mGsmCdmaCTHandlerThread;
    private GsmCdmaCTHandlerThread mGsmCdmaCTHandlerThread;
    @Mock
    @Mock
    GsmCdmaCall mCall;
    GsmCdmaConnection mConnection;
    @Mock
    @Mock
    private Handler mHandler;
    private Handler mHandler;


@@ -166,8 +166,8 @@ public class GsmCdmaCallTrackerTest extends TelephonyTest {
        assertEquals(PhoneConstants.State.OFFHOOK, mCTUT.getState());
        assertEquals(PhoneConstants.State.OFFHOOK, mCTUT.getState());
        assertEquals(1, mCTUT.mForegroundCall.getConnections().size());
        assertEquals(1, mCTUT.mForegroundCall.getConnections().size());
         /* get the reference of the connection before reject */
         /* get the reference of the connection before reject */
        Connection mConnection = mCTUT.mForegroundCall.getConnections().get(0);
        Connection connection = mCTUT.mForegroundCall.getConnections().get(0);
        assertEquals(DisconnectCause.NOT_DISCONNECTED, mConnection.getDisconnectCause());
        assertEquals(DisconnectCause.NOT_DISCONNECTED, connection.getDisconnectCause());
        logd("hang up MO call after pickup");
        logd("hang up MO call after pickup");
        try {
        try {
            mCTUT.hangup(mCTUT.mForegroundCall);
            mCTUT.hangup(mCTUT.mForegroundCall);
@@ -180,7 +180,7 @@ public class GsmCdmaCallTrackerTest extends TelephonyTest {
        assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState());
        assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState());
        assertEquals(0, mCTUT.mForegroundCall.getConnections().size());
        assertEquals(0, mCTUT.mForegroundCall.getConnections().size());
        assertEquals(PhoneConstants.State.IDLE, mCTUT.getState());
        assertEquals(PhoneConstants.State.IDLE, mCTUT.getState());
        assertEquals(DisconnectCause.LOCAL, mConnection.getDisconnectCause());
        assertEquals(DisconnectCause.LOCAL, connection.getDisconnectCause());


    }
    }


@@ -276,9 +276,9 @@ public class GsmCdmaCallTrackerTest extends TelephonyTest {
        testMTCallRinging();
        testMTCallRinging();
        logd("MT call ringing and rejected ");
        logd("MT call ringing and rejected ");
        /* get the reference of the connection before reject */
        /* get the reference of the connection before reject */
        Connection mConnection = mCTUT.mRingingCall.getConnections().get(0);
        Connection connection = mCTUT.mRingingCall.getConnections().get(0);
        assertNotNull(mConnection);
        assertNotNull(connection);
        assertEquals(DisconnectCause.NOT_DISCONNECTED, mConnection.getDisconnectCause());
        assertEquals(DisconnectCause.NOT_DISCONNECTED, connection.getDisconnectCause());
        try {
        try {
            mCTUT.rejectCall();
            mCTUT.rejectCall();
        } catch(Exception ex) {
        } catch(Exception ex) {
@@ -290,7 +290,7 @@ public class GsmCdmaCallTrackerTest extends TelephonyTest {
        assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState());
        assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mForegroundCall.getState());
        assertEquals(0, mCTUT.mForegroundCall.getConnections().size());
        assertEquals(0, mCTUT.mForegroundCall.getConnections().size());
        /* ? why rejectCall didnt -> hang up locally to set the cause to LOCAL? */
        /* ? why rejectCall didnt -> hang up locally to set the cause to LOCAL? */
        assertEquals(DisconnectCause.INCOMING_MISSED, mConnection.getDisconnectCause());
        assertEquals(DisconnectCause.INCOMING_MISSED, connection.getDisconnectCause());


    }
    }


@@ -353,7 +353,8 @@ public class GsmCdmaCallTrackerTest extends TelephonyTest {
        testMOCallPickUp();
        testMOCallPickUp();
        ArgumentCaptor<Message> mCaptorMessage = ArgumentCaptor.forClass(Message.class);
        ArgumentCaptor<Message> mCaptorMessage = ArgumentCaptor.forClass(Message.class);
        ArgumentCaptor<Long> mCaptorLong = ArgumentCaptor.forClass(Long.class);
        ArgumentCaptor<Long> mCaptorLong = ArgumentCaptor.forClass(Long.class);
        verify(mHandler,times(1)).sendMessageAtTime(mCaptorMessage.capture(), mCaptorLong.capture());
        verify(mHandler, times(1))
                .sendMessageAtTime(mCaptorMessage.capture(), mCaptorLong.capture());
        assertEquals(VOICE_CALL_STARTED_EVENT, mCaptorMessage.getValue().what);
        assertEquals(VOICE_CALL_STARTED_EVENT, mCaptorMessage.getValue().what);


    }
    }
@@ -367,7 +368,8 @@ public class GsmCdmaCallTrackerTest extends TelephonyTest {
        ArgumentCaptor<Message> mCaptorMessage = ArgumentCaptor.forClass(Message.class);
        ArgumentCaptor<Message> mCaptorMessage = ArgumentCaptor.forClass(Message.class);
        ArgumentCaptor<Long> mCaptorLong = ArgumentCaptor.forClass(Long.class);
        ArgumentCaptor<Long> mCaptorLong = ArgumentCaptor.forClass(Long.class);
        testMOCallHangup();
        testMOCallHangup();
        verify(mHandler,times(1)).sendMessageAtTime(mCaptorMessage.capture(), mCaptorLong.capture());
        verify(mHandler, times(1))
                .sendMessageAtTime(mCaptorMessage.capture(), mCaptorLong.capture());
        assertEquals(VOICE_CALL_ENDED_EVENT, mCaptorMessage.getValue().what);
        assertEquals(VOICE_CALL_ENDED_EVENT, mCaptorMessage.getValue().what);
    }
    }


@@ -407,4 +409,27 @@ public class GsmCdmaCallTrackerTest extends TelephonyTest {
        assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mBackgroundCall.getState());
        assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mBackgroundCall.getState());
        assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mRingingCall.getState());
        assertEquals(GsmCdmaCall.State.IDLE, mCTUT.mRingingCall.getState());
    }
    }

    @Test
    @SmallTest
    public void testUpdatePhoneTypeWithActiveCall() {
        // verify getCurrentCalls is called on init
        verify(mSimulatedCommandsVerifier).getCurrentCalls(any(Message.class));

        // fake connection
        mCTUT.mConnections[0] = mConnection;

        // update phone type (call the function on same thread as the call tracker)
        Handler updatePhoneTypeHandler = new Handler(mCTUT.getLooper()) {
            @Override
            public void handleMessage(Message msg) {
                mCTUT.updatePhoneType();
            }
        };
        updatePhoneTypeHandler.sendEmptyMessage(0);
        waitForMs(100);

        // verify that the active call is disconnected
        verify(mConnection).onDisconnect(DisconnectCause.ERROR_UNSPECIFIED);
    }
}
}
+3 −0
Original line number Original line Diff line number Diff line
@@ -64,6 +64,7 @@ import com.android.internal.util.StateMachine;


import org.junit.After;
import org.junit.After;
import org.junit.Before;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mock;
@@ -225,6 +226,8 @@ public class GsmInboundSmsHandlerTest extends TelephonyTest {
        assertEquals("IdleState", getCurrentState().getName());
        assertEquals("IdleState", getCurrentState().getName());
    }
    }


    @FlakyTest
    @Ignore
    @Test
    @Test
    @MediumTest
    @MediumTest
    public void testNewSms() {
    public void testNewSms() {