OSDN Git Service

Don't notify on network switch if source network is validated.
authorLorenzo Colitti <lorenzo@google.com>
Mon, 29 Aug 2016 05:03:11 +0000 (14:03 +0900)
committerLorenzo Colitti <lorenzo@google.com>
Mon, 29 Aug 2016 07:30:21 +0000 (16:30 +0900)
Sometimes we switch away from a network to another (e.g., wifi to
cell data) not because the old network is unvalidated, but
because the score is lowered by a low signal strength.

In this case, don't notify the user of a network switch.

Bug: 31132499
Change-Id: I996a6e00096f8cb864fa9b00b36921725a4edb53

services/core/java/com/android/server/ConnectivityService.java
services/core/java/com/android/server/connectivity/LingerMonitor.java

index 14243c5..86afe08 100644 (file)
@@ -4699,9 +4699,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");
@@ -4722,6 +4719,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)) {
index 4034877..064a904 100644 (file)
@@ -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);
         }