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

Commit 937a7a2e authored by Ling Ma's avatar Ling Ma
Browse files

pending tear down check all DNs

Currently, upon APM on, we disallow set up new network if a DNC is in the process of tearing down network. However, it should also disallow set up if the other DNC is in progress of tearing down any networks. Therefore, DNC should check for if there is a global attempt of tearding down all networks on the device.

Fix: 330614714
Test: voice call + data browsing + quickly toggle APM
Test: reporter verified fix
Test: atest

Change-Id: I3e282e15197464ffad00078dc83c09fcee0a5514
parent fd892335
Loading
Loading
Loading
Loading
+3 −14
Original line number Diff line number Diff line
@@ -227,7 +227,6 @@ public class ServiceStateTracker extends Handler {
    private final RegistrantList mAreaCodeChangedRegistrants = new RegistrantList();

    /* Radio power off pending flag */
    // @GuardedBy("this")
    private volatile boolean mPendingRadioPowerOffAfterDataOff = false;

    /** Waiting period before recheck gprs and voice registration. */
@@ -5008,20 +5007,10 @@ public class ServiceStateTracker extends Handler {
    }

    /**
     * process the pending request to turn radio off after data is disconnected
     *
     * return true if there is pending request to process; false otherwise.
     * return true if there is pending disconnect data request to process; false otherwise.
     */
    public boolean processPendingRadioPowerOffAfterDataOff() {
        synchronized(this) {
            if (mPendingRadioPowerOffAfterDataOff) {
                if (DBG) log("Process pending request to turn radio off.");
                hangupAndPowerOff();
                mPendingRadioPowerOffAfterDataOff = false;
                return true;
            }
            return false;
        }
    public boolean isPendingRadioPowerOffAfterDataOff() {
        return mPendingRadioPowerOffAfterDataOff;
    }

    private void onCarrierConfigurationChanged(int slotIndex) {
+2 −11
Original line number Diff line number Diff line
@@ -406,12 +406,6 @@ public class DataNetworkController extends Handler {
    /** Event counter for WWAN setup data failure within time window to trigger anomaly report. */
    private @NonNull SlidingWindowEventCounter mSetupDataCallWwanFailureCounter;

    /**
     * {@code true} if {@link #tearDownAllDataNetworks(int)} was invoked and waiting for all
     * networks torn down.
     */
    private boolean mPendingTearDownAllNetworks = false;

    /**
     * The capabilities of the latest released IMS request. To detect back to back release/request
     * IMS network.
@@ -1635,7 +1629,7 @@ public class DataNetworkController extends Handler {
        }

        // Check if there are pending tear down all networks request.
        if (mPendingTearDownAllNetworks) {
        if (mPhone.getServiceStateTracker().isPendingRadioPowerOffAfterDataOff()) {
            evaluation.addDataDisallowedReason(DataDisallowedReason.PENDING_TEAR_DOWN_ALL);
        }

@@ -2951,7 +2945,6 @@ public class DataNetworkController extends Handler {
        mDataNetworkList.remove(dataNetwork);
        trackSetupDataCallFailure(dataNetwork.getTransport(), cause);
        if (mAnyDataNetworkExisting && mDataNetworkList.isEmpty()) {
            mPendingTearDownAllNetworks = false;
            mAnyDataNetworkExisting = false;
            mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor(
                    () -> callback.onAnyDataNetworkExistingChanged(mAnyDataNetworkExisting)));
@@ -3282,7 +3275,6 @@ public class DataNetworkController extends Handler {

        if (mAnyDataNetworkExisting && mDataNetworkList.isEmpty()) {
            log("All data networks disconnected now.");
            mPendingTearDownAllNetworks = false;
            mAnyDataNetworkExisting = false;
            mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor(
                    () -> callback.onAnyDataNetworkExistingChanged(mAnyDataNetworkExisting)));
@@ -4016,14 +4008,13 @@ public class DataNetworkController extends Handler {
     *
     * @param reason The reason to tear down.
     */
    public void onTearDownAllDataNetworks(@TearDownReason int reason) {
    private void onTearDownAllDataNetworks(@TearDownReason int reason) {
        log("onTearDownAllDataNetworks: reason=" + DataNetwork.tearDownReasonToString(reason));
        if (mDataNetworkList.isEmpty()) {
            log("tearDownAllDataNetworks: No pending networks. All disconnected now.");
            return;
        }

        mPendingTearDownAllNetworks = true;
        for (DataNetwork dataNetwork : mDataNetworkList) {
            if (!dataNetwork.isDisconnecting()) {
                tearDownGracefully(dataNetwork, reason);
+19 −0
Original line number Diff line number Diff line
@@ -5396,4 +5396,23 @@ public class DataNetworkControllerTest extends TelephonyTest {
        verify(mMockedWwanDataServiceManager, never()).deactivateDataCall(anyInt(),
                eq(DataService.REQUEST_REASON_NORMAL), any(Message.class));
    }

    @Test
    public void testRadioOffTearDown() throws Exception  {
        testSetupDataNetwork();
        doReturn(true).when(mSST).isPendingRadioPowerOffAfterDataOff();
        mDataNetworkControllerUT.tearDownAllDataNetworks(
                DataNetwork.TEAR_DOWN_REASON_AIRPLANE_MODE_ON);
        processAllMessages();
        verifyAllDataDisconnected();
        verify(mMockedDataNetworkControllerCallback).onAnyDataNetworkExistingChanged(eq(false));

        clearInvocations(mMockedDataNetworkControllerCallback);
        mDataNetworkControllerUT.addNetworkRequest(
                createNetworkRequest(NetworkCapabilities.NET_CAPABILITY_INTERNET));
        processAllMessages();
        verifyAllDataDisconnected();
        verify(mMockedDataNetworkControllerCallback, never()).onAnyDataNetworkExistingChanged(
                anyBoolean());
    }
}