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

Commit 91e3c288 authored by Automerger Merge Worker's avatar Automerger Merge Worker
Browse files

Merge "Ensure that FalsingManager is not active when phone unlocked." into rvc-dev am: 6b0bccc9

Change-Id: I9eb21120c6af5753106107e044e4445dc12659af
parents ec6efc6b 6b0bccc9
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.FalsingPlugin;
import com.android.systemui.plugins.PluginListener;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.sensors.ProximitySensor;
@@ -69,6 +70,7 @@ public class FalsingManagerProxy implements FalsingManager, Dumpable {
    private final DockManager mDockManager;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private Executor mUiBgExecutor;
    private final StatusBarStateController mStatusBarStateController;

    @Inject
    FalsingManagerProxy(Context context, PluginManager pluginManager, @Main Executor executor,
@@ -76,12 +78,14 @@ public class FalsingManagerProxy implements FalsingManager, Dumpable {
            DeviceConfigProxy deviceConfig, DockManager dockManager,
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            DumpManager dumpManager,
            @UiBackground Executor uiBgExecutor) {
            @UiBackground Executor uiBgExecutor,
            StatusBarStateController statusBarStateController) {
        mDisplayMetrics = displayMetrics;
        mProximitySensor = proximitySensor;
        mDockManager = dockManager;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mUiBgExecutor = uiBgExecutor;
        mStatusBarStateController = statusBarStateController;
        mProximitySensor.setTag(PROXIMITY_SENSOR_TAG);
        mProximitySensor.setSensorDelay(SensorManager.SENSOR_DELAY_GAME);
        mDeviceConfig = deviceConfig;
@@ -143,7 +147,8 @@ public class FalsingManagerProxy implements FalsingManager, Dumpable {
                    mKeyguardUpdateMonitor,
                    mProximitySensor,
                    mDeviceConfig,
                    mDockManager
                    mDockManager,
                    mStatusBarStateController
            );
        }
    }
+36 −10
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.classifier.Classifier;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.sensors.ProximitySensor;

@@ -59,6 +61,7 @@ public class BrightLineFalsingManager implements FalsingManager {
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final ProximitySensor mProximitySensor;
    private final DockManager mDockManager;
    private final StatusBarStateController mStatusBarStateController;
    private boolean mSessionStarted;
    private MetricsLogger mMetricsLogger;
    private int mIsFalseTouchCalls;
@@ -88,15 +91,29 @@ public class BrightLineFalsingManager implements FalsingManager {
            };
    private boolean mPreviousResult = false;

    private StatusBarStateController.StateListener mStatusBarStateListener =
            new StatusBarStateController.StateListener() {
        @Override
        public void onStateChanged(int newState) {
            logDebug("StatusBarState=" + StatusBarState.toShortString(newState));
            mState = newState;
            updateSessionActive();
        }
    };
    private int mState;

    public BrightLineFalsingManager(FalsingDataProvider falsingDataProvider,
            KeyguardUpdateMonitor keyguardUpdateMonitor, ProximitySensor proximitySensor,
            DeviceConfigProxy deviceConfigProxy,
            DockManager dockManager) {
            DockManager dockManager, StatusBarStateController statusBarStateController) {
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mDataProvider = falsingDataProvider;
        mProximitySensor = proximitySensor;
        mDockManager = dockManager;
        mStatusBarStateController = statusBarStateController;
        mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateCallback);
        mStatusBarStateController.addCallback(mStatusBarStateListener);
        mState = mStatusBarStateController.getState();

        mMetricsLogger = new MetricsLogger();
        mClassifiers = new ArrayList<>();
@@ -116,13 +133,12 @@ public class BrightLineFalsingManager implements FalsingManager {
        mProximitySensor.register(mSensorEventListener);
    }


    private void unregisterSensors() {
        mProximitySensor.unregister(mSensorEventListener);
    }

    private void sessionStart() {
        if (!mSessionStarted && !mShowingAod && mScreenOn) {
        if (!mSessionStarted && shouldSessionBeActive()) {
            logDebug("Starting Session");
            mSessionStarted = true;
            mJustUnlockedWithFace = false;
@@ -145,6 +161,19 @@ public class BrightLineFalsingManager implements FalsingManager {
        }
    }


    private void updateSessionActive() {
        if (shouldSessionBeActive()) {
            sessionStart();
        } else {
            sessionEnd();
        }
    }

    private boolean shouldSessionBeActive() {
        return mScreenOn && (mState == StatusBarState.KEYGUARD) && !mShowingAod;
    }

    private void updateInteractionType(@Classifier.InteractionType int type) {
        logDebug("InteractionType: " + type);
        mDataProvider.setInteractionType(type);
@@ -232,11 +261,7 @@ public class BrightLineFalsingManager implements FalsingManager {
    @Override
    public void setShowingAod(boolean showingAod) {
        mShowingAod = showingAod;
        if (showingAod) {
            sessionEnd();
        } else {
            sessionStart();
        }
        updateSessionActive();
    }

    @Override
@@ -343,13 +368,13 @@ public class BrightLineFalsingManager implements FalsingManager {
    @Override
    public void onScreenTurningOn() {
        mScreenOn = true;
        sessionStart();
        updateSessionActive();
    }

    @Override
    public void onScreenOff() {
        mScreenOn = false;
        sessionEnd();
        updateSessionActive();
    }


@@ -421,6 +446,7 @@ public class BrightLineFalsingManager implements FalsingManager {
    public void cleanup() {
        unregisterSensors();
        mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateCallback);
        mStatusBarStateController.removeCallback(mStatusBarStateListener);
    }

    static void logDebug(String msg) {
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ import javax.inject.Inject;
 */
public class ProximitySensor {
    private static final String TAG = "ProxSensor";
    private static final boolean DEBUG = false;
    private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);

    private final Sensor mSensor;
    private final AsyncSensorManager mSensorManager;
+6 −3
Original line number Diff line number Diff line
@@ -33,7 +33,9 @@ import com.android.systemui.classifier.brightline.BrightLineFalsingManager;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManagerFake;
import com.android.systemui.dump.DumpManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.shared.plugins.PluginManager;
import com.android.systemui.statusbar.StatusBarStateControllerImpl;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.DeviceConfigProxyFake;
import com.android.systemui.util.concurrency.FakeExecutor;
@@ -63,6 +65,7 @@ public class FalsingManagerProxyTest extends SysuiTestCase {
    private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock());
    private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock());
    private DockManager mDockManager = new DockManagerFake();
    private StatusBarStateController mStatusBarStateController = new StatusBarStateControllerImpl();

    @Before
    public void setup() {
@@ -83,7 +86,7 @@ public class FalsingManagerProxyTest extends SysuiTestCase {
    public void test_brightLineFalsingManagerDisabled() {
        mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics,
                mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor,
                mDumpManager, mUiBgExecutor);
                mDumpManager, mUiBgExecutor, mStatusBarStateController);
        assertThat(mProxy.getInternalFalsingManager(), instanceOf(FalsingManagerImpl.class));
    }

@@ -94,7 +97,7 @@ public class FalsingManagerProxyTest extends SysuiTestCase {
        mExecutor.runAllReady();
        mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics,
                mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor,
                mDumpManager, mUiBgExecutor);
                mDumpManager, mUiBgExecutor, mStatusBarStateController);
        assertThat(mProxy.getInternalFalsingManager(), instanceOf(BrightLineFalsingManager.class));
    }

@@ -102,7 +105,7 @@ public class FalsingManagerProxyTest extends SysuiTestCase {
    public void test_brightLineFalsingManagerToggled() throws InterruptedException {
        mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics,
                mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor,
                mDumpManager, mUiBgExecutor);
                mDumpManager, mUiBgExecutor, mStatusBarStateController);
        assertThat(mProxy.getInternalFalsingManager(), instanceOf(FalsingManagerImpl.class));

        mDeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI,
+18 −1
Original line number Diff line number Diff line
@@ -22,12 +22,16 @@ import static org.mockito.Mockito.verify;

import android.test.suitebuilder.annotation.SmallTest;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
import android.util.DisplayMetrics;

import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManagerFake;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.StatusBarStateControllerImpl;
import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.DeviceConfigProxyFake;
import com.android.systemui.util.sensors.ProximitySensor;
@@ -40,6 +44,7 @@ import org.mockito.MockitoAnnotations;

@SmallTest
@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
public class BrightLineFalsingManagerTest extends SysuiTestCase {


@@ -47,6 +52,7 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase {
    private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    @Mock
    private ProximitySensor mProximitySensor;
    private SysuiStatusBarStateController mStatusBarStateController;

    private BrightLineFalsingManager mFalsingManager;

@@ -61,8 +67,11 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase {
        FalsingDataProvider falsingDataProvider = new FalsingDataProvider(dm);
        DeviceConfigProxy deviceConfigProxy = new DeviceConfigProxyFake();
        DockManager dockManager = new DockManagerFake();
        mStatusBarStateController = new StatusBarStateControllerImpl();
        mStatusBarStateController.setState(StatusBarState.KEYGUARD);
        mFalsingManager = new BrightLineFalsingManager(falsingDataProvider,
                mKeyguardUpdateMonitor, mProximitySensor, deviceConfigProxy, dockManager);
                mKeyguardUpdateMonitor, mProximitySensor, deviceConfigProxy, dockManager,
                mStatusBarStateController);
    }

    @Test
@@ -98,4 +107,12 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase {
        mFalsingManager.onBouncerHidden();
        verify(mProximitySensor).register(any(ProximitySensor.ProximitySensorListener.class));
    }

    @Test
    public void testUnregisterSensor_StateTransition() {
        mFalsingManager.onScreenTurningOn();
        reset(mProximitySensor);
        mStatusBarStateController.setState(StatusBarState.SHADE);
        verify(mProximitySensor).unregister(any(ProximitySensor.ProximitySensorListener.class));
    }
}