diff options
| author | 2016-03-30 15:11:31 -0700 | |
|---|---|---|
| committer | 2016-03-30 15:30:40 -0700 | |
| commit | ef89c9097893123c5eebe464e6650fbd249cd837 (patch) | |
| tree | 34b3402bc72f2177bb94f67f6f741881a700d898 | |
| parent | a6f98afbdeda4da14d07b0fed5b6586b08cc5e38 (diff) | |
Data Saver Mode should automatically allow foreground services.
BUG: 27324964
Change-Id: I8f09b9c9673f3ed697daca14902123a81ce41085
| -rw-r--r-- | services/core/java/com/android/server/net/NetworkPolicyManagerService.java | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 6ae01a192e34..25958646b487 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -2301,7 +2301,12 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { final int state = mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY); fout.print(" state="); fout.print(state); - fout.print(state <= ActivityManager.PROCESS_STATE_TOP ? " (fg)" : " (bg)"); + if (state <= ActivityManager.PROCESS_STATE_TOP) { + fout.print(" (fg)"); + } else { + fout.print(state <= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE + ? " (fg svc)" : " (bg)"); + } final int rule = mUidRules.get(uid, RULE_UNKNOWN); fout.print(" rule="); @@ -2338,6 +2343,11 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY)); } + private boolean isUidForegroundOnRestrictBackgroundLocked(int uid) { + final int procState = mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY); + return isProcStateAllowedWhileOnRestrictBackgroundLocked(procState); + } + private boolean isUidStateForegroundLocked(int state) { // only really in foreground when screen is also on return mScreenOn && state <= ActivityManager.PROCESS_STATE_TOP; @@ -2396,8 +2406,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private void updateRestrictBackgroundRulesOnUidStatusChangedLocked(int uid, int oldUidState, int newUidState) { - final boolean oldForeground = oldUidState <= ActivityManager.PROCESS_STATE_TOP; - final boolean newForeground = newUidState <= ActivityManager.PROCESS_STATE_TOP; + final boolean oldForeground = + isProcStateAllowedWhileOnRestrictBackgroundLocked(oldUidState); + final boolean newForeground = + isProcStateAllowedWhileOnRestrictBackgroundLocked(newUidState); if (oldForeground != newForeground) { updateRuleForRestrictBackgroundLocked(uid); } @@ -2421,7 +2433,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { // only update rules for anyone with foreground activities final int size = mUidState.size(); for (int i = 0; i < size; i++) { - if (mUidState.valueAt(i) <= ActivityManager.PROCESS_STATE_TOP) { + if (mUidState.valueAt(i) <= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE) { final int uid = mUidState.keyAt(i); updateRestrictionRulesForUidLocked(uid); } @@ -2432,6 +2444,10 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return procState <= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE; } + static boolean isProcStateAllowedWhileOnRestrictBackgroundLocked(int procState) { + return procState <= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE; + } + void updateRulesForRestrictPowerLocked() { updateRulesForWhitelistedPowerSaveLocked(mRestrictPower, FIREWALL_CHAIN_POWERSAVE, mUidFirewallPowerSaveRules); @@ -2715,7 +2731,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } final int uidPolicy = mUidPolicy.get(uid, POLICY_NONE); - final boolean isForeground = isUidForegroundLocked(uid); + final boolean isForeground = isUidForegroundOnRestrictBackgroundLocked(uid); final boolean isBlacklisted = (uidPolicy & POLICY_REJECT_METERED_BACKGROUND) != 0; final boolean isWhitelisted = mRestrictBackgroundWhitelistUids.get(uid); |