Loading packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java +3 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.phone.BiometricUnlockController; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.wakelock.DelayedWakeLock; import com.android.systemui.util.wakelock.WakeLock; Loading Loading @@ -97,7 +98,8 @@ public class DozeFactory { DockManager dockManager) { boolean allowPulseTriggers = true; return new DozeTriggers(context, machine, host, alarmManager, config, params, sensorManager, handler, wakeLock, allowPulseTriggers, dockManager); sensorManager, handler, wakeLock, allowPulseTriggers, dockManager, new ProximitySensor(context, sensorManager)); } private DozeMachine.Part createDozeUi(Context context, DozeHost host, WakeLock wakeLock, Loading packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +1 −4 Original line number Diff line number Diff line Loading @@ -42,9 +42,7 @@ import androidx.annotation.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.systemui.Dependency; import com.android.systemui.plugins.SensorManagerPlugin; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.ProximitySensor; Loading Loading @@ -147,8 +145,7 @@ public class DozeSensors { false /* touchscreen */, mConfig.getWakeLockScreenDebounce()), }; mProximitySensor = new ProximitySensor( context, sensorManager, Dependency.get(PluginManager.class)); mProximitySensor = new ProximitySensor(context, sensorManager); mProximitySensor.register( proximityEvent -> mProxCallback.accept(!proximityEvent.getNear())); Loading packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +6 −9 Original line number Diff line number Diff line Loading @@ -72,7 +72,6 @@ public class DozeTriggers implements DozeMachine.Part { private final AmbientDisplayConfiguration mConfig; private final DozeParameters mDozeParameters; private final AsyncSensorManager mSensorManager; private final Handler mHandler; private final WakeLock mWakeLock; private final boolean mAllowPulseTriggers; private final UiModeManager mUiModeManager; Loading @@ -89,14 +88,14 @@ public class DozeTriggers implements DozeMachine.Part { public DozeTriggers(Context context, DozeMachine machine, DozeHost dozeHost, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters dozeParameters, AsyncSensorManager sensorManager, Handler handler, WakeLock wakeLock, boolean allowPulseTriggers, DockManager dockManager) { WakeLock wakeLock, boolean allowPulseTriggers, DockManager dockManager, ProximitySensor proximitySensor) { mContext = context; mMachine = machine; mDozeHost = dozeHost; mConfig = config; mDozeParameters = dozeParameters; mSensorManager = sensorManager; mHandler = handler; mWakeLock = wakeLock; mAllowPulseTriggers = allowPulseTriggers; mDozeSensors = new DozeSensors(context, alarmManager, mSensorManager, dozeParameters, Loading @@ -104,9 +103,7 @@ public class DozeTriggers implements DozeMachine.Part { dozeParameters.getPolicy()); mUiModeManager = mContext.getSystemService(UiModeManager.class); mDockManager = dockManager; mProxCheck = new ProximitySensor.ProximityCheck( new ProximitySensor(mContext, mSensorManager, null), mHandler); mProxCheck = new ProximitySensor.ProximityCheck(proximitySensor, handler); } private void onNotification(Runnable onPulseSuppressedListener) { Loading Loading @@ -182,7 +179,7 @@ public class DozeTriggers implements DozeMachine.Part { } } else { proximityCheckThenCall((result) -> { if (result) { if (result != null && result) { // In pocket, drop event. return; } Loading Loading @@ -271,7 +268,7 @@ public class DozeTriggers implements DozeMachine.Part { if (wake) { proximityCheckThenCall((result) -> { if (result) { if (result != null && result) { // In pocket, drop event. return; } Loading Loading @@ -380,7 +377,7 @@ public class DozeTriggers implements DozeMachine.Part { mPulsePending = true; proximityCheckThenCall((result) -> { if (result) { if (result != null && result) { // in pocket, abort pulse DozeLog.tracePulseDropped(mContext, "inPocket"); mPulsePending = false; Loading packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java +6 −7 Original line number Diff line number Diff line Loading @@ -24,8 +24,8 @@ import android.hardware.SensorManager; import android.os.Handler; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.R; import com.android.systemui.shared.plugins.PluginManager; import java.util.ArrayList; import java.util.List; Loading @@ -47,7 +47,7 @@ public class ProximitySensor { private final float mMaxRange; private List<ProximitySensorListener> mListeners = new ArrayList<>(); private String mTag = null; private ProximityEvent mLastEvent; @VisibleForTesting ProximityEvent mLastEvent; private int mSensorDelay = SensorManager.SENSOR_DELAY_NORMAL; private boolean mPaused; private boolean mRegistered; Loading @@ -64,8 +64,7 @@ public class ProximitySensor { }; @Inject public ProximitySensor( Context context, AsyncSensorManager sensorManager, PluginManager pluginManager) { public ProximitySensor(Context context, AsyncSensorManager sensorManager) { mSensorManager = sensorManager; Sensor sensor = findBrightnessSensor(context); Loading Loading @@ -146,17 +145,17 @@ public class ProximitySensor { return false; } logDebug("Using brightness sensor? " + mUsingBrightnessSensor); mListeners.add(listener); registerInternal(); return true; } private void registerInternal() { protected void registerInternal() { if (mRegistered || mPaused || mListeners.isEmpty()) { return; } logDebug("Using brightness sensor? " + mUsingBrightnessSensor); logDebug("Registering sensor listener"); mRegistered = true; mSensorManager.registerListener(mSensorEventListener, mSensor, mSensorDelay); Loading @@ -175,7 +174,7 @@ public class ProximitySensor { } } private void unregisterInternal() { protected void unregisterInternal() { if (!mRegistered) { return; } Loading packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java +17 −3 Original line number Diff line number Diff line Loading @@ -41,7 +41,9 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.dock.DockManager; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.FakeProximitySensor; import com.android.systemui.util.sensors.FakeSensorManager; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.wakelock.WakeLock; import com.android.systemui.util.wakelock.WakeLockFake; Loading @@ -60,6 +62,7 @@ public class DozeTriggersTest extends SysuiTestCase { private FakeSensorManager mSensors; private Sensor mTapSensor; private DockManager mDockManagerFake; private FakeProximitySensor mProximitySensor; @BeforeClass public static void setupSuite() { Loading @@ -80,10 +83,11 @@ public class DozeTriggersTest extends SysuiTestCase { mDockManagerFake = mock(DockManager.class); AsyncSensorManager asyncSensorManager = new AsyncSensorManager(mSensors, null, new Handler()); mProximitySensor = new FakeProximitySensor(getContext(), asyncSensorManager); mTriggers = new DozeTriggers(mContext, mMachine, mHost, alarmManager, config, parameters, asyncSensorManager, Handler.createAsync(Looper.myLooper()), wakeLock, true, mDockManagerFake); mDockManagerFake, mProximitySensor); waitForSensorManager(); } Loading @@ -95,15 +99,17 @@ public class DozeTriggersTest extends SysuiTestCase { mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE); clearInvocations(mMachine); mProximitySensor.setLastEvent(new ProximitySensor.ProximityEvent(true, 1)); mHost.callback.onNotificationAlerted(null /* pulseSuppressedListener */); mSensors.getFakeProximitySensor().sendProximityResult(false); /* Near */ mProximitySensor.alertListeners(); verify(mMachine, never()).requestState(any()); verify(mMachine, never()).requestPulse(anyInt()); mHost.callback.onNotificationAlerted(null /* pulseSuppressedListener */); waitForSensorManager(); mSensors.getFakeProximitySensor().sendProximityResult(true); /* Far */ mProximitySensor.setLastEvent(new ProximitySensor.ProximityEvent(false, 2)); mProximitySensor.alertListeners(); verify(mMachine).requestPulse(anyInt()); } Loading Loading @@ -139,6 +145,14 @@ public class DozeTriggersTest extends SysuiTestCase { verify(mDockManagerFake).removeListener(any()); } @Test public void testProximitySensorNotAvailablel() { mProximitySensor.setSensorAvailable(false); mTriggers.onSensor(DozeLog.PULSE_REASON_SENSOR_LONG_PRESS, 100, 100, null); mTriggers.onSensor(DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN, 100, 100, new float[]{1}); mTriggers.onSensor(DozeLog.REASON_SENSOR_TAP, 100, 100, null); } private void waitForSensorManager() { TestableLooper.get(this).processAllMessages(); } Loading Loading
packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java +3 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.phone.BiometricUnlockController; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.wakelock.DelayedWakeLock; import com.android.systemui.util.wakelock.WakeLock; Loading Loading @@ -97,7 +98,8 @@ public class DozeFactory { DockManager dockManager) { boolean allowPulseTriggers = true; return new DozeTriggers(context, machine, host, alarmManager, config, params, sensorManager, handler, wakeLock, allowPulseTriggers, dockManager); sensorManager, handler, wakeLock, allowPulseTriggers, dockManager, new ProximitySensor(context, sensorManager)); } private DozeMachine.Part createDozeUi(Context context, DozeHost host, WakeLock wakeLock, Loading
packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +1 −4 Original line number Diff line number Diff line Loading @@ -42,9 +42,7 @@ import androidx.annotation.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.systemui.Dependency; import com.android.systemui.plugins.SensorManagerPlugin; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.ProximitySensor; Loading Loading @@ -147,8 +145,7 @@ public class DozeSensors { false /* touchscreen */, mConfig.getWakeLockScreenDebounce()), }; mProximitySensor = new ProximitySensor( context, sensorManager, Dependency.get(PluginManager.class)); mProximitySensor = new ProximitySensor(context, sensorManager); mProximitySensor.register( proximityEvent -> mProxCallback.accept(!proximityEvent.getNear())); Loading
packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +6 −9 Original line number Diff line number Diff line Loading @@ -72,7 +72,6 @@ public class DozeTriggers implements DozeMachine.Part { private final AmbientDisplayConfiguration mConfig; private final DozeParameters mDozeParameters; private final AsyncSensorManager mSensorManager; private final Handler mHandler; private final WakeLock mWakeLock; private final boolean mAllowPulseTriggers; private final UiModeManager mUiModeManager; Loading @@ -89,14 +88,14 @@ public class DozeTriggers implements DozeMachine.Part { public DozeTriggers(Context context, DozeMachine machine, DozeHost dozeHost, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters dozeParameters, AsyncSensorManager sensorManager, Handler handler, WakeLock wakeLock, boolean allowPulseTriggers, DockManager dockManager) { WakeLock wakeLock, boolean allowPulseTriggers, DockManager dockManager, ProximitySensor proximitySensor) { mContext = context; mMachine = machine; mDozeHost = dozeHost; mConfig = config; mDozeParameters = dozeParameters; mSensorManager = sensorManager; mHandler = handler; mWakeLock = wakeLock; mAllowPulseTriggers = allowPulseTriggers; mDozeSensors = new DozeSensors(context, alarmManager, mSensorManager, dozeParameters, Loading @@ -104,9 +103,7 @@ public class DozeTriggers implements DozeMachine.Part { dozeParameters.getPolicy()); mUiModeManager = mContext.getSystemService(UiModeManager.class); mDockManager = dockManager; mProxCheck = new ProximitySensor.ProximityCheck( new ProximitySensor(mContext, mSensorManager, null), mHandler); mProxCheck = new ProximitySensor.ProximityCheck(proximitySensor, handler); } private void onNotification(Runnable onPulseSuppressedListener) { Loading Loading @@ -182,7 +179,7 @@ public class DozeTriggers implements DozeMachine.Part { } } else { proximityCheckThenCall((result) -> { if (result) { if (result != null && result) { // In pocket, drop event. return; } Loading Loading @@ -271,7 +268,7 @@ public class DozeTriggers implements DozeMachine.Part { if (wake) { proximityCheckThenCall((result) -> { if (result) { if (result != null && result) { // In pocket, drop event. return; } Loading Loading @@ -380,7 +377,7 @@ public class DozeTriggers implements DozeMachine.Part { mPulsePending = true; proximityCheckThenCall((result) -> { if (result) { if (result != null && result) { // in pocket, abort pulse DozeLog.tracePulseDropped(mContext, "inPocket"); mPulsePending = false; Loading
packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java +6 −7 Original line number Diff line number Diff line Loading @@ -24,8 +24,8 @@ import android.hardware.SensorManager; import android.os.Handler; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.systemui.R; import com.android.systemui.shared.plugins.PluginManager; import java.util.ArrayList; import java.util.List; Loading @@ -47,7 +47,7 @@ public class ProximitySensor { private final float mMaxRange; private List<ProximitySensorListener> mListeners = new ArrayList<>(); private String mTag = null; private ProximityEvent mLastEvent; @VisibleForTesting ProximityEvent mLastEvent; private int mSensorDelay = SensorManager.SENSOR_DELAY_NORMAL; private boolean mPaused; private boolean mRegistered; Loading @@ -64,8 +64,7 @@ public class ProximitySensor { }; @Inject public ProximitySensor( Context context, AsyncSensorManager sensorManager, PluginManager pluginManager) { public ProximitySensor(Context context, AsyncSensorManager sensorManager) { mSensorManager = sensorManager; Sensor sensor = findBrightnessSensor(context); Loading Loading @@ -146,17 +145,17 @@ public class ProximitySensor { return false; } logDebug("Using brightness sensor? " + mUsingBrightnessSensor); mListeners.add(listener); registerInternal(); return true; } private void registerInternal() { protected void registerInternal() { if (mRegistered || mPaused || mListeners.isEmpty()) { return; } logDebug("Using brightness sensor? " + mUsingBrightnessSensor); logDebug("Registering sensor listener"); mRegistered = true; mSensorManager.registerListener(mSensorEventListener, mSensor, mSensorDelay); Loading @@ -175,7 +174,7 @@ public class ProximitySensor { } } private void unregisterInternal() { protected void unregisterInternal() { if (!mRegistered) { return; } Loading
packages/SystemUI/tests/src/com/android/systemui/doze/DozeTriggersTest.java +17 −3 Original line number Diff line number Diff line Loading @@ -41,7 +41,9 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.dock.DockManager; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.FakeProximitySensor; import com.android.systemui.util.sensors.FakeSensorManager; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.wakelock.WakeLock; import com.android.systemui.util.wakelock.WakeLockFake; Loading @@ -60,6 +62,7 @@ public class DozeTriggersTest extends SysuiTestCase { private FakeSensorManager mSensors; private Sensor mTapSensor; private DockManager mDockManagerFake; private FakeProximitySensor mProximitySensor; @BeforeClass public static void setupSuite() { Loading @@ -80,10 +83,11 @@ public class DozeTriggersTest extends SysuiTestCase { mDockManagerFake = mock(DockManager.class); AsyncSensorManager asyncSensorManager = new AsyncSensorManager(mSensors, null, new Handler()); mProximitySensor = new FakeProximitySensor(getContext(), asyncSensorManager); mTriggers = new DozeTriggers(mContext, mMachine, mHost, alarmManager, config, parameters, asyncSensorManager, Handler.createAsync(Looper.myLooper()), wakeLock, true, mDockManagerFake); mDockManagerFake, mProximitySensor); waitForSensorManager(); } Loading @@ -95,15 +99,17 @@ public class DozeTriggersTest extends SysuiTestCase { mTriggers.transitionTo(DozeMachine.State.INITIALIZED, DozeMachine.State.DOZE); clearInvocations(mMachine); mProximitySensor.setLastEvent(new ProximitySensor.ProximityEvent(true, 1)); mHost.callback.onNotificationAlerted(null /* pulseSuppressedListener */); mSensors.getFakeProximitySensor().sendProximityResult(false); /* Near */ mProximitySensor.alertListeners(); verify(mMachine, never()).requestState(any()); verify(mMachine, never()).requestPulse(anyInt()); mHost.callback.onNotificationAlerted(null /* pulseSuppressedListener */); waitForSensorManager(); mSensors.getFakeProximitySensor().sendProximityResult(true); /* Far */ mProximitySensor.setLastEvent(new ProximitySensor.ProximityEvent(false, 2)); mProximitySensor.alertListeners(); verify(mMachine).requestPulse(anyInt()); } Loading Loading @@ -139,6 +145,14 @@ public class DozeTriggersTest extends SysuiTestCase { verify(mDockManagerFake).removeListener(any()); } @Test public void testProximitySensorNotAvailablel() { mProximitySensor.setSensorAvailable(false); mTriggers.onSensor(DozeLog.PULSE_REASON_SENSOR_LONG_PRESS, 100, 100, null); mTriggers.onSensor(DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN, 100, 100, new float[]{1}); mTriggers.onSensor(DozeLog.REASON_SENSOR_TAP, 100, 100, null); } private void waitForSensorManager() { TestableLooper.get(this).processAllMessages(); } Loading