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

Commit beed3e79 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Revert "Allow IWLAN network when power off modem"" into udc-d1-dev am: 2c0f49f8

parents 25979025 2c0f49f8
Loading
Loading
Loading
Loading
+23 −27
Original line number Original line Diff line number Diff line
@@ -228,7 +228,7 @@ public class ServiceStateTracker extends Handler {
    public static final int DEFAULT_GPRS_CHECK_PERIOD_MILLIS = 60 * 1000;
    public static final int DEFAULT_GPRS_CHECK_PERIOD_MILLIS = 60 * 1000;


    /**
    /**
     * The timer value to wait for all cellular data networks to be torn down.
     * The timer value to wait for all data networks to be torn down.
     */
     */
    private static final long POWER_OFF_ALL_DATA_NETWORKS_DISCONNECTED_TIMEOUT =
    private static final long POWER_OFF_ALL_DATA_NETWORKS_DISCONNECTED_TIMEOUT =
            TimeUnit.SECONDS.toMillis(10);
            TimeUnit.SECONDS.toMillis(10);
@@ -272,7 +272,7 @@ public class ServiceStateTracker extends Handler {
    protected static final int EVENT_IMS_STATE_CHANGED                 = 46;
    protected static final int EVENT_IMS_STATE_CHANGED                 = 46;
    protected static final int EVENT_IMS_STATE_DONE                    = 47;
    protected static final int EVENT_IMS_STATE_DONE                    = 47;
    protected static final int EVENT_IMS_CAPABILITY_CHANGED            = 48;
    protected static final int EVENT_IMS_CAPABILITY_CHANGED            = 48;
    protected static final int EVENT_ALL_CELLULAR_DATA_DISCONNECTED = 49;
    protected static final int EVENT_ALL_DATA_DISCONNECTED             = 49;
    protected static final int EVENT_PHONE_TYPE_SWITCHED               = 50;
    protected static final int EVENT_PHONE_TYPE_SWITCHED               = 50;
    protected static final int EVENT_RADIO_POWER_FROM_CARRIER          = 51;
    protected static final int EVENT_RADIO_POWER_FROM_CARRIER          = 51;
    protected static final int EVENT_IMS_SERVICE_STATE_CHANGED         = 53;
    protected static final int EVENT_IMS_SERVICE_STATE_CHANGED         = 53;
@@ -605,11 +605,11 @@ public class ServiceStateTracker extends Handler {
    private int mLastKnownAreaCode = CellInfo.UNAVAILABLE;
    private int mLastKnownAreaCode = CellInfo.UNAVAILABLE;


    /**
    /**
     * Data network controller callback for all cellular data disconnected. This is used when
     * Data network controller callback for all data disconnected. This is used when turning on
     * turning on airplane mode, where service state tracker should wait for all cellular data
     * airplane mode, where service state tracker should wait for all data disconnected on all
     * disconnected on all subscriptions before powering down the modem.
     * subscriptions before powering down the modem.
     */
     */
    private DataNetworkControllerCallback mAllCellularDataDisconnectedCallback;
    private DataNetworkControllerCallback mDataDisconnectedCallback;


    /**
    /**
     * AccessNetworksManagerCallback is used for preferred on the IWLAN when preferred transport
     * AccessNetworksManagerCallback is used for preferred on the IWLAN when preferred transport
@@ -715,13 +715,12 @@ public class ServiceStateTracker extends Handler {
        registerForImsCapabilityChanged(mCSST,
        registerForImsCapabilityChanged(mCSST,
                CarrierServiceStateTracker.CARRIER_EVENT_IMS_CAPABILITIES_CHANGED, null);
                CarrierServiceStateTracker.CARRIER_EVENT_IMS_CAPABILITIES_CHANGED, null);


        mAllCellularDataDisconnectedCallback = new DataNetworkControllerCallback(this::post) {
        mDataDisconnectedCallback = new DataNetworkControllerCallback(this::post) {
            @Override
            @Override
            public void onAnyCellularDataNetworkExistingChanged(boolean anyCellularDataExisting) {
            public void onAnyDataNetworkExistingChanged(boolean anyDataExisting) {
                log("onAnyCellularDataNetworkExistingChanged: anyCellularDataExisting="
                log("onAnyDataNetworkExistingChanged: anyDataExisting=" + anyDataExisting);
                        + anyCellularDataExisting);
                if (!anyDataExisting) {
                if (!anyCellularDataExisting) {
                    sendEmptyMessage(EVENT_ALL_DATA_DISCONNECTED);
                    sendEmptyMessage(EVENT_ALL_CELLULAR_DATA_DISCONNECTED);
                }
                }
            }
            }
        };
        };
@@ -1202,7 +1201,7 @@ public class ServiceStateTracker extends Handler {
            case EVENT_SET_RADIO_POWER_OFF:
            case EVENT_SET_RADIO_POWER_OFF:
                synchronized(this) {
                synchronized(this) {
                    mPendingRadioPowerOffAfterDataOff = false;
                    mPendingRadioPowerOffAfterDataOff = false;
                    log("Wait for all cellular data networks torn down timed out. Power off now.");
                    log("Wait for all data networks torn down timed out. Power off now.");
                    hangupAndPowerOff();
                    hangupAndPowerOff();
                }
                }
                break;
                break;
@@ -1470,18 +1469,18 @@ public class ServiceStateTracker extends Handler {
                }
                }
                break;
                break;


            case EVENT_ALL_CELLULAR_DATA_DISCONNECTED:
            case EVENT_ALL_DATA_DISCONNECTED:
                log("EVENT_ALL_CELLULAR_DATA_DISCONNECTED");
                log("EVENT_ALL_DATA_DISCONNECTED");
                synchronized (this) {
                synchronized (this) {
                    if (!mPendingRadioPowerOffAfterDataOff) return;
                    if (!mPendingRadioPowerOffAfterDataOff) return;
                    boolean areAllDataDisconnectedOnAllPhones = true;
                    boolean areAllDataDisconnectedOnAllPhones = true;
                    for (Phone phone : PhoneFactory.getPhones()) {
                    for (Phone phone : PhoneFactory.getPhones()) {
                        if (phone.getDataNetworkController().areAllCellularDataDisconnected()) {
                        if (phone.getDataNetworkController().areAllDataDisconnected()) {
                            phone.getDataNetworkController()
                            phone.getDataNetworkController()
                                .unregisterDataNetworkControllerCallback(
                                .unregisterDataNetworkControllerCallback(
                                        mAllCellularDataDisconnectedCallback);
                                        mDataDisconnectedCallback);
                        } else {
                        } else {
                            log("Still waiting for all cellular data disconnected on phone: "
                            log("Still waiting for all data disconnected on phone: "
                                    + phone.getSubId());
                                    + phone.getSubId());
                            areAllDataDisconnectedOnAllPhones = false;
                            areAllDataDisconnectedOnAllPhones = false;
                        }
                        }
@@ -4964,17 +4963,17 @@ public class ServiceStateTracker extends Handler {
                }
                }


                for (Phone phone : PhoneFactory.getPhones()) {
                for (Phone phone : PhoneFactory.getPhones()) {
                    if (!phone.getDataNetworkController().areAllCellularDataDisconnected()) {
                    if (!phone.getDataNetworkController().areAllDataDisconnected()) {
                        log("powerOffRadioSafely: Data is active on phone " + phone.getSubId()
                        log("powerOffRadioSafely: Data is active on phone " + phone.getSubId()
                                + ". Wait for all cellular data disconnect.");
                                + ". Wait for all data disconnect.");
                        mPendingRadioPowerOffAfterDataOff = true;
                        mPendingRadioPowerOffAfterDataOff = true;
                        phone.getDataNetworkController().registerDataNetworkControllerCallback(
                        phone.getDataNetworkController().registerDataNetworkControllerCallback(
                                mAllCellularDataDisconnectedCallback);
                                mDataDisconnectedCallback);
                    }
                    }
                }
                }


                // Tear down outside of the disconnected check to prevent race conditions.
                // Tear down outside of the disconnected check to prevent race conditions.
                mPhone.getDataNetworkController().tearDownAllCellularDataNetworks(
                mPhone.getDataNetworkController().tearDownAllDataNetworks(
                        DataNetwork.TEAR_DOWN_REASON_AIRPLANE_MODE_ON);
                        DataNetwork.TEAR_DOWN_REASON_AIRPLANE_MODE_ON);


                if (mPendingRadioPowerOffAfterDataOff) {
                if (mPendingRadioPowerOffAfterDataOff) {
@@ -5032,11 +5031,8 @@ public class ServiceStateTracker extends Handler {
     */
     */
    protected void hangupAndPowerOff() {
    protected void hangupAndPowerOff() {
        if (mCi.getRadioState() == TelephonyManager.RADIO_POWER_OFF) return;
        if (mCi.getRadioState() == TelephonyManager.RADIO_POWER_OFF) return;
        // hang up all active non-WFC voice calls
        // hang up all active voice calls
        boolean isWfc = mPhone.getImsRegistrationTech() == ImsRegistrationImplBase
        if (!mPhone.isPhoneTypeGsm() || mPhone.isInCall()) {
                .REGISTRATION_TECH_IWLAN;
        if (isWfc) log("hangupAndPowerOff: VoWifi registered.");
        if ((!mPhone.isPhoneTypeGsm() || mPhone.isInCall()) && !isWfc) {
            mPhone.mCT.mRingingCall.hangupIfAlive();
            mPhone.mCT.mRingingCall.hangupIfAlive();
            mPhone.mCT.mBackgroundCall.hangupIfAlive();
            mPhone.mCT.mBackgroundCall.hangupIfAlive();
            mPhone.mCT.mForegroundCall.hangupIfAlive();
            mPhone.mCT.mForegroundCall.hangupIfAlive();
+0 −8
Original line number Original line Diff line number Diff line
@@ -812,12 +812,6 @@ public class DataNetwork extends StateMachine {
        public abstract void onDisconnected(@NonNull DataNetwork dataNetwork,
        public abstract void onDisconnected(@NonNull DataNetwork dataNetwork,
                @DataFailureCause int cause, @TearDownReason int tearDownReason);
                @DataFailureCause int cause, @TearDownReason int tearDownReason);


        /**
         * Called when handover between IWLAN and cellular network started.
         * @param dataNetwork The data network.
         */
        public abstract void onHandoverStarted(@NonNull DataNetwork dataNetwork);

        /**
        /**
         * Called when handover between IWLAN and cellular network succeeded.
         * Called when handover between IWLAN and cellular network succeeded.
         *
         *
@@ -1453,8 +1447,6 @@ public class DataNetwork extends StateMachine {
            sendMessageDelayed(EVENT_STUCK_IN_TRANSIENT_STATE,
            sendMessageDelayed(EVENT_STUCK_IN_TRANSIENT_STATE,
                    mDataConfigManager.getNetworkHandoverTimeoutMs());
                    mDataConfigManager.getNetworkHandoverTimeoutMs());
            notifyPreciseDataConnectionState();
            notifyPreciseDataConnectionState();
            mDataNetworkCallback.invokeFromExecutor(
                    () -> mDataNetworkCallback.onHandoverStarted(DataNetwork.this));
        }
        }


        @Override
        @Override
+78 −151

File changed.

Preview size limit exceeded, changes collapsed.

+9 −42
Original line number Original line Diff line number Diff line
@@ -29,7 +29,6 @@ import static org.mockito.Matchers.nullable;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.never;
@@ -261,7 +260,7 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        doReturn(mIwlanNetworkServiceStub).when(mIwlanNetworkServiceStub).asBinder();
        doReturn(mIwlanNetworkServiceStub).when(mIwlanNetworkServiceStub).asBinder();
        addNetworkService();
        addNetworkService();


        doReturn(true).when(mDataNetworkController).areAllCellularDataDisconnected();
        doReturn(true).when(mDataNetworkController).areAllDataDisconnected();


        doReturn(new ServiceState()).when(mPhone).getServiceState();
        doReturn(new ServiceState()).when(mPhone).getServiceState();


@@ -420,8 +419,8 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
        replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
        doReturn(dataNetworkController_phone2).when(phone2).getDataNetworkController();
        doReturn(dataNetworkController_phone2).when(phone2).getDataNetworkController();
        doReturn(mSST).when(phone2).getServiceStateTracker();
        doReturn(mSST).when(phone2).getServiceStateTracker();
        doReturn(false).when(mDataNetworkController).areAllCellularDataDisconnected();
        doReturn(false).when(mDataNetworkController).areAllDataDisconnected();
        doReturn(false).when(dataNetworkController_phone2).areAllCellularDataDisconnected();
        doReturn(false).when(dataNetworkController_phone2).areAllDataDisconnected();
        doReturn(1).when(mPhone).getSubId();
        doReturn(1).when(mPhone).getSubId();
        doReturn(2).when(phone2).getSubId();
        doReturn(2).when(phone2).getSubId();


@@ -434,9 +433,9 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        sst.setRadioPower(false);
        sst.setRadioPower(false);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        assertEquals(TelephonyManager.RADIO_POWER_ON, mSimulatedCommands.getRadioState());
        assertEquals(TelephonyManager.RADIO_POWER_ON, mSimulatedCommands.getRadioState());
        verify(mDataNetworkController).tearDownAllCellularDataNetworks(
        verify(mDataNetworkController).tearDownAllDataNetworks(
                eq(3 /* TEAR_DOWN_REASON_AIRPLANE_MODE_ON */));
                eq(3 /* TEAR_DOWN_REASON_AIRPLANE_MODE_ON */));
        verify(dataNetworkController_phone2, never()).tearDownAllCellularDataNetworks(anyInt());
        verify(dataNetworkController_phone2, never()).tearDownAllDataNetworks(anyInt());
        ArgumentCaptor<DataNetworkController.DataNetworkControllerCallback> callback1 =
        ArgumentCaptor<DataNetworkController.DataNetworkControllerCallback> callback1 =
                ArgumentCaptor.forClass(DataNetworkController.DataNetworkControllerCallback.class);
                ArgumentCaptor.forClass(DataNetworkController.DataNetworkControllerCallback.class);
        ArgumentCaptor<DataNetworkController.DataNetworkControllerCallback> callback2 =
        ArgumentCaptor<DataNetworkController.DataNetworkControllerCallback> callback2 =
@@ -447,16 +446,16 @@ public class ServiceStateTrackerTest extends TelephonyTest {
                callback2.capture());
                callback2.capture());


        // Data disconnected on sub 2, still waiting for data disconnected on sub 1
        // Data disconnected on sub 2, still waiting for data disconnected on sub 1
        doReturn(true).when(dataNetworkController_phone2).areAllCellularDataDisconnected();
        doReturn(true).when(dataNetworkController_phone2).areAllDataDisconnected();
        callback2.getValue().onAnyCellularDataNetworkExistingChanged(false);
        callback2.getValue().onAnyDataNetworkExistingChanged(false);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        assertEquals(TelephonyManager.RADIO_POWER_ON, mSimulatedCommands.getRadioState());
        assertEquals(TelephonyManager.RADIO_POWER_ON, mSimulatedCommands.getRadioState());
        verify(dataNetworkController_phone2, times(1)).unregisterDataNetworkControllerCallback(
        verify(dataNetworkController_phone2, times(1)).unregisterDataNetworkControllerCallback(
                any());
                any());


        // Data disconnected on sub 1, radio should power off now
        // Data disconnected on sub 1, radio should power off now
        doReturn(true).when(mDataNetworkController).areAllCellularDataDisconnected();
        doReturn(true).when(mDataNetworkController).areAllDataDisconnected();
        callback1.getValue().onAnyCellularDataNetworkExistingChanged(false);
        callback1.getValue().onAnyDataNetworkExistingChanged(false);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        verify(mDataNetworkController, times(1)).unregisterDataNetworkControllerCallback(any());
        verify(mDataNetworkController, times(1)).unregisterDataNetworkControllerCallback(any());
        assertEquals(TelephonyManager.RADIO_POWER_OFF, mSimulatedCommands.getRadioState());
        assertEquals(TelephonyManager.RADIO_POWER_OFF, mSimulatedCommands.getRadioState());
@@ -575,38 +574,6 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        assertTrue(mSimulatedCommands.getRadioState() == expectedRadioPowerState);
        assertTrue(mSimulatedCommands.getRadioState() == expectedRadioPowerState);
    }
    }


    @Test
    public void testSetRadioPowerForReasonKeepsWfc() {
        mPhone.mCT = mCT;
        mCT.mRingingCall = mGsmCdmaCall;
        mCT.mBackgroundCall = mGsmCdmaCall;
        mCT.mForegroundCall = mGsmCdmaCall;
        doReturn(false).when(mPhone).isPhoneTypeGsm();

        sst.updatePhoneType();

        // Regular power off leads to call drop
        sst.setRadioPower(true);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());

        clearInvocations(mGsmCdmaCall);
        sst.setRadioPower(false);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        verify(mGsmCdmaCall, times(3)).hangupIfAlive();

        // Any WFC should be kept
        sst.setRadioPower(true);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());

        clearInvocations(mGsmCdmaCall);
        doReturn(ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN).when(mPhone)
                .getImsRegistrationTech();

        sst.setRadioPower(false);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        verify(mGsmCdmaCall, never()).hangupIfAlive();
    }

    @Test
    @Test
    @MediumTest
    @MediumTest
    public void testSetRadioPowerForReasonCarrier() {
    public void testSetRadioPowerForReasonCarrier() {
+0 −1
Original line number Original line Diff line number Diff line
@@ -539,7 +539,6 @@ public abstract class TelephonyTest {
                .queryLocalInterface(anyString());
                .queryLocalInterface(anyString());


        mPhone.mCi = mSimulatedCommands;
        mPhone.mCi = mSimulatedCommands;
        mPhone.mCT = mCT;
        mCT.mCi = mSimulatedCommands;
        mCT.mCi = mSimulatedCommands;
        doReturn(mUiccCard).when(mPhone).getUiccCard();
        doReturn(mUiccCard).when(mPhone).getUiccCard();
        doReturn(mUiccCard).when(mUiccSlot).getUiccCard();
        doReturn(mUiccCard).when(mUiccSlot).getUiccCard();
Loading