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

Commit 0204712e authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 8847022 from afe3c56a to tm-qpr1-release

Change-Id: I95fcc03f5b6003393363a27274651bba5deb9f0b
parents 17aa72ff afe3c56a
Loading
Loading
Loading
Loading
+11 −29
Original line number Diff line number Diff line
@@ -1094,7 +1094,7 @@ public class ServiceStateTracker extends Handler {
    /**
     * Turn on or off radio power with option to specify whether it's for emergency call and specify
     * a reason for setting the power state.
     * More details check {@link PhoneInternalInterface#setRadioPowerForReason(
     * More details check {@link PhoneInternalInterface#setRadioPower(
     * boolean, boolean, boolean, boolean, int)}.
     */
    public void setRadioPowerForReason(boolean power, boolean forEmergencyCall,
@@ -1198,8 +1198,8 @@ public class ServiceStateTracker extends Handler {
            case EVENT_SET_RADIO_POWER_OFF:
                synchronized(this) {
                    if (mPhone.isUsingNewDataStack()) {
                        mPendingRadioPowerOffAfterDataOff = false;
                        log("Wait for all data networks torn down timed out. Power off now.");
                        cancelPendingRadioPowerOff();
                        hangupAndPowerOff();
                        return;
                    }
@@ -1495,13 +1495,12 @@ public class ServiceStateTracker extends Handler {
                            areAllDataDisconnectedOnAllPhones = false;
                        }
                    }
                    synchronized (this) {
                    if (areAllDataDisconnectedOnAllPhones) {
                        mPendingRadioPowerOffAfterDataOff = false;
                        removeMessages(EVENT_SET_RADIO_POWER_OFF);
                        if (DBG) log("Data disconnected for all phones, turn radio off now.");
                            cancelPendingRadioPowerOff();
                        hangupAndPowerOff();
                    }
                    }
                    return;
                }
                int dds = SubscriptionManager.getDefaultDataSubscriptionId();
@@ -3141,12 +3140,12 @@ public class ServiceStateTracker extends Handler {
                    && getRadioPowerOffDelayTimeoutForImsRegistration() > 0) {
                if (DBG) log("setPowerStateToDesired: delaying power off until IMS dereg.");
                startDelayRadioOffWaitingForImsDeregTimeout();
                // Return early here as we do not want to hit the cancel timeout code below.
                return;
            } else {
                if (DBG) log("setPowerStateToDesired: powerOffRadioSafely()");
                powerOffRadioSafely();
            }
            // Return early here as we do not want to hit the cancel timeout code below.
            return;
        } else if (mDeviceShuttingDown
                && (mCi.getRadioState() != TelephonyManager.RADIO_POWER_UNAVAILABLE)) {
            // !mDesiredPowerState condition above will happen first if the radio is on, so we will
@@ -3156,23 +3155,6 @@ public class ServiceStateTracker extends Handler {
        }
        // Cancel any pending timeouts because the state has been re-evaluated.
        cancelDelayRadioOffWaitingForImsDeregTimeout();
        cancelPendingRadioPowerOff();
    }

    /**
     * Cancel the pending radio power off request that was sent to force the radio to power off
     * if waiting for all data to disconnect times out.
     */
    private synchronized void cancelPendingRadioPowerOff() {
        if (mPhone.isUsingNewDataStack() && mPendingRadioPowerOffAfterDataOff) {
            if (DBG) log("cancelPendingRadioPowerOff: cancelling.");
            mPendingRadioPowerOffAfterDataOff = false;
            for (Phone phone : PhoneFactory.getPhones()) {
                phone.getDataNetworkController().unregisterDataNetworkControllerCallback(
                        mDataDisconnectedCallback);
            }
            removeMessages(EVENT_SET_RADIO_POWER_OFF);
        }
    }

    /**
+6 −6
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ public class CellSignalStrengthNrTest extends TelephonyTest {

    private List<Integer> getCsiCqiList() {
        return CSICQI_REPORT.stream()
                .map(cqi -> new Integer(Byte.toUnsignedInt(cqi)))
                .map(Byte::toUnsignedInt)
                .collect(Collectors.toList());
    }

@@ -188,7 +188,7 @@ public class CellSignalStrengthNrTest extends TelephonyTest {
    @Test
    public void testAsuLevel_invalidValue() {
        // GIVEN an instance of CellSignalStrengthNr with invalid csirsrp
        CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
        CellSignalStrengthNr css = new CellSignalStrengthNr(INVALID_CSIRSRP, CSIRSRQ, CSISINR,
                CSICQI_TABLE_INDEX, CSICQI_REPORT, INVALID_SSRSRP, SSRSRQ, SSSINR);

        // THEN the asu level is unknown
@@ -197,10 +197,10 @@ public class CellSignalStrengthNrTest extends TelephonyTest {

    @Test
    public void testSignalLevel_validValue() {
        for (int ssRsrp = -140; ssRsrp <= -44; ssRsrp++) {
        for (int ssRsrp = -156; ssRsrp <= -31; ssRsrp++) {
            // GIVEN an instance of CellSignalStrengthNr with valid csirsrp
            CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
                    CSICQI_TABLE_INDEX, CSICQI_REPORT, INVALID_SSRSRP, SSRSRQ, SSSINR);
                    CSICQI_TABLE_INDEX, CSICQI_REPORT, ssRsrp, SSRSRQ, SSSINR);

            // THEN the signal level is valid
            assertThat(css.getLevel()).isIn(Range.range(
@@ -212,7 +212,7 @@ public class CellSignalStrengthNrTest extends TelephonyTest {
    @Test
    public void testSignalLevel_invalidValue() {
        // GIVEN an instance of CellSignalStrengthNr with invalid csirsrp
        CellSignalStrengthNr css = new CellSignalStrengthNr(CSIRSRP, CSIRSRQ, CSISINR,
        CellSignalStrengthNr css = new CellSignalStrengthNr(INVALID_CSIRSRP, CSIRSRQ, CSISINR,
                CSICQI_TABLE_INDEX, CSICQI_REPORT, SSRSRP, SSRSRQ, SSSINR);

        // THEN the signal level is unknown
@@ -259,7 +259,7 @@ public class CellSignalStrengthNrTest extends TelephonyTest {
    }

    @Test
    public void testSignalLevel_ThresholdBoundaries() {
    public void testSignalLevel_thresholdBoundaries() {
        int[] ssRsrpThresholds = {
                -110, /* SIGNAL_STRENGTH_POOR */
                -90,  /* SIGNAL_STRENGTH_MODERATE */
+1 −52
Original line number Diff line number Diff line
@@ -417,7 +417,6 @@ public class ServiceStateTrackerTest extends TelephonyTest {
                callback1.capture());
        verify(dataNetworkController_phone2, times(1)).registerDataNetworkControllerCallback(
                callback2.capture());
        assertTrue(sst.hasMessages(38 /* EVENT_SET_RADIO_POWER_OFF */));

        // Data disconnected on sub 2, still waiting for data disconnected on sub 1
        doReturn(true).when(dataNetworkController_phone2).areAllDataDisconnected();
@@ -431,58 +430,8 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        doReturn(true).when(mDataNetworkController).areAllDataDisconnected();
        callback1.getValue().onAnyDataNetworkExistingChanged(false);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        verify(mDataNetworkController, times(2)).unregisterDataNetworkControllerCallback(any());
        assertEquals(TelephonyManager.RADIO_POWER_OFF, mSimulatedCommands.getRadioState());
    }

    @Test
    public void testSetRadioPowerCancelWaitForAllDataDisconnected() throws Exception {
        // Set up DSDS environment
        GsmCdmaPhone phone2 = Mockito.mock(GsmCdmaPhone.class);
        DataNetworkController dataNetworkController_phone2 =
                Mockito.mock(DataNetworkController.class);
        mPhones = new Phone[] {mPhone, phone2};
        replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
        doReturn(dataNetworkController_phone2).when(phone2).getDataNetworkController();
        doReturn(mSST).when(phone2).getServiceStateTracker();
        doReturn(true).when(phone2).isUsingNewDataStack();
        doReturn(false).when(mDataNetworkController).areAllDataDisconnected();
        doReturn(false).when(dataNetworkController_phone2).areAllDataDisconnected();
        doReturn(1).when(mPhone).getSubId();
        doReturn(2).when(phone2).getSubId();

        // Start with radio on
        sst.setRadioPower(true);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        assertEquals(TelephonyManager.RADIO_POWER_ON, mSimulatedCommands.getRadioState());

        // Turn on APM and verify that both subs are waiting for all data disconnected
        sst.setRadioPower(false);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        assertEquals(TelephonyManager.RADIO_POWER_ON, mSimulatedCommands.getRadioState());
        verify(mDataNetworkController).tearDownAllDataNetworks(
                eq(3 /* TEAR_DOWN_REASON_AIRPLANE_MODE_ON */));
        verify(dataNetworkController_phone2, never()).tearDownAllDataNetworks(anyInt());
        ArgumentCaptor<DataNetworkController.DataNetworkControllerCallback> callback1 =
                ArgumentCaptor.forClass(DataNetworkController.DataNetworkControllerCallback.class);
        ArgumentCaptor<DataNetworkController.DataNetworkControllerCallback> callback2 =
                ArgumentCaptor.forClass(DataNetworkController.DataNetworkControllerCallback.class);
        verify(mDataNetworkController, times(1)).registerDataNetworkControllerCallback(
                callback1.capture());
        verify(dataNetworkController_phone2, times(1)).registerDataNetworkControllerCallback(
                callback2.capture());
        assertTrue(sst.hasMessages(38 /* EVENT_SET_RADIO_POWER_OFF */));

        // Turn off APM while waiting for data to disconnect
        sst.setRadioPower(true);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());

        // Check that radio is on and pending power off messages were cleared
        assertFalse(sst.hasMessages(38 /* EVENT_SET_RADIO_POWER_OFF */));
        verify(mDataNetworkController, times(1)).unregisterDataNetworkControllerCallback(any());
        verify(dataNetworkController_phone2, times(1)).unregisterDataNetworkControllerCallback(
                any());
        assertEquals(TelephonyManager.RADIO_POWER_ON, mSimulatedCommands.getRadioState());
        assertEquals(TelephonyManager.RADIO_POWER_OFF, mSimulatedCommands.getRadioState());
    }

    @Test