diff options
-rw-r--r-- | services/core/java/com/android/server/UiModeManagerService.java | 20 | ||||
-rw-r--r-- | services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java | 29 |
2 files changed, 31 insertions, 18 deletions
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java index d13dd2f2e1fc..896c9b8d0932 100644 --- a/services/core/java/com/android/server/UiModeManagerService.java +++ b/services/core/java/com/android/server/UiModeManagerService.java @@ -885,8 +885,6 @@ final class UiModeManagerService extends SystemService { ? customModeType : MODE_NIGHT_CUSTOM_TYPE_UNKNOWN; mNightMode.set(mode); - //deactivates AttentionMode if user toggles DarkTheme - mAttentionModeThemeOverlay = MODE_ATTENTION_THEME_OVERLAY_OFF; resetNightModeOverrideLocked(); persistNightMode(user); // on screen off will update configuration instead @@ -1009,15 +1007,16 @@ final class UiModeManagerService extends SystemService { @Override public boolean setNightModeActivatedForCustomMode(int modeNightCustomType, boolean active) { - return setNightModeActivatedForModeInternal(modeNightCustomType, active); + return setNightModeActivatedForModeInternal(modeNightCustomType, active, false); } @Override public boolean setNightModeActivated(boolean active) { - return setNightModeActivatedForModeInternal(mNightModeCustomType, active); + return setNightModeActivatedForModeInternal(mNightModeCustomType, active, true); } - private boolean setNightModeActivatedForModeInternal(int modeCustomType, boolean active) { + private boolean setNightModeActivatedForModeInternal(int modeCustomType, + boolean active, boolean isUserInteraction) { if (getContext().checkCallingOrSelfPermission( android.Manifest.permission.MODIFY_DAY_NIGHT_MODE) != PackageManager.PERMISSION_GRANTED) { @@ -1053,13 +1052,16 @@ final class UiModeManagerService extends SystemService { mOverrideNightModeOn = active; mOverrideNightModeUser = mCurrentUser; persistNightModeOverrides(mCurrentUser); - } else if (mNightMode.get() == UiModeManager.MODE_NIGHT_NO - && active) { + } else if (mNightMode.get() == UiModeManager.MODE_NIGHT_NO && active) { mNightMode.set(UiModeManager.MODE_NIGHT_YES); - } else if (mNightMode.get() == UiModeManager.MODE_NIGHT_YES - && !active) { + } else if (mNightMode.get() == UiModeManager.MODE_NIGHT_YES && !active) { mNightMode.set(UiModeManager.MODE_NIGHT_NO); } + + if (isUserInteraction) { + // deactivates AttentionMode if user toggles DarkTheme + mAttentionModeThemeOverlay = MODE_ATTENTION_THEME_OVERLAY_OFF; + } updateConfigurationLocked(); applyConfigurationExternallyLocked(); persistNightMode(mCurrentUser); diff --git a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java index 3b0cb4ad8779..0404b82d306d 100644 --- a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java @@ -1460,9 +1460,12 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { verify(mInjector).startDreamWhenDockedIfAppropriate(mContext); } - private void testAttentionModeThemeOverlay(boolean modeNight) throws RemoteException { + // Test the attention mode overlay with all the possible attention modes and the initial night + // mode state. Also tests if the attention mode is turned off when the night mode is toggled by + // the user. + private void testAttentionModeThemeOverlay(boolean initialNightMode) throws RemoteException { //setup - if (modeNight) { + if (initialNightMode) { mService.setNightMode(MODE_NIGHT_YES); assertTrue(mUiManagerService.getConfiguration().isNightModeActive()); } else { @@ -1472,21 +1475,29 @@ public class UiModeManagerServiceTest extends UiServiceTestCase { // attention modes with expected night modes Map<Integer, Boolean> modes = Map.of( - MODE_ATTENTION_THEME_OVERLAY_OFF, modeNight, + MODE_ATTENTION_THEME_OVERLAY_OFF, initialNightMode, MODE_ATTENTION_THEME_OVERLAY_DAY, false, MODE_ATTENTION_THEME_OVERLAY_NIGHT, true ); // test - for (int aMode : modes.keySet()) { + for (int attentionMode : modes.keySet()) { try { - mService.setAttentionModeThemeOverlay(aMode); + mService.setAttentionModeThemeOverlay(attentionMode); int appliedAMode = mService.getAttentionModeThemeOverlay(); - boolean nMode = modes.get(aMode); - - assertEquals(aMode, appliedAMode); - assertEquals(isNightModeActivated(), nMode); + boolean expectedNightMode = modes.get(attentionMode); + + assertEquals(attentionMode, appliedAMode); + assertEquals(expectedNightMode, isNightModeActivated()); + + // If attentionMode is active, flip the night mode and assets + // the attention mode is disabled + if (attentionMode != MODE_ATTENTION_THEME_OVERLAY_OFF) { + mService.setNightModeActivated(!expectedNightMode); + assertEquals(MODE_ATTENTION_THEME_OVERLAY_OFF, + mService.getAttentionModeThemeOverlay()); + } } catch (RemoteException e) { fail("Error communicating with server: " + e.getMessage()); } |