summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jay Aliomer <aaliomer@google.com> 2020-06-08 13:02:38 -0400
committer Jay Aliomer <aaliomer@google.com> 2020-06-14 18:44:57 +0000
commitc110472659b3df5229149ece39587db9ba843953 (patch)
tree683c7b14d9f530d9ecdb11c4560f6b998a0ded3a
parent1e5e8ecad18f16ccc48fafe4a66ac2e19f1b1461 (diff)
Dark theme twilight mode not initializing properly
When overriding night mode, changes dont apply. The fix is to make sure that the overrride is reset in situation where it doesnt apply anymore Also, the other bug is that changes should apply when screen is off or in car mode, but was applying in car mode only Test: UiModeManagerServiceTest Bug: 158407234 Change-Id: I9023b16c6619ddd31954fbc0a0a527b36671d2ec
-rw-r--r--services/core/java/com/android/server/UiModeManagerService.java13
-rw-r--r--services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java41
2 files changed, 43 insertions, 11 deletions
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index 35936babf3cb..be080e5cce62 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -233,7 +233,7 @@ final class UiModeManagerService extends SystemService {
public void onTwilightStateChanged(@Nullable TwilightState state) {
synchronized (mLock) {
if (mNightMode == UiModeManager.MODE_NIGHT_AUTO && mSystemReady) {
- if (mCar) {
+ if (shouldApplyAutomaticChangesImmediately()) {
updateLocked(0, 0);
} else {
registerScreenOffEventLocked();
@@ -1155,7 +1155,6 @@ final class UiModeManagerService extends SystemService {
void updateLocked(int enableFlags, int disableFlags) {
String action = null;
String oldAction = null;
- boolean originalComputedNightMode = mComputedNightMode;
if (mLastBroadcastState == Intent.EXTRA_DOCK_STATE_CAR) {
adjustStatusBarCarModeLocked();
oldAction = UiModeManager.ACTION_EXIT_CAR_MODE;
@@ -1236,16 +1235,11 @@ final class UiModeManagerService extends SystemService {
sendConfigurationAndStartDreamOrDockAppLocked(category);
}
- // reset overrides if mComputedNightMode changes
- if (originalComputedNightMode != mComputedNightMode) {
- resetNightModeOverrideLocked();
- }
-
// keep screen on when charging and in car mode
boolean keepScreenOn = mCharging &&
((mCarModeEnabled && mCarModeKeepsScreenOn &&
- (mCarModeEnableFlags & UiModeManager.ENABLE_CAR_MODE_ALLOW_SLEEP) == 0) ||
- (mCurUiMode == Configuration.UI_MODE_TYPE_DESK && mDeskModeKeepsScreenOn));
+ (mCarModeEnableFlags & UiModeManager.ENABLE_CAR_MODE_ALLOW_SLEEP) == 0) ||
+ (mCurUiMode == Configuration.UI_MODE_TYPE_DESK && mDeskModeKeepsScreenOn));
if (keepScreenOn != mWakeLock.isHeld()) {
if (keepScreenOn) {
mWakeLock.acquire();
@@ -1403,6 +1397,7 @@ final class UiModeManagerService extends SystemService {
mComputedNightMode = false;
return;
}
+ resetNightModeOverrideLocked();
}
private boolean resetNightModeOverrideLocked() {
diff --git a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
index 3062584aee20..b100c8482bf8 100644
--- a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
@@ -31,9 +31,10 @@ import android.os.PowerManager;
import android.os.PowerManagerInternal;
import android.os.PowerSaveState;
import android.os.RemoteException;
-import android.provider.Settings;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
+
+import com.android.server.twilight.TwilightListener;
import com.android.server.twilight.TwilightManager;
import com.android.server.twilight.TwilightState;
import com.android.server.wm.WindowManagerInternal;
@@ -55,7 +56,6 @@ import static junit.framework.TestCase.assertFalse;
import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString;
@@ -65,6 +65,7 @@ import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.atLeast;
import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -100,6 +101,7 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
private BroadcastReceiver mTimeChangedCallback;
private AlarmManager.OnAlarmListener mCustomListener;
private Consumer<PowerSaveState> mPowerSaveConsumer;
+ private TwilightListener mTwilightListener;
@Before
public void setUp() {
@@ -107,6 +109,10 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
when(mContext.checkCallingOrSelfPermission(anyString()))
.thenReturn(PackageManager.PERMISSION_GRANTED);
doAnswer(inv -> {
+ mTwilightListener = (TwilightListener) inv.getArgument(0);
+ return null;
+ }).when(mTwilightManager).registerListener(any(), any());
+ doAnswer(inv -> {
mPowerSaveConsumer = (Consumer<PowerSaveState>) inv.getArgument(1);
return null;
}).when(mLocalPowerManager).registerLowPowerModeObserver(anyInt(), any());
@@ -160,6 +166,37 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
}
@Test
+ public void setNightMoveActivated_overridesFunctionCorrectly() throws RemoteException {
+ // set up
+ when(mPowerManager.isInteractive()).thenReturn(false);
+ mService.setNightMode(MODE_NIGHT_NO);
+ assertFalse(mUiManagerService.getConfiguration().isNightModeActive());
+
+ // assume it is day time
+ doReturn(false).when(mTwilightState).isNight();
+
+ // set mode to auto
+ mService.setNightMode(MODE_NIGHT_AUTO);
+
+ // set night mode on overriding current config
+ mService.setNightModeActivated(true);
+
+ assertTrue(mUiManagerService.getConfiguration().isNightModeActive());
+
+ // now it is night time
+ doReturn(true).when(mTwilightState).isNight();
+ mTwilightListener.onTwilightStateChanged(mTwilightState);
+
+ assertTrue(mUiManagerService.getConfiguration().isNightModeActive());
+
+ // now it is next day mid day
+ doReturn(false).when(mTwilightState).isNight();
+ mTwilightListener.onTwilightStateChanged(mTwilightState);
+
+ assertFalse(mUiManagerService.getConfiguration().isNightModeActive());
+ }
+
+ @Test
public void setAutoMode_screenOffRegistered() throws RemoteException {
try {
mService.setNightMode(MODE_NIGHT_NO);