diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 051377c671..4e4870160e 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -4721,9 +4721,6 @@ public class ConnectivityService extends IConnectivityManager.Stub if (VDBG) log(" accepting network in place of " + currentNetwork.name()); currentNetwork.removeRequest(nri.request.requestId); currentNetwork.lingerRequest(nri.request, now, mLingerDelayMs); - if (isDefaultRequest(nri)) { - mLingerMonitor.noteLingerDefaultNetwork(currentNetwork, newNetwork); - } affectedNetworks.add(currentNetwork); } else { if (VDBG) log(" accepting network in place of null"); @@ -4744,6 +4741,9 @@ public class ConnectivityService extends IConnectivityManager.Stub if (isDefaultRequest(nri)) { isNewDefault = true; oldDefaultNetwork = currentNetwork; + if (currentNetwork != null) { + mLingerMonitor.noteLingerDefaultNetwork(currentNetwork, newNetwork); + } } } } else if (newNetwork.isSatisfyingRequest(nri.request.requestId)) { diff --git a/services/core/java/com/android/server/connectivity/LingerMonitor.java b/services/core/java/com/android/server/connectivity/LingerMonitor.java index 4034877023..064a904853 100644 --- a/services/core/java/com/android/server/connectivity/LingerMonitor.java +++ b/services/core/java/com/android/server/connectivity/LingerMonitor.java @@ -242,6 +242,12 @@ public class LingerMonitor { return; } + // Only show the notification if we switched away because a network became unvalidated, not + // because its score changed. + // TODO: instead of just skipping notification, keep a note of it, and show it if it becomes + // unvalidated. + if (fromNai.lastValidated) return; + if (isNotificationEnabled(fromNai, toNai)) { notify(fromNai, toNai, forceToast); }