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

Commit 0c22cfac authored by Ling Ma's avatar Ling Ma
Browse files

Delay Auto data switch check to allow data reg state to propagate

To prevent the race condition of data registration state, send an event
to allow data reg state to be processed by datanetworkcontroller

Bug: 244064524
Test: manual toggle APM + toggle WIFI
Change-Id: I81fcee3c65b72729fadf4216afc5365c464d4abd
parent 0aefbf18
Loading
Loading
Loading
Loading
+10 −5
Original line number Original line Diff line number Diff line
@@ -406,7 +406,9 @@ public class PhoneSwitcher extends Handler {
        @Override
        @Override
        public void onLost(Network network) {
        public void onLost(Network network) {
            // try find an active sub to switch to
            // try find an active sub to switch to
            scheduleAutoSwitchEvaluation();
            if (!hasMessages(EVENT_EVALUATE_AUTO_SWITCH)) {
                sendEmptyMessage(EVENT_EVALUATE_AUTO_SWITCH);
            }
        }
        }
    }
    }


@@ -1100,7 +1102,9 @@ public class PhoneSwitcher extends Handler {
                mPhoneStates[phoneId].dataRegState = newRegState;
                mPhoneStates[phoneId].dataRegState = newRegState;
                logl("onServiceStateChanged:phoneId:" + phoneId + " dataReg-> "
                logl("onServiceStateChanged:phoneId:" + phoneId + " dataReg-> "
                        + NetworkRegistrationInfo.registrationStateToString(newRegState));
                        + NetworkRegistrationInfo.registrationStateToString(newRegState));
                evaluateIfAutoSwitchIsNeeded();
                if (!hasMessages(EVENT_EVALUATE_AUTO_SWITCH)) {
                    sendEmptyMessage(EVENT_EVALUATE_AUTO_SWITCH);
                }
            }
            }
        }
        }
    }
    }
@@ -1111,6 +1115,7 @@ public class PhoneSwitcher extends Handler {
    private void evaluateIfAutoSwitchIsNeeded() {
    private void evaluateIfAutoSwitchIsNeeded() {
        // auto data switch feature is disabled from server
        // auto data switch feature is disabled from server
        if (mAutoDataSwitchAvailabilityStabilityTimeThreshold < 0) return;
        if (mAutoDataSwitchAvailabilityStabilityTimeThreshold < 0) return;
        // check is valid DSDS
        if (!mSubscriptionController.isActiveSubId(mPrimaryDataSubId)
        if (!mSubscriptionController.isActiveSubId(mPrimaryDataSubId)
                || mSubscriptionController.getActiveSubIdList(true).length <= 1) {
                || mSubscriptionController.getActiveSubIdList(true).length <= 1) {
            return;
            return;
@@ -1718,7 +1723,7 @@ public class PhoneSwitcher extends Handler {
     */
     */
    private void validate(int subId, boolean needValidation, int switchReason,
    private void validate(int subId, boolean needValidation, int switchReason,
            @Nullable ISetOpportunisticDataCallback callback) {
            @Nullable ISetOpportunisticDataCallback callback) {
        logl("Validate " + subId + " due to " + switchReasonToString(switchReason)
        logl("Validate subId " + subId + " due to " + switchReasonToString(switchReason)
                + " needValidation=" + needValidation);
                + " needValidation=" + needValidation);
        int subIdToValidate = (subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)
        int subIdToValidate = (subId == SubscriptionManager.DEFAULT_SUBSCRIPTION_ID)
                ? mPrimaryDataSubId : subId;
                ? mPrimaryDataSubId : subId;
@@ -1827,7 +1832,7 @@ public class PhoneSwitcher extends Handler {


            // retry for auto data switch validation failure
            // retry for auto data switch validation failure
            if (mLastAutoSelectedSwitchReason == DataSwitch.Reason.DATA_SWITCH_REASON_AUTO) {
            if (mLastAutoSelectedSwitchReason == DataSwitch.Reason.DATA_SWITCH_REASON_AUTO) {
                scheduleAutoSwitchEvaluation();
                scheduleAutoSwitchRetryEvaluation();
                mAutoSwitchRetryFailedCount++;
                mAutoSwitchRetryFailedCount++;
            }
            }
        } else {
        } else {
@@ -1849,7 +1854,7 @@ public class PhoneSwitcher extends Handler {
    /**
    /**
     * Schedule auto data switch evaluation retry if haven't reached the max retry count.
     * Schedule auto data switch evaluation retry if haven't reached the max retry count.
     */
     */
    private void scheduleAutoSwitchEvaluation() {
    private void scheduleAutoSwitchRetryEvaluation() {
        if (mAutoSwitchRetryFailedCount < mAutoDataSwitchValidationMaxRetry) {
        if (mAutoSwitchRetryFailedCount < mAutoDataSwitchValidationMaxRetry) {
            if (!hasMessages(EVENT_EVALUATE_AUTO_SWITCH)) {
            if (!hasMessages(EVENT_EVALUATE_AUTO_SWITCH)) {
                sendMessageDelayed(obtainMessage(EVENT_EVALUATE_AUTO_SWITCH),
                sendMessageDelayed(obtainMessage(EVENT_EVALUATE_AUTO_SWITCH),