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

Commit 511288a0 authored by Robert Greenwalt's avatar Robert Greenwalt
Browse files

Filter out minor Connectivity Notifications.

Don't send a connectivity change notification if the change is in detailed state only.
IE, Disconnect/Idle -> Disconnect/Scanning should not trigger a connection change
notification.

bug: 2265222
parent 6d42d806
Loading
Loading
Loading
Loading
+21 −7
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
    private boolean mSystemReady;
    private ArrayList<Intent> mDeferredBroadcasts;

    private class NetworkAttributes {
    private static class NetworkAttributes {
        /**
         * Class for holding settings read from resources.
         */
@@ -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);
@@ -138,7 +140,7 @@ public class ConnectivityService extends IConnectivityManager.Stub {
    }
    NetworkAttributes[] mNetAttributes;

    private class RadioAttributes {
    private static class RadioAttributes {
        public String mName;
        public int mPriority;
        public int mSimultaneity;
@@ -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;