From 06f0806bd54e907f3d6d2069d263c700bd91260c Mon Sep 17 00:00:00 2001 From: Amith Yamasani Date: Fri, 12 Jun 2015 13:23:33 -0700 Subject: [PATCH] Update network state of apps leaving the whitelist Bug: 21787562 Change-Id: I9f45acc58ba0b4b6cfed08aecbf081a5f57eb217 --- .../net/NetworkPolicyManagerService.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 7673af44f5ac6..81ef4d57d70f2 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 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub 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 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub } } + /** + * 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 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub } else { updatePowerSaveTempWhitelistLocked(); updateRulesForTempWhitelistChangeLocked(); + purgePowerSaveTempWhitelistLocked(); } } }