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

Commit 03eb095c authored by Dave Mankoff's avatar Dave Mankoff
Browse files

Add falsing to quick settings buttons.

Quicksettings buttons will now reject single taps that either don't
look like clean single taps or that fail other single-tap falsing
criteria.

However, with this change we also allow clean double taps to be
recognized as single taps for the purposes of falsing. If a single
tap fails, a double tap might work.

Bug: 172655679
Test: atest SystemUITests && manual
Change-Id: Icab57e98e2784f3c152b4496db8fc97c2235cbec
parent 03c71744
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -210,15 +210,20 @@ public class BrightLineFalsingManager implements FalsingManager {

        if (robustCheck) {
            if (mDataProvider.isJustUnlockedWithFace()) {
                // Immediately pass if a face is detected.
                mPriorResults = Collections.singleton(FalsingClassifier.Result.passed(1));
                return false;
            } else if (!isFalseDoubleTap()) {
                // We must check double tapping before other heuristics. This is because
                // the double tap will fail if there's only been one tap. We don't want that
                // failure to be recorded in mPriorResults.
                return false;
            } else if (mHistoryTracker.falseBelief() > TAP_CONFIDENCE_THRESHOLD) {
                mPriorResults = Collections.singleton(
                        FalsingClassifier.Result.falsed(0.1, "bad history"));
                        FalsingClassifier.Result.falsed(0, "bad history"));
                return true;
            } else {
                mPriorResults = Collections.singleton(
                        FalsingClassifier.Result.falsed(falsePenalty, "no face detected"));
                mPriorResults = Collections.singleton(FalsingClassifier.Result.passed(0.1));
                return false;
            }
        }
+1 −1
Original line number Diff line number Diff line
@@ -53,7 +53,7 @@ public class DoubleTapClassifier extends FalsingClassifier {
        StringBuilder reason = new StringBuilder();

        if (firstTapEvents == null) {
            return Result.falsed(1, "Only one gesture recorded");
            return Result.falsed(0, "Only one gesture recorded");
        }

        return !isDoubleTap(firstTapEvents, secondTapEvents, reason)
+8 −2
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import com.android.systemui.Dependency;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QSTile.State;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.QSHost;
@@ -95,6 +96,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener
            QSHost host,
            Looper backgroundLooper,
            Handler mainHandler,
            FalsingManager falsingManager,
            MetricsLogger metricsLogger,
            StatusBarStateController statusBarStateController,
            ActivityStarter activityStarter,
@@ -102,8 +104,8 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener
            String action,
            Context userContext
    ) {
        super(host, backgroundLooper, mainHandler, metricsLogger, statusBarStateController,
                activityStarter, qsLogger);
        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                statusBarStateController, activityStarter, qsLogger);
        mWindowManager = WindowManagerGlobal.getWindowManagerService();
        mComponent = ComponentName.unflattenFromString(action);
        mTile = new Tile();
@@ -450,6 +452,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener
        final Lazy<QSHost> mQSHostLazy;
        final Looper mBackgroundLooper;
        final Handler mMainHandler;
        private final FalsingManager mFalsingManager;
        final MetricsLogger mMetricsLogger;
        final StatusBarStateController mStatusBarStateController;
        final ActivityStarter mActivityStarter;
@@ -463,6 +466,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener
                Lazy<QSHost> hostLazy,
                @Background Looper backgroundLooper,
                @Main Handler mainHandler,
                FalsingManager falsingManager,
                MetricsLogger metricsLogger,
                StatusBarStateController statusBarStateController,
                ActivityStarter activityStarter,
@@ -471,6 +475,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener
            mQSHostLazy = hostLazy;
            mBackgroundLooper = backgroundLooper;
            mMainHandler = mainHandler;
            mFalsingManager = falsingManager;
            mMetricsLogger = metricsLogger;
            mStatusBarStateController = statusBarStateController;
            mActivityStarter = activityStarter;
@@ -496,6 +501,7 @@ public class CustomTile extends QSTileImpl<State> implements TileChangeListener
                    mQSHostLazy.get(),
                    mBackgroundLooper,
                    mMainHandler,
                    mFalsingManager,
                    mMetricsLogger,
                    mStatusBarStateController,
                    mActivityStarter,
+7 −1
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@ import com.android.settingslib.Utils;
import com.android.systemui.Dumpable;
import com.android.systemui.Prefs;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.DetailAdapter;
import com.android.systemui.plugins.qs.QSIconView;
import com.android.systemui.plugins.qs.QSTile;
@@ -103,6 +104,7 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy
    private final StatusBarStateController mStatusBarStateController;
    protected final ActivityStarter mActivityStarter;
    private final UiEventLogger mUiEventLogger;
    private final FalsingManager mFalsingManager;
    private final QSLogger mQSLogger;
    private volatile int mReadyState;

@@ -159,6 +161,7 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy
            QSHost host,
            Looper backgroundLooper,
            Handler mainHandler,
            FalsingManager falsingManager,
            MetricsLogger metricsLogger,
            StatusBarStateController statusBarStateController,
            ActivityStarter activityStarter,
@@ -171,6 +174,7 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy

        mUiHandler = mainHandler;
        mHandler = new H(backgroundLooper);
        mFalsingManager = falsingManager;
        mQSLogger = qsLogger;
        mMetricsLogger = metricsLogger;
        mStatusBarStateController = statusBarStateController;
@@ -608,8 +612,10 @@ public abstract class QSTileImpl<TState extends State> implements QSTile, Lifecy
                                mContext, mEnforcedAdmin);
                        mActivityStarter.postStartActivityDismissingKeyguard(intent, 0);
                    } else {
                        if (!mFalsingManager.isFalseTap(true, 0.1)) {
                            handleClick();
                        }
                    }
                } else if (msg.what == SECONDARY_CLICK) {
                    name = "handleSecondaryClick";
                    handleSecondaryClick();
+4 −2
Original line number Diff line number Diff line
@@ -38,6 +38,7 @@ import com.android.systemui.broadcast.BroadcastDispatcher;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.qs.QSTile.BooleanState;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.qs.GlobalSetting;
@@ -63,6 +64,7 @@ public class AirplaneModeTile extends QSTileImpl<BooleanState> {
            QSHost host,
            @Background Looper backgroundLooper,
            @Main Handler mainHandler,
            FalsingManager falsingManager,
            MetricsLogger metricsLogger,
            StatusBarStateController statusBarStateController,
            ActivityStarter activityStarter,
@@ -70,8 +72,8 @@ public class AirplaneModeTile extends QSTileImpl<BooleanState> {
            BroadcastDispatcher broadcastDispatcher,
            Lazy<ConnectivityManager> lazyConnectivityManager
    ) {
        super(host, backgroundLooper, mainHandler, metricsLogger, statusBarStateController,
                activityStarter, qsLogger);
        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                statusBarStateController, activityStarter, qsLogger);
        mBroadcastDispatcher = broadcastDispatcher;
        mLazyConnectivityManager = lazyConnectivityManager;

Loading