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

Commit 2a067463 authored by Ling Ma's avatar Ling Ma Committed by Automerger Merge Worker
Browse files

Skip retry delay for handover not allowed by policy am: 53820ce7 am: 7dda68ac

parents 65d73729 7dda68ac
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -264,8 +264,9 @@ public class DataNetwork extends StateMachine {
    private static final int DEFAULT_INTERNET_NETWORK_SCORE = 50;
    private static final int OTHER_NETWORK_SCORE = 45;

    @IntDef(prefix = {"DEACTIVATION_REASON_"},
    @IntDef(prefix = {"TEAR_DOWN_REASON_"},
            value = {
                    TEAR_DOWN_REASON_NONE,
                    TEAR_DOWN_REASON_CONNECTIVITY_SERVICE_UNWANTED,
                    TEAR_DOWN_REASON_SIM_REMOVAL,
                    TEAR_DOWN_REASON_AIRPLANE_MODE_ON,
@@ -298,6 +299,9 @@ public class DataNetwork extends StateMachine {
            })
    public @interface TearDownReason {}

    /** Data network was not torn down. */
    public static final int TEAR_DOWN_REASON_NONE = 0;

    /** Data network tear down requested by connectivity service. */
    public static final int TEAR_DOWN_REASON_CONNECTIVITY_SERVICE_UNWANTED = 1;

@@ -375,7 +379,7 @@ public class DataNetwork extends StateMachine {
    /** Data network tear down due to data profile not preferred. */
    public static final int TEAR_DOWN_REASON_DATA_PROFILE_NOT_PREFERRED = 26;

    /** Data network tear down due to not allowed by policy. */
    /** Data network tear down due to handover not allowed by policy. */
    public static final int TEAR_DOWN_REASON_NOT_ALLOWED_BY_POLICY = 27;

    /** Data network tear down due to illegal state. */
@@ -627,6 +631,11 @@ public class DataNetwork extends StateMachine {
     */
    private @DataFailureCause int mFailCause = DataFailCause.NONE;

    /**
     * The tear down reason if the data call is voluntarily deactivated, not due to failure.
     */
    private @TearDownReason int mTearDownReason = TEAR_DOWN_REASON_NONE;

    /**
     * The retry delay in milliseconds from setup data failure.
     */
@@ -787,9 +796,10 @@ public class DataNetwork extends StateMachine {
         *
         * @param dataNetwork The data network.
         * @param cause The disconnect cause.
         * @param tearDownReason The reason the network was torn down
         */
        public abstract void onDisconnected(@NonNull DataNetwork dataNetwork,
                @DataFailureCause int cause);
                @DataFailureCause int cause, @TearDownReason int tearDownReason);

        /**
         * Called when handover between IWLAN and cellular network succeeded.
@@ -1568,7 +1578,7 @@ public class DataNetwork extends StateMachine {

            if (mEverConnected) {
                mDataNetworkCallback.invokeFromExecutor(() -> mDataNetworkCallback
                        .onDisconnected(DataNetwork.this, mFailCause));
                        .onDisconnected(DataNetwork.this, mFailCause, mTearDownReason));
                if (mTransport == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) {
                    unregisterForWwanEvents();
                }
@@ -2543,6 +2553,7 @@ public class DataNetwork extends StateMachine {
        if (getCurrentState() == null || isDisconnected()) {
            return;
        }
        mTearDownReason = reason;
        sendMessage(obtainMessage(EVENT_TEAR_DOWN_NETWORK, reason));
    }

@@ -3368,6 +3379,8 @@ public class DataNetwork extends StateMachine {
     */
    public static @NonNull String tearDownReasonToString(@TearDownReason int reason) {
        switch (reason) {
            case TEAR_DOWN_REASON_NONE:
                return "NONE";
            case TEAR_DOWN_REASON_CONNECTIVITY_SERVICE_UNWANTED:
                return "CONNECTIVITY_SERVICE_UNWANTED";
            case TEAR_DOWN_REASON_SIM_REMOVAL:
+12 −8
Original line number Diff line number Diff line
@@ -1850,7 +1850,7 @@ public class DataNetworkController extends Handler {
            }
        }

        log("Evaluated " + dataNetwork + ", " + evaluation.toString());
        log("Evaluated " + dataNetwork + ", " + evaluation);
        return evaluation;
    }

@@ -2044,7 +2044,7 @@ public class DataNetworkController extends Handler {
                    return DataNetwork.TEAR_DOWN_REASON_ONLY_ALLOWED_SINGLE_NETWORK;
            }
        }
        return 0;
        return DataNetwork.TEAR_DOWN_REASON_NONE;
    }

    /**
@@ -2486,9 +2486,9 @@ public class DataNetworkController extends Handler {

                    @Override
                    public void onDisconnected(@NonNull DataNetwork dataNetwork,
                            @DataFailureCause int cause) {
                            @DataFailureCause int cause, @TearDownReason int tearDownReason) {
                        DataNetworkController.this.onDataNetworkDisconnected(
                                dataNetwork, cause);
                                dataNetwork, cause, tearDownReason);
                    }

                    @Override
@@ -2821,11 +2821,13 @@ public class DataNetworkController extends Handler {
     *
     * @param dataNetwork The data network.
     * @param cause The disconnect cause.
     * @param tearDownReason The reason the network was torn down
     */
    private void onDataNetworkDisconnected(@NonNull DataNetwork dataNetwork,
            @DataFailureCause int cause) {
            @DataFailureCause int cause, @TearDownReason int tearDownReason) {
        logl("onDataNetworkDisconnected: " + dataNetwork + ", cause="
                + DataFailCause.toString(cause) + "(" + cause + ")");
                + DataFailCause.toString(cause) + "(" + cause + "), tearDownReason="
                + DataNetwork.tearDownReasonToString(tearDownReason));
        mDataNetworkList.remove(dataNetwork);
        mPendingImsDeregDataNetworks.remove(dataNetwork);
        mDataRetryManager.cancelPendingHandoverRetry(dataNetwork);
@@ -2846,11 +2848,13 @@ public class DataNetworkController extends Handler {
                    () -> callback.onAnyDataNetworkExistingChanged(mAnyDataNetworkExisting)));
        }

        // Immediately reestablish on target transport if network was torn down due to policy
        long delayMillis = tearDownReason == DataNetwork.TEAR_DOWN_REASON_HANDOVER_NOT_ALLOWED
                ? 0 : mDataConfigManager.getRetrySetupAfterDisconnectMillis();
        // Sometimes network was unsolicitedly reported lost for reasons. We should re-evaluate
        // and see if data network can be re-established again.
        sendMessageDelayed(obtainMessage(EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS,
                DataEvaluationReason.RETRY_AFTER_DISCONNECTED),
                mDataConfigManager.getRetrySetupAfterDisconnectMillis());
                        DataEvaluationReason.RETRY_AFTER_DISCONNECTED), delayMillis);
    }

    /**
+1 −1
Original line number Diff line number Diff line
@@ -3523,7 +3523,7 @@ public class DataNetworkControllerTest extends TelephonyTest {
    @Test
    public void testHandoverDataNetworkSourceOos() throws Exception {
        testSetupImsDataNetwork();
        // Configured handover is allowed from OOS to 4G/5G/IWLAN.
        // Configured handover is disallowed from OOS to 4G/5G/IWLAN.
        mCarrierConfig.putStringArray(
                CarrierConfigManager.KEY_IWLAN_HANDOVER_POLICY_STRING_ARRAY,
                new String[]{
+7 −7
Original line number Diff line number Diff line
@@ -366,8 +366,7 @@ public class DataNetworkTest extends TelephonyTest {
                .setQosBearerSessions(new ArrayList<>())
                .setTrafficDescriptors(new ArrayList<>())
                .build();
        mDataNetworkUT.sendMessage(7/*EVENT_TEAR_DOWN_NETWORK*/,
                1/*TEAR_DOWN_REASON_CONNECTIVITY_SERVICE_UNWANTED*/);
        mDataNetworkUT.tearDown(1/*TEAR_DOWN_REASON_CONNECTIVITY_SERVICE_UNWANTED*/);
        mDataNetworkUT.sendMessage(8/*EVENT_DATA_STATE_CHANGED*/,
                new AsyncResult(transport, new ArrayList<>(Arrays.asList(response)), null));
        processAllMessages();
@@ -593,7 +592,7 @@ public class DataNetworkTest extends TelephonyTest {
        processAllMessages();

        verify(mDataNetworkCallback).onDisconnected(eq(mDataNetworkUT),
                eq(DataFailCause.RADIO_NOT_AVAILABLE));
                eq(DataFailCause.RADIO_NOT_AVAILABLE), eq(DataNetwork.TEAR_DOWN_REASON_NONE));
    }

    @Test
@@ -851,8 +850,9 @@ public class DataNetworkTest extends TelephonyTest {
                anyInt());
        verify(mMockedWwanDataServiceManager).deactivateDataCall(eq(123),
                eq(DataService.REQUEST_REASON_NORMAL), any(Message.class));
        verify(mDataNetworkCallback).onDisconnected(eq(mDataNetworkUT), eq(
                DataFailCause.EMM_DETACHED));
        verify(mDataNetworkCallback).onDisconnected(eq(mDataNetworkUT),
                eq(DataFailCause.EMM_DETACHED),
                eq(DataNetwork.TEAR_DOWN_REASON_CONNECTIVITY_SERVICE_UNWANTED));

        ArgumentCaptor<PreciseDataConnectionState> pdcsCaptor =
                ArgumentCaptor.forClass(PreciseDataConnectionState.class);
@@ -965,7 +965,7 @@ public class DataNetworkTest extends TelephonyTest {
        verify(mMockedWlanDataServiceManager).deactivateDataCall(eq(123),
                eq(DataService.REQUEST_REASON_NORMAL), any(Message.class));
        verify(mDataNetworkCallback).onDisconnected(eq(mDataNetworkUT), eq(
                DataFailCause.EMM_DETACHED));
                DataFailCause.EMM_DETACHED), anyInt() /* tear down reason */);

        ArgumentCaptor<PreciseDataConnectionState> pdcsCaptor =
                ArgumentCaptor.forClass(PreciseDataConnectionState.class);
@@ -1239,7 +1239,7 @@ public class DataNetworkTest extends TelephonyTest {
        processAllMessages();

        verify(mDataNetworkCallback).onDisconnected(eq(mDataNetworkUT), eq(
                DataFailCause.RADIO_NOT_AVAILABLE));
                DataFailCause.RADIO_NOT_AVAILABLE), eq(DataNetwork.TEAR_DOWN_REASON_NONE));
        assertThat(mDataNetworkUT.isConnected()).isFalse();
    }