Ensure that the FalsingManager skips falsing when appropriate.

Copies the logic from isFalseTouch to isFalseTap and isFalseDoubleTap.

Fixes: 186218339
Test: atest SystemUITests && manual
Change-Id: Ic0fdcc9880eaaf3597beee9f0fa634dc49214fbd
This commit is contained in:
Dave Mankoff
2021-04-23 12:01:37 -04:00
parent 59ea1a09a4
commit 9d3897adf5

View File

@@ -196,31 +196,25 @@ public class BrightLineFalsingManager implements FalsingManager {
public boolean isFalseTouch(@Classifier.InteractionType int interactionType) {
mPriorInteractionType = interactionType;
if (skipFalsing()) {
mPriorResults = getPassedResult(1);
logDebug("Skipped falsing");
return false;
}
final boolean booleanResult;
final boolean[] localResult = {false};
mPriorResults = mClassifiers.stream().map(falsingClassifier -> {
FalsingClassifier.Result r = falsingClassifier.classifyGesture(
interactionType,
mHistoryTracker.falseBelief(),
mHistoryTracker.falseConfidence());
localResult[0] |= r.isFalse();
if (!mTestHarness && !mDataProvider.isJustUnlockedWithFace() && !mDockManager.isDocked()) {
final boolean[] localResult = {false};
mPriorResults = mClassifiers.stream().map(falsingClassifier -> {
FalsingClassifier.Result r = falsingClassifier.classifyGesture(
interactionType,
mHistoryTracker.falseBelief(),
mHistoryTracker.falseConfidence());
localResult[0] |= r.isFalse();
return r;
}).collect(Collectors.toList());
return r;
}).collect(Collectors.toList());
booleanResult = localResult[0];
} else {
booleanResult = false;
mPriorResults = Collections.singleton(FalsingClassifier.Result.passed(1));
}
logDebug("False Gesture: " + localResult[0]);
logDebug("False Gesture: " + booleanResult);
return booleanResult;
return localResult[0];
}
@Override
@@ -235,6 +229,8 @@ public class BrightLineFalsingManager implements FalsingManager {
@Override
public boolean isFalseTap(@Penalty int penalty) {
if (skipFalsing()) {
mPriorResults = getPassedResult(1);
logDebug("Skipped falsing");
return false;
}
@@ -263,7 +259,7 @@ public class BrightLineFalsingManager implements FalsingManager {
if (!singleTapResult.isFalse()) {
if (mDataProvider.isJustUnlockedWithFace()) {
// Immediately pass if a face is detected.
mPriorResults = Collections.singleton(FalsingClassifier.Result.passed(1));
mPriorResults = getPassedResult(1);
logDebug("False Single Tap: false (face detected)");
return false;
} else if (!isFalseDoubleTap()) {
@@ -279,7 +275,7 @@ public class BrightLineFalsingManager implements FalsingManager {
logDebug("False Single Tap: true (bad history)");
return true;
} else {
mPriorResults = Collections.singleton(FalsingClassifier.Result.passed(0.1));
mPriorResults = getPassedResult(0.1);
logDebug("False Single Tap: false (default)");
return false;
}
@@ -294,6 +290,8 @@ public class BrightLineFalsingManager implements FalsingManager {
@Override
public boolean isFalseDoubleTap() {
if (skipFalsing()) {
mPriorResults = getPassedResult(1);
logDebug("Skipped falsing");
return false;
}
@@ -307,7 +305,10 @@ public class BrightLineFalsingManager implements FalsingManager {
}
private boolean skipFalsing() {
return !mKeyguardStateController.isShowing();
return !mKeyguardStateController.isShowing()
|| mTestHarness
|| mDataProvider.isJustUnlockedWithFace()
|| mDockManager.isDocked();
}
@Override
@@ -399,6 +400,10 @@ public class BrightLineFalsingManager implements FalsingManager {
mHistoryTracker.removeBeliefListener(mBeliefListener);
}
private static Collection<FalsingClassifier.Result> getPassedResult(double confidence) {
return Collections.singleton(FalsingClassifier.Result.passed(confidence));
}
static void logDebug(String msg) {
logDebug(msg, null);
}