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

Commit d3b20563 authored by Wink Saville's avatar Wink Saville Committed by The Android Automerger
Browse files

Do not change NetworkInfo.DetailedState.

I'd changed DetailedState to force ConnectivityService to treat
provisioning apn's specially. In particular so that they wouldn't
be identified they were fully connected until the provisioning
actually started. The problem is that DetailedState is a public enum
that has a CTS test and just changing the CTS to allow for the new
state (CONNECTED_TO_PROVISIONING_NETWORK) was inappropriate.

Instead I've added a new mIsConnectedToProvisioningNetwork variable
and used the DetailedState.SUSPENDED as the intermediate state.

Bug: 10620248
Change-Id: Id4a842398cad67455541ce629959351c27d83639
parent c6070de1
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -190,6 +190,8 @@ public class MobileDataStateTracker implements NetworkStateTracker {
    private class MobileDataStateReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Assume this isn't a provisioning network.
            mNetworkInfo.setIsConnectedToProvisioningNetwork(false);
            if (intent.getAction().equals(TelephonyIntents.
                    ACTION_DATA_CONNECTION_CONNECTED_TO_PROVISIONING_APN)) {
                String apnName = intent.getStringExtra(PhoneConstants.DATA_APN_KEY);
@@ -205,7 +207,11 @@ public class MobileDataStateTracker implements NetworkStateTracker {
                // Make us in the connecting state until we make a new TYPE_MOBILE_PROVISIONING
                mMobileDataState = PhoneConstants.DataState.CONNECTING;
                updateLinkProperitesAndCapatilities(intent);
                setDetailedState(DetailedState.CONNECTED_TO_PROVISIONING_NETWORK, "", apnName);
                mNetworkInfo.setIsConnectedToProvisioningNetwork(true);

                // Change state to SUSPENDED so setDetailedState
                // sends EVENT_STATE_CHANGED to connectivityService
                setDetailedState(DetailedState.SUSPENDED, "", apnName);
            } else if (intent.getAction().equals(TelephonyIntents.
                    ACTION_ANY_DATA_CONNECTION_STATE_CHANGED)) {
                String apnType = intent.getStringExtra(PhoneConstants.DATA_APN_TYPE_KEY);
+26 −9
Original line number Diff line number Diff line
@@ -83,13 +83,7 @@ public class NetworkInfo implements Parcelable {
        /** Link has poor connectivity. */
        VERIFYING_POOR_LINK,
        /** Checking if network is a captive portal */
        CAPTIVE_PORTAL_CHECK,
        /**
         * Network is connected to provisioning network
         * TODO: Probably not needed when we add TYPE_PROVISIONING_NETWORK
         * @hide
         */
        CONNECTED_TO_PROVISIONING_NETWORK
        CAPTIVE_PORTAL_CHECK
    }

    /**
@@ -114,7 +108,6 @@ public class NetworkInfo implements Parcelable {
        stateMap.put(DetailedState.DISCONNECTED, State.DISCONNECTED);
        stateMap.put(DetailedState.FAILED, State.DISCONNECTED);
        stateMap.put(DetailedState.BLOCKED, State.DISCONNECTED);
        stateMap.put(DetailedState.CONNECTED_TO_PROVISIONING_NETWORK, State.CONNECTED);
    }

    private int mNetworkType;
@@ -127,6 +120,8 @@ public class NetworkInfo implements Parcelable {
    private String mExtraInfo;
    private boolean mIsFailover;
    private boolean mIsRoaming;
    private boolean mIsConnectedToProvisioningNetwork;

    /**
     * Indicates whether network connectivity is possible:
     */
@@ -155,6 +150,7 @@ public class NetworkInfo implements Parcelable {
        mState = State.UNKNOWN;
        mIsAvailable = false; // until we're told otherwise, assume unavailable
        mIsRoaming = false;
        mIsConnectedToProvisioningNetwork = false;
    }

    /** {@hide} */
@@ -171,6 +167,7 @@ public class NetworkInfo implements Parcelable {
            mIsFailover = source.mIsFailover;
            mIsRoaming = source.mIsRoaming;
            mIsAvailable = source.mIsAvailable;
            mIsConnectedToProvisioningNetwork = source.mIsConnectedToProvisioningNetwork;
        }
    }

@@ -329,6 +326,22 @@ public class NetworkInfo implements Parcelable {
        }
    }

    /** {@hide} */
    @VisibleForTesting
    public boolean isConnectedToProvisioningNetwork() {
        synchronized (this) {
            return mIsConnectedToProvisioningNetwork;
        }
    }

    /** {@hide} */
    @VisibleForTesting
    public void setIsConnectedToProvisioningNetwork(boolean val) {
        synchronized (this) {
            mIsConnectedToProvisioningNetwork = val;
        }
    }

    /**
     * Reports the current coarse-grained state of the network.
     * @return the coarse-grained state
@@ -412,7 +425,9 @@ public class NetworkInfo implements Parcelable {
            append(", extra: ").append(mExtraInfo == null ? "(none)" : mExtraInfo).
            append(", roaming: ").append(mIsRoaming).
            append(", failover: ").append(mIsFailover).
            append(", isAvailable: ").append(mIsAvailable);
            append(", isAvailable: ").append(mIsAvailable).
            append(", isConnectedToProvisioningNetwork: ").
                    append(mIsConnectedToProvisioningNetwork);
            return builder.toString();
        }
    }
@@ -440,6 +455,7 @@ public class NetworkInfo implements Parcelable {
            dest.writeInt(mIsFailover ? 1 : 0);
            dest.writeInt(mIsAvailable ? 1 : 0);
            dest.writeInt(mIsRoaming ? 1 : 0);
            dest.writeInt(mIsConnectedToProvisioningNetwork ? 1 : 0);
            dest.writeString(mReason);
            dest.writeString(mExtraInfo);
        }
@@ -462,6 +478,7 @@ public class NetworkInfo implements Parcelable {
                netInfo.mIsFailover = in.readInt() != 0;
                netInfo.mIsAvailable = in.readInt() != 0;
                netInfo.mIsRoaming = in.readInt() != 0;
                netInfo.mIsConnectedToProvisioningNetwork = in.readInt() != 0;
                netInfo.mReason = in.readString();
                netInfo.mExtraInfo = in.readString();
                return netInfo;
+7 −8
Original line number Diff line number Diff line
@@ -890,8 +890,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        // Find the first Provisioning Network
        NetworkInfo provNi = null;
        for (NetworkInfo ni : getAllNetworkInfo()) {
            if (ni.getDetailedState()
                    == NetworkInfo.DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
            if (ni.isConnectedToProvisioningNetwork()) {
                provNi = ni;
                break;
            }
@@ -2805,7 +2804,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                    NetworkInfo.State state = info.getState();

                    if (VDBG || (state == NetworkInfo.State.CONNECTED) ||
                            (state == NetworkInfo.State.DISCONNECTED)) {
                            (state == NetworkInfo.State.DISCONNECTED) ||
                            (state == NetworkInfo.State.SUSPENDED)) {
                        log("ConnectivityChange for " +
                            info.getTypeName() + ": " +
                            state + "/" + info.getDetailedState());
@@ -2820,7 +2820,8 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                    if (ConnectivityManager.isNetworkTypeMobile(info.getType())
                            && (0 != Settings.Global.getInt(mContext.getContentResolver(),
                                        Settings.Global.DEVICE_PROVISIONED, 0))
                            && (state == NetworkInfo.State.CONNECTED)) {
                            && ((state == NetworkInfo.State.CONNECTED)
                                    || info.isConnectedToProvisioningNetwork())) {
                        checkMobileProvisioning(CheckMp.MAX_TIMEOUT_MS);
                    }

@@ -2833,8 +2834,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                    } else if (info.getDetailedState() ==
                            DetailedState.CAPTIVE_PORTAL_CHECK) {
                        handleCaptivePortalTrackerCheck(info);
                    } else if (info.getDetailedState() ==
                            DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
                    } else if (info.isConnectedToProvisioningNetwork()) {
                        /**
                         * TODO: Create ConnectivityManager.TYPE_MOBILE_PROVISIONING
                         * for now its an in between network, its a network that
@@ -4197,8 +4197,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        // If provisioning network handle as a special case,
        // otherwise launch browser with the intent directly.
        NetworkInfo ni = getProvisioningNetworkInfo();
        if ((ni != null) && ni.getDetailedState() ==
                    NetworkInfo.DetailedState.CONNECTED_TO_PROVISIONING_NETWORK) {
        if ((ni != null) && ni.isConnectedToProvisioningNetwork()) {
            if (DBG) log("handleMobileProvisioningAction: on provisioning network");
            MobileDataStateTracker mdst = (MobileDataStateTracker)
                    mNetTrackers[ConnectivityManager.TYPE_MOBILE];