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

Commit 79cb5468 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

Use DockManager instead of BatteryController for Falsing.

Also, pause the proximity sensor directly when we dock/undock.
This ensures that we don't wait for some other event to occur
before changing the state of the proximity sensor.

Fixes: 192670703
Test: atest SystemUITests
Change-Id: If2b429639df76bbd4cf8adecc987dcf18ae45925
parent 4c7368f7
Loading
Loading
Loading
Loading
+3 −6
Original line number Original line Diff line number Diff line
@@ -33,7 +33,6 @@ import com.android.internal.logging.MetricsLogger;
import com.android.systemui.classifier.FalsingDataProvider.SessionListener;
import com.android.systemui.classifier.FalsingDataProvider.SessionListener;
import com.android.systemui.classifier.HistoryTracker.BeliefListener;
import com.android.systemui.classifier.HistoryTracker.BeliefListener;
import com.android.systemui.dagger.qualifiers.TestHarness;
import com.android.systemui.dagger.qualifiers.TestHarness;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.KeyguardStateController;


@@ -66,7 +65,6 @@ public class BrightLineFalsingManager implements FalsingManager {
    private static final double FALSE_BELIEF_THRESHOLD = 0.9;
    private static final double FALSE_BELIEF_THRESHOLD = 0.9;


    private final FalsingDataProvider mDataProvider;
    private final FalsingDataProvider mDataProvider;
    private final DockManager mDockManager;
    private final SingleTapClassifier mSingleTapClassifier;
    private final SingleTapClassifier mSingleTapClassifier;
    private final DoubleTapClassifier mDoubleTapClassifier;
    private final DoubleTapClassifier mDoubleTapClassifier;
    private final HistoryTracker mHistoryTracker;
    private final HistoryTracker mHistoryTracker;
@@ -173,14 +171,13 @@ public class BrightLineFalsingManager implements FalsingManager {


    @Inject
    @Inject
    public BrightLineFalsingManager(FalsingDataProvider falsingDataProvider,
    public BrightLineFalsingManager(FalsingDataProvider falsingDataProvider,
            DockManager dockManager, MetricsLogger metricsLogger,
            MetricsLogger metricsLogger,
            @Named(BRIGHT_LINE_GESTURE_CLASSIFERS) Set<FalsingClassifier> classifiers,
            @Named(BRIGHT_LINE_GESTURE_CLASSIFERS) Set<FalsingClassifier> classifiers,
            SingleTapClassifier singleTapClassifier, DoubleTapClassifier doubleTapClassifier,
            SingleTapClassifier singleTapClassifier, DoubleTapClassifier doubleTapClassifier,
            HistoryTracker historyTracker, KeyguardStateController keyguardStateController,
            HistoryTracker historyTracker, KeyguardStateController keyguardStateController,
            AccessibilityManager accessibilityManager,
            AccessibilityManager accessibilityManager,
            @TestHarness boolean testHarness) {
            @TestHarness boolean testHarness) {
        mDataProvider = falsingDataProvider;
        mDataProvider = falsingDataProvider;
        mDockManager = dockManager;
        mMetricsLogger = metricsLogger;
        mMetricsLogger = metricsLogger;
        mClassifiers = classifiers;
        mClassifiers = classifiers;
        mSingleTapClassifier = singleTapClassifier;
        mSingleTapClassifier = singleTapClassifier;
@@ -332,7 +329,7 @@ public class BrightLineFalsingManager implements FalsingManager {
                || !mKeyguardStateController.isShowing()
                || !mKeyguardStateController.isShowing()
                || mTestHarness
                || mTestHarness
                || mDataProvider.isJustUnlockedWithFace()
                || mDataProvider.isJustUnlockedWithFace()
                || mDockManager.isDocked()
                || mDataProvider.isDocked()
                || mAccessibilityManager.isEnabled();
                || mAccessibilityManager.isEnabled();
    }
    }


@@ -400,7 +397,7 @@ public class BrightLineFalsingManager implements FalsingManager {
        ipw.print("mJustUnlockedWithFace=");
        ipw.print("mJustUnlockedWithFace=");
        ipw.println(mDataProvider.isJustUnlockedWithFace() ? 1 : 0);
        ipw.println(mDataProvider.isJustUnlockedWithFace() ? 1 : 0);
        ipw.print("isDocked=");
        ipw.print("isDocked=");
        ipw.println(mDockManager.isDocked() ? 1 : 0);
        ipw.println(mDataProvider.isDocked() ? 1 : 0);
        ipw.print("width=");
        ipw.print("width=");
        ipw.println(mDataProvider.getWidthPixels());
        ipw.println(mDataProvider.getWidthPixels());
        ipw.print("height=");
        ipw.print("height=");
+53 −8
Original line number Original line Diff line number Diff line
@@ -16,6 +16,8 @@


package com.android.systemui.classifier;
package com.android.systemui.classifier;


import static com.android.systemui.dock.DockManager.DockEventListener;

import android.hardware.SensorManager;
import android.hardware.SensorManager;
import android.hardware.biometrics.BiometricSourceType;
import android.hardware.biometrics.BiometricSourceType;
import android.util.Log;
import android.util.Log;
@@ -25,9 +27,12 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.sensors.ProximitySensor;
import com.android.systemui.util.sensors.ProximitySensor;
@@ -53,6 +58,8 @@ class FalsingCollectorImpl implements FalsingCollector {
    private final ProximitySensor mProximitySensor;
    private final ProximitySensor mProximitySensor;
    private final StatusBarStateController mStatusBarStateController;
    private final StatusBarStateController mStatusBarStateController;
    private final KeyguardStateController mKeyguardStateController;
    private final KeyguardStateController mKeyguardStateController;
    private final BatteryController mBatteryController;
    private final DockManager mDockManager;
    private final DelayableExecutor mMainExecutor;
    private final DelayableExecutor mMainExecutor;
    private final SystemClock mSystemClock;
    private final SystemClock mSystemClock;


@@ -89,12 +96,46 @@ class FalsingCollectorImpl implements FalsingCollector {
                }
                }
            };
            };



    private final BatteryStateChangeCallback mBatteryListener = new BatteryStateChangeCallback() {
        @Override
        public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
        }

        @Override
        public void onWirelessChargingChanged(boolean isWirelessCharging) {
            if (isWirelessCharging || mDockManager.isDocked()) {
                mProximitySensor.pause();
            } else {
                mProximitySensor.resume();
            }
        }
    };

    private final DockEventListener mDockEventListener = new DockEventListener() {
        @Override
        public void onEvent(int event) {
            if (event == DockManager.STATE_NONE && !mBatteryController.isWirelessCharging()) {
                mProximitySensor.resume();
            } else {
                mProximitySensor.pause();
            }
        }
    };

    @Inject
    @Inject
    FalsingCollectorImpl(FalsingDataProvider falsingDataProvider, FalsingManager falsingManager,
    FalsingCollectorImpl(
            KeyguardUpdateMonitor keyguardUpdateMonitor, HistoryTracker historyTracker,
            FalsingDataProvider falsingDataProvider,
            ProximitySensor proximitySensor, StatusBarStateController statusBarStateController,
            FalsingManager falsingManager,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            HistoryTracker historyTracker,
            ProximitySensor proximitySensor,
            StatusBarStateController statusBarStateController,
            KeyguardStateController keyguardStateController,
            KeyguardStateController keyguardStateController,
            @Main DelayableExecutor mainExecutor, SystemClock systemClock) {
            BatteryController batteryController,
            DockManager dockManager,
            @Main DelayableExecutor mainExecutor,
            SystemClock systemClock) {
        mFalsingDataProvider = falsingDataProvider;
        mFalsingDataProvider = falsingDataProvider;
        mFalsingManager = falsingManager;
        mFalsingManager = falsingManager;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
@@ -102,10 +143,11 @@ class FalsingCollectorImpl implements FalsingCollector {
        mProximitySensor = proximitySensor;
        mProximitySensor = proximitySensor;
        mStatusBarStateController = statusBarStateController;
        mStatusBarStateController = statusBarStateController;
        mKeyguardStateController = keyguardStateController;
        mKeyguardStateController = keyguardStateController;
        mBatteryController = batteryController;
        mDockManager = dockManager;
        mMainExecutor = mainExecutor;
        mMainExecutor = mainExecutor;
        mSystemClock = systemClock;
        mSystemClock = systemClock;



        mProximitySensor.setTag(PROXIMITY_SENSOR_TAG);
        mProximitySensor.setTag(PROXIMITY_SENSOR_TAG);
        mProximitySensor.setDelay(SensorManager.SENSOR_DELAY_GAME);
        mProximitySensor.setDelay(SensorManager.SENSOR_DELAY_GAME);


@@ -113,6 +155,9 @@ class FalsingCollectorImpl implements FalsingCollector {
        mState = mStatusBarStateController.getState();
        mState = mStatusBarStateController.getState();


        mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateCallback);
        mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateCallback);

        mBatteryController.addCallback(mBatteryListener);
        mDockManager.addListener(mDockEventListener);
    }
    }


    @Override
    @Override
@@ -312,6 +357,8 @@ class FalsingCollectorImpl implements FalsingCollector {
        unregisterSensors();
        unregisterSensors();
        mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateCallback);
        mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateCallback);
        mStatusBarStateController.removeCallback(mStatusBarStateListener);
        mStatusBarStateController.removeCallback(mStatusBarStateListener);
        mBatteryController.removeCallback(mBatteryListener);
        mDockManager.removeListener(mDockEventListener);
    }
    }


    @Override
    @Override
@@ -351,10 +398,8 @@ class FalsingCollectorImpl implements FalsingCollector {
    }
    }


    private void registerSensors() {
    private void registerSensors() {
        if (!mFalsingDataProvider.isWirelessCharging()) {
        mProximitySensor.register(mSensorEventListener);
        mProximitySensor.register(mSensorEventListener);
    }
    }
    }


    private void unregisterSensors() {
    private void unregisterSensors() {
        mProximitySensor.unregister(mSensorEventListener);
        mProximitySensor.unregister(mSensorEventListener);
+13 −7
Original line number Original line Diff line number Diff line
@@ -22,6 +22,7 @@ import android.view.MotionEvent.PointerCoords;
import android.view.MotionEvent.PointerProperties;
import android.view.MotionEvent.PointerProperties;


import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryController;


import java.util.ArrayList;
import java.util.ArrayList;
@@ -40,7 +41,8 @@ public class FalsingDataProvider {


    private final int mWidthPixels;
    private final int mWidthPixels;
    private final int mHeightPixels;
    private final int mHeightPixels;
    private final BatteryController mBatteryController;
    private BatteryController mBatteryController;
    private final DockManager mDockManager;
    private final float mXdpi;
    private final float mXdpi;
    private final float mYdpi;
    private final float mYdpi;
    private final List<SessionListener> mSessionListeners = new ArrayList<>();
    private final List<SessionListener> mSessionListeners = new ArrayList<>();
@@ -59,12 +61,16 @@ public class FalsingDataProvider {
    private boolean mJustUnlockedWithFace;
    private boolean mJustUnlockedWithFace;


    @Inject
    @Inject
    public FalsingDataProvider(DisplayMetrics displayMetrics, BatteryController batteryController) {
    public FalsingDataProvider(
            DisplayMetrics displayMetrics,
            BatteryController batteryController,
            DockManager dockManager) {
        mXdpi = displayMetrics.xdpi;
        mXdpi = displayMetrics.xdpi;
        mYdpi = displayMetrics.ydpi;
        mYdpi = displayMetrics.ydpi;
        mWidthPixels = displayMetrics.widthPixels;
        mWidthPixels = displayMetrics.widthPixels;
        mHeightPixels = displayMetrics.heightPixels;
        mHeightPixels = displayMetrics.heightPixels;
        mBatteryController = batteryController;
        mBatteryController = batteryController;
        mDockManager = dockManager;


        FalsingClassifier.logInfo("xdpi, ydpi: " + getXdpi() + ", " + getYdpi());
        FalsingClassifier.logInfo("xdpi, ydpi: " + getXdpi() + ", " + getYdpi());
        FalsingClassifier.logInfo("width, height: " + getWidthPixels() + ", " + getHeightPixels());
        FalsingClassifier.logInfo("width, height: " + getWidthPixels() + ", " + getHeightPixels());
@@ -219,11 +225,6 @@ public class FalsingDataProvider {
        return mLastMotionEvent.getY() < mFirstRecentMotionEvent.getY();
        return mLastMotionEvent.getY() < mFirstRecentMotionEvent.getY();
    }
    }


    /** Returns true if phone is being charged without a cable. */
    public boolean isWirelessCharging() {
        return mBatteryController.isWirelessCharging();
    }

    private void recalculateData() {
    private void recalculateData() {
        if (!mDirty) {
        if (!mDirty) {
            return;
            return;
@@ -357,6 +358,11 @@ public class FalsingDataProvider {
        mJustUnlockedWithFace = justUnlockedWithFace;
        mJustUnlockedWithFace = justUnlockedWithFace;
    }
    }


    /** Returns true if phone is sitting in a dock or is wirelessly charging. */
    public boolean isDocked() {
        return mBatteryController.isWirelessCharging() || mDockManager.isDocked();
    }

    /** Implement to be alerted abotu the beginning and ending of falsing tracking. */
    /** Implement to be alerted abotu the beginning and ending of falsing tracking. */
    public interface SessionListener {
    public interface SessionListener {
        /** Called when the lock screen is shown and falsing-tracking begins. */
        /** Called when the lock screen is shown and falsing-tracking begins. */
+2 −4
Original line number Original line Diff line number Diff line
@@ -39,7 +39,6 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.testing.FakeMetricsLogger;
import com.android.internal.logging.testing.FakeMetricsLogger;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.classifier.FalsingDataProvider.GestureFinalizedListener;
import com.android.systemui.classifier.FalsingDataProvider.GestureFinalizedListener;
import com.android.systemui.dock.DockManagerFake;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock;
import com.android.systemui.util.time.FakeSystemClock;
@@ -62,7 +61,6 @@ public class BrightLineClassifierTest extends SysuiTestCase {
    private BrightLineFalsingManager mBrightLineFalsingManager;
    private BrightLineFalsingManager mBrightLineFalsingManager;
    @Mock
    @Mock
    private FalsingDataProvider mFalsingDataProvider;
    private FalsingDataProvider mFalsingDataProvider;
    private final DockManagerFake mDockManager = new DockManagerFake();
    private final MetricsLogger mMetricsLogger = new FakeMetricsLogger();
    private final MetricsLogger mMetricsLogger = new FakeMetricsLogger();
    private final Set<FalsingClassifier> mClassifiers = new HashSet<>();
    private final Set<FalsingClassifier> mClassifiers = new HashSet<>();
    @Mock
    @Mock
@@ -102,7 +100,7 @@ public class BrightLineClassifierTest extends SysuiTestCase {
        mClassifiers.add(mClassifierB);
        mClassifiers.add(mClassifierB);
        when(mFalsingDataProvider.getRecentMotionEvents()).thenReturn(mMotionEventList);
        when(mFalsingDataProvider.getRecentMotionEvents()).thenReturn(mMotionEventList);
        when(mKeyguardStateController.isShowing()).thenReturn(true);
        when(mKeyguardStateController.isShowing()).thenReturn(true);
        mBrightLineFalsingManager = new BrightLineFalsingManager(mFalsingDataProvider, mDockManager,
        mBrightLineFalsingManager = new BrightLineFalsingManager(mFalsingDataProvider,
                mMetricsLogger, mClassifiers, mSingleTapClassfier, mDoubleTapClassifier,
                mMetricsLogger, mClassifiers, mSingleTapClassfier, mDoubleTapClassifier,
                mHistoryTracker, mKeyguardStateController, mAccessibilityManager,
                mHistoryTracker, mKeyguardStateController, mAccessibilityManager,
                false);
                false);
@@ -168,7 +166,7 @@ public class BrightLineClassifierTest extends SysuiTestCase {
        // Even when the classifiers report a false, we should allow.
        // Even when the classifiers report a false, we should allow.
        when(mClassifierA.classifyGesture(anyInt(), anyDouble(), anyDouble()))
        when(mClassifierA.classifyGesture(anyInt(), anyDouble(), anyDouble()))
                .thenReturn(mPassedResult);
                .thenReturn(mPassedResult);
        mDockManager.setIsDocked(true);
        when(mFalsingDataProvider.isDocked()).thenReturn(true);


        assertThat(mBrightLineFalsingManager.isFalseTouch(0)).isFalse();
        assertThat(mBrightLineFalsingManager.isFalseTouch(0)).isFalse();
    }
    }
+1 −3
Original line number Original line Diff line number Diff line
@@ -32,7 +32,6 @@ import androidx.test.filters.SmallTest;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.testing.FakeMetricsLogger;
import com.android.internal.logging.testing.FakeMetricsLogger;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dock.DockManagerFake;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.KeyguardStateController;


import org.junit.Before;
import org.junit.Before;
@@ -52,7 +51,6 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase {
    private BrightLineFalsingManager mBrightLineFalsingManager;
    private BrightLineFalsingManager mBrightLineFalsingManager;
    @Mock
    @Mock
    private FalsingDataProvider mFalsingDataProvider;
    private FalsingDataProvider mFalsingDataProvider;
    private final DockManagerFake mDockManager = new DockManagerFake();
    private final MetricsLogger mMetricsLogger = new FakeMetricsLogger();
    private final MetricsLogger mMetricsLogger = new FakeMetricsLogger();
    private final Set<FalsingClassifier> mClassifiers = new HashSet<>();
    private final Set<FalsingClassifier> mClassifiers = new HashSet<>();
    @Mock
    @Mock
@@ -84,7 +82,7 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase {
        mClassifiers.add(mClassifierA);
        mClassifiers.add(mClassifierA);
        when(mFalsingDataProvider.getRecentMotionEvents()).thenReturn(mMotionEventList);
        when(mFalsingDataProvider.getRecentMotionEvents()).thenReturn(mMotionEventList);
        when(mKeyguardStateController.isShowing()).thenReturn(true);
        when(mKeyguardStateController.isShowing()).thenReturn(true);
        mBrightLineFalsingManager = new BrightLineFalsingManager(mFalsingDataProvider, mDockManager,
        mBrightLineFalsingManager = new BrightLineFalsingManager(mFalsingDataProvider,
                mMetricsLogger, mClassifiers, mSingleTapClassifier, mDoubleTapClassifier,
                mMetricsLogger, mClassifiers, mSingleTapClassifier, mDoubleTapClassifier,
                mHistoryTracker, mKeyguardStateController, mAccessibilityManager,
                mHistoryTracker, mKeyguardStateController, mAccessibilityManager,
                false);
                false);
Loading