From 2adbc7f7a4a4a827360f8a585e7306f07f2fd718 Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Wed, 13 Jan 2010 09:36:31 -0800 Subject: [PATCH] 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 --- .../android/server/ConnectivityService.java | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 78215b0af0..5c0f35210e 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -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;