From 5877e733151a77684c5eb1cc42a2b46e1ae9f51d 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;