Loading packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java→packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java +19 −35 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * Copyright (C) 2020 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. Loading @@ -14,44 +14,39 @@ * limitations under the License. */ package com.android.systemui.classifier.brightline; package com.android.systemui.classifier; import static com.android.systemui.classifier.FalsingManagerProxy.FALSING_SUCCESS; import static com.android.systemui.classifier.FalsingModule.BRIGHT_LINE_GESTURE_CLASSIFERS; import android.app.ActivityManager; import android.content.res.Resources; import android.net.Uri; import android.os.Build; import android.util.IndentingPrintWriter; import android.util.Log; import android.view.MotionEvent; import android.view.ViewConfiguration; import androidx.annotation.NonNull; import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; import com.android.systemui.classifier.Classifier; import com.android.systemui.classifier.FalsingDataProvider; import com.android.systemui.classifier.FalsingDataProvider.SessionListener; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.TestHarness; import com.android.systemui.dock.DockManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.phone.NotificationTapHelper; import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.sensors.ThresholdSensor; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Locale; import java.util.Queue; import java.util.Set; import java.util.StringJoiner; import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Named; /** * FalsingManager designed to make clear why a touch was rejected. Loading @@ -68,6 +63,7 @@ public class BrightLineFalsingManager implements FalsingManager { private final DockManager mDockManager; private final SingleTapClassifier mSingleTapClassifier; private final DoubleTapClassifier mDoubleTapClassifier; private final boolean mTestHarness; private final MetricsLogger mMetricsLogger; private int mIsFalseTouchCalls; private static final Queue<String> RECENT_INFO_LOG = Loading @@ -75,7 +71,7 @@ public class BrightLineFalsingManager implements FalsingManager { private static final Queue<DebugSwipeRecord> RECENT_SWIPES = new ArrayDeque<>(RECENT_SWIPE_LOG_SIZE + 1); private final List<FalsingClassifier> mClassifiers; private final Collection<FalsingClassifier> mClassifiers; private final SessionListener mSessionListener = new SessionListener() { @Override Loading @@ -93,29 +89,17 @@ public class BrightLineFalsingManager implements FalsingManager { @Inject public BrightLineFalsingManager(FalsingDataProvider falsingDataProvider, DeviceConfigProxy deviceConfigProxy, @Main Resources resources, ViewConfiguration viewConfiguration, DockManager dockManager) { DockManager dockManager, MetricsLogger metricsLogger, @Named(BRIGHT_LINE_GESTURE_CLASSIFERS) Set<FalsingClassifier> classifiers, SingleTapClassifier singleTapClassifier, DoubleTapClassifier doubleTapClassifier, @TestHarness boolean testHarness) { mDataProvider = falsingDataProvider; mDockManager = dockManager; mMetricsLogger = new MetricsLogger(); mClassifiers = new ArrayList<>(); DistanceClassifier distanceClassifier = new DistanceClassifier(mDataProvider, deviceConfigProxy); ProximityClassifier proximityClassifier = new ProximityClassifier(distanceClassifier, mDataProvider, deviceConfigProxy); mClassifiers.add(new PointerCountClassifier(mDataProvider)); mClassifiers.add(new TypeClassifier(mDataProvider)); mClassifiers.add(new DiagonalClassifier(mDataProvider, deviceConfigProxy)); mClassifiers.add(distanceClassifier); mClassifiers.add(proximityClassifier); mClassifiers.add(new ZigZagClassifier(mDataProvider, deviceConfigProxy)); mSingleTapClassifier = new SingleTapClassifier( mDataProvider, viewConfiguration.getScaledTouchSlop()); mDoubleTapClassifier = new DoubleTapClassifier(mDataProvider, mSingleTapClassifier, resources.getDimension(R.dimen.double_tap_slop), NotificationTapHelper.DOUBLE_TAP_TIMEOUT_MS); mMetricsLogger = metricsLogger; mClassifiers = classifiers; mSingleTapClassifier = singleTapClassifier; mDoubleTapClassifier = doubleTapClassifier; mTestHarness = testHarness; mDataProvider.addSessionListener(mSessionListener); } Loading @@ -132,7 +116,7 @@ public class BrightLineFalsingManager implements FalsingManager { return mPreviousResult; } mPreviousResult = !ActivityManager.isRunningInUserTestHarness() mPreviousResult = !mTestHarness && !mDataProvider.isJustUnlockedWithFace() && !mDockManager.isDocked() && mClassifiers.stream().anyMatch(falsingClassifier -> { boolean result = falsingClassifier.isFalseTouch(); Loading packages/SystemUI/src/com/android/systemui/classifier/brightline/DiagonalClassifier.java→packages/SystemUI/src/com/android/systemui/classifier/DiagonalClassifier.java +5 −3 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * Copyright (C) 2020 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. Loading @@ -14,7 +14,7 @@ * limitations under the License. */ package com.android.systemui.classifier.brightline; package com.android.systemui.classifier; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BRIGHTLINE_FALSING_DIAGONAL_HORIZONTAL_ANGLE_RANGE; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BRIGHTLINE_FALSING_DIAGONAL_VERTICAL_ANGLE_RANGE; Loading @@ -23,11 +23,12 @@ import static com.android.systemui.classifier.Classifier.RIGHT_AFFORDANCE; import android.provider.DeviceConfig; import com.android.systemui.classifier.FalsingDataProvider; import com.android.systemui.util.DeviceConfigProxy; import java.util.Locale; import javax.inject.Inject; /** * False on swipes that are too close to 45 degrees. * Loading @@ -47,6 +48,7 @@ class DiagonalClassifier extends FalsingClassifier { private final float mHorizontalAngleRange; private final float mVerticalAngleRange; @Inject DiagonalClassifier(FalsingDataProvider dataProvider, DeviceConfigProxy deviceConfigProxy) { super(dataProvider); Loading packages/SystemUI/src/com/android/systemui/classifier/brightline/DistanceClassifier.java→packages/SystemUI/src/com/android/systemui/classifier/DistanceClassifier.java +5 −3 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * Copyright (C) 2020 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. Loading @@ -14,7 +14,7 @@ * limitations under the License. */ package com.android.systemui.classifier.brightline; package com.android.systemui.classifier; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BRIGHTLINE_FALSING_DISTANCE_HORIZONTAL_FLING_THRESHOLD_IN; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BRIGHTLINE_FALSING_DISTANCE_HORIZONTAL_SWIPE_THRESHOLD_IN; Loading @@ -27,12 +27,13 @@ import android.provider.DeviceConfig; import android.view.MotionEvent; import android.view.VelocityTracker; import com.android.systemui.classifier.FalsingDataProvider; import com.android.systemui.util.DeviceConfigProxy; import java.util.List; import java.util.Locale; import javax.inject.Inject; /** * Ensure that the swipe + momentum covers a minimum distance. */ Loading @@ -54,6 +55,7 @@ class DistanceClassifier extends FalsingClassifier { private boolean mDistanceDirty; private DistanceVectors mCachedDistance; @Inject DistanceClassifier(FalsingDataProvider dataProvider, DeviceConfigProxy deviceConfigProxy) { super(dataProvider); Loading packages/SystemUI/src/com/android/systemui/classifier/brightline/DoubleTapClassifier.java→packages/SystemUI/src/com/android/systemui/classifier/DoubleTapClassifier.java +10 −4 Original line number Diff line number Diff line Loading @@ -14,15 +14,19 @@ * limitations under the License. */ package com.android.systemui.classifier.brightline; package com.android.systemui.classifier; import android.view.MotionEvent; import static com.android.systemui.classifier.FalsingModule.DOUBLE_TAP_TIMEOUT_MS; import static com.android.systemui.classifier.FalsingModule.DOUBLE_TAP_TOUCH_SLOP; import com.android.systemui.classifier.FalsingDataProvider; import android.view.MotionEvent; import java.util.List; import java.util.Queue; import javax.inject.Inject; import javax.inject.Named; /** * Returns a false touch if the most two recent gestures are not taps or are too far apart. */ Loading @@ -34,8 +38,10 @@ public class DoubleTapClassifier extends FalsingClassifier { private StringBuilder mReason = new StringBuilder(); @Inject DoubleTapClassifier(FalsingDataProvider dataProvider, SingleTapClassifier singleTapClassifier, float doubleTapSlop, long doubleTapTimeMs) { @Named(DOUBLE_TAP_TOUCH_SLOP) float doubleTapSlop, @Named(DOUBLE_TAP_TIMEOUT_MS) long doubleTapTimeMs) { super(dataProvider); mSingleTapClassifier = singleTapClassifier; mDoubleTapSlop = doubleTapSlop; Loading packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingClassifier.java→packages/SystemUI/src/com/android/systemui/classifier/FalsingClassifier.java +2 −4 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * Copyright (C) 2020 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. Loading @@ -14,12 +14,10 @@ * limitations under the License. */ package com.android.systemui.classifier.brightline; package com.android.systemui.classifier; import android.view.MotionEvent; import com.android.systemui.classifier.Classifier; import com.android.systemui.classifier.FalsingDataProvider; import com.android.systemui.util.sensors.ProximitySensor; import java.util.List; Loading Loading
packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java→packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java +19 −35 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * Copyright (C) 2020 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. Loading @@ -14,44 +14,39 @@ * limitations under the License. */ package com.android.systemui.classifier.brightline; package com.android.systemui.classifier; import static com.android.systemui.classifier.FalsingManagerProxy.FALSING_SUCCESS; import static com.android.systemui.classifier.FalsingModule.BRIGHT_LINE_GESTURE_CLASSIFERS; import android.app.ActivityManager; import android.content.res.Resources; import android.net.Uri; import android.os.Build; import android.util.IndentingPrintWriter; import android.util.Log; import android.view.MotionEvent; import android.view.ViewConfiguration; import androidx.annotation.NonNull; import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; import com.android.systemui.classifier.Classifier; import com.android.systemui.classifier.FalsingDataProvider; import com.android.systemui.classifier.FalsingDataProvider.SessionListener; import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.TestHarness; import com.android.systemui.dock.DockManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.phone.NotificationTapHelper; import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.sensors.ThresholdSensor; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Locale; import java.util.Queue; import java.util.Set; import java.util.StringJoiner; import java.util.stream.Collectors; import javax.inject.Inject; import javax.inject.Named; /** * FalsingManager designed to make clear why a touch was rejected. Loading @@ -68,6 +63,7 @@ public class BrightLineFalsingManager implements FalsingManager { private final DockManager mDockManager; private final SingleTapClassifier mSingleTapClassifier; private final DoubleTapClassifier mDoubleTapClassifier; private final boolean mTestHarness; private final MetricsLogger mMetricsLogger; private int mIsFalseTouchCalls; private static final Queue<String> RECENT_INFO_LOG = Loading @@ -75,7 +71,7 @@ public class BrightLineFalsingManager implements FalsingManager { private static final Queue<DebugSwipeRecord> RECENT_SWIPES = new ArrayDeque<>(RECENT_SWIPE_LOG_SIZE + 1); private final List<FalsingClassifier> mClassifiers; private final Collection<FalsingClassifier> mClassifiers; private final SessionListener mSessionListener = new SessionListener() { @Override Loading @@ -93,29 +89,17 @@ public class BrightLineFalsingManager implements FalsingManager { @Inject public BrightLineFalsingManager(FalsingDataProvider falsingDataProvider, DeviceConfigProxy deviceConfigProxy, @Main Resources resources, ViewConfiguration viewConfiguration, DockManager dockManager) { DockManager dockManager, MetricsLogger metricsLogger, @Named(BRIGHT_LINE_GESTURE_CLASSIFERS) Set<FalsingClassifier> classifiers, SingleTapClassifier singleTapClassifier, DoubleTapClassifier doubleTapClassifier, @TestHarness boolean testHarness) { mDataProvider = falsingDataProvider; mDockManager = dockManager; mMetricsLogger = new MetricsLogger(); mClassifiers = new ArrayList<>(); DistanceClassifier distanceClassifier = new DistanceClassifier(mDataProvider, deviceConfigProxy); ProximityClassifier proximityClassifier = new ProximityClassifier(distanceClassifier, mDataProvider, deviceConfigProxy); mClassifiers.add(new PointerCountClassifier(mDataProvider)); mClassifiers.add(new TypeClassifier(mDataProvider)); mClassifiers.add(new DiagonalClassifier(mDataProvider, deviceConfigProxy)); mClassifiers.add(distanceClassifier); mClassifiers.add(proximityClassifier); mClassifiers.add(new ZigZagClassifier(mDataProvider, deviceConfigProxy)); mSingleTapClassifier = new SingleTapClassifier( mDataProvider, viewConfiguration.getScaledTouchSlop()); mDoubleTapClassifier = new DoubleTapClassifier(mDataProvider, mSingleTapClassifier, resources.getDimension(R.dimen.double_tap_slop), NotificationTapHelper.DOUBLE_TAP_TIMEOUT_MS); mMetricsLogger = metricsLogger; mClassifiers = classifiers; mSingleTapClassifier = singleTapClassifier; mDoubleTapClassifier = doubleTapClassifier; mTestHarness = testHarness; mDataProvider.addSessionListener(mSessionListener); } Loading @@ -132,7 +116,7 @@ public class BrightLineFalsingManager implements FalsingManager { return mPreviousResult; } mPreviousResult = !ActivityManager.isRunningInUserTestHarness() mPreviousResult = !mTestHarness && !mDataProvider.isJustUnlockedWithFace() && !mDockManager.isDocked() && mClassifiers.stream().anyMatch(falsingClassifier -> { boolean result = falsingClassifier.isFalseTouch(); Loading
packages/SystemUI/src/com/android/systemui/classifier/brightline/DiagonalClassifier.java→packages/SystemUI/src/com/android/systemui/classifier/DiagonalClassifier.java +5 −3 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * Copyright (C) 2020 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. Loading @@ -14,7 +14,7 @@ * limitations under the License. */ package com.android.systemui.classifier.brightline; package com.android.systemui.classifier; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BRIGHTLINE_FALSING_DIAGONAL_HORIZONTAL_ANGLE_RANGE; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BRIGHTLINE_FALSING_DIAGONAL_VERTICAL_ANGLE_RANGE; Loading @@ -23,11 +23,12 @@ import static com.android.systemui.classifier.Classifier.RIGHT_AFFORDANCE; import android.provider.DeviceConfig; import com.android.systemui.classifier.FalsingDataProvider; import com.android.systemui.util.DeviceConfigProxy; import java.util.Locale; import javax.inject.Inject; /** * False on swipes that are too close to 45 degrees. * Loading @@ -47,6 +48,7 @@ class DiagonalClassifier extends FalsingClassifier { private final float mHorizontalAngleRange; private final float mVerticalAngleRange; @Inject DiagonalClassifier(FalsingDataProvider dataProvider, DeviceConfigProxy deviceConfigProxy) { super(dataProvider); Loading
packages/SystemUI/src/com/android/systemui/classifier/brightline/DistanceClassifier.java→packages/SystemUI/src/com/android/systemui/classifier/DistanceClassifier.java +5 −3 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * Copyright (C) 2020 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. Loading @@ -14,7 +14,7 @@ * limitations under the License. */ package com.android.systemui.classifier.brightline; package com.android.systemui.classifier; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BRIGHTLINE_FALSING_DISTANCE_HORIZONTAL_FLING_THRESHOLD_IN; import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.BRIGHTLINE_FALSING_DISTANCE_HORIZONTAL_SWIPE_THRESHOLD_IN; Loading @@ -27,12 +27,13 @@ import android.provider.DeviceConfig; import android.view.MotionEvent; import android.view.VelocityTracker; import com.android.systemui.classifier.FalsingDataProvider; import com.android.systemui.util.DeviceConfigProxy; import java.util.List; import java.util.Locale; import javax.inject.Inject; /** * Ensure that the swipe + momentum covers a minimum distance. */ Loading @@ -54,6 +55,7 @@ class DistanceClassifier extends FalsingClassifier { private boolean mDistanceDirty; private DistanceVectors mCachedDistance; @Inject DistanceClassifier(FalsingDataProvider dataProvider, DeviceConfigProxy deviceConfigProxy) { super(dataProvider); Loading
packages/SystemUI/src/com/android/systemui/classifier/brightline/DoubleTapClassifier.java→packages/SystemUI/src/com/android/systemui/classifier/DoubleTapClassifier.java +10 −4 Original line number Diff line number Diff line Loading @@ -14,15 +14,19 @@ * limitations under the License. */ package com.android.systemui.classifier.brightline; package com.android.systemui.classifier; import android.view.MotionEvent; import static com.android.systemui.classifier.FalsingModule.DOUBLE_TAP_TIMEOUT_MS; import static com.android.systemui.classifier.FalsingModule.DOUBLE_TAP_TOUCH_SLOP; import com.android.systemui.classifier.FalsingDataProvider; import android.view.MotionEvent; import java.util.List; import java.util.Queue; import javax.inject.Inject; import javax.inject.Named; /** * Returns a false touch if the most two recent gestures are not taps or are too far apart. */ Loading @@ -34,8 +38,10 @@ public class DoubleTapClassifier extends FalsingClassifier { private StringBuilder mReason = new StringBuilder(); @Inject DoubleTapClassifier(FalsingDataProvider dataProvider, SingleTapClassifier singleTapClassifier, float doubleTapSlop, long doubleTapTimeMs) { @Named(DOUBLE_TAP_TOUCH_SLOP) float doubleTapSlop, @Named(DOUBLE_TAP_TIMEOUT_MS) long doubleTapTimeMs) { super(dataProvider); mSingleTapClassifier = singleTapClassifier; mDoubleTapSlop = doubleTapSlop; Loading
packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingClassifier.java→packages/SystemUI/src/com/android/systemui/classifier/FalsingClassifier.java +2 −4 Original line number Diff line number Diff line /* * Copyright (C) 2019 The Android Open Source Project * Copyright (C) 2020 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. Loading @@ -14,12 +14,10 @@ * limitations under the License. */ package com.android.systemui.classifier.brightline; package com.android.systemui.classifier; import android.view.MotionEvent; import com.android.systemui.classifier.Classifier; import com.android.systemui.classifier.FalsingDataProvider; import com.android.systemui.util.sensors.ProximitySensor; import java.util.List; Loading