Loading services/core/java/com/android/server/UiModeManagerService.java +9 −2 Original line number Diff line number Diff line Loading @@ -1648,7 +1648,7 @@ final class UiModeManagerService extends SystemService { return FORCE_INVERT_TYPE_OFF; } if (!mComputedNightMode) { if (!mComputedNightMode && !isPowerSaveNightModeOverrideNeeded()) { return FORCE_INVERT_TYPE_OFF; } Loading Loading @@ -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 { Loading @@ -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 Loading services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java +27 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading
services/core/java/com/android/server/UiModeManagerService.java +9 −2 Original line number Diff line number Diff line Loading @@ -1648,7 +1648,7 @@ final class UiModeManagerService extends SystemService { return FORCE_INVERT_TYPE_OFF; } if (!mComputedNightMode) { if (!mComputedNightMode && !isPowerSaveNightModeOverrideNeeded()) { return FORCE_INVERT_TYPE_OFF; } Loading Loading @@ -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 { Loading @@ -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 Loading
services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java +27 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading