Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7ef9e2f9 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix NPE in DozeTriggers and Add Tests"

parents 109efa2f bf52f4bb
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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;

@@ -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,
+1 −4
Original line number Diff line number Diff line
@@ -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;
@@ -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()));
+6 −9
Original line number Diff line number Diff line
@@ -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;
@@ -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,
@@ -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) {
@@ -182,7 +179,7 @@ public class DozeTriggers implements DozeMachine.Part {
            }
        } else {
            proximityCheckThenCall((result) -> {
                if (result) {
                if (result != null && result) {
                    // In pocket, drop event.
                    return;
                }
@@ -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;
                }
@@ -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;
+6 −7
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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);

@@ -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);
@@ -175,7 +174,7 @@ public class ProximitySensor {
        }
    }

    private void unregisterInternal() {
    protected void unregisterInternal() {
        if (!mRegistered) {
            return;
        }
+17 −3
Original line number Diff line number Diff line
@@ -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;

@@ -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() {
@@ -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();
    }

@@ -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());
    }
@@ -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