Merge "Unregister Touch Sensors for DOZE_AOD_DOCKED" into rvc-qpr-dev am: 263c0d5d5e

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13230652

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I235e25b265a7ba55ab20e94edab4b44f2005683a
This commit is contained in:
Dave Mankoff
2021-01-11 19:54:03 +00:00
committed by Automerger Merge Worker
4 changed files with 31 additions and 27 deletions

View File

@@ -46,6 +46,7 @@ import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.UiEventLoggerImpl;
import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto;
import com.android.internal.util.IndentingPrintWriter;
import com.android.systemui.plugins.SensorManagerPlugin; import com.android.systemui.plugins.SensorManagerPlugin;
import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters;
import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.AsyncSensorManager;
@@ -80,6 +81,7 @@ public class DozeSensors {
private long mDebounceFrom; private long mDebounceFrom;
private boolean mSettingRegistered; private boolean mSettingRegistered;
private boolean mListening; private boolean mListening;
private boolean mListeningTouchScreenSensors;
@VisibleForTesting @VisibleForTesting
public enum DozeSensorsUiEvent implements UiEventLogger.UiEventEnum { public enum DozeSensorsUiEvent implements UiEventLogger.UiEventEnum {
@@ -222,22 +224,25 @@ public class DozeSensors {
/** /**
* If sensors should be registered and sending signals. * If sensors should be registered and sending signals.
*/ */
public void setListening(boolean listen) { public void setListening(boolean listen, boolean includeTouchScreenSensors) {
if (mListening == listen) { if (mListening == listen && mListeningTouchScreenSensors == includeTouchScreenSensors) {
return; return;
} }
mListening = listen; mListening = listen;
mListeningTouchScreenSensors = includeTouchScreenSensors;
updateListening(); updateListening();
} }
/** /**
* Registers/unregisters sensors based on internal state. * Registers/unregisters sensors based on internal state.
*/ */
public void updateListening() { private void updateListening() {
boolean anyListening = false; boolean anyListening = false;
for (TriggerSensor s : mSensors) { for (TriggerSensor s : mSensors) {
s.setListening(mListening); boolean listen = mListening
if (mListening) { && (!s.mRequiresTouchscreen || mListeningTouchScreenSensors);
s.setListening(listen);
if (listen) {
anyListening = true; anyListening = true;
} }
} }
@@ -309,10 +314,14 @@ public class DozeSensors {
/** Dump current state */ /** Dump current state */
public void dump(PrintWriter pw) { public void dump(PrintWriter pw) {
pw.println("mListening=" + mListening);
pw.println("mListeningTouchScreenSensors=" + mListeningTouchScreenSensors);
IndentingPrintWriter idpw = new IndentingPrintWriter(pw, " ");
idpw.increaseIndent();
for (TriggerSensor s : mSensors) { for (TriggerSensor s : mSensors) {
pw.println(" Sensor: " + s.toString()); idpw.println("Sensor: " + s.toString());
} }
pw.println(" ProxSensor: " + mProximitySensor.toString()); idpw.println("ProxSensor: " + mProximitySensor.toString());
} }
/** /**

View File

@@ -38,6 +38,7 @@ import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger; import com.android.internal.logging.UiEventLogger;
import com.android.internal.logging.UiEventLoggerImpl; import com.android.internal.logging.UiEventLoggerImpl;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.util.IndentingPrintWriter;
import com.android.systemui.Dependency; import com.android.systemui.Dependency;
import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManager;
@@ -408,15 +409,12 @@ public class DozeTriggers implements DozeMachine.Part {
break; break;
case DOZE_PULSE_DONE: case DOZE_PULSE_DONE:
mDozeSensors.requestTemporaryDisable(); mDozeSensors.requestTemporaryDisable();
// A pulse will temporarily disable sensors that require a touch screen.
// Let's make sure that they are re-enabled when the pulse is over.
mDozeSensors.updateListening();
break; break;
case FINISH: case FINISH:
mBroadcastReceiver.unregister(mBroadcastDispatcher); mBroadcastReceiver.unregister(mBroadcastDispatcher);
mDozeHost.removeCallback(mHostCallback); mDozeHost.removeCallback(mHostCallback);
mDockManager.removeListener(mDockEventListener); mDockManager.removeListener(mDockEventListener);
mDozeSensors.setListening(false); mDozeSensors.setListening(false, false);
mDozeSensors.setProxListening(false); mDozeSensors.setProxListening(false);
mWantSensors = false; mWantSensors = false;
mWantProx = false; mWantProx = false;
@@ -424,20 +422,16 @@ public class DozeTriggers implements DozeMachine.Part {
break; break;
default: default:
} }
mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors);
} }
@Override @Override
public void onScreenState(int state) { public void onScreenState(int state) {
mDozeSensors.onScreenState(state); mDozeSensors.onScreenState(state);
if (state == Display.STATE_DOZE || state == Display.STATE_DOZE_SUSPEND mDozeSensors.setProxListening(mWantProx && (state == Display.STATE_DOZE
|| state == Display.STATE_OFF) { || state == Display.STATE_DOZE_SUSPEND
mDozeSensors.setProxListening(mWantProx); || state == Display.STATE_OFF));
mDozeSensors.setListening(mWantSensors); mDozeSensors.setListening(mWantSensors, mWantTouchScreenSensors);
mDozeSensors.setTouchscreenSensorsListening(mWantTouchScreenSensors);
} else {
mDozeSensors.setProxListening(false);
mDozeSensors.setListening(mWantSensors);
}
} }
private void checkTriggersAtInit() { private void checkTriggersAtInit() {
@@ -513,7 +507,9 @@ public class DozeTriggers implements DozeMachine.Part {
pw.println(" pulsePending=" + mPulsePending); pw.println(" pulsePending=" + mPulsePending);
pw.println("DozeSensors:"); pw.println("DozeSensors:");
mDozeSensors.dump(pw); IndentingPrintWriter idpw = new IndentingPrintWriter(pw, " ");
idpw.increaseIndent();
mDozeSensors.dump(idpw);
} }
private class TriggerReceiver extends BroadcastReceiver { private class TriggerReceiver extends BroadcastReceiver {

View File

@@ -77,8 +77,6 @@ public class DozeSensorsTest extends SysuiTestCase {
@Mock @Mock
private Consumer<Boolean> mProxCallback; private Consumer<Boolean> mProxCallback;
@Mock @Mock
private AlwaysOnDisplayPolicy mAlwaysOnDisplayPolicy;
@Mock
private TriggerSensor mTriggerSensor; private TriggerSensor mTriggerSensor;
@Mock @Mock
private DozeLog mDozeLog; private DozeLog mDozeLog;
@@ -110,7 +108,7 @@ public class DozeSensorsTest extends SysuiTestCase {
@Test @Test
public void testSensorDebounce() { public void testSensorDebounce() {
mDozeSensors.setListening(true); mDozeSensors.setListening(true, true);
mWakeLockScreenListener.onSensorChanged(mock(SensorManagerPlugin.SensorEvent.class)); mWakeLockScreenListener.onSensorChanged(mock(SensorManagerPlugin.SensorEvent.class));
mTestableLooper.processAllMessages(); mTestableLooper.processAllMessages();
@@ -128,7 +126,7 @@ public class DozeSensorsTest extends SysuiTestCase {
@Test @Test
public void testSetListening_firstTrue_registerSettingsObserver() { public void testSetListening_firstTrue_registerSettingsObserver() {
verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt()); verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt());
mDozeSensors.setListening(true); mDozeSensors.setListening(true, true);
verify(mTriggerSensor).registerSettingsObserver(any(ContentObserver.class)); verify(mTriggerSensor).registerSettingsObserver(any(ContentObserver.class));
} }
@@ -136,8 +134,8 @@ public class DozeSensorsTest extends SysuiTestCase {
@Test @Test
public void testSetListening_twiceTrue_onlyRegisterSettingsObserverOnce() { public void testSetListening_twiceTrue_onlyRegisterSettingsObserverOnce() {
verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt()); verify(mSensorManager, never()).registerListener(any(), any(Sensor.class), anyInt());
mDozeSensors.setListening(true); mDozeSensors.setListening(true, true);
mDozeSensors.setListening(true); mDozeSensors.setListening(true, true);
verify(mTriggerSensor, times(1)).registerSettingsObserver(any(ContentObserver.class)); verify(mTriggerSensor, times(1)).registerSettingsObserver(any(ContentObserver.class));
} }

View File

@@ -149,6 +149,7 @@ public class DozeTriggersTest extends SysuiTestCase {
clearInvocations(mSensors); clearInvocations(mSensors);
mTriggers.transitionTo(DozeMachine.State.DOZE_PULSING, DozeMachine.State.DOZE_PULSE_DONE); mTriggers.transitionTo(DozeMachine.State.DOZE_PULSING, DozeMachine.State.DOZE_PULSE_DONE);
mTriggers.transitionTo(DozeMachine.State.DOZE_PULSE_DONE, DozeMachine.State.DOZE_AOD);
waitForSensorManager(); waitForSensorManager();
verify(mSensors).requestTriggerSensor(any(), eq(mTapSensor)); verify(mSensors).requestTriggerSensor(any(), eq(mTapSensor));
} }