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