From d993dcfe13866d5e7bf4f957d64830bfe9b1c823 Mon Sep 17 00:00:00 2001 From: Sudheer Shanka Date: Sun, 11 Feb 2018 12:22:16 -0800 Subject: [PATCH] Update uid state used for bucketizing data in fg vs bg states. Currently we are using PROCESS_STATE_BOUND_FOREGROUND_SERVICE to decide whether to allow network access for an uid or not but PROCESS_STATE_TOP is used for bucketizing data in fg vs bg states. It's possible that even though user restricts background data uasge for an app, the bg data usage amount displayed to the user is > 0. As this could be confusing, use PROCESS_STATE_BOUND_FOREGROUND_SERVICE for bucketizing in fg vs bg states too. Bug: 63907204 Test: atest com.android.server.NetworkPolicyManagerServiceTest Test: manual Change-Id: Ib506e421043fbe1052b6d0068ebf01d288faba21 --- core/java/android/net/INetworkPolicyManager.aidl | 2 -- core/java/android/net/NetworkPolicyManager.java | 7 +++++-- .../server/net/NetworkPolicyManagerService.java | 18 ++++++------------ 3 files changed, 11 insertions(+), 16 deletions(-) diff --git a/core/java/android/net/INetworkPolicyManager.aidl b/core/java/android/net/INetworkPolicyManager.aidl index 476e2f43649f..e92302a939d8 100644 --- a/core/java/android/net/INetworkPolicyManager.aidl +++ b/core/java/android/net/INetworkPolicyManager.aidl @@ -37,8 +37,6 @@ interface INetworkPolicyManager { int getUidPolicy(int uid); int[] getUidsWithPolicy(int policy); - boolean isUidForeground(int uid); - void registerListener(INetworkPolicyListener listener); void unregisterListener(INetworkPolicyListener listener); diff --git a/core/java/android/net/NetworkPolicyManager.java b/core/java/android/net/NetworkPolicyManager.java index 2c5a021ec42a..bf6b7e09f529 100644 --- a/core/java/android/net/NetworkPolicyManager.java +++ b/core/java/android/net/NetworkPolicyManager.java @@ -107,6 +107,9 @@ public class NetworkPolicyManager { private static final boolean ALLOW_PLATFORM_APP_POLICY = true; + public static final int FOREGROUND_THRESHOLD_STATE = + ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE; + /** * {@link Intent} extra that indicates which {@link NetworkTemplate} rule it * applies to. @@ -331,7 +334,7 @@ public class NetworkPolicyManager { * to access network when the device is idle or in battery saver mode. Otherwise, false. */ public static boolean isProcStateAllowedWhileIdleOrPowerSaveMode(int procState) { - return procState <= ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE; + return procState <= FOREGROUND_THRESHOLD_STATE; } /** @@ -339,7 +342,7 @@ public class NetworkPolicyManager { * to access network when the device is in data saver mode. Otherwise, false. */ public static boolean isProcStateAllowedWhileOnRestrictBackground(int procState) { - return procState <= ActivityManager.PROCESS_STATE_BOUND_FOREGROUND_SERVICE; + return procState <= FOREGROUND_THRESHOLD_STATE; } public static String resolveNetworkId(WifiConfiguration config) { diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 8febecf0150d..5a05423473ec 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -3203,20 +3203,14 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { this, in, out, err, args, callback, resultReceiver); } - @Override + @VisibleForTesting public boolean isUidForeground(int uid) { - mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG); - synchronized (mUidRulesFirstLock) { - return isUidForegroundUL(uid); + return isUidStateForeground( + mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY)); } } - private boolean isUidForegroundUL(int uid) { - return isUidStateForegroundUL( - mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY)); - } - private boolean isUidForegroundOnRestrictBackgroundUL(int uid) { final int procState = mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY); return isProcStateAllowedWhileOnRestrictBackground(procState); @@ -3227,9 +3221,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { return isProcStateAllowedWhileIdleOrPowerSaveMode(procState); } - private boolean isUidStateForegroundUL(int state) { + private boolean isUidStateForeground(int state) { // only really in foreground when screen is also on - return state <= ActivityManager.PROCESS_STATE_TOP; + return state <= NetworkPolicyManager.FOREGROUND_THRESHOLD_STATE; } /** @@ -3256,7 +3250,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } updateRulesForPowerRestrictionsUL(uid); } - updateNetworkStats(uid, isUidStateForegroundUL(uidState)); + updateNetworkStats(uid, isUidStateForeground(uidState)); } } finally { Trace.traceEnd(Trace.TRACE_TAG_NETWORK); -- 2.11.0