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

Commit 7fedd15f authored by Jack Yu's avatar Jack Yu Committed by Android (Google) Code Review
Browse files

Merge "Support preferred data profile correctly"

parents deeca16a f22b2f86
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.telephony.data.ApnSetting;
import android.text.TextUtils;
import android.util.IndentingPrintWriter;

import com.android.internal.R;
@@ -813,6 +814,15 @@ public class DataConfigManager extends Handler {
            CarrierConfigManager.KEY_DATA_STALL_RECOVERY_SHOULD_SKIP_BOOL_ARRAY);
    }

    /**
     * @return The default preferred APN. An empty string if not configured. This is used for the
     * first time boot up where preferred APN is not set.
     */
    public @NonNull String getDefaultPreferredApn() {
        return TextUtils.emptyIfNull(mCarrierConfig.getString(
                CarrierConfigManager.KEY_DEFAULT_PREFERRED_APN_NAME_STRING));
    }

    /**
     * Registration point for subscription info ready
     *
+6 −2
Original line number Diff line number Diff line
@@ -182,7 +182,7 @@ public class DataEvaluation {
        /** When emergency call started or ended. */
        EMERGENCY_CALL_CHANGED,
        /** When data disconnected, re-evaluate later to see if data could be brought up again. */
        DATA_NETWORK_DISCONNECTED,
        RETRY_AFTER_DISCONNECTED,
        /** Data setup retry. */
        DATA_RETRY,
    }
@@ -225,7 +225,11 @@ public class DataEvaluation {
        /** There is already a retry setup scheduled for this data profile. */
        RETRY_SCHEDULED(true),
        /** Network has explicitly request to throttle setup attempt. */
        DATA_THROTTLED(true);
        DATA_THROTTLED(true),
        /** Data profile becomes invalid. (could be removed by the user, or SIM refresh, etc..) */
        DATA_PROFILE_INVALID(true),
        /** Data profile not preferred (i.e. users switch preferred profile in APN editor.) */
        DATA_PROFILE_NOT_PREFERRED(true);

        private final boolean mIsHardReason;

+2 −2
Original line number Diff line number Diff line
@@ -1880,7 +1880,7 @@ public class DataNetwork extends StateMachine {
    /**
     * @return {@code true} if in handover state.
     */
    public boolean isUnderHandover() {
    public boolean isHandoverInProgress() {
        return getCurrentState() == mHandoverState;
    }

@@ -1912,7 +1912,7 @@ public class DataNetwork extends StateMachine {
            return TelephonyManager.DATA_CONNECTED;
        } else if (isDisconnecting()) {
            return TelephonyManager.DATA_DISCONNECTING;
        } else if (isUnderHandover()) {
        } else if (isHandoverInProgress()) {
            return TelephonyManager.DATA_HANDOVER_IN_PROGRESS;
        }

+51 −25
Original line number Diff line number Diff line
@@ -145,9 +145,6 @@ public class DataNetworkController extends Handler {
    /** Event for SIM state changed. */
    private static final int EVENT_SIM_STATE_CHANGED = 9;

    /** Event for data profile changed. */
    private static final int EVENT_DATA_PROFILES_CHANGED = 10;

    /** Event for tearing down all data networks. */
    private static final int EVENT_TEAR_DOWN_ALL_DATA_NETWORKS = 12;

@@ -461,8 +458,13 @@ public class DataNetworkController extends Handler {
        public void onInternetDataNetworkValidationStatusChanged(
                @ValidationStatus int validationStatus) {}

        /** Called when internet data network is connected. */
        public void onInternetDataNetworkConnected() {}
        /**
         * Called when internet data network is connected.
         *
         * @param dataProfiles The data profiles of the connected internet data network. It should
         * be only one in most of the cases.
         */
        public void onInternetDataNetworkConnected(@NonNull List<DataProfile> dataProfiles) {}

        /** Called when internet data network is disconnected. */
        public void onInternetDataNetworkDisconnected() {}
@@ -677,7 +679,10 @@ public class DataNetworkController extends Handler {
                new DataProfileManagerCallback(this::post) {
                    @Override
                    public void onDataProfilesChanged() {
                        DataNetworkController.this.onDataStallReestablishInternet();
                        sendMessage(obtainMessage(EVENT_REEVALUATE_EXISTING_DATA_NETWORKS,
                                DataEvaluationReason.DATA_PROFILES_CHANGED));
                        sendMessage(obtainMessage(EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS,
                                DataEvaluationReason.DATA_PROFILES_CHANGED));
                    }
                });
        mDataStallRecoveryManager = new DataStallRecoveryManager(mPhone, this, mDataServiceManagers
@@ -829,12 +834,6 @@ public class DataNetworkController extends Handler {
                int simState = msg.arg1;
                onSimStateChanged(simState);
                break;
            case EVENT_DATA_PROFILES_CHANGED:
                sendMessage(obtainMessage(EVENT_REEVALUATE_EXISTING_DATA_NETWORKS,
                        DataEvaluationReason.DATA_PROFILES_CHANGED));
                sendMessage(obtainMessage(EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS,
                        DataEvaluationReason.DATA_PROFILES_CHANGED));
                break;
            case EVENT_TEAR_DOWN_ALL_DATA_NETWORKS:
                onTearDownAllDataNetworks(msg.arg1);
                break;
@@ -1128,7 +1127,8 @@ public class DataNetworkController extends Handler {
        if (dataProfile == null) {
            evaluation.addDataDisallowedReason(DataDisallowedReason.NO_SUITABLE_DATA_PROFILE);
        } else if (reason == DataEvaluationReason.NEW_REQUEST
                && mDataRetryManager.isAnySetupRetryScheduled(dataProfile)) {
                && (mDataRetryManager.isAnySetupRetryScheduled(dataProfile)
                || mDataRetryManager.isSimilarNetworkRequestRetryScheduled(networkRequest))) {
            // If this is a new request, check if there is any retry already scheduled. For all
            // other evaluation reasons, since they are all condition changes, so if there is any
            // retry scheduled, we still want to go ahead and setup the data network.
@@ -1277,6 +1277,18 @@ public class DataNetworkController extends Handler {
            evaluation.addDataDisallowedReason(DataDisallowedReason.DATA_DISABLED);
        }

        // Check if the data profile is still valid, sometimes the users can remove it from the APN
        // editor.
        if (!mDataProfileManager.isDataProfileValid(dataProfile)) {
            evaluation.addDataDisallowedReason(DataDisallowedReason.DATA_PROFILE_INVALID);
        }

        // If users switch preferred profile in APN editor, we need to tear down network.
        if (dataNetwork.isInternetSupported()
                && !mDataProfileManager.isDataProfilePreferred(dataProfile)) {
            evaluation.addDataDisallowedReason(DataDisallowedReason.DATA_PROFILE_NOT_PREFERRED);
        }

        if (evaluation.isDataAllowed()) {
            evaluation.addDataAllowedReason(DataAllowedReason.NORMAL);
        }
@@ -1740,8 +1752,14 @@ public class DataNetworkController extends Handler {
    private void onDataNetworkSetupRetry(@NonNull DataSetupRetryEntry dataSetupRetryEntry) {
        TelephonyNetworkRequest telephonyNetworkRequest =
                dataSetupRetryEntry.networkRequestList.get(0);
        if (!mAllNetworkRequestList.contains(telephonyNetworkRequest)) {
            log("onDataNetworkSetupRetry: " + telephonyNetworkRequest + " no longer in the list.");
        // Since this is a retry, the network request might be already removed. So we need to double
        // check and remove request if necessary.
        dataSetupRetryEntry.networkRequestList.removeIf(
                networkRequest -> !mAllNetworkRequestList.contains(networkRequest));

        if (dataSetupRetryEntry.networkRequestList.isEmpty()) {
            log("onDataNetworkSetupRetry: all network requests in the retry entry has been "
                    + "released. Retry cancelled.");
            dataSetupRetryEntry.setState(DataRetryEntry.RETRY_STATE_CANCELLED);
            return;
        }
@@ -1761,7 +1779,11 @@ public class DataNetworkController extends Handler {
        DataEvaluation evaluation = evaluateNetworkRequest(
                telephonyNetworkRequest, DataEvaluationReason.DATA_RETRY);
        if (evaluation.isDataAllowed()) {
            setupDataNetwork(dataSetupRetryEntry.dataProfile, dataSetupRetryEntry);
            DataProfile dataProfile = dataSetupRetryEntry.dataProfile;
            if (dataProfile == null) {
                dataProfile = evaluation.getCandidateDataProfile();
            }
            setupDataNetwork(dataProfile, dataSetupRetryEntry);
        }
    }

@@ -1887,9 +1909,9 @@ public class DataNetworkController extends Handler {

        // Sometimes network was unsolicitedly reported lost for reasons. We should re-evaluate
        // and see if data network can be re-established again.
        //TODO: Add some dalays here
        sendMessage(obtainMessage(EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS,
                DataEvaluationReason.DATA_NETWORK_DISCONNECTED));
        sendMessageDelayed(obtainMessage(EVENT_REEVALUATE_UNSATISFIED_NETWORK_REQUESTS,
                DataEvaluationReason.RETRY_AFTER_DISCONNECTED),
                mDataConfigManager.getRetrySetupAfterDisconnectMillis());
    }

    /**
@@ -2176,11 +2198,12 @@ public class DataNetworkController extends Handler {
    private void updateOverallInternetDataState() {
        boolean anyInternetConnected = mDataNetworkList.stream()
                .anyMatch(dataNetwork -> dataNetwork.isInternetSupported()
                        && (dataNetwork.isConnected() || dataNetwork.isUnderHandover()));
                        && (dataNetwork.isConnected() || dataNetwork.isHandoverInProgress()));
        // If any one is not suspended, then the overall is not suspended.
        List<DataNetwork> allConnectedInternetDataNetworks = mDataNetworkList.stream()
                .filter(DataNetwork::isInternetSupported)
                .filter(dataNetwork -> dataNetwork.isConnected() || dataNetwork.isUnderHandover())
                .filter(dataNetwork -> dataNetwork.isConnected()
                        || dataNetwork.isHandoverInProgress())
                .collect(Collectors.toList());
        boolean isSuspended = !allConnectedInternetDataNetworks.isEmpty()
                && allConnectedInternetDataNetworks.stream().allMatch(DataNetwork::isSuspended);
@@ -2199,14 +2222,17 @@ public class DataNetworkController extends Handler {
                    + TelephonyUtils.dataStateToString(mInternetDataNetworkState) + " to "
                    + TelephonyUtils.dataStateToString(dataNetworkState) + ".");
            // TODO: Create a new route to notify TelephonyRegistry.
            mInternetDataNetworkState = dataNetworkState;
            if (mInternetDataNetworkState == TelephonyManager.DATA_CONNECTED) {
            if (dataNetworkState == TelephonyManager.DATA_CONNECTED) {
                mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor(
                        callback::onInternetDataNetworkConnected));
            } else if (mInternetDataNetworkState == TelephonyManager.DATA_DISCONNECTED) {
                        () -> callback.onInternetDataNetworkConnected(
                                allConnectedInternetDataNetworks.stream()
                                        .map(DataNetwork::getDataProfile)
                                        .collect(Collectors.toList()))));
            } else if (dataNetworkState == TelephonyManager.DATA_DISCONNECTED) {
                mDataNetworkControllerCallbacks.forEach(callback -> callback.invokeFromExecutor(
                        callback::onInternetDataNetworkDisconnected));
            } // TODO: Add suspended callback if needed.
            mInternetDataNetworkState = dataNetworkState;
        }
    }

+193 −67

File changed.

Preview size limit exceeded, changes collapsed.

Loading