From 39fc7d5e8e0f8106ea0c7163b7fbb9dac2ca454d Mon Sep 17 00:00:00 2001 From: Paul Jensen Date: Fri, 5 Sep 2014 12:06:44 -0400 Subject: [PATCH] Update Inet state when NetworkMonitor re-evaluates a network. Previously the Inet state (the little exclamation mark beside the WiFi and Cellular bars) only transitioned from bad to good once. With this change it can transition back to bad (and later to good again) if a network re-evaluation is triggered, say by ConnectivityManager.reportBadNetwork. Also, avoid triggering re-evaluation in two unwanted cases. bug:16214361 Change-Id: I7856724249ffcbb0945276dcf45019876231fdaf --- .../android/server/ConnectivityService.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 7f104c0491..55d8c09da0 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -1785,6 +1785,7 @@ public class ConnectivityService extends IConnectivityManager.Stub { } private boolean isLiveNetworkAgent(NetworkAgentInfo nai, String msg) { + if (nai.network == null) return false; final NetworkAgentInfo officialNai; synchronized (mNetworkForNetId) { officialNai = mNetworkForNetId.get(nai.network.netId); @@ -1924,12 +1925,16 @@ public class ConnectivityService extends IConnectivityManager.Stub { } break; } - case NetworkMonitor.EVENT_NETWORK_VALIDATED: { + case NetworkMonitor.EVENT_NETWORK_TESTED: { NetworkAgentInfo nai = (NetworkAgentInfo)msg.obj; if (isLiveNetworkAgent(nai, "EVENT_NETWORK_VALIDATED")) { - if (DBG) log("Validated " + nai.name()); - nai.validated = true; - rematchNetworkAndRequests(nai); + boolean valid = (msg.arg1 == NetworkMonitor.NETWORK_TEST_RESULT_VALID); + if (valid) { + if (DBG) log("Validated " + nai.name()); + nai.validated = true; + rematchNetworkAndRequests(nai); + } + updateInetCondition(nai, valid); } break; } @@ -4716,6 +4721,21 @@ public class ConnectivityService extends IConnectivityManager.Stub { } } + private void updateInetCondition(NetworkAgentInfo nai, boolean valid) { + // Don't bother updating until we've graduated to validated at least once. + if (!nai.validated) return; + // For now only update icons for default connection. + // TODO: Update WiFi and cellular icons separately. b/17237507 + if (!isDefaultNetwork(nai)) return; + + int newInetCondition = valid ? 100 : 0; + // Don't repeat publish. + if (newInetCondition == mDefaultInetConditionPublished) return; + + mDefaultInetConditionPublished = newInetCondition; + sendInetConditionBroadcast(nai.networkInfo); + } + private void updateNetworkInfo(NetworkAgentInfo networkAgent, NetworkInfo newInfo) { NetworkInfo.State state = newInfo.getState(); NetworkInfo oldInfo = null;