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

Commit 39ed7729 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

Rely on a falsing-belief event to reset lockscreen

Individual components of the lock screen are now simply in charge of
asking the FalsingManager to recognize certain types of gestures. If
they don't ask, the FalsingManager will assume they were accidental.

Once a certain number of accidental touches occur, an event is fired
that signals that the lock screen should be reset.

More tuning and adjustment to come, but this is now functional.

This also fixes a bug in an earlier cl where the bouncer would no
longer retract if touches outside of its region were detected.

Bug: 172655679
Test: manual
Change-Id: Iffd1c7e58365235b1b7dbdac0c74439ead1df9d3
parent a1238591
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -95,4 +95,15 @@ public interface FalsingManager {

    /** Call to report a ProximityEvent to the FalsingManager. */
    void onProximityEvent(ThresholdSensor.ThresholdSensorEvent proximityEvent);

    /** Adds a {@link FalsingBeliefListener}. */
    void addFalsingBeliefListener(FalsingBeliefListener listener);

    /** Removes a {@link FalsingBeliefListener}. */
    void removeFalsingBeliefListener(FalsingBeliefListener listener);

    /** Listener that is alerted when falsing belief level crosses a predfined threshold. */
    interface FalsingBeliefListener {
        void onFalse();
    }
}
+4 −22
Original line number Diff line number Diff line
@@ -48,7 +48,6 @@ import com.android.keyguard.KeyguardSecurityModel.SecurityMode;
import com.android.keyguard.dagger.KeyguardBouncerScope;
import com.android.settingslib.utils.ThreadUtils;
import com.android.systemui.Gefingerpoken;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.shared.system.SysUiStatsLog;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -74,8 +73,6 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
    private final KeyguardSecurityViewFlipperController mSecurityViewFlipperController;
    private final SecurityCallback mSecurityCallback;
    private final ConfigurationController mConfigurationController;
    private final KeyguardViewController mKeyguardViewController;
    private final FalsingManager mFalsingManager;

    private SecurityMode mCurrentSecurityMode = SecurityMode.Invalid;

@@ -97,13 +94,8 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
                }
                mTouchDown = MotionEvent.obtain(ev);
            } else if (mTouchDown != null) {
                boolean tapResult = mFalsingManager.isFalseTap(true, 0.6);
                if (tapResult
                        || ev.getActionMasked() == MotionEvent.ACTION_UP
                if (ev.getActionMasked() == MotionEvent.ACTION_UP
                        || ev.getActionMasked() == MotionEvent.ACTION_CANCEL) {
                    if (tapResult) {
                        mKeyguardViewController.reset(true);
                    }
                    mTouchDown.recycle();
                    mTouchDown = null;
                }
@@ -207,9 +199,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
            KeyguardStateController keyguardStateController,
            SecurityCallback securityCallback,
            KeyguardSecurityViewFlipperController securityViewFlipperController,
            ConfigurationController configurationController,
            KeyguardViewController keyguardViewController,
            FalsingManager falsingManager) {
            ConfigurationController configurationController) {
        super(view);
        mLockPatternUtils = lockPatternUtils;
        mUpdateMonitor = keyguardUpdateMonitor;
@@ -222,8 +212,6 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
        mAdminSecondaryLockScreenController = adminSecondaryLockScreenControllerFactory.create(
                mKeyguardSecurityCallback);
        mConfigurationController = configurationController;
        mKeyguardViewController = keyguardViewController;
        mFalsingManager = falsingManager;
    }

    @Override
@@ -523,8 +511,6 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
        private final KeyguardStateController mKeyguardStateController;
        private final KeyguardSecurityViewFlipperController mSecurityViewFlipperController;
        private final ConfigurationController mConfigurationController;
        private final KeyguardViewController mKeyguardViewController;
        private final FalsingManager mFalsingManager;

        @Inject
        Factory(KeyguardSecurityContainer view,
@@ -537,9 +523,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
                UiEventLogger uiEventLogger,
                KeyguardStateController keyguardStateController,
                KeyguardSecurityViewFlipperController securityViewFlipperController,
                ConfigurationController configurationController,
                KeyguardViewController keyguardViewController,
                FalsingManager falsingManager) {
                ConfigurationController configurationController) {
            mView = view;
            mAdminSecondaryLockScreenControllerFactory = adminSecondaryLockScreenControllerFactory;
            mLockPatternUtils = lockPatternUtils;
@@ -550,8 +534,6 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
            mKeyguardStateController = keyguardStateController;
            mSecurityViewFlipperController = securityViewFlipperController;
            mConfigurationController = configurationController;
            mKeyguardViewController = keyguardViewController;
            mFalsingManager = falsingManager;
        }

        public KeyguardSecurityContainerController create(
@@ -560,7 +542,7 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
                    mAdminSecondaryLockScreenControllerFactory, mLockPatternUtils,
                    mKeyguardUpdateMonitor, mKeyguardSecurityModel, mMetricsLogger, mUiEventLogger,
                    mKeyguardStateController, securityCallback, mSecurityViewFlipperController,
                    mConfigurationController, mKeyguardViewController, mFalsingManager);
                    mConfigurationController);
        }

    }
+35 −13
Original line number Diff line number Diff line
@@ -28,6 +28,7 @@ import androidx.annotation.NonNull;

import com.android.internal.logging.MetricsLogger;
import com.android.systemui.classifier.FalsingDataProvider.SessionListener;
import com.android.systemui.classifier.HistoryTracker.BeliefListener;
import com.android.systemui.dagger.qualifiers.TestHarness;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.FalsingManager;
@@ -61,6 +62,7 @@ public class BrightLineFalsingManager implements FalsingManager {
    private static final int RECENT_INFO_LOG_SIZE = 40;
    private static final int RECENT_SWIPE_LOG_SIZE = 20;
    private static final double TAP_CONFIDENCE_THRESHOLD = 0.7;
    private static final double FALSE_BELIEF_THRESHOLD = 0.9;

    private final FalsingDataProvider mDataProvider;
    private final DockManager mDockManager;
@@ -76,6 +78,7 @@ public class BrightLineFalsingManager implements FalsingManager {
            new ArrayDeque<>(RECENT_SWIPE_LOG_SIZE + 1);

    private final Collection<FalsingClassifier> mClassifiers;
    private final List<FalsingBeliefListener> mFalsingBeliefListeners = new ArrayList<>();

    private final SessionListener mSessionListener = new SessionListener() {
        @Override
@@ -89,6 +92,12 @@ public class BrightLineFalsingManager implements FalsingManager {
        }
    };

    private final BeliefListener mBeliefListener = belief -> {
        if (belief > FALSE_BELIEF_THRESHOLD) {
            mFalsingBeliefListeners.forEach(FalsingBeliefListener::onFalse);
        }
    };

    private final FalsingDataProvider.GestureCompleteListener mGestureCompleteListener =
            new FalsingDataProvider.GestureCompleteListener() {
                @Override
@@ -125,6 +134,7 @@ public class BrightLineFalsingManager implements FalsingManager {

        mDataProvider.addSessionListener(mSessionListener);
        mDataProvider.addGestureCompleteListener(mGestureCompleteListener);
        mHistoryTracker.addBeliefListener(mBeliefListener);
    }

    @Override
@@ -281,6 +291,16 @@ public class BrightLineFalsingManager implements FalsingManager {
        return false;
    }

    @Override
    public void addFalsingBeliefListener(FalsingBeliefListener listener) {
        mFalsingBeliefListeners.add(listener);
    }

    @Override
    public void removeFalsingBeliefListener(FalsingBeliefListener listener) {
        mFalsingBeliefListeners.remove(listener);
    }

    @Override
    public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
        IndentingPrintWriter ipw = new IndentingPrintWriter(pw, "  ");
@@ -321,6 +341,8 @@ public class BrightLineFalsingManager implements FalsingManager {
        mDataProvider.removeSessionListener(mSessionListener);
        mDataProvider.removeGestureCompleteListener(mGestureCompleteListener);
        mClassifiers.forEach(FalsingClassifier::cleanup);
        mFalsingBeliefListeners.clear();
        mHistoryTracker.removeBeliefListener(mBeliefListener);
    }

    static void logDebug(String msg) {
+14 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import com.android.systemui.util.sensors.ThresholdSensor;

import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

/**
 * Simple Fake for testing where {@link FalsingManager} is required.
@@ -38,6 +40,8 @@ public class FalsingManagerFake implements FalsingManager {
    private boolean mIsReportingEnabled;
    private boolean mIsFalseRobustTap;

    private final List<FalsingBeliefListener> mFalsingBeliefListeners = new ArrayList<>();

    @Override
    public void onSuccessfulUnlock() {

@@ -127,4 +131,14 @@ public class FalsingManagerFake implements FalsingManager {
    public void onProximityEvent(ThresholdSensor.ThresholdSensorEvent proximityEvent) {

    }

    @Override
    public void addFalsingBeliefListener(FalsingBeliefListener listener) {
        mFalsingBeliefListeners.add(listener);
    }

    @Override
    public void removeFalsingBeliefListener(FalsingBeliefListener listener) {
        mFalsingBeliefListeners.remove(listener);
    }
}
+10 −0
Original line number Diff line number Diff line
@@ -160,6 +160,16 @@ public class FalsingManagerProxy implements FalsingManager, Dumpable {
        return mInternalFalsingManager.isReportingEnabled();
    }

    @Override
    public void addFalsingBeliefListener(FalsingBeliefListener listener) {
        mInternalFalsingManager.addFalsingBeliefListener(listener);
    }

    @Override
    public void removeFalsingBeliefListener(FalsingBeliefListener listener) {
        mInternalFalsingManager.removeFalsingBeliefListener(listener);
    }

    @Override
    public void onProximityEvent(ThresholdSensor.ThresholdSensorEvent proximityEvent) {
        mInternalFalsingManager.onProximityEvent(proximityEvent);
Loading