Update network state of apps leaving the whitelist

Bug: 21787562
Change-Id: I9f45acc58ba0b4b6cfed08aecbf081a5f57eb217
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 7673af4..81ef4d5 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -376,8 +376,13 @@
 
     void updatePowerSaveTempWhitelistLocked() {
         try {
+            // Clear the states of the current whitelist
+            final int N = mPowerSaveTempWhitelistAppIds.size();
+            for (int i = 0; i < N; i++) {
+                mPowerSaveTempWhitelistAppIds.setValueAt(i, false);
+            }
+            // Update the states with the new whitelist
             final int[] whitelist = mDeviceIdleController.getAppIdTempWhitelist();
-            mPowerSaveTempWhitelistAppIds.clear();
             if (whitelist != null) {
                 for (int uid : whitelist) {
                     mPowerSaveTempWhitelistAppIds.put(uid, true);
@@ -387,6 +392,18 @@
         }
     }
 
+    /**
+     * Remove unnecessary entries in the temp whitelist
+     */
+    void purgePowerSaveTempWhitelistLocked() {
+        final int N = mPowerSaveTempWhitelistAppIds.size();
+        for (int i = N - 1; i >= 0; i--) {
+            if (mPowerSaveTempWhitelistAppIds.valueAt(i) == false) {
+                mPowerSaveTempWhitelistAppIds.removeAt(i);
+            }
+        }
+    }
+
     public void systemReady() {
         if (!isBandwidthControlEnabled()) {
             Slog.w(TAG, "bandwidth controls disabled, unable to enforce policy");
@@ -521,6 +538,7 @@
                 } else {
                     updatePowerSaveTempWhitelistLocked();
                     updateRulesForTempWhitelistChangeLocked();
+                    purgePowerSaveTempWhitelistLocked();
                 }
             }
         }