Loading packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java +9 −5 Original line number Original line 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.BiometricUnlockController; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.wakelock.DelayedWakeLock; import com.android.systemui.util.wakelock.DelayedWakeLock; Loading @@ -56,6 +57,7 @@ public class DozeFactory { private final ProximitySensor mProximitySensor; private final ProximitySensor mProximitySensor; private final DelayedWakeLock.Builder mDelayedWakeLockBuilder; private final DelayedWakeLock.Builder mDelayedWakeLockBuilder; private final Handler mHandler; private final Handler mHandler; private final DelayableExecutor mDelayableExecutor; private final BiometricUnlockController mBiometricUnlockController; private final BiometricUnlockController mBiometricUnlockController; private final BroadcastDispatcher mBroadcastDispatcher; private final BroadcastDispatcher mBroadcastDispatcher; private final DozeHost mDozeHost; private final DozeHost mDozeHost; Loading @@ -68,6 +70,7 @@ public class DozeFactory { DockManager dockManager, @Nullable IWallpaperManager wallpaperManager, DockManager dockManager, @Nullable IWallpaperManager wallpaperManager, ProximitySensor proximitySensor, ProximitySensor proximitySensor, DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler, DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler, DelayableExecutor delayableExecutor, BiometricUnlockController biometricUnlockController, BiometricUnlockController biometricUnlockController, BroadcastDispatcher broadcastDispatcher, DozeHost dozeHost) { BroadcastDispatcher broadcastDispatcher, DozeHost dozeHost) { mFalsingManager = falsingManager; mFalsingManager = falsingManager; Loading @@ -83,6 +86,7 @@ public class DozeFactory { mProximitySensor = proximitySensor; mProximitySensor = proximitySensor; mDelayedWakeLockBuilder = delayedWakeLockBuilder; mDelayedWakeLockBuilder = delayedWakeLockBuilder; mHandler = handler; mHandler = handler; mDelayableExecutor = delayableExecutor; mBiometricUnlockController = biometricUnlockController; mBiometricUnlockController = biometricUnlockController; mBroadcastDispatcher = broadcastDispatcher; mBroadcastDispatcher = broadcastDispatcher; mDozeHost = dozeHost; mDozeHost = dozeHost; Loading @@ -107,8 +111,8 @@ public class DozeFactory { new DozePauser(mHandler, machine, mAlarmManager, mDozeParameters.getPolicy()), new DozePauser(mHandler, machine, mAlarmManager, mDozeParameters.getPolicy()), new DozeFalsingManagerAdapter(mFalsingManager), new DozeFalsingManagerAdapter(mFalsingManager), createDozeTriggers(dozeService, mAsyncSensorManager, mDozeHost, createDozeTriggers(dozeService, mAsyncSensorManager, mDozeHost, mAlarmManager, config, mDozeParameters, mHandler, wakeLock, machine, mAlarmManager, config, mDozeParameters, mDelayableExecutor, wakeLock, mDockManager, mDozeLog), machine, mDockManager, mDozeLog), createDozeUi(dozeService, mDozeHost, wakeLock, machine, mHandler, createDozeUi(dozeService, mDozeHost, wakeLock, machine, mHandler, mAlarmManager, mDozeParameters, mDozeLog), mAlarmManager, mDozeParameters, mDozeLog), new DozeScreenState(wrappedService, mHandler, mDozeHost, mDozeParameters, new DozeScreenState(wrappedService, mHandler, mDozeHost, mDozeParameters, Loading @@ -135,11 +139,11 @@ public class DozeFactory { private DozeTriggers createDozeTriggers(Context context, AsyncSensorManager sensorManager, private DozeTriggers createDozeTriggers(Context context, AsyncSensorManager sensorManager, DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine, DozeParameters params, DelayableExecutor delayableExecutor, WakeLock wakeLock, DockManager dockManager, DozeLog dozeLog) { DozeMachine machine, DockManager dockManager, DozeLog dozeLog) { boolean allowPulseTriggers = true; boolean allowPulseTriggers = true; return new DozeTriggers(context, machine, host, alarmManager, config, params, return new DozeTriggers(context, machine, host, alarmManager, config, params, sensorManager, handler, wakeLock, allowPulseTriggers, dockManager, sensorManager, delayableExecutor, wakeLock, allowPulseTriggers, dockManager, mProximitySensor, dozeLog, mBroadcastDispatcher); mProximitySensor, dozeLog, mBroadcastDispatcher); } } Loading packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -110,6 +110,7 @@ public class DozeSensors { mProxCallback = proxCallback; mProxCallback = proxCallback; mResolver = mContext.getContentResolver(); mResolver = mContext.getContentResolver(); mCallback = callback; mCallback = callback; mProximitySensor = proximitySensor; boolean alwaysOn = mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT); boolean alwaysOn = mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT); mSensors = new TriggerSensor[] { mSensors = new TriggerSensor[] { Loading Loading @@ -172,7 +173,6 @@ public class DozeSensors { dozeLog), dozeLog), }; }; mProximitySensor = proximitySensor; setProxListening(false); // Don't immediately start listening when we register. setProxListening(false); // Don't immediately start listening when we register. mProximitySensor.register( mProximitySensor.register( proximityEvent -> { proximityEvent -> { Loading packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +7 −8 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,6 @@ import android.content.IntentFilter; import android.content.res.Configuration; import android.content.res.Configuration; import android.hardware.display.AmbientDisplayConfiguration; import android.hardware.display.AmbientDisplayConfiguration; import android.metrics.LogMaker; import android.metrics.LogMaker; import android.os.Handler; import android.os.SystemClock; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserHandle; import android.text.format.Formatter; import android.text.format.Formatter; Loading @@ -44,6 +43,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManager; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.Assert; import com.android.systemui.util.Assert; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.wakelock.WakeLock; import com.android.systemui.util.wakelock.WakeLock; Loading Loading @@ -156,10 +156,10 @@ public class DozeTriggers implements DozeMachine.Part { public DozeTriggers(Context context, DozeMachine machine, DozeHost dozeHost, public DozeTriggers(Context context, DozeMachine machine, DozeHost dozeHost, AlarmManager alarmManager, AmbientDisplayConfiguration config, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters dozeParameters, AsyncSensorManager sensorManager, Handler handler, DozeParameters dozeParameters, AsyncSensorManager sensorManager, WakeLock wakeLock, boolean allowPulseTriggers, DockManager dockManager, DelayableExecutor delayableExecutor, WakeLock wakeLock, boolean allowPulseTriggers, ProximitySensor proximitySensor, DozeLog dozeLog, DockManager dockManager, ProximitySensor proximitySensor, BroadcastDispatcher broadcastDispatcher) { DozeLog dozeLog, BroadcastDispatcher broadcastDispatcher) { mContext = context; mContext = context; mMachine = machine; mMachine = machine; mDozeHost = dozeHost; mDozeHost = dozeHost; Loading @@ -169,11 +169,10 @@ public class DozeTriggers implements DozeMachine.Part { mWakeLock = wakeLock; mWakeLock = wakeLock; mAllowPulseTriggers = allowPulseTriggers; mAllowPulseTriggers = allowPulseTriggers; mDozeSensors = new DozeSensors(context, alarmManager, mSensorManager, dozeParameters, mDozeSensors = new DozeSensors(context, alarmManager, mSensorManager, dozeParameters, config, wakeLock, this::onSensor, this::onProximityFar, dozeLog, config, wakeLock, this::onSensor, this::onProximityFar, dozeLog, proximitySensor); proximitySensor); mUiModeManager = mContext.getSystemService(UiModeManager.class); mUiModeManager = mContext.getSystemService(UiModeManager.class); mDockManager = dockManager; mDockManager = dockManager; mProxCheck = new ProximitySensor.ProximityCheck(proximitySensor, handler); mProxCheck = new ProximitySensor.ProximityCheck(proximitySensor, delayableExecutor); mDozeLog = dozeLog; mDozeLog = dozeLog; mBroadcastDispatcher = broadcastDispatcher; mBroadcastDispatcher = broadcastDispatcher; } } Loading packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java +14 −10 Original line number Original line Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.systemui.util.sensors; package com.android.systemui.util.sensors; import android.hardware.SensorManager; import android.hardware.SensorManager; import android.os.Handler; import android.util.Log; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; Loading @@ -27,6 +26,7 @@ import com.android.systemui.util.concurrency.DelayableExecutor; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.function.Consumer; import javax.inject.Inject; import javax.inject.Inject; Loading Loading @@ -64,11 +64,12 @@ public class ProximitySensor implements ThresholdSensor { private final DelayableExecutor mDelayableExecutor; private final DelayableExecutor mDelayableExecutor; private final List<ThresholdSensor.Listener> mListeners = new ArrayList<>(); private final List<ThresholdSensor.Listener> mListeners = new ArrayList<>(); private String mTag = null; private String mTag = null; @VisibleForTesting protected boolean mPaused; private ThresholdSensorEvent mLastPrimaryEvent; private ThresholdSensorEvent mLastPrimaryEvent; @VisibleForTesting @VisibleForTesting ThresholdSensorEvent mLastEvent; ThresholdSensorEvent mLastEvent; private boolean mPaused; private boolean mRegistered; private boolean mRegistered; private final AtomicBoolean mAlerting = new AtomicBoolean(); private Runnable mCancelSecondaryRunnable; private Runnable mCancelSecondaryRunnable; private boolean mInitializedListeners = false; private boolean mInitializedListeners = false; Loading Loading @@ -235,15 +236,18 @@ public class ProximitySensor implements ThresholdSensor { /** Update all listeners with the last value this class received from the sensor. */ /** Update all listeners with the last value this class received from the sensor. */ public void alertListeners() { public void alertListeners() { Assert.isMainThread(); Assert.isMainThread(); if (mLastEvent == null) { if (mAlerting.getAndSet(true)) { return; return; } } if (mLastEvent != null) { List<ThresholdSensor.Listener> listeners = new ArrayList<>(mListeners); List<ThresholdSensor.Listener> listeners = new ArrayList<>(mListeners); listeners.forEach(proximitySensorListener -> listeners.forEach(proximitySensorListener -> proximitySensorListener.onThresholdCrossed(mLastEvent)); proximitySensorListener.onThresholdCrossed(mLastEvent)); } } mAlerting.set(false); } private void onPrimarySensorEvent(ThresholdSensorEvent event) { private void onPrimarySensorEvent(ThresholdSensorEvent event) { Assert.isMainThread(); Assert.isMainThread(); if (mLastPrimaryEvent != null && event.getBelow() == mLastPrimaryEvent.getBelow()) { if (mLastPrimaryEvent != null && event.getBelow() == mLastPrimaryEvent.getBelow()) { Loading Loading @@ -291,14 +295,14 @@ public class ProximitySensor implements ThresholdSensor { public static class ProximityCheck implements Runnable { public static class ProximityCheck implements Runnable { private final ProximitySensor mSensor; private final ProximitySensor mSensor; private final Handler mHandler; private final DelayableExecutor mDelayableExecutor; private List<Consumer<Boolean>> mCallbacks = new ArrayList<>(); private List<Consumer<Boolean>> mCallbacks = new ArrayList<>(); @Inject @Inject public ProximityCheck(ProximitySensor sensor, Handler handler) { public ProximityCheck(ProximitySensor sensor, DelayableExecutor delayableExecutor) { mSensor = sensor; mSensor = sensor; mSensor.setTag("prox_check"); mSensor.setTag("prox_check"); mHandler = handler; mDelayableExecutor = delayableExecutor; mSensor.pause(); mSensor.pause(); ThresholdSensor.Listener listener = proximityEvent -> { ThresholdSensor.Listener listener = proximityEvent -> { mCallbacks.forEach( mCallbacks.forEach( Loading Loading @@ -332,7 +336,7 @@ public class ProximitySensor implements ThresholdSensor { mCallbacks.add(callback); mCallbacks.add(callback); if (!mSensor.isRegistered()) { if (!mSensor.isRegistered()) { mSensor.resume(); mSensor.resume(); mHandler.postDelayed(this, timeoutMs); mDelayableExecutor.executeDelayed(this, timeoutMs); } } } } } } Loading packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java +5 −9 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.doze; import static com.android.systemui.plugins.SensorManagerPlugin.Sensor.TYPE_WAKE_LOCK_SCREEN; import static com.android.systemui.plugins.SensorManagerPlugin.Sensor.TYPE_WAKE_LOCK_SCREEN; import static org.junit.Assert.assertFalse; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt; Loading Loading @@ -82,10 +83,7 @@ public class DozeSensorsTest extends SysuiTestCase { @Mock @Mock private DozeLog mDozeLog; private DozeLog mDozeLog; @Mock @Mock private Sensor mProximitySensor; private ProximitySensor mProximitySensor; @Mock private ProximitySensor mMockProxSensor; private SensorManagerPlugin.SensorEventListener mWakeLockScreenListener; private SensorManagerPlugin.SensorEventListener mWakeLockScreenListener; private TestableLooper mTestableLooper; private TestableLooper mTestableLooper; private DozeSensors mDozeSensors; private DozeSensors mDozeSensors; Loading @@ -96,7 +94,6 @@ public class DozeSensorsTest extends SysuiTestCase { mTestableLooper = TestableLooper.get(this); mTestableLooper = TestableLooper.get(this); when(mAmbientDisplayConfiguration.getWakeLockScreenDebounce()).thenReturn(5000L); when(mAmbientDisplayConfiguration.getWakeLockScreenDebounce()).thenReturn(5000L); when(mAmbientDisplayConfiguration.alwaysOnEnabled(anyInt())).thenReturn(true); when(mAmbientDisplayConfiguration.alwaysOnEnabled(anyInt())).thenReturn(true); when(mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)).thenReturn(mProximitySensor); doAnswer(invocation -> { doAnswer(invocation -> { ((Runnable) invocation.getArgument(0)).run(); ((Runnable) invocation.getArgument(0)).run(); return null; return null; Loading @@ -106,10 +103,9 @@ public class DozeSensorsTest extends SysuiTestCase { @Test @Test public void testRegisterProx() { public void testRegisterProx() { // We should not register with the sensor manager initially. assertFalse(mProximitySensor.isRegistered()); verify(mMockProxSensor).pause(); mDozeSensors.setProxListening(true); mDozeSensors.setProxListening(true); verify(mMockProxSensor).resume(); verify(mProximitySensor).resume(); } } @Test @Test Loading Loading @@ -158,7 +154,7 @@ public class DozeSensorsTest extends SysuiTestCase { TestableDozeSensors() { TestableDozeSensors() { super(getContext(), mAlarmManager, mSensorManager, mDozeParameters, super(getContext(), mAlarmManager, mSensorManager, mDozeParameters, mAmbientDisplayConfiguration, mWakeLock, mCallback, mProxCallback, mDozeLog, mAmbientDisplayConfiguration, mWakeLock, mCallback, mProxCallback, mDozeLog, mMockProxSensor); mProximitySensor); for (TriggerSensor sensor : mSensors) { for (TriggerSensor sensor : mSensors) { if (sensor instanceof PluginSensor if (sensor instanceof PluginSensor && ((PluginSensor) sensor).mPluginSensor.getType() && ((PluginSensor) sensor).mPluginSensor.getType() Loading Loading
packages/SystemUI/src/com/android/systemui/doze/DozeFactory.java +9 −5 Original line number Original line 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.BiometricUnlockController; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.wakelock.DelayedWakeLock; import com.android.systemui.util.wakelock.DelayedWakeLock; Loading @@ -56,6 +57,7 @@ public class DozeFactory { private final ProximitySensor mProximitySensor; private final ProximitySensor mProximitySensor; private final DelayedWakeLock.Builder mDelayedWakeLockBuilder; private final DelayedWakeLock.Builder mDelayedWakeLockBuilder; private final Handler mHandler; private final Handler mHandler; private final DelayableExecutor mDelayableExecutor; private final BiometricUnlockController mBiometricUnlockController; private final BiometricUnlockController mBiometricUnlockController; private final BroadcastDispatcher mBroadcastDispatcher; private final BroadcastDispatcher mBroadcastDispatcher; private final DozeHost mDozeHost; private final DozeHost mDozeHost; Loading @@ -68,6 +70,7 @@ public class DozeFactory { DockManager dockManager, @Nullable IWallpaperManager wallpaperManager, DockManager dockManager, @Nullable IWallpaperManager wallpaperManager, ProximitySensor proximitySensor, ProximitySensor proximitySensor, DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler, DelayedWakeLock.Builder delayedWakeLockBuilder, Handler handler, DelayableExecutor delayableExecutor, BiometricUnlockController biometricUnlockController, BiometricUnlockController biometricUnlockController, BroadcastDispatcher broadcastDispatcher, DozeHost dozeHost) { BroadcastDispatcher broadcastDispatcher, DozeHost dozeHost) { mFalsingManager = falsingManager; mFalsingManager = falsingManager; Loading @@ -83,6 +86,7 @@ public class DozeFactory { mProximitySensor = proximitySensor; mProximitySensor = proximitySensor; mDelayedWakeLockBuilder = delayedWakeLockBuilder; mDelayedWakeLockBuilder = delayedWakeLockBuilder; mHandler = handler; mHandler = handler; mDelayableExecutor = delayableExecutor; mBiometricUnlockController = biometricUnlockController; mBiometricUnlockController = biometricUnlockController; mBroadcastDispatcher = broadcastDispatcher; mBroadcastDispatcher = broadcastDispatcher; mDozeHost = dozeHost; mDozeHost = dozeHost; Loading @@ -107,8 +111,8 @@ public class DozeFactory { new DozePauser(mHandler, machine, mAlarmManager, mDozeParameters.getPolicy()), new DozePauser(mHandler, machine, mAlarmManager, mDozeParameters.getPolicy()), new DozeFalsingManagerAdapter(mFalsingManager), new DozeFalsingManagerAdapter(mFalsingManager), createDozeTriggers(dozeService, mAsyncSensorManager, mDozeHost, createDozeTriggers(dozeService, mAsyncSensorManager, mDozeHost, mAlarmManager, config, mDozeParameters, mHandler, wakeLock, machine, mAlarmManager, config, mDozeParameters, mDelayableExecutor, wakeLock, mDockManager, mDozeLog), machine, mDockManager, mDozeLog), createDozeUi(dozeService, mDozeHost, wakeLock, machine, mHandler, createDozeUi(dozeService, mDozeHost, wakeLock, machine, mHandler, mAlarmManager, mDozeParameters, mDozeLog), mAlarmManager, mDozeParameters, mDozeLog), new DozeScreenState(wrappedService, mHandler, mDozeHost, mDozeParameters, new DozeScreenState(wrappedService, mHandler, mDozeHost, mDozeParameters, Loading @@ -135,11 +139,11 @@ public class DozeFactory { private DozeTriggers createDozeTriggers(Context context, AsyncSensorManager sensorManager, private DozeTriggers createDozeTriggers(Context context, AsyncSensorManager sensorManager, DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeHost host, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters params, Handler handler, WakeLock wakeLock, DozeMachine machine, DozeParameters params, DelayableExecutor delayableExecutor, WakeLock wakeLock, DockManager dockManager, DozeLog dozeLog) { DozeMachine machine, DockManager dockManager, DozeLog dozeLog) { boolean allowPulseTriggers = true; boolean allowPulseTriggers = true; return new DozeTriggers(context, machine, host, alarmManager, config, params, return new DozeTriggers(context, machine, host, alarmManager, config, params, sensorManager, handler, wakeLock, allowPulseTriggers, dockManager, sensorManager, delayableExecutor, wakeLock, allowPulseTriggers, dockManager, mProximitySensor, dozeLog, mBroadcastDispatcher); mProximitySensor, dozeLog, mBroadcastDispatcher); } } Loading
packages/SystemUI/src/com/android/systemui/doze/DozeSensors.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -110,6 +110,7 @@ public class DozeSensors { mProxCallback = proxCallback; mProxCallback = proxCallback; mResolver = mContext.getContentResolver(); mResolver = mContext.getContentResolver(); mCallback = callback; mCallback = callback; mProximitySensor = proximitySensor; boolean alwaysOn = mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT); boolean alwaysOn = mConfig.alwaysOnEnabled(UserHandle.USER_CURRENT); mSensors = new TriggerSensor[] { mSensors = new TriggerSensor[] { Loading Loading @@ -172,7 +173,6 @@ public class DozeSensors { dozeLog), dozeLog), }; }; mProximitySensor = proximitySensor; setProxListening(false); // Don't immediately start listening when we register. setProxListening(false); // Don't immediately start listening when we register. mProximitySensor.register( mProximitySensor.register( proximityEvent -> { proximityEvent -> { Loading
packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +7 −8 Original line number Original line Diff line number Diff line Loading @@ -26,7 +26,6 @@ import android.content.IntentFilter; import android.content.res.Configuration; import android.content.res.Configuration; import android.hardware.display.AmbientDisplayConfiguration; import android.hardware.display.AmbientDisplayConfiguration; import android.metrics.LogMaker; import android.metrics.LogMaker; import android.os.Handler; import android.os.SystemClock; import android.os.SystemClock; import android.os.UserHandle; import android.os.UserHandle; import android.text.format.Formatter; import android.text.format.Formatter; Loading @@ -44,6 +43,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManager; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.statusbar.phone.DozeParameters; import com.android.systemui.util.Assert; import com.android.systemui.util.Assert; import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.AsyncSensorManager; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.wakelock.WakeLock; import com.android.systemui.util.wakelock.WakeLock; Loading Loading @@ -156,10 +156,10 @@ public class DozeTriggers implements DozeMachine.Part { public DozeTriggers(Context context, DozeMachine machine, DozeHost dozeHost, public DozeTriggers(Context context, DozeMachine machine, DozeHost dozeHost, AlarmManager alarmManager, AmbientDisplayConfiguration config, AlarmManager alarmManager, AmbientDisplayConfiguration config, DozeParameters dozeParameters, AsyncSensorManager sensorManager, Handler handler, DozeParameters dozeParameters, AsyncSensorManager sensorManager, WakeLock wakeLock, boolean allowPulseTriggers, DockManager dockManager, DelayableExecutor delayableExecutor, WakeLock wakeLock, boolean allowPulseTriggers, ProximitySensor proximitySensor, DozeLog dozeLog, DockManager dockManager, ProximitySensor proximitySensor, BroadcastDispatcher broadcastDispatcher) { DozeLog dozeLog, BroadcastDispatcher broadcastDispatcher) { mContext = context; mContext = context; mMachine = machine; mMachine = machine; mDozeHost = dozeHost; mDozeHost = dozeHost; Loading @@ -169,11 +169,10 @@ public class DozeTriggers implements DozeMachine.Part { mWakeLock = wakeLock; mWakeLock = wakeLock; mAllowPulseTriggers = allowPulseTriggers; mAllowPulseTriggers = allowPulseTriggers; mDozeSensors = new DozeSensors(context, alarmManager, mSensorManager, dozeParameters, mDozeSensors = new DozeSensors(context, alarmManager, mSensorManager, dozeParameters, config, wakeLock, this::onSensor, this::onProximityFar, dozeLog, config, wakeLock, this::onSensor, this::onProximityFar, dozeLog, proximitySensor); proximitySensor); mUiModeManager = mContext.getSystemService(UiModeManager.class); mUiModeManager = mContext.getSystemService(UiModeManager.class); mDockManager = dockManager; mDockManager = dockManager; mProxCheck = new ProximitySensor.ProximityCheck(proximitySensor, handler); mProxCheck = new ProximitySensor.ProximityCheck(proximitySensor, delayableExecutor); mDozeLog = dozeLog; mDozeLog = dozeLog; mBroadcastDispatcher = broadcastDispatcher; mBroadcastDispatcher = broadcastDispatcher; } } Loading
packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java +14 −10 Original line number Original line Diff line number Diff line Loading @@ -17,7 +17,6 @@ package com.android.systemui.util.sensors; package com.android.systemui.util.sensors; import android.hardware.SensorManager; import android.hardware.SensorManager; import android.os.Handler; import android.util.Log; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.annotations.VisibleForTesting; Loading @@ -27,6 +26,7 @@ import com.android.systemui.util.concurrency.DelayableExecutor; import java.util.ArrayList; import java.util.ArrayList; import java.util.List; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; import java.util.function.Consumer; import javax.inject.Inject; import javax.inject.Inject; Loading Loading @@ -64,11 +64,12 @@ public class ProximitySensor implements ThresholdSensor { private final DelayableExecutor mDelayableExecutor; private final DelayableExecutor mDelayableExecutor; private final List<ThresholdSensor.Listener> mListeners = new ArrayList<>(); private final List<ThresholdSensor.Listener> mListeners = new ArrayList<>(); private String mTag = null; private String mTag = null; @VisibleForTesting protected boolean mPaused; private ThresholdSensorEvent mLastPrimaryEvent; private ThresholdSensorEvent mLastPrimaryEvent; @VisibleForTesting @VisibleForTesting ThresholdSensorEvent mLastEvent; ThresholdSensorEvent mLastEvent; private boolean mPaused; private boolean mRegistered; private boolean mRegistered; private final AtomicBoolean mAlerting = new AtomicBoolean(); private Runnable mCancelSecondaryRunnable; private Runnable mCancelSecondaryRunnable; private boolean mInitializedListeners = false; private boolean mInitializedListeners = false; Loading Loading @@ -235,15 +236,18 @@ public class ProximitySensor implements ThresholdSensor { /** Update all listeners with the last value this class received from the sensor. */ /** Update all listeners with the last value this class received from the sensor. */ public void alertListeners() { public void alertListeners() { Assert.isMainThread(); Assert.isMainThread(); if (mLastEvent == null) { if (mAlerting.getAndSet(true)) { return; return; } } if (mLastEvent != null) { List<ThresholdSensor.Listener> listeners = new ArrayList<>(mListeners); List<ThresholdSensor.Listener> listeners = new ArrayList<>(mListeners); listeners.forEach(proximitySensorListener -> listeners.forEach(proximitySensorListener -> proximitySensorListener.onThresholdCrossed(mLastEvent)); proximitySensorListener.onThresholdCrossed(mLastEvent)); } } mAlerting.set(false); } private void onPrimarySensorEvent(ThresholdSensorEvent event) { private void onPrimarySensorEvent(ThresholdSensorEvent event) { Assert.isMainThread(); Assert.isMainThread(); if (mLastPrimaryEvent != null && event.getBelow() == mLastPrimaryEvent.getBelow()) { if (mLastPrimaryEvent != null && event.getBelow() == mLastPrimaryEvent.getBelow()) { Loading Loading @@ -291,14 +295,14 @@ public class ProximitySensor implements ThresholdSensor { public static class ProximityCheck implements Runnable { public static class ProximityCheck implements Runnable { private final ProximitySensor mSensor; private final ProximitySensor mSensor; private final Handler mHandler; private final DelayableExecutor mDelayableExecutor; private List<Consumer<Boolean>> mCallbacks = new ArrayList<>(); private List<Consumer<Boolean>> mCallbacks = new ArrayList<>(); @Inject @Inject public ProximityCheck(ProximitySensor sensor, Handler handler) { public ProximityCheck(ProximitySensor sensor, DelayableExecutor delayableExecutor) { mSensor = sensor; mSensor = sensor; mSensor.setTag("prox_check"); mSensor.setTag("prox_check"); mHandler = handler; mDelayableExecutor = delayableExecutor; mSensor.pause(); mSensor.pause(); ThresholdSensor.Listener listener = proximityEvent -> { ThresholdSensor.Listener listener = proximityEvent -> { mCallbacks.forEach( mCallbacks.forEach( Loading Loading @@ -332,7 +336,7 @@ public class ProximitySensor implements ThresholdSensor { mCallbacks.add(callback); mCallbacks.add(callback); if (!mSensor.isRegistered()) { if (!mSensor.isRegistered()) { mSensor.resume(); mSensor.resume(); mHandler.postDelayed(this, timeoutMs); mDelayableExecutor.executeDelayed(this, timeoutMs); } } } } } } Loading
packages/SystemUI/tests/src/com/android/systemui/doze/DozeSensorsTest.java +5 −9 Original line number Original line Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.systemui.doze; import static com.android.systemui.plugins.SensorManagerPlugin.Sensor.TYPE_WAKE_LOCK_SCREEN; import static com.android.systemui.plugins.SensorManagerPlugin.Sensor.TYPE_WAKE_LOCK_SCREEN; import static org.junit.Assert.assertFalse; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyFloat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyInt; Loading Loading @@ -82,10 +83,7 @@ public class DozeSensorsTest extends SysuiTestCase { @Mock @Mock private DozeLog mDozeLog; private DozeLog mDozeLog; @Mock @Mock private Sensor mProximitySensor; private ProximitySensor mProximitySensor; @Mock private ProximitySensor mMockProxSensor; private SensorManagerPlugin.SensorEventListener mWakeLockScreenListener; private SensorManagerPlugin.SensorEventListener mWakeLockScreenListener; private TestableLooper mTestableLooper; private TestableLooper mTestableLooper; private DozeSensors mDozeSensors; private DozeSensors mDozeSensors; Loading @@ -96,7 +94,6 @@ public class DozeSensorsTest extends SysuiTestCase { mTestableLooper = TestableLooper.get(this); mTestableLooper = TestableLooper.get(this); when(mAmbientDisplayConfiguration.getWakeLockScreenDebounce()).thenReturn(5000L); when(mAmbientDisplayConfiguration.getWakeLockScreenDebounce()).thenReturn(5000L); when(mAmbientDisplayConfiguration.alwaysOnEnabled(anyInt())).thenReturn(true); when(mAmbientDisplayConfiguration.alwaysOnEnabled(anyInt())).thenReturn(true); when(mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)).thenReturn(mProximitySensor); doAnswer(invocation -> { doAnswer(invocation -> { ((Runnable) invocation.getArgument(0)).run(); ((Runnable) invocation.getArgument(0)).run(); return null; return null; Loading @@ -106,10 +103,9 @@ public class DozeSensorsTest extends SysuiTestCase { @Test @Test public void testRegisterProx() { public void testRegisterProx() { // We should not register with the sensor manager initially. assertFalse(mProximitySensor.isRegistered()); verify(mMockProxSensor).pause(); mDozeSensors.setProxListening(true); mDozeSensors.setProxListening(true); verify(mMockProxSensor).resume(); verify(mProximitySensor).resume(); } } @Test @Test Loading Loading @@ -158,7 +154,7 @@ public class DozeSensorsTest extends SysuiTestCase { TestableDozeSensors() { TestableDozeSensors() { super(getContext(), mAlarmManager, mSensorManager, mDozeParameters, super(getContext(), mAlarmManager, mSensorManager, mDozeParameters, mAmbientDisplayConfiguration, mWakeLock, mCallback, mProxCallback, mDozeLog, mAmbientDisplayConfiguration, mWakeLock, mCallback, mProxCallback, mDozeLog, mMockProxSensor); mProximitySensor); for (TriggerSensor sensor : mSensors) { for (TriggerSensor sensor : mSensors) { if (sensor instanceof PluginSensor if (sensor instanceof PluginSensor && ((PluginSensor) sensor).mPluginSensor.getType() && ((PluginSensor) sensor).mPluginSensor.getType() Loading