Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d993dcfe authored by Sudheer Shanka's avatar Sudheer Shanka
Browse files

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
parent f67bb19f
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -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);

+5 −2
Original line number Diff line number Diff line
@@ -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) {
+6 −12
Original line number Diff line number Diff line
@@ -3203,19 +3203,13 @@ 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);
        }
    }

    private boolean isUidForegroundUL(int uid) {
        return isUidStateForegroundUL(
            return isUidStateForeground(
                    mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY));
        }
    }

    private boolean isUidForegroundOnRestrictBackgroundUL(int uid) {
        final int procState = mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
@@ -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);