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

Commit 0113703b authored by Piyush Singhania's avatar Piyush Singhania Committed by Android (Google) Code Review
Browse files

Merge "Stop sending the broadcast POWER_SAVE_TEMP_WHITELIST_CHANGED" into main

parents bd56c6d7 726f8943
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -37,3 +37,13 @@ flag {
        purpose: PURPOSE_BUGFIX
    }
}

flag {
    name: "stop_power_save_temp_whitelist_broadcast"
    namespace: "backstage_power"
    description: "Stop sending the power_save_temp_whitelist broadcast"
    bug: "427275343"
    metadata {
        purpose: PURPOSE_BUGFIX
    }
}
+9 −3
Original line number Diff line number Diff line
@@ -4498,10 +4498,12 @@ public class DeviceIdleController extends SystemService
    private void reportTempWhitelistChangedLocked(final int uid, final boolean added) {
        mHandler.obtainMessage(MSG_REPORT_TEMP_APP_WHITELIST_CHANGED, uid, added ? 1 : 0)
                .sendToTarget();
        getContext().sendBroadcastAsUser(mPowerSaveTempWhitelistChangedIntent, UserHandle.SYSTEM,
                null /* receiverPermission */,
        if (!Flags.stopPowerSaveTempWhitelistBroadcast()) {
            getContext().sendBroadcastAsUser(mPowerSaveTempWhitelistChangedIntent,
                    UserHandle.SYSTEM, null /* receiverPermission */,
                    mPowerSaveTempWhilelistChangedOptions);
        }
    }

    private void passWhiteListsToForceAppStandbyTrackerLocked() {
        mAppStateTracker.setPowerSaveExemptionListAppIds(
@@ -5264,6 +5266,10 @@ public class DeviceIdleController extends SystemService
        pw.print(Flags.FLAG_REMOVE_IDLE_LOCATION);
        pw.print("=");
        pw.println(Flags.removeIdleLocation());
        pw.print("    ");
        pw.print(Flags.FLAG_STOP_POWER_SAVE_TEMP_WHITELIST_BROADCAST);
        pw.print("=");
        pw.println(Flags.stopPowerSaveTempWhitelistBroadcast());
        pw.println();

        synchronized (this) {
+43 −1
Original line number Diff line number Diff line
@@ -438,7 +438,8 @@ public class DeviceIdleControllerTest {

    @Test
    @EnableFlags(Flags.FLAG_USE_CPU_TIME_FOR_TEMP_ALLOWLIST)
    public void testTempAllowlistCountsUptime() {
    @DisableFlags(Flags.FLAG_STOP_POWER_SAVE_TEMP_WHITELIST_BROADCAST)
    public void testTempAllowlistCountsUptime_flagDisabled() {
        doNothing().when(getContext()).sendBroadcastAsUser(any(), any(), any(), any());
        final int testUid = 12345;
        final long durationMs = 4300;
@@ -476,6 +477,47 @@ public class DeviceIdleControllerTest {
        assertFalse(mDeviceIdleController.mTempWhitelistAppIdEndTimes.contains(testUid));
    }

    @Test
    @EnableFlags({Flags.FLAG_USE_CPU_TIME_FOR_TEMP_ALLOWLIST,
            Flags.FLAG_STOP_POWER_SAVE_TEMP_WHITELIST_BROADCAST})
    public void testTempAllowlistCountsUptime() {
        final int testUid = 12345;
        final long durationMs = 4300;
        final long startTime = 100; // Arbitrary starting point in time.
        mInjector.nowUptime = mInjector.nowElapsed = startTime;

        mDeviceIdleController.addPowerSaveTempWhitelistAppDirectInternal(0, testUid, durationMs,
                TEMPORARY_ALLOW_LIST_TYPE_FOREGROUND_SERVICE_ALLOWED, true, REASON_OTHER, "test");

        assertEquals(startTime + durationMs,
                mDeviceIdleController.mTempWhitelistAppIdEndTimes.get(testUid).first.value);

        final InOrder inorder = inOrder(mHandler);
        // mHandler is already stubbed to do nothing on handleMessage.
        inorder.verify(mHandler).sendMessageDelayed(
                argThat(m -> m.what == MSG_TEMP_APP_WHITELIST_TIMEOUT && m.arg1 == testUid),
                eq(durationMs));

        mInjector.nowElapsed += durationMs;
        mInjector.nowUptime += 2;
        // Elapsed time moved past the expiration but not uptime. The check should be rescheduled.
        mDeviceIdleController.checkTempAppWhitelistTimeout(testUid);
        inorder.verify(mHandler).sendMessageDelayed(
                argThat(m -> m.what == MSG_TEMP_APP_WHITELIST_TIMEOUT && m.arg1 == testUid),
                eq(durationMs - 2));
        assertEquals(startTime + durationMs,
                mDeviceIdleController.mTempWhitelistAppIdEndTimes.get(testUid).first.value);

        mInjector.nowUptime += durationMs;
        // Uptime moved past the expiration time. Uid should be removed from the temp allowlist.
        mDeviceIdleController.checkTempAppWhitelistTimeout(testUid);
        inorder.verify(mHandler, never()).sendMessageDelayed(
                argThat(m -> m.what == MSG_TEMP_APP_WHITELIST_TIMEOUT && m.arg1 == testUid),
                anyLong());
        assertFalse(mDeviceIdleController.mTempWhitelistAppIdEndTimes.contains(testUid));
        verify(getContext(), never()).sendBroadcastAsUser(any(), any(), any(), any());
    }

    @Test
    public void testUpdateInteractivityLocked() {
        doReturn(false).when(mPowerManager).isInteractive();