summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jay Aliomer <aaliomer@google.com> 2020-06-15 16:41:21 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-06-15 16:41:21 +0000
commitc6fb2df3e5eb352f215be6cf15a0ad4f0b37664d (patch)
treee2c3480aaf72257c46ee42b4adad871684a97198
parent60d3543b3a8b3447e2da8e4d7f881ccda1f24030 (diff)
parent284afca897f14df3f94a7342bf3c77c3bf5fba22 (diff)
Merge "Dark theme twilight mode not initializing properly" into rvc-dev am: 284afca897
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/11794325 Change-Id: I25e60ce252a126810179175fa61038f92eae8037
-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 389a03868d80..1d75967756c3 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;
@@ -56,7 +57,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;
@@ -66,6 +66,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;
@@ -101,6 +102,7 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
private BroadcastReceiver mTimeChangedCallback;
private AlarmManager.OnAlarmListener mCustomListener;
private Consumer<PowerSaveState> mPowerSaveConsumer;
+ private TwilightListener mTwilightListener;
@Before
public void setUp() {
@@ -108,6 +110,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());
@@ -162,6 +168,37 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
@Ignore // b/152719290 - Fails on stage-aosp-master
@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);