diff --git a/packages/SystemUI/src/com/android/systemui/classifier/AccelerationClassifier.java b/packages/SystemUI/src/com/android/systemui/classifier/AccelerationClassifier.java index bad739fdc7648..4585fe9fb8687 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/AccelerationClassifier.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/AccelerationClassifier.java @@ -62,36 +62,36 @@ public class AccelerationClassifier extends StrokeClassifier { @Override public float getFalseTouchEvaluation(int type, Stroke stroke) { Data data = mStrokeMap.get(stroke); - return SpeedRatioEvaluator.evaluate(data.maxSpeedRatio) - + DistanceRatioEvaluator.evaluate(data.maxDistanceRatio); + return 2 * SpeedRatioEvaluator.evaluate(data.maxSpeedRatio); } private static class Data { - public Point previousPoint; - public float previousSpeed; - public float previousDistance; - public float maxSpeedRatio; - public float maxDistanceRatio; + + static final float MILLIS_TO_NANOS = 1e6f; + + Point previousPoint; + float previousSpeed = 0; + float maxSpeedRatio = 0; public Data(Point point) { previousPoint = point; - previousSpeed = previousDistance = 0.0f; - maxDistanceRatio = maxSpeedRatio = 0.0f; } public void addPoint(Point point) { float distance = previousPoint.dist(point); float duration = (float) (point.timeOffsetNano - previousPoint.timeOffsetNano + 1); float speed = distance / duration; - if (previousDistance != 0.0f) { - maxDistanceRatio = Math.max(maxDistanceRatio, distance / previousDistance); - } + if (duration > 20 * MILLIS_TO_NANOS || duration < 5 * MILLIS_TO_NANOS) { + // reject this segment and ensure we won't use data about it in the next round. + previousSpeed = 0; + previousPoint = point; + return; + } if (previousSpeed != 0.0f) { maxSpeedRatio = Math.max(maxSpeedRatio, speed / previousSpeed); } - previousDistance = distance; previousSpeed = speed; previousPoint = point; } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/DistanceRatioEvaluator.java b/packages/SystemUI/src/com/android/systemui/classifier/DistanceRatioEvaluator.java deleted file mode 100644 index 8acb009a230fe..0000000000000 --- a/packages/SystemUI/src/com/android/systemui/classifier/DistanceRatioEvaluator.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2015 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License - */ - -package com.android.systemui.classifier; - -public class DistanceRatioEvaluator { - public static float evaluate(float value) { - float evaluation = 0.0f; - if (value <= 1.0) evaluation++; - if (value <= 0.5) evaluation++; - if (value > 4.0) evaluation++; - if (value > 7.0) evaluation++; - if (value > 14.0) evaluation++; - return evaluation; - } -} diff --git a/packages/SystemUI/src/com/android/systemui/classifier/SpeedRatioEvaluator.java b/packages/SystemUI/src/com/android/systemui/classifier/SpeedRatioEvaluator.java index 4c6cea0367adc..e34f222d3799e 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/SpeedRatioEvaluator.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/SpeedRatioEvaluator.java @@ -19,6 +19,7 @@ package com.android.systemui.classifier; public class SpeedRatioEvaluator { public static float evaluate(float value) { float evaluation = 0.0f; + if (value == 0) return 0; if (value <= 1.0) evaluation++; if (value <= 0.5) evaluation++; if (value > 9.0) evaluation++;