Merge "Dark theme twilight mode not initializing properly" into rvc-dev

This commit is contained in:
Jay Aliomer
2020-06-15 16:30:02 +00:00
committed by Android (Google) Code Review
2 changed files with 43 additions and 11 deletions

View File

@@ -233,7 +233,7 @@ final class UiModeManagerService extends SystemService {
public void onTwilightStateChanged(@Nullable TwilightState state) { public void onTwilightStateChanged(@Nullable TwilightState state) {
synchronized (mLock) { synchronized (mLock) {
if (mNightMode == UiModeManager.MODE_NIGHT_AUTO && mSystemReady) { if (mNightMode == UiModeManager.MODE_NIGHT_AUTO && mSystemReady) {
if (mCar) { if (shouldApplyAutomaticChangesImmediately()) {
updateLocked(0, 0); updateLocked(0, 0);
} else { } else {
registerScreenOffEventLocked(); registerScreenOffEventLocked();
@@ -1155,7 +1155,6 @@ final class UiModeManagerService extends SystemService {
void updateLocked(int enableFlags, int disableFlags) { void updateLocked(int enableFlags, int disableFlags) {
String action = null; String action = null;
String oldAction = null; String oldAction = null;
boolean originalComputedNightMode = mComputedNightMode;
if (mLastBroadcastState == Intent.EXTRA_DOCK_STATE_CAR) { if (mLastBroadcastState == Intent.EXTRA_DOCK_STATE_CAR) {
adjustStatusBarCarModeLocked(); adjustStatusBarCarModeLocked();
oldAction = UiModeManager.ACTION_EXIT_CAR_MODE; oldAction = UiModeManager.ACTION_EXIT_CAR_MODE;
@@ -1236,16 +1235,11 @@ final class UiModeManagerService extends SystemService {
sendConfigurationAndStartDreamOrDockAppLocked(category); sendConfigurationAndStartDreamOrDockAppLocked(category);
} }
// reset overrides if mComputedNightMode changes
if (originalComputedNightMode != mComputedNightMode) {
resetNightModeOverrideLocked();
}
// keep screen on when charging and in car mode // keep screen on when charging and in car mode
boolean keepScreenOn = mCharging && boolean keepScreenOn = mCharging &&
((mCarModeEnabled && mCarModeKeepsScreenOn && ((mCarModeEnabled && mCarModeKeepsScreenOn &&
(mCarModeEnableFlags & UiModeManager.ENABLE_CAR_MODE_ALLOW_SLEEP) == 0) || (mCarModeEnableFlags & UiModeManager.ENABLE_CAR_MODE_ALLOW_SLEEP) == 0) ||
(mCurUiMode == Configuration.UI_MODE_TYPE_DESK && mDeskModeKeepsScreenOn)); (mCurUiMode == Configuration.UI_MODE_TYPE_DESK && mDeskModeKeepsScreenOn));
if (keepScreenOn != mWakeLock.isHeld()) { if (keepScreenOn != mWakeLock.isHeld()) {
if (keepScreenOn) { if (keepScreenOn) {
mWakeLock.acquire(); mWakeLock.acquire();
@@ -1403,6 +1397,7 @@ final class UiModeManagerService extends SystemService {
mComputedNightMode = false; mComputedNightMode = false;
return; return;
} }
resetNightModeOverrideLocked();
} }
private boolean resetNightModeOverrideLocked() { private boolean resetNightModeOverrideLocked() {

View File

@@ -31,9 +31,10 @@ import android.os.PowerManager;
import android.os.PowerManagerInternal; import android.os.PowerManagerInternal;
import android.os.PowerSaveState; import android.os.PowerSaveState;
import android.os.RemoteException; import android.os.RemoteException;
import android.provider.Settings;
import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper; import android.testing.TestableLooper;
import com.android.server.twilight.TwilightListener;
import com.android.server.twilight.TwilightManager; import com.android.server.twilight.TwilightManager;
import com.android.server.twilight.TwilightState; import com.android.server.twilight.TwilightState;
import com.android.server.wm.WindowManagerInternal; import com.android.server.wm.WindowManagerInternal;
@@ -55,7 +56,6 @@ import static junit.framework.TestCase.assertFalse;
import static junit.framework.TestCase.assertTrue; import static junit.framework.TestCase.assertTrue;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.anyString; 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.atLeast;
import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.atLeastOnce;
import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.times; import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -100,12 +101,17 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
private BroadcastReceiver mTimeChangedCallback; private BroadcastReceiver mTimeChangedCallback;
private AlarmManager.OnAlarmListener mCustomListener; private AlarmManager.OnAlarmListener mCustomListener;
private Consumer<PowerSaveState> mPowerSaveConsumer; private Consumer<PowerSaveState> mPowerSaveConsumer;
private TwilightListener mTwilightListener;
@Before @Before
public void setUp() { public void setUp() {
initMocks(this); initMocks(this);
when(mContext.checkCallingOrSelfPermission(anyString())) when(mContext.checkCallingOrSelfPermission(anyString()))
.thenReturn(PackageManager.PERMISSION_GRANTED); .thenReturn(PackageManager.PERMISSION_GRANTED);
doAnswer(inv -> {
mTwilightListener = (TwilightListener) inv.getArgument(0);
return null;
}).when(mTwilightManager).registerListener(any(), any());
doAnswer(inv -> { doAnswer(inv -> {
mPowerSaveConsumer = (Consumer<PowerSaveState>) inv.getArgument(1); mPowerSaveConsumer = (Consumer<PowerSaveState>) inv.getArgument(1);
return null; return null;
@@ -159,6 +165,37 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
LocalServices.addService(clazz, service); LocalServices.addService(clazz, service);
} }
@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 @Test
public void setAutoMode_screenOffRegistered() throws RemoteException { public void setAutoMode_screenOffRegistered() throws RemoteException {
try { try {