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

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

Fix the case where blocked reasons for dataSaver are not considered.

Fixes: 183267528
Test: atest ./tests/cts/hostside/src/com/android/cts/net/HostsideNetworkCallbackTests.java
Merged-In: I3c90c3849261df4c289c398f22661f91f7cf4994
Change-Id: Iba3ff804a74fb482847dd999c2854405b21affd2
parent 79ddf1af
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -326,6 +326,20 @@ public class NetworkPolicyManager {
     * @hide
     */
    public static final int ALLOWED_METERED_REASON_USER_EXEMPTED = 1 << 16;
    /**
     * Flag to indicate that app is exempt from certain metered network restrictions because of it
     * being a system component.
     *
     * @hide
     */
    public static final int ALLOWED_METERED_REASON_SYSTEM = 1 << 17;
    /**
     * Flag to indicate that app is exempt from certain metered network restrictions because of it
     * being in the foreground.
     *
     * @hide
     */
    public static final int ALLOWED_METERED_REASON_FOREGROUND = 1 << 18;

    /** @hide */
    public static final int ALLOWED_METERED_REASON_MASK = 0xffff0000;
+21 −14
Original line number Diff line number Diff line
@@ -56,7 +56,9 @@ import static android.net.NetworkIdentity.OEM_NONE;
import static android.net.NetworkPolicy.LIMIT_DISABLED;
import static android.net.NetworkPolicy.SNOOZE_NEVER;
import static android.net.NetworkPolicy.WARNING_DISABLED;
import static android.net.NetworkPolicyManager.ALLOWED_METERED_REASON_FOREGROUND;
import static android.net.NetworkPolicyManager.ALLOWED_METERED_REASON_MASK;
import static android.net.NetworkPolicyManager.ALLOWED_METERED_REASON_SYSTEM;
import static android.net.NetworkPolicyManager.ALLOWED_METERED_REASON_USER_EXEMPTED;
import static android.net.NetworkPolicyManager.ALLOWED_REASON_FOREGROUND;
import static android.net.NetworkPolicyManager.ALLOWED_REASON_NONE;
@@ -4636,8 +4638,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
        newBlockedReasons |= (mRestrictBackground ? BLOCKED_METERED_REASON_DATA_SAVER : 0);
        newBlockedReasons |= (isDenied ? BLOCKED_METERED_REASON_USER_RESTRICTED : 0);

        newAllowedReasons |= (isSystem(uid) ? ALLOWED_REASON_SYSTEM : 0);
        newAllowedReasons |= (isForeground ? ALLOWED_REASON_FOREGROUND : 0);
        newAllowedReasons |= (isSystem(uid) ? ALLOWED_METERED_REASON_SYSTEM : 0);
        newAllowedReasons |= (isForeground ? ALLOWED_METERED_REASON_FOREGROUND : 0);
        newAllowedReasons |= (isAllowed ? ALLOWED_METERED_REASON_USER_EXEMPTED : 0);

        if (LOGV) {
@@ -4711,6 +4713,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {

            // Dispatch changed rule to existing listeners.
            mHandler.obtainMessage(MSG_RULES_CHANGED, uid, newUidRules).sendToTarget();
        }

        final int oldEffectiveBlockedReasons = uidBlockedState.effectiveBlockedReasons;
        uidBlockedState.blockedReasons = (uidBlockedState.blockedReasons
@@ -4724,7 +4727,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                    .sendToTarget();
        }
    }
    }

    /**
     * Updates the power-related part of the {@link #mUidRules} for a given map, and notify external
@@ -5870,12 +5872,17 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                return;
            }
            if ((allowedReasons & ALLOWED_REASON_SYSTEM) != 0) {
                effectiveBlockedReasons = BLOCKED_REASON_NONE;
                effectiveBlockedReasons = (blockedReasons & ALLOWED_METERED_REASON_MASK);
            }
            if ((allowedReasons & ALLOWED_METERED_REASON_SYSTEM) != 0) {
                effectiveBlockedReasons = (blockedReasons & ~ALLOWED_METERED_REASON_MASK);
            }
            if ((allowedReasons & ALLOWED_REASON_FOREGROUND) != 0) {
                effectiveBlockedReasons &= ~BLOCKED_REASON_BATTERY_SAVER;
                effectiveBlockedReasons &= ~BLOCKED_REASON_DOZE;
                effectiveBlockedReasons &= ~BLOCKED_REASON_APP_STANDBY;
            }
            if ((allowedReasons & ALLOWED_METERED_REASON_FOREGROUND) != 0) {
                effectiveBlockedReasons &= ~BLOCKED_METERED_REASON_DATA_SAVER;
                effectiveBlockedReasons &= ~BLOCKED_METERED_REASON_USER_RESTRICTED;
            }