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

Commit da3024c9 authored by Dave Mankoff's avatar Dave Mankoff Committed by Android (Google) Code Review
Browse files

Merge "Improve logging information available from BrightLineFalsingManager."

parents 184c4a86 7f20a1a9
Loading
Loading
Loading
Loading
+11 −2
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.systemui.util.sensors.ProximitySensor;
import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.List;
import java.util.List;
import java.util.Locale;


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


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


    private final FalsingDataProvider mDataProvider;
    private final FalsingDataProvider mDataProvider;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
@@ -142,7 +143,15 @@ public class BrightLineFalsingManager implements FalsingManager {
        boolean r = !mJustUnlockedWithFace && mClassifiers.stream().anyMatch(falsingClassifier -> {
        boolean r = !mJustUnlockedWithFace && mClassifiers.stream().anyMatch(falsingClassifier -> {
            boolean result = falsingClassifier.isFalseTouch();
            boolean result = falsingClassifier.isFalseTouch();
            if (result) {
            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 {
            } else {
                logDebug(falsingClassifier.getClass().getName() + ": false");
                logDebug(falsingClassifier.getClass().getName() + ": false");
            }
            }
+11 −0
Original line number Original line Diff line number Diff line
@@ -25,6 +25,8 @@ import android.provider.DeviceConfig;


import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.DeviceConfigProxy;


import java.util.Locale;

/**
/**
 * False on swipes that are too close to 45 degrees.
 * False on swipes that are too close to 45 degrees.
 *
 *
@@ -84,6 +86,15 @@ class DiagonalClassifier extends FalsingClassifier {
                maxAngle + ONE_HUNDRED_EIGHTY_DEG);
                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) {
    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.
        // No need to normalize angle as it is guaranteed to be between 0 and 2*PI.
        min = normalizeAngle(min);
        min = normalizeAngle(min);
+57 −30
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ import android.view.VelocityTracker;
import com.android.systemui.util.DeviceConfigProxy;
import com.android.systemui.util.DeviceConfigProxy;


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


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


    @Override
    @Override
    public boolean isFalseTouch() {
    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 isLongSwipe() {
        boolean longSwipe = getDistances().getPassedDistanceThreshold();
        boolean longSwipe = getPassedDistanceThreshold();
        logDebug("Is longSwipe? " + longSwipe);
        logDebug("Is longSwipe? " + longSwipe);
        return longSwipe;
        return longSwipe;
    }
    }


    private class DistanceVectors {
    private boolean getPassedDistanceThreshold() {
        final float mDx;
        DistanceVectors distanceVectors = getDistances();
        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() {
        if (isHorizontal()) {
        if (isHorizontal()) {
                logDebug("Horizontal swipe distance: " + Math.abs(mDx));
            logDebug("Horizontal swipe distance: " + Math.abs(distanceVectors.mDx));
            logDebug("Threshold: " + mHorizontalSwipeThresholdPx);
            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);
        logDebug("Threshold: " + mVerticalSwipeThresholdPx);
            return Math.abs(mDy) >= mVerticalSwipeThresholdPx;
        return Math.abs(distanceVectors.mDy) >= mVerticalSwipeThresholdPx;
    }
    }


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

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


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


            logDebug("Vertical swipe and fling distance: " + this.mDy + ", "
        logDebug("Vertical swipe and fling distance: " + distanceVectors.mDy + ", "
                    + this.mVy * mVelocityToDistanceMultiplier);
                + distanceVectors.mVy * mVelocityToDistanceMultiplier);
        logDebug("Threshold: " + mVerticalFlingThresholdPx);
        logDebug("Threshold: " + mVerticalFlingThresholdPx);
        return Math.abs(dY) >= 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 Original line Diff line number Diff line
@@ -117,6 +117,14 @@ abstract class FalsingClassifier {
     */
     */
    abstract boolean isFalseTouch();
    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) {
    static void logDebug(String msg) {
        BrightLineFalsingManager.logDebug(msg);
        BrightLineFalsingManager.logDebug(msg);
    }
    }
+11 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.systemui.classifier.brightline;


import android.view.MotionEvent;
import android.view.MotionEvent;


import java.util.Locale;

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

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