Merge "Don't turn on prox until after screen is off/dozed" into rvc-d1-dev am: 6f718bba6f am: 42cc90e83a
Change-Id: I5f0c05dd9df5b8602e1725bb20250ca8fa02972d
This commit is contained in:
@@ -199,6 +199,12 @@ public class DozeMachine {
|
||||
requestState(State.DOZE_REQUEST_PULSE, pulseReason);
|
||||
}
|
||||
|
||||
void onScreenState(int state) {
|
||||
for (Part part : mParts) {
|
||||
part.onScreenState(state);
|
||||
}
|
||||
}
|
||||
|
||||
private void requestState(State requestedState, int pulseReason) {
|
||||
Assert.isMainThread();
|
||||
if (DEBUG) {
|
||||
@@ -423,6 +429,9 @@ public class DozeMachine {
|
||||
|
||||
/** Give the Part a chance to clean itself up. */
|
||||
default void destroy() {}
|
||||
|
||||
/** Alerts that the screenstate is being changed. */
|
||||
default void onScreenState(int state) {}
|
||||
}
|
||||
|
||||
/** A wrapper interface for {@link android.service.dreams.DreamService} */
|
||||
|
||||
@@ -29,6 +29,7 @@ import android.os.SystemProperties;
|
||||
import android.os.Trace;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
import android.view.Display;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.systemui.broadcast.BroadcastDispatcher;
|
||||
@@ -68,6 +69,7 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
|
||||
* --ei brightness_bucket 1}
|
||||
*/
|
||||
private int mDebugBrightnessBucket = -1;
|
||||
private DozeMachine.State mState;
|
||||
|
||||
@VisibleForTesting
|
||||
public DozeScreenBrightness(Context context, DozeMachine.Service service,
|
||||
@@ -107,17 +109,10 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
|
||||
|
||||
@Override
|
||||
public void transitionTo(DozeMachine.State oldState, DozeMachine.State newState) {
|
||||
mState = newState;
|
||||
switch (newState) {
|
||||
case INITIALIZED:
|
||||
resetBrightnessToDefault();
|
||||
break;
|
||||
case DOZE_AOD:
|
||||
case DOZE_REQUEST_PULSE:
|
||||
case DOZE_AOD_DOCKED:
|
||||
setLightSensorEnabled(true);
|
||||
break;
|
||||
case DOZE:
|
||||
setLightSensorEnabled(false);
|
||||
resetBrightnessToDefault();
|
||||
break;
|
||||
case FINISH:
|
||||
@@ -130,6 +125,16 @@ public class DozeScreenBrightness extends BroadcastReceiver implements DozeMachi
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScreenState(int state) {
|
||||
if (mState == DozeMachine.State.FINISH && !mScreenOff
|
||||
&& (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND)) {
|
||||
setLightSensorEnabled(true);
|
||||
} else {
|
||||
setLightSensorEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void onDestroy() {
|
||||
setLightSensorEnabled(false);
|
||||
if (mDebuggable) {
|
||||
|
||||
@@ -66,7 +66,6 @@ public class DozeSensors {
|
||||
private final AlarmManager mAlarmManager;
|
||||
private final AsyncSensorManager mSensorManager;
|
||||
private final ContentResolver mResolver;
|
||||
private final TriggerSensor mPickupSensor;
|
||||
private final DozeParameters mDozeParameters;
|
||||
private final AmbientDisplayConfiguration mConfig;
|
||||
private final WakeLock mWakeLock;
|
||||
@@ -80,7 +79,6 @@ public class DozeSensors {
|
||||
private long mDebounceFrom;
|
||||
private boolean mSettingRegistered;
|
||||
private boolean mListening;
|
||||
private boolean mPaused;
|
||||
|
||||
@VisibleForTesting
|
||||
public enum DozeSensorsUiEvent implements UiEventLogger.UiEventEnum {
|
||||
@@ -121,7 +119,7 @@ public class DozeSensors {
|
||||
dozeParameters.getPulseOnSigMotion(),
|
||||
DozeLog.PULSE_REASON_SENSOR_SIGMOTION, false /* touchCoords */,
|
||||
false /* touchscreen */, dozeLog),
|
||||
mPickupSensor = new TriggerSensor(
|
||||
new TriggerSensor(
|
||||
mSensorManager.getDefaultSensor(Sensor.TYPE_PICK_UP_GESTURE),
|
||||
Settings.Secure.DOZE_PICK_UP_GESTURE,
|
||||
true /* settingDef */,
|
||||
@@ -231,18 +229,6 @@ public class DozeSensors {
|
||||
updateListening();
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregister sensors, when listening, unless they are prox gated.
|
||||
* @see #setListening(boolean)
|
||||
*/
|
||||
public void setPaused(boolean paused) {
|
||||
if (mPaused == paused) {
|
||||
return;
|
||||
}
|
||||
mPaused = paused;
|
||||
updateListening();
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers/unregisters sensors based on internal state.
|
||||
*/
|
||||
@@ -304,10 +290,6 @@ public class DozeSensors {
|
||||
}
|
||||
};
|
||||
|
||||
public void setDisableSensorsInterferingWithProximity(boolean disable) {
|
||||
mPickupSensor.setDisabled(disable);
|
||||
}
|
||||
|
||||
/** Ignore the setting value of only the sensors that require the touchscreen. */
|
||||
public void ignoreTouchScreenSensorsSettingInterferingWithDocking(boolean ignore) {
|
||||
for (TriggerSensor sensor : mSensors) {
|
||||
|
||||
@@ -130,4 +130,10 @@ public class DozeService extends DreamService
|
||||
mDozeMachine.requestState(DozeMachine.State.DOZE);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDozeScreenState(int state) {
|
||||
super.setDozeScreenState(state);
|
||||
mDozeMachine.onScreenState(state);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,7 @@ import android.os.SystemClock;
|
||||
import android.os.UserHandle;
|
||||
import android.text.format.Formatter;
|
||||
import android.util.Log;
|
||||
import android.view.Display;
|
||||
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
@@ -93,6 +94,9 @@ public class DozeTriggers implements DozeMachine.Part {
|
||||
private boolean mPulsePending;
|
||||
|
||||
private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);
|
||||
private boolean mWantProx;
|
||||
private boolean mWantSensors;
|
||||
private boolean mWantTouchScreenSensors;
|
||||
|
||||
@VisibleForTesting
|
||||
public enum DozingUpdateUiEvent implements UiEventLogger.UiEventEnum {
|
||||
@@ -384,24 +388,22 @@ public class DozeTriggers implements DozeMachine.Part {
|
||||
break;
|
||||
case DOZE:
|
||||
case DOZE_AOD:
|
||||
mDozeSensors.setProxListening(newState != DozeMachine.State.DOZE);
|
||||
mDozeSensors.setListening(true);
|
||||
mDozeSensors.setPaused(false);
|
||||
mWantProx = newState != DozeMachine.State.DOZE;
|
||||
mWantSensors = true;
|
||||
mWantTouchScreenSensors = true;
|
||||
if (newState == DozeMachine.State.DOZE_AOD && !sWakeDisplaySensorState) {
|
||||
onWakeScreen(false, newState);
|
||||
}
|
||||
break;
|
||||
case DOZE_AOD_PAUSED:
|
||||
case DOZE_AOD_PAUSING:
|
||||
mDozeSensors.setProxListening(true);
|
||||
mDozeSensors.setPaused(true);
|
||||
mWantProx = true;
|
||||
break;
|
||||
case DOZE_PULSING:
|
||||
case DOZE_PULSING_BRIGHT:
|
||||
case DOZE_AOD_DOCKED:
|
||||
mDozeSensors.setTouchscreenSensorsListening(false);
|
||||
mDozeSensors.setProxListening(true);
|
||||
mDozeSensors.setPaused(false);
|
||||
mWantProx = true;
|
||||
mWantTouchScreenSensors = false;
|
||||
break;
|
||||
case DOZE_PULSE_DONE:
|
||||
mDozeSensors.requestTemporaryDisable();
|
||||
@@ -420,6 +422,19 @@ public class DozeTriggers implements DozeMachine.Part {
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScreenState(int state) {
|
||||
if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND
|
||||
|| state == Display.STATE_OFF) {
|
||||
mDozeSensors.setProxListening(mWantProx);
|
||||
mDozeSensors.setListening(mWantSensors);
|
||||
mDozeSensors.setTouchscreenSensorsListening(mWantTouchScreenSensors);
|
||||
} else {
|
||||
mDozeSensors.setProxListening(false);
|
||||
mDozeSensors.setListening(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void checkTriggersAtInit() {
|
||||
if (mUiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_CAR
|
||||
|| mDozeHost.isBlockingDoze()
|
||||
|
||||
@@ -18,7 +18,6 @@ package com.android.systemui.doze;
|
||||
|
||||
import static com.android.systemui.doze.DozeMachine.State.DOZE;
|
||||
import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD;
|
||||
import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_DOCKED;
|
||||
import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSED;
|
||||
import static com.android.systemui.doze.DozeMachine.State.DOZE_AOD_PAUSING;
|
||||
import static com.android.systemui.doze.DozeMachine.State.DOZE_PULSE_DONE;
|
||||
@@ -41,6 +40,7 @@ import android.content.Intent;
|
||||
import android.os.PowerManager;
|
||||
import android.os.UserHandle;
|
||||
import android.provider.Settings;
|
||||
import android.view.Display;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
import androidx.test.runner.AndroidJUnit4;
|
||||
@@ -89,6 +89,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
||||
mSensor.getSensor(), mBroadcastDispatcher, mDozeHost, null /* handler */,
|
||||
DEFAULT_BRIGHTNESS, SENSOR_TO_BRIGHTNESS, SENSOR_TO_OPACITY,
|
||||
true /* debuggable */);
|
||||
|
||||
mScreen.onScreenState(Display.STATE_ON);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -100,9 +102,11 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testAod_usesLightSensor() throws Exception {
|
||||
public void testAod_usesLightSensor() {
|
||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
|
||||
mScreen.transitionTo(DOZE_AOD, FINISH);
|
||||
mScreen.onScreenState(Display.STATE_DOZE);
|
||||
|
||||
mSensor.sendSensorEvent(3);
|
||||
|
||||
@@ -133,25 +137,12 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
||||
assertEquals(maxBrightness, mServiceFake.screenBrightness);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPausingAod_doesntPauseLightSensor() throws Exception {
|
||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
|
||||
|
||||
mSensor.sendSensorEvent(1);
|
||||
|
||||
mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
|
||||
mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
|
||||
|
||||
mSensor.sendSensorEvent(2);
|
||||
|
||||
assertEquals(2, mServiceFake.screenBrightness);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPausingAod_doesNotResetBrightness() throws Exception {
|
||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
|
||||
mScreen.transitionTo(DOZE_AOD, FINISH);
|
||||
mScreen.onScreenState(Display.STATE_DOZE);
|
||||
|
||||
mSensor.sendSensorEvent(1);
|
||||
|
||||
@@ -161,17 +152,6 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
||||
assertEquals(1, mServiceFake.screenBrightness);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPulsing_usesLightSensor() throws Exception {
|
||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||
mScreen.transitionTo(INITIALIZED, DOZE);
|
||||
mScreen.transitionTo(DOZE, DOZE_REQUEST_PULSE);
|
||||
|
||||
mSensor.sendSensorEvent(1);
|
||||
|
||||
assertEquals(1, mServiceFake.screenBrightness);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPulsing_withoutLightSensor_setsAoDDimmingScrimTransparent() throws Exception {
|
||||
mScreen = new DozeScreenBrightness(mContext, mServiceFake, mSensorManager,
|
||||
@@ -187,16 +167,6 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
||||
verify(mDozeHost).setAodDimmingScrim(eq(0f));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDockedAod_usesLightSensor() {
|
||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||
mScreen.transitionTo(INITIALIZED, DOZE_AOD_DOCKED);
|
||||
|
||||
mSensor.sendSensorEvent(3);
|
||||
|
||||
assertEquals(3, mServiceFake.screenBrightness);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDozingAfterPulsing_pausesLightSensor() throws Exception {
|
||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||
@@ -205,6 +175,7 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
||||
mScreen.transitionTo(DOZE_REQUEST_PULSE, DOZE_PULSING);
|
||||
mScreen.transitionTo(DOZE_PULSING, DOZE_PULSE_DONE);
|
||||
mScreen.transitionTo(DOZE_PULSE_DONE, DOZE);
|
||||
mScreen.onScreenState(Display.STATE_DOZE);
|
||||
|
||||
mSensor.sendSensorEvent(1);
|
||||
|
||||
@@ -239,6 +210,8 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
||||
public void testNonPositiveBrightness_keepsPreviousBrightnessAndScrim() throws Exception {
|
||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
|
||||
mScreen.transitionTo(DOZE_AOD, FINISH);
|
||||
mScreen.onScreenState(Display.STATE_DOZE);
|
||||
|
||||
mSensor.sendSensorEvent(1);
|
||||
mSensor.sendSensorEvent(0);
|
||||
@@ -248,19 +221,23 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pausingAod_unblanksAfterSensor() throws Exception {
|
||||
public void pausingAod_unblanksAfterSensor() {
|
||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
|
||||
mScreen.transitionTo(DOZE_AOD, FINISH);
|
||||
mScreen.onScreenState(Display.STATE_DOZE);
|
||||
|
||||
mSensor.sendSensorEvent(2);
|
||||
|
||||
mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
|
||||
mScreen.transitionTo(FINISH, DOZE_AOD_PAUSING);
|
||||
mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
|
||||
|
||||
mSensor.sendSensorEvent(0);
|
||||
|
||||
reset(mDozeHost);
|
||||
mScreen.transitionTo(DOZE_AOD_PAUSED, DOZE_AOD);
|
||||
mScreen.transitionTo(DOZE_AOD, FINISH);
|
||||
mScreen.onScreenState(Display.STATE_DOZE);
|
||||
mSensor.sendSensorEvent(2);
|
||||
verify(mDozeHost).setAodDimmingScrim(eq(0f));
|
||||
}
|
||||
@@ -269,9 +246,11 @@ public class DozeScreenBrightnessTest extends SysuiTestCase {
|
||||
public void pausingAod_unblanksIfSensorWasAlwaysReady() throws Exception {
|
||||
mScreen.transitionTo(UNINITIALIZED, INITIALIZED);
|
||||
mScreen.transitionTo(INITIALIZED, DOZE_AOD);
|
||||
mScreen.transitionTo(DOZE_AOD, FINISH);
|
||||
mScreen.onScreenState(Display.STATE_DOZE);
|
||||
|
||||
mSensor.sendSensorEvent(2);
|
||||
mScreen.transitionTo(DOZE_AOD, DOZE_AOD_PAUSING);
|
||||
mScreen.transitionTo(FINISH, DOZE_AOD_PAUSING);
|
||||
mScreen.transitionTo(DOZE_AOD_PAUSING, DOZE_AOD_PAUSED);
|
||||
|
||||
reset(mDozeHost);
|
||||
|
||||
@@ -22,7 +22,6 @@ import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyFloat;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.clearInvocations;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
@@ -147,21 +146,6 @@ public class DozeSensorsTest extends SysuiTestCase {
|
||||
verify(mTriggerSensor, times(1)).registerSettingsObserver(any(ContentObserver.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSetPaused_doesntPause_sensors() {
|
||||
verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt());
|
||||
mDozeSensors.setListening(true);
|
||||
verify(mTriggerSensor).setListening(eq(true));
|
||||
|
||||
clearInvocations(mTriggerSensor);
|
||||
mDozeSensors.setPaused(true);
|
||||
verify(mTriggerSensor).setListening(eq(true));
|
||||
|
||||
clearInvocations(mTriggerSensor);
|
||||
mDozeSensors.setListening(false);
|
||||
verify(mTriggerSensor).setListening(eq(false));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDestroy() {
|
||||
mDozeSensors.destroy();
|
||||
|
||||
@@ -35,6 +35,7 @@ import android.os.Looper;
|
||||
import android.testing.AndroidTestingRunner;
|
||||
import android.testing.TestableLooper;
|
||||
import android.testing.TestableLooper.RunWithLooper;
|
||||
import android.view.Display;
|
||||
|
||||
import androidx.test.filters.SmallTest;
|
||||
|
||||
@@ -132,6 +133,7 @@ public class DozeTriggersTest extends SysuiTestCase {
|
||||
when(mMachine.getState()).thenReturn(DozeMachine.State.DOZE);
|
||||
|
||||
mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE);
|
||||
mTriggers.onScreenState(Display.STATE_OFF);
|
||||
waitForSensorManager();
|
||||
verify(mSensors).requestTriggerSensor(any(), eq(mTapSensor));
|
||||
|
||||
@@ -140,6 +142,7 @@ public class DozeTriggersTest extends SysuiTestCase {
|
||||
DozeMachine.State.DOZE_REQUEST_PULSE);
|
||||
mTriggers.transitionTo(DozeMachine.State.DOZE_REQUEST_PULSE,
|
||||
DozeMachine.State.DOZE_PULSING);
|
||||
mTriggers.onScreenState(Display.STATE_DOZE);
|
||||
waitForSensorManager();
|
||||
verify(mSensors).cancelTriggerSensor(any(), eq(mTapSensor));
|
||||
|
||||
@@ -152,10 +155,12 @@ public class DozeTriggersTest extends SysuiTestCase {
|
||||
@Test
|
||||
public void transitionToDockedAod_disablesTouchSensors() {
|
||||
mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE);
|
||||
mTriggers.onScreenState(Display.STATE_OFF);
|
||||
waitForSensorManager();
|
||||
verify(mSensors).requestTriggerSensor(any(), eq(mTapSensor));
|
||||
|
||||
mTriggers.transitionTo(DozeMachine.State.DOZE, DozeMachine.State.DOZE_AOD_DOCKED);
|
||||
mTriggers.onScreenState(Display.STATE_DOZE);
|
||||
waitForSensorManager();
|
||||
|
||||
verify(mSensors).cancelTriggerSensor(any(), eq(mTapSensor));
|
||||
|
||||
Reference in New Issue
Block a user