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

Commit e7502b9f authored by chihtinglo's avatar chihtinglo
Browse files

fix(edt): considering power saver mode when updating the force invert type

Since the power saver dark theme override is not captured in
mComputedNightMode, we need to consider this case when updating the
force invert type.

Bug: 442998674
Test: atest UiModeManagerServiceTest
Test: manually verifying through the reproduce steps
Flag: android.view.accessibility.force_invert_color
Change-Id: I1193550a142044e5c290c44344c4d7d50dc70be5
parent 9ee322dc
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -1648,7 +1648,7 @@ final class UiModeManagerService extends SystemService {
            return FORCE_INVERT_TYPE_OFF;
        }

        if (!mComputedNightMode) {
        if (!mComputedNightMode && !isPowerSaveNightModeOverrideNeeded()) {
            return FORCE_INVERT_TYPE_OFF;
        }

@@ -2120,7 +2120,7 @@ final class UiModeManagerService extends SystemService {
        updateForceInvertStates();

        // Override night mode in power save mode if not in car mode
        if (mPowerSave && !mCarModeEnabled && !mCar) {
        if (isPowerSaveNightModeOverrideNeeded()) {
            uiMode &= ~Configuration.UI_MODE_NIGHT_NO;
            uiMode |= Configuration.UI_MODE_NIGHT_YES;
        } else {
@@ -2142,6 +2142,13 @@ final class UiModeManagerService extends SystemService {
        }
    }

    /**
     * Override night mode in power save mode if not in car mode
     */
    private boolean isPowerSaveNightModeOverrideNeeded() {
        return mPowerSave && !mCarModeEnabled && !mCar;
    }

    @UiModeManager.NightMode
    private int getComputedUiModeConfiguration(int uiMode) {
        uiMode |= mComputedNightMode ? Configuration.UI_MODE_NIGHT_YES
+27 −0
Original line number Diff line number Diff line
@@ -1773,6 +1773,33 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
                .isEqualTo(FORCE_INVERT_PACKAGE_ALWAYS_DISABLE);
    }

    @Test
    @EnableFlags({ android.view.accessibility.Flags.FLAG_FORCE_INVERT_COLOR,
            android.app.Flags.FLAG_FIX_CONTRAST_AND_FORCE_INVERT_STATE_FOR_MULTI_USER })
    public void nightModeFalse_batterySaverOn_forceInvertTypeDark() throws RemoteException {
        int testUserId = 9;
        switchUser(testUserId);
        Settings.Secure.putIntForUser(
                mContentResolver,
                Settings.Secure.ACCESSIBILITY_FORCE_INVERT_COLOR_ENABLED,
                /* value= */ 1,
                /* userId = */ testUserId);
        mService.setNightMode(MODE_NIGHT_NO);
        when(mTwilightState.isNight()).thenReturn(false);
        mService.setNightMode(MODE_NIGHT_AUTO);

        // night NO
        assertFalse(isNightModeActivated());

        mPowerSaveConsumer.accept(
                new PowerSaveState.Builder().setBatterySaverEnabled(true).build());

        // night YES
        assertTrue(isNightModeActivated());
        assertThat(mUiManagerService.getForceInvertStateInternal(testUserId))
                .isEqualTo(FORCE_INVERT_TYPE_DARK);
    }

    private void switchUser(int userId) {
        SystemService.TargetUser user = mock(SystemService.TargetUser.class);
        doReturn(userId).when(user).getUserIdentifier();