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

Commit 1193ae4e authored by Robert Greenwalt's avatar Robert Greenwalt
Browse files

Backport l53e91db7 from master.

Prevents sending out ConnectivityManager broadcasts when the connection
is repeating the same major state.  This means continued wifi scanning
does not generate CM broadcasts (though wifi state broadcasts continue).

bug: 2265222
Dr No approval: jsh
parent a1d08886
Loading
Loading
Loading
Loading
+19 −5
Original line number Diff line number Diff line
@@ -111,6 +111,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
        public int mType;
        public int mRadio;
        public int mPriority;
        public NetworkInfo.State mLastState;
        public NetworkAttributes(String init) {
            String fragments[] = init.split(",");
            mName = fragments[0].toLowerCase();
@@ -131,6 +132,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                mType = ConnectivityManager.TYPE_MOBILE_HIPRI;
            }
            mPriority = Integer.parseInt(fragments[2]);
            mLastState = NetworkInfo.State.UNKNOWN;
        }
        public boolean isDefault() {
            return (mType == mRadio);
@@ -1214,9 +1216,22 @@ public class ConnectivityService extends IConnectivityManager.Stub {
            switch (msg.what) {
                case NetworkStateTracker.EVENT_STATE_CHANGED:
                    info = (NetworkInfo) msg.obj;
                    int type = info.getType();
                    NetworkInfo.State state = info.getState();
                    if (mNetAttributes[type].mLastState == state) {
                        if (DBG) {
                            // TODO - remove this after we validate the dropping doesn't break anything
                            Log.d(TAG, "Dropping ConnectivityChange for " +
                                    info.getTypeName() + ": " +
                                    state + "/" + info.getDetailedState());
                        }
                        return;
                    }
                    mNetAttributes[type].mLastState = state;

                    if (DBG) Log.d(TAG, "ConnectivityChange for " +
                            info.getTypeName() + ": " +
                            info.getState() + "/" + info.getDetailedState());
                            state + "/" + info.getDetailedState());

                    // Connectivity state changed:
                    // [31-13] Reserved for future use
@@ -1234,10 +1249,9 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                    if (info.getDetailedState() ==
                            NetworkInfo.DetailedState.FAILED) {
                        handleConnectionFailure(info);
                    } else if (info.getState() ==
                            NetworkInfo.State.DISCONNECTED) {
                    } else if (state == NetworkInfo.State.DISCONNECTED) {
                        handleDisconnect(info);
                    } else if (info.getState() == NetworkInfo.State.SUSPENDED) {
                    } else if (state == NetworkInfo.State.SUSPENDED) {
                        // TODO: need to think this over.
                        // the logic here is, handle SUSPENDED the same as
                        // DISCONNECTED. The only difference being we are
@@ -1246,7 +1260,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
                        // opportunity to handle DISCONNECTED and SUSPENDED
                        // differently, or not.
                        handleDisconnect(info);
                    } else if (info.getState() == NetworkInfo.State.CONNECTED) {
                    } else if (state == NetworkInfo.State.CONNECTED) {
                        handleConnect(info);
                    }
                    break;