diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 676e5f66f8..27b631e492 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -100,7 +100,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { private boolean mSystemReady; private ArrayList mDeferredBroadcasts; - private class NetworkAttributes { + private static class NetworkAttributes { /** * Class for holding settings read from resources. */ @@ -108,6 +108,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(); @@ -128,6 +129,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); @@ -135,7 +137,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; @@ -1213,9 +1215,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 @@ -1233,10 +1248,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 @@ -1245,7 +1259,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;