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

Commit 7f20a1a9 authored by Dave Mankoff's avatar Dave Mankoff
Browse files

Improve logging information available from BrightLineFalsingManager.

Bug: 139778868
Test: atest SystemUITests
Change-Id: I06ee2d2fd4e5f92c4ed33dedcf95ca7bf21b985d
parent 8468002a
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.systemui.util.sensors.ProximitySensor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;

/**
 * FalsingManager designed to make clear why a touch was rejected.
@@ -42,7 +43,7 @@ import java.util.List;
public class BrightLineFalsingManager implements FalsingManager {

    static final boolean DEBUG = false;
    private static final String TAG = "FalsingManagerPlugin";
    private static final String TAG = "FalsingManager";

    private final FalsingDataProvider mDataProvider;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -142,7 +143,15 @@ public class BrightLineFalsingManager implements FalsingManager {
        boolean r = !mJustUnlockedWithFace && mClassifiers.stream().anyMatch(falsingClassifier -> {
            boolean result = falsingClassifier.isFalseTouch();
            if (result) {
                logInfo(falsingClassifier.getClass().getName() + ": true");
                logInfo(String.format(
                        (Locale) null,
                        "{classifier=%s, interactionType=%d}",
                        falsingClassifier.getClass().getName(),
                        mDataProvider.getInteractionType()));
                String reason = falsingClassifier.getReason();
                if (reason != null) {
                    logInfo(reason);
                }
            } else {
                logDebug(falsingClassifier.getClass().getName() + ": false");
            }
+11 −0
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import android.provider.DeviceConfig;

import com.android.systemui.util.DeviceConfigProxy;

import java.util.Locale;

/**
 * False on swipes that are too close to 45 degrees.
 *
@@ -84,6 +86,15 @@ class DiagonalClassifier extends FalsingClassifier {
                maxAngle + ONE_HUNDRED_EIGHTY_DEG);
    }

    @Override
    String getReason() {
        return String.format(
                (Locale) null,
                "{angle=%f, vertical=%s}",
                getAngle(),
                isVertical());
    }

    private boolean angleBetween(float angle, float min, float max) {
        // No need to normalize angle as it is guaranteed to be between 0 and 2*PI.
        min = normalizeAngle(min);
+57 −30
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.view.VelocityTracker;
import com.android.systemui.util.DeviceConfigProxy;

import java.util.List;
import java.util.Locale;

/**
 * Ensure that the swipe + momentum covers a minimum distance.
@@ -144,56 +145,82 @@ class DistanceClassifier extends FalsingClassifier {

    @Override
    public boolean isFalseTouch() {
        return !getDistances().getPassedFlingThreshold();
        return !getPassedFlingThreshold();
    }

    @Override
    String getReason() {
        DistanceVectors distanceVectors = getDistances();

        return String.format(
                (Locale) null,
                "{distanceVectors=%s, isHorizontal=%s, velocityToDistanceMultiplier=%f, "
                        + "horizontalFlingThreshold=%f, verticalFlingThreshold=%f, "
                        + "horizontalSwipeThreshold=%f, verticalSwipeThreshold=%s}",
                distanceVectors,
                isHorizontal(),
                mVelocityToDistanceMultiplier,
                mHorizontalFlingThresholdPx,
                mVerticalFlingThresholdPx,
                mHorizontalSwipeThresholdPx,
                mVerticalSwipeThresholdPx);
    }

    boolean isLongSwipe() {
        boolean longSwipe = getDistances().getPassedDistanceThreshold();
        boolean longSwipe = getPassedDistanceThreshold();
        logDebug("Is longSwipe? " + longSwipe);
        return longSwipe;
    }

    private class DistanceVectors {
        final float mDx;
        final float mDy;
        private final float mVx;
        private final float mVy;

        DistanceVectors(float dX, float dY, float vX, float vY) {
            this.mDx = dX;
            this.mDy = dY;
            this.mVx = vX;
            this.mVy = vY;
        }

        boolean getPassedDistanceThreshold() {
    private boolean getPassedDistanceThreshold() {
        DistanceVectors distanceVectors = getDistances();
        if (isHorizontal()) {
                logDebug("Horizontal swipe distance: " + Math.abs(mDx));
            logDebug("Horizontal swipe distance: " + Math.abs(distanceVectors.mDx));
            logDebug("Threshold: " + mHorizontalSwipeThresholdPx);

                return Math.abs(mDx) >= mHorizontalSwipeThresholdPx;
            return Math.abs(distanceVectors.mDx) >= mHorizontalSwipeThresholdPx;
        }

            logDebug("Vertical swipe distance: " + Math.abs(mDy));
        logDebug("Vertical swipe distance: " + Math.abs(distanceVectors.mDy));
        logDebug("Threshold: " + mVerticalSwipeThresholdPx);
            return Math.abs(mDy) >= mVerticalSwipeThresholdPx;
        return Math.abs(distanceVectors.mDy) >= mVerticalSwipeThresholdPx;
    }

        boolean getPassedFlingThreshold() {
            float dX = this.mDx + this.mVx * mVelocityToDistanceMultiplier;
            float dY = this.mDy + this.mVy * mVelocityToDistanceMultiplier;
    private boolean getPassedFlingThreshold() {
        DistanceVectors distanceVectors = getDistances();

        float dX = distanceVectors.mDx + distanceVectors.mVx * mVelocityToDistanceMultiplier;
        float dY = distanceVectors.mDy + distanceVectors.mVy * mVelocityToDistanceMultiplier;

        if (isHorizontal()) {
                logDebug("Horizontal swipe and fling distance: " + this.mDx + ", "
                        + this.mVx * mVelocityToDistanceMultiplier);
            logDebug("Horizontal swipe and fling distance: " + distanceVectors.mDx + ", "
                    + distanceVectors.mVx * mVelocityToDistanceMultiplier);
            logDebug("Threshold: " + mHorizontalFlingThresholdPx);
            return Math.abs(dX) >= mHorizontalFlingThresholdPx;
        }

            logDebug("Vertical swipe and fling distance: " + this.mDy + ", "
                    + this.mVy * mVelocityToDistanceMultiplier);
        logDebug("Vertical swipe and fling distance: " + distanceVectors.mDy + ", "
                + distanceVectors.mVy * mVelocityToDistanceMultiplier);
        logDebug("Threshold: " + mVerticalFlingThresholdPx);
        return Math.abs(dY) >= mVerticalFlingThresholdPx;
    }

    private class DistanceVectors {
        final float mDx;
        final float mDy;
        private final float mVx;
        private final float mVy;

        DistanceVectors(float dX, float dY, float vX, float vY) {
            this.mDx = dX;
            this.mDy = dY;
            this.mVx = vX;
            this.mVy = vY;
        }

        @Override
        public String toString() {
            return String.format((Locale) null, "{dx=%f, vx=%f, dy=%f, vy=%f}", mDx, mVx, mDy, mVy);
        }
    }
}
+8 −0
Original line number Diff line number Diff line
@@ -117,6 +117,14 @@ abstract class FalsingClassifier {
     */
    abstract boolean isFalseTouch();

    /**
     * Give the classifier a chance to log more details about why it triggered.
     *
     * This should only be called after a call to {@link #isFalseTouch()}, and only if
     * {@link #isFalseTouch()} returns true;
     */
    abstract String getReason();

    static void logDebug(String msg) {
        BrightLineFalsingManager.logDebug(msg);
    }
+11 −0
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.systemui.classifier.brightline;

import android.view.MotionEvent;

import java.util.Locale;

/**
 * False touch if more than one finger touches the screen.
 *
@@ -50,4 +52,13 @@ class PointerCountClassifier extends FalsingClassifier {
    public boolean isFalseTouch() {
        return mMaxPointerCount > MAX_ALLOWED_POINTERS;
    }

    @Override
    String getReason() {
        return String.format(
                (Locale) null,
                "{pointersObserved=%d, threshold=%d}",
                mMaxPointerCount,
                MAX_ALLOWED_POINTERS);
    }
}
Loading