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

Commit 6ebc3c8d authored by Sudheer Shanka's avatar Sudheer Shanka Committed by Android (Google) Code Review
Browse files

Merge "Update NPMS.setRestrictBackgroundUL to notify listeners."

parents 99f76da6 543339fe
Loading
Loading
Loading
Loading
+51 −51
Original line number Original line Diff line number Diff line
@@ -354,6 +354,9 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
    // Used to restore mRestrictBackground when battery saver is turned off.
    // Used to restore mRestrictBackground when battery saver is turned off.
    private boolean mRestrictBackgroundBeforeBsm;
    private boolean mRestrictBackgroundBeforeBsm;


    // Denotes the status of restrict background read from disk.
    private boolean mLoadedRestrictBackground;

    // See main javadoc for instructions on how to use these locks.
    // See main javadoc for instructions on how to use these locks.
    final Object mUidRulesFirstLock = new Object();
    final Object mUidRulesFirstLock = new Object();
    final Object mNetworkPoliciesSecondLock = new Object();
    final Object mNetworkPoliciesSecondLock = new Object();
@@ -653,15 +656,13 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                    readPolicyAL();
                    readPolicyAL();


                    // Update the restrictBackground if battery saver is turned on
                    // Update the restrictBackground if battery saver is turned on
                    mRestrictBackgroundBeforeBsm = mRestrictBackground;
                    mRestrictBackgroundBeforeBsm = mLoadedRestrictBackground;
                    mRestrictBackgroundPowerState = mPowerManagerInternal
                    mRestrictBackgroundPowerState = mPowerManagerInternal
                            .getLowPowerState(ServiceType.DATA_SAVER);
                            .getLowPowerState(ServiceType.DATA_SAVER);
                    final boolean localRestrictBackground =
                    final boolean localRestrictBackground =
                            mRestrictBackgroundPowerState.batterySaverEnabled;
                            mRestrictBackgroundPowerState.batterySaverEnabled;
                    if (localRestrictBackground && localRestrictBackground != mRestrictBackground) {
                    if (localRestrictBackground && !mLoadedRestrictBackground) {
                        mRestrictBackground = localRestrictBackground;
                        mLoadedRestrictBackground = true;
                        mHandler.obtainMessage(MSG_RESTRICT_BACKGROUND_CHANGED,
                                mRestrictBackground ? 1 : 0, 0).sendToTarget();
                    }
                    }
                    mPowerManagerInternal.registerLowPowerModeObserver(
                    mPowerManagerInternal.registerLowPowerModeObserver(
                            new PowerManagerInternal.LowPowerModeListener() {
                            new PowerManagerInternal.LowPowerModeListener() {
@@ -682,7 +683,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                        writePolicyAL();
                        writePolicyAL();
                    }
                    }


                    setRestrictBackgroundUL(mRestrictBackground);
                    setRestrictBackgroundUL(mLoadedRestrictBackground);
                    updateRulesForGlobalChangeAL(false);
                    updateRulesForGlobalChangeAL(false);
                    updateNotificationsNL();
                    updateNotificationsNL();
                }
                }
@@ -1760,19 +1761,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                    if (TAG_POLICY_LIST.equals(tag)) {
                    if (TAG_POLICY_LIST.equals(tag)) {
                        final boolean oldValue = mRestrictBackground;
                        final boolean oldValue = mRestrictBackground;
                        version = readIntAttribute(in, ATTR_VERSION);
                        version = readIntAttribute(in, ATTR_VERSION);
                        if (version >= VERSION_ADDED_RESTRICT_BACKGROUND) {
                        mLoadedRestrictBackground = (version >= VERSION_ADDED_RESTRICT_BACKGROUND)
                            mRestrictBackground = readBooleanAttribute(
                                && readBooleanAttribute(in, ATTR_RESTRICT_BACKGROUND);
                                    in, ATTR_RESTRICT_BACKGROUND);
                        } else {
                            mRestrictBackground = false;
                        }
                        if (mRestrictBackground != oldValue) {
                            // Some early services may have read the default value,
                            // so notify them that it's changed
                            mHandler.obtainMessage(MSG_RESTRICT_BACKGROUND_CHANGED,
                                    mRestrictBackground ? 1 : 0, 0).sendToTarget();
                        }

                    } else if (TAG_NETWORK_POLICY.equals(tag)) {
                    } else if (TAG_NETWORK_POLICY.equals(tag)) {
                        final int networkTemplate = readIntAttribute(in, ATTR_NETWORK_TEMPLATE);
                        final int networkTemplate = readIntAttribute(in, ATTR_NETWORK_TEMPLATE);
                        final String subscriberId = in.getAttributeValue(null, ATTR_SUBSCRIBER_ID);
                        final String subscriberId = in.getAttributeValue(null, ATTR_SUBSCRIBER_ID);
@@ -1959,7 +1949,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
        // usually happens on first boot of a new device and not one that has received an OTA.
        // usually happens on first boot of a new device and not one that has received an OTA.


        // Seed from the default value configured for this device.
        // Seed from the default value configured for this device.
        mRestrictBackground = Settings.Global.getInt(
        mLoadedRestrictBackground = Settings.Global.getInt(
                mContext.getContentResolver(), Global.DEFAULT_RESTRICT_BACKGROUND_DATA, 0) == 1;
                mContext.getContentResolver(), Global.DEFAULT_RESTRICT_BACKGROUND_DATA, 0) == 1;


        // NOTE: We used to read the legacy setting here :
        // NOTE: We used to read the legacy setting here :
@@ -2432,26 +2422,24 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
            try {
            try {
                maybeRefreshTrustedTime();
                maybeRefreshTrustedTime();
                synchronized (mUidRulesFirstLock) {
                synchronized (mUidRulesFirstLock) {
                    if (restrictBackground == mRestrictBackground) {
                        // Ideally, UI should never allow this scenario...
                        Slog.w(TAG, "setRestrictBackground: already " + restrictBackground);
                        return;
                    }
                    setRestrictBackgroundUL(restrictBackground);
                    setRestrictBackgroundUL(restrictBackground);
                }
                }

            } finally {
            } finally {
                Binder.restoreCallingIdentity(token);
                Binder.restoreCallingIdentity(token);
            }
            }

            mHandler.obtainMessage(MSG_RESTRICT_BACKGROUND_CHANGED, restrictBackground ? 1 : 0, 0)
                    .sendToTarget();
        } finally {
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
            Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
        }
        }
    }
    }


    private void setRestrictBackgroundUL(boolean restrictBackground) {
    private void setRestrictBackgroundUL(boolean restrictBackground) {
        Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "setRestrictBackgroundUL");
        try {
            if (restrictBackground == mRestrictBackground) {
                // Ideally, UI should never allow this scenario...
                Slog.w(TAG, "setRestrictBackgroundUL: already " + restrictBackground);
                return;
            }
            Slog.d(TAG, "setRestrictBackgroundUL(): " + restrictBackground);
            Slog.d(TAG, "setRestrictBackgroundUL(): " + restrictBackground);
            final boolean oldRestrictBackground = mRestrictBackground;
            final boolean oldRestrictBackground = mRestrictBackground;
            mRestrictBackground = restrictBackground;
            mRestrictBackground = restrictBackground;
@@ -2461,7 +2449,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
            updateRulesForRestrictBackgroundUL();
            updateRulesForRestrictBackgroundUL();
            try {
            try {
                if (!mNetworkManager.setDataSaverModeEnabled(mRestrictBackground)) {
                if (!mNetworkManager.setDataSaverModeEnabled(mRestrictBackground)) {
                Slog.e(TAG, "Could not change Data Saver Mode on NMS to " + mRestrictBackground);
                    Slog.e(TAG,
                            "Could not change Data Saver Mode on NMS to " + mRestrictBackground);
                    mRestrictBackground = oldRestrictBackground;
                    mRestrictBackground = oldRestrictBackground;
                    // TODO: if it knew the foreground apps (see TODO above), it could call
                    // TODO: if it knew the foreground apps (see TODO above), it could call
                    // updateRulesForRestrictBackgroundUL() again to restore state.
                    // updateRulesForRestrictBackgroundUL() again to restore state.
@@ -2471,6 +2460,8 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                // ignored; service lives in system_server
                // ignored; service lives in system_server
            }
            }


            sendRestrictBackgroundChangedMsg();

            if (mRestrictBackgroundPowerState.globalBatterySaverEnabled) {
            if (mRestrictBackgroundPowerState.globalBatterySaverEnabled) {
                mRestrictBackgroundChangedInBsm = true;
                mRestrictBackgroundChangedInBsm = true;
            }
            }
@@ -2478,6 +2469,15 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
                updateNotificationsNL();
                updateNotificationsNL();
                writePolicyAL();
                writePolicyAL();
            }
            }
        } finally {
            Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
        }
    }

    private void sendRestrictBackgroundChangedMsg() {
        mHandler.removeMessages(MSG_RESTRICT_BACKGROUND_CHANGED);
        mHandler.obtainMessage(MSG_RESTRICT_BACKGROUND_CHANGED, mRestrictBackground ? 1 : 0, 0)
                .sendToTarget();
    }
    }


    @Override
    @Override
@@ -4222,7 +4222,7 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub {
        }
        }


        if (shouldInvokeRestrictBackground) {
        if (shouldInvokeRestrictBackground) {
            setRestrictBackground(restrictBackground);
            setRestrictBackgroundUL(restrictBackground);
        }
        }


        // Change it at last so setRestrictBackground() won't affect this variable
        // Change it at last so setRestrictBackground() won't affect this variable
+2 −3
Original line number Original line Diff line number Diff line
@@ -51,6 +51,7 @@ import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assert.fail;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.ArgumentMatchers.anyString;
@@ -360,6 +361,7 @@ public class NetworkPolicyManagerServiceTest {
                .thenReturn(new ApplicationInfo());
                .thenReturn(new ApplicationInfo());
        when(mPackageManager.getPackagesForUid(UID_A)).thenReturn(new String[] {PKG_NAME_A});
        when(mPackageManager.getPackagesForUid(UID_A)).thenReturn(new String[] {PKG_NAME_A});
        when(mNetworkManager.isBandwidthControlEnabled()).thenReturn(true);
        when(mNetworkManager.isBandwidthControlEnabled()).thenReturn(true);
        when(mNetworkManager.setDataSaverModeEnabled(anyBoolean())).thenReturn(true);
        expectCurrentTime();
        expectCurrentTime();


        // Prepare NPMS.
        // Prepare NPMS.
@@ -520,7 +522,6 @@ public class NetworkPolicyManagerServiceTest {
                .setBatterySaverEnabled(true)
                .setBatterySaverEnabled(true)
                .build();
                .build();


        doReturn(true).when(mNetworkManager).setDataSaverModeEnabled(true);
        mService.updateRestrictBackgroundByLowPowerModeUL(stateOn);
        mService.updateRestrictBackgroundByLowPowerModeUL(stateOn);


        // RestrictBackground should be turned on because of battery saver
        // RestrictBackground should be turned on because of battery saver
@@ -1634,8 +1635,6 @@ public class NetworkPolicyManagerServiceTest {
    private FutureIntent mRestrictBackgroundChanged;
    private FutureIntent mRestrictBackgroundChanged;


    private void setRestrictBackground(boolean flag) throws Exception {
    private void setRestrictBackground(boolean flag) throws Exception {
        // Must set expectation, otherwise NMPS will reset value to previous one.
        doReturn(true).when(mNetworkManager).setDataSaverModeEnabled(flag);
        mService.setRestrictBackground(flag);
        mService.setRestrictBackground(flag);
        // Sanity check.
        // Sanity check.
        assertEquals("restrictBackground not set", flag, mService.getRestrictBackground());
        assertEquals("restrictBackground not set", flag, mService.getRestrictBackground());