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

Commit 2ab1fe59 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 2b6a99f3 2c0f49f8
Loading
Loading
Loading
Loading
+23 −27
Original line number Diff line number Diff line
@@ -229,7 +229,7 @@ public class ServiceStateTracker extends Handler {
    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 =
            TimeUnit.SECONDS.toMillis(10);
@@ -273,7 +273,7 @@ public class ServiceStateTracker extends Handler {
    protected static final int EVENT_IMS_STATE_CHANGED                 = 46;
    protected static final int EVENT_IMS_STATE_DONE                    = 47;
    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_RADIO_POWER_FROM_CARRIER          = 51;
    protected static final int EVENT_IMS_SERVICE_STATE_CHANGED         = 53;
@@ -611,11 +611,11 @@ public class ServiceStateTracker extends Handler {
    private int mLastKnownAreaCode = CellInfo.UNAVAILABLE;

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

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

        mAllCellularDataDisconnectedCallback = new DataNetworkControllerCallback(this::post) {
        mDataDisconnectedCallback = new DataNetworkControllerCallback(this::post) {
            @Override
            public void onAnyCellularDataNetworkExistingChanged(boolean anyCellularDataExisting) {
                log("onAnyCellularDataNetworkExistingChanged: anyCellularDataExisting="
                        + anyCellularDataExisting);
                if (!anyCellularDataExisting) {
                    sendEmptyMessage(EVENT_ALL_CELLULAR_DATA_DISCONNECTED);
            public void onAnyDataNetworkExistingChanged(boolean anyDataExisting) {
                log("onAnyDataNetworkExistingChanged: anyDataExisting=" + anyDataExisting);
                if (!anyDataExisting) {
                    sendEmptyMessage(EVENT_ALL_DATA_DISCONNECTED);
                }
            }
        };
@@ -1208,7 +1207,7 @@ public class ServiceStateTracker extends Handler {
            case EVENT_SET_RADIO_POWER_OFF:
                synchronized(this) {
                    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();
                }
                break;
@@ -1476,18 +1475,18 @@ public class ServiceStateTracker extends Handler {
                }
                break;

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

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

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

                if (mPendingRadioPowerOffAfterDataOff) {
@@ -5046,11 +5045,8 @@ public class ServiceStateTracker extends Handler {
     */
    protected void hangupAndPowerOff() {
        if (mCi.getRadioState() == TelephonyManager.RADIO_POWER_OFF) return;
        // hang up all active non-WFC voice calls
        boolean isWfc = mPhone.getImsRegistrationTech() == ImsRegistrationImplBase
                .REGISTRATION_TECH_IWLAN;
        if (isWfc) log("hangupAndPowerOff: VoWifi registered.");
        if ((!mPhone.isPhoneTypeGsm() || mPhone.isInCall()) && !isWfc) {
        // hang up all active voice calls
        if (!mPhone.isPhoneTypeGsm() || mPhone.isInCall()) {
            mPhone.mCT.mRingingCall.hangupIfAlive();
            mPhone.mCT.mBackgroundCall.hangupIfAlive();
            mPhone.mCT.mForegroundCall.hangupIfAlive();
+0 −8
Original line number Diff line number Diff line
@@ -812,12 +812,6 @@ public class DataNetwork extends StateMachine {
        public abstract void onDisconnected(@NonNull DataNetwork dataNetwork,
                @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.
         *
@@ -1453,8 +1447,6 @@ public class DataNetwork extends StateMachine {
            sendMessageDelayed(EVENT_STUCK_IN_TRANSIENT_STATE,
                    mDataConfigManager.getNetworkHandoverTimeoutMs());
            notifyPreciseDataConnectionState();
            mDataNetworkCallback.invokeFromExecutor(
                    () -> mDataNetworkCallback.onHandoverStarted(DataNetwork.this));
        }

        @Override
+78 −151

File changed.

Preview size limit exceeded, changes collapsed.

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

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

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

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

@@ -445,9 +444,9 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        sst.setRadioPower(false);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        assertEquals(TelephonyManager.RADIO_POWER_ON, mSimulatedCommands.getRadioState());
        verify(mDataNetworkController).tearDownAllCellularDataNetworks(
        verify(mDataNetworkController).tearDownAllDataNetworks(
                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.forClass(DataNetworkController.DataNetworkControllerCallback.class);
        ArgumentCaptor<DataNetworkController.DataNetworkControllerCallback> callback2 =
@@ -458,16 +457,16 @@ public class ServiceStateTrackerTest extends TelephonyTest {
                callback2.capture());

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

        // Data disconnected on sub 1, radio should power off now
        doReturn(true).when(mDataNetworkController).areAllCellularDataDisconnected();
        callback1.getValue().onAnyCellularDataNetworkExistingChanged(false);
        doReturn(true).when(mDataNetworkController).areAllDataDisconnected();
        callback1.getValue().onAnyDataNetworkExistingChanged(false);
        waitForLastHandlerAction(mSSTTestHandler.getThreadHandler());
        verify(mDataNetworkController, times(1)).unregisterDataNetworkControllerCallback(any());
        assertEquals(TelephonyManager.RADIO_POWER_OFF, mSimulatedCommands.getRadioState());
@@ -586,38 +585,6 @@ public class ServiceStateTrackerTest extends TelephonyTest {
        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
    @MediumTest
    public void testSetRadioPowerForReasonCarrier() {
+0 −1
Original line number Diff line number Diff line
@@ -541,7 +541,6 @@ public abstract class TelephonyTest {
                .queryLocalInterface(anyString());

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