Loading packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java +21 −1 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import com.android.systemui.classifier.FalsingDataProvider.SessionListener; import com.android.systemui.dagger.qualifiers.TestHarness; import com.android.systemui.dock.DockManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.sensors.ThresholdSensor; import java.io.FileDescriptor; Loading Loading @@ -67,6 +68,7 @@ public class BrightLineFalsingManager implements FalsingManager { private final SingleTapClassifier mSingleTapClassifier; private final DoubleTapClassifier mDoubleTapClassifier; private final HistoryTracker mHistoryTracker; private final KeyguardStateController mKeyguardStateController; private final boolean mTestHarness; private final MetricsLogger mMetricsLogger; private int mIsFalseTouchCalls; Loading Loading @@ -113,7 +115,8 @@ public class BrightLineFalsingManager implements FalsingManager { DockManager dockManager, MetricsLogger metricsLogger, @Named(BRIGHT_LINE_GESTURE_CLASSIFERS) Set<FalsingClassifier> classifiers, SingleTapClassifier singleTapClassifier, DoubleTapClassifier doubleTapClassifier, HistoryTracker historyTracker, @TestHarness boolean testHarness) { HistoryTracker historyTracker, KeyguardStateController keyguardStateController, @TestHarness boolean testHarness) { mDataProvider = falsingDataProvider; mDockManager = dockManager; mMetricsLogger = metricsLogger; Loading @@ -121,6 +124,7 @@ public class BrightLineFalsingManager implements FalsingManager { mSingleTapClassifier = singleTapClassifier; mDoubleTapClassifier = doubleTapClassifier; mHistoryTracker = historyTracker; mKeyguardStateController = keyguardStateController; mTestHarness = testHarness; mDataProvider.addSessionListener(mSessionListener); Loading @@ -134,6 +138,10 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public boolean isFalseTouch(@Classifier.InteractionType int interactionType) { if (skipFalsing()) { return false; } boolean result; mDataProvider.setInteractionType(interactionType); Loading Loading @@ -195,6 +203,10 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public boolean isFalseTap(boolean robustCheck, double falsePenalty) { if (skipFalsing()) { return false; } FalsingClassifier.Result singleTapResult = mSingleTapClassifier.isTap(mDataProvider.getRecentMotionEvents()); mPriorResults = Collections.singleton(singleTapResult); Loading Loading @@ -233,6 +245,10 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public boolean isFalseDoubleTap() { if (skipFalsing()) { return false; } FalsingClassifier.Result result = mDoubleTapClassifier.classifyGesture(); mPriorResults = Collections.singleton(result); if (result.isFalse()) { Loading @@ -246,6 +262,10 @@ public class BrightLineFalsingManager implements FalsingManager { return result.isFalse(); } private boolean skipFalsing() { return !mKeyguardStateController.isShowing(); } @Override public void onProximityEvent(ThresholdSensor.ThresholdSensorEvent proximityEvent) { // TODO: some of these classifiers might allow us to abort early, meaning we don't have to Loading packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java +9 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ThresholdSensor; import com.android.systemui.util.time.SystemClock; Loading @@ -48,6 +49,7 @@ class FalsingCollectorImpl implements FalsingCollector { private final HistoryTracker mHistoryTracker; private final ProximitySensor mProximitySensor; private final StatusBarStateController mStatusBarStateController; private final KeyguardStateController mKeyguardStateController; private final SystemClock mSystemClock; private int mState; Loading Loading @@ -87,13 +89,14 @@ class FalsingCollectorImpl implements FalsingCollector { FalsingCollectorImpl(FalsingDataProvider falsingDataProvider, FalsingManager falsingManager, KeyguardUpdateMonitor keyguardUpdateMonitor, HistoryTracker historyTracker, ProximitySensor proximitySensor, StatusBarStateController statusBarStateController, SystemClock systemClock) { KeyguardStateController keyguardStateController, SystemClock systemClock) { mFalsingDataProvider = falsingDataProvider; mFalsingManager = falsingManager; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mHistoryTracker = historyTracker; mProximitySensor = proximitySensor; mStatusBarStateController = statusBarStateController; mKeyguardStateController = keyguardStateController; mSystemClock = systemClock; Loading Loading @@ -255,6 +258,10 @@ class FalsingCollectorImpl implements FalsingCollector { @Override public void onTouchEvent(MotionEvent ev) { if (!mKeyguardStateController.isShowing()) { avoidGesture(); return; } // We delay processing down events to see if another component wants to process them. // If #avoidGesture is called after a MotionEvent.ACTION_DOWN, all following motion events // will be ignored by the collector until another MotionEvent.ACTION_DOWN is passed in. Loading @@ -276,8 +283,8 @@ class FalsingCollectorImpl implements FalsingCollector { @Override public void avoidGesture() { if (mPendingDownEvent != null) { mAvoidGesture = true; if (mPendingDownEvent != null) { mPendingDownEvent.recycle(); mPendingDownEvent = null; } Loading packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java +22 −3 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import com.android.internal.logging.testing.FakeMetricsLogger; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingDataProvider.GestureCompleteListener; import com.android.systemui.dock.DockManagerFake; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; Loading Loading @@ -71,7 +72,10 @@ public class BrightLineClassifierTest extends SysuiTestCase { private FalsingClassifier mClassifierB; private final List<MotionEvent> mMotionEventList = new ArrayList<>(); @Mock private HistoryTracker mHistoryTracker;; private HistoryTracker mHistoryTracker; @Mock private KeyguardStateController mKeyguardStateController; private final FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); private final FalsingClassifier.Result mFalsedResult = FalsingClassifier.Result.falsed(1, ""); Loading @@ -88,9 +92,10 @@ public class BrightLineClassifierTest extends SysuiTestCase { mClassifiers.add(mClassifierA); mClassifiers.add(mClassifierB); when(mFalsingDataProvider.getRecentMotionEvents()).thenReturn(mMotionEventList); when(mKeyguardStateController.isShowing()).thenReturn(true); mBrightLineFalsingManager = new BrightLineFalsingManager(mFalsingDataProvider, mDockManager, mMetricsLogger, mClassifiers, mSingleTapClassfier, mDoubleTapClassifier, mHistoryTracker, false); mHistoryTracker, mKeyguardStateController, false); ArgumentCaptor<GestureCompleteListener> gestureCompleteListenerCaptor = Loading Loading @@ -120,7 +125,7 @@ public class BrightLineClassifierTest extends SysuiTestCase { } @Test public void testIsFalseTouch_ClassffiersPass() { public void testIsFalseTouch_ClassifiersPass() { assertThat(mBrightLineFalsingManager.isFalseTouch(0)).isFalse(); } Loading Loading @@ -233,4 +238,18 @@ public class BrightLineClassifierTest extends SysuiTestCase { assertThat(mFakeExecutor.numPending()).isEqualTo(0); } @Test public void testNoFalsingUnlocked() { when(mKeyguardStateController.isShowing()).thenReturn(false); when(mClassifierA.classifyGesture(anyDouble(), anyDouble())).thenReturn(mFalsedResult); assertThat(mBrightLineFalsingManager.isFalseTouch(0)).isFalse(); when(mSingleTapClassfier.isTap(mMotionEventList)).thenReturn(mFalsedResult); assertThat(mBrightLineFalsingManager.isFalseTap(false, 0)).isFalse(); when(mDoubleTapClassifier.classifyGesture()).thenReturn(mFalsedResult); assertThat(mBrightLineFalsingManager.isFalseDoubleTap()).isFalse(); } } packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java +21 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ThresholdSensor; import com.android.systemui.util.time.FakeSystemClock; Loading Loading @@ -62,16 +63,19 @@ public class FalsingCollectorImplTest extends SysuiTestCase { private ProximitySensor mProximitySensor; @Mock private SysuiStatusBarStateController mStatusBarStateController; @Mock private KeyguardStateController mKeyguardStateController; @Before public void setUp() { MockitoAnnotations.initMocks(this); when(mStatusBarStateController.getState()).thenReturn(StatusBarState.KEYGUARD); when(mKeyguardStateController.isShowing()).thenReturn(true); mFalsingCollector = new FalsingCollectorImpl(mFalsingDataProvider, mFalsingManager, mKeyguardUpdateMonitor, mHistoryTracker, mProximitySensor, mStatusBarStateController, new FakeSystemClock()); mStatusBarStateController, mKeyguardStateController, new FakeSystemClock()); } @Test Loading Loading @@ -159,4 +163,20 @@ public class FalsingCollectorImplTest extends SysuiTestCase { mFalsingCollector.onTouchEvent(up); verify(mFalsingDataProvider, never()).onMotionEvent(any(MotionEvent.class)); } @Test public void testAvoidUnlocked() { MotionEvent down = MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0, 0, 0); MotionEvent up = MotionEvent.obtain(0, 0, MotionEvent.ACTION_UP, 0, 0, 0); when(mKeyguardStateController.isShowing()).thenReturn(false); // Nothing passed initially mFalsingCollector.onTouchEvent(down); verify(mFalsingDataProvider, never()).onMotionEvent(any(MotionEvent.class)); // Up event would normally flush the up event. mFalsingCollector.onTouchEvent(up); verify(mFalsingDataProvider, never()).onMotionEvent(any(MotionEvent.class)); } } Loading
packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java +21 −1 Original line number Diff line number Diff line Loading @@ -31,6 +31,7 @@ import com.android.systemui.classifier.FalsingDataProvider.SessionListener; import com.android.systemui.dagger.qualifiers.TestHarness; import com.android.systemui.dock.DockManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.sensors.ThresholdSensor; import java.io.FileDescriptor; Loading Loading @@ -67,6 +68,7 @@ public class BrightLineFalsingManager implements FalsingManager { private final SingleTapClassifier mSingleTapClassifier; private final DoubleTapClassifier mDoubleTapClassifier; private final HistoryTracker mHistoryTracker; private final KeyguardStateController mKeyguardStateController; private final boolean mTestHarness; private final MetricsLogger mMetricsLogger; private int mIsFalseTouchCalls; Loading Loading @@ -113,7 +115,8 @@ public class BrightLineFalsingManager implements FalsingManager { DockManager dockManager, MetricsLogger metricsLogger, @Named(BRIGHT_LINE_GESTURE_CLASSIFERS) Set<FalsingClassifier> classifiers, SingleTapClassifier singleTapClassifier, DoubleTapClassifier doubleTapClassifier, HistoryTracker historyTracker, @TestHarness boolean testHarness) { HistoryTracker historyTracker, KeyguardStateController keyguardStateController, @TestHarness boolean testHarness) { mDataProvider = falsingDataProvider; mDockManager = dockManager; mMetricsLogger = metricsLogger; Loading @@ -121,6 +124,7 @@ public class BrightLineFalsingManager implements FalsingManager { mSingleTapClassifier = singleTapClassifier; mDoubleTapClassifier = doubleTapClassifier; mHistoryTracker = historyTracker; mKeyguardStateController = keyguardStateController; mTestHarness = testHarness; mDataProvider.addSessionListener(mSessionListener); Loading @@ -134,6 +138,10 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public boolean isFalseTouch(@Classifier.InteractionType int interactionType) { if (skipFalsing()) { return false; } boolean result; mDataProvider.setInteractionType(interactionType); Loading Loading @@ -195,6 +203,10 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public boolean isFalseTap(boolean robustCheck, double falsePenalty) { if (skipFalsing()) { return false; } FalsingClassifier.Result singleTapResult = mSingleTapClassifier.isTap(mDataProvider.getRecentMotionEvents()); mPriorResults = Collections.singleton(singleTapResult); Loading Loading @@ -233,6 +245,10 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public boolean isFalseDoubleTap() { if (skipFalsing()) { return false; } FalsingClassifier.Result result = mDoubleTapClassifier.classifyGesture(); mPriorResults = Collections.singleton(result); if (result.isFalse()) { Loading @@ -246,6 +262,10 @@ public class BrightLineFalsingManager implements FalsingManager { return result.isFalse(); } private boolean skipFalsing() { return !mKeyguardStateController.isShowing(); } @Override public void onProximityEvent(ThresholdSensor.ThresholdSensorEvent proximityEvent) { // TODO: some of these classifiers might allow us to abort early, meaning we don't have to Loading
packages/SystemUI/src/com/android/systemui/classifier/FalsingCollectorImpl.java +9 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ThresholdSensor; import com.android.systemui.util.time.SystemClock; Loading @@ -48,6 +49,7 @@ class FalsingCollectorImpl implements FalsingCollector { private final HistoryTracker mHistoryTracker; private final ProximitySensor mProximitySensor; private final StatusBarStateController mStatusBarStateController; private final KeyguardStateController mKeyguardStateController; private final SystemClock mSystemClock; private int mState; Loading Loading @@ -87,13 +89,14 @@ class FalsingCollectorImpl implements FalsingCollector { FalsingCollectorImpl(FalsingDataProvider falsingDataProvider, FalsingManager falsingManager, KeyguardUpdateMonitor keyguardUpdateMonitor, HistoryTracker historyTracker, ProximitySensor proximitySensor, StatusBarStateController statusBarStateController, SystemClock systemClock) { KeyguardStateController keyguardStateController, SystemClock systemClock) { mFalsingDataProvider = falsingDataProvider; mFalsingManager = falsingManager; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mHistoryTracker = historyTracker; mProximitySensor = proximitySensor; mStatusBarStateController = statusBarStateController; mKeyguardStateController = keyguardStateController; mSystemClock = systemClock; Loading Loading @@ -255,6 +258,10 @@ class FalsingCollectorImpl implements FalsingCollector { @Override public void onTouchEvent(MotionEvent ev) { if (!mKeyguardStateController.isShowing()) { avoidGesture(); return; } // We delay processing down events to see if another component wants to process them. // If #avoidGesture is called after a MotionEvent.ACTION_DOWN, all following motion events // will be ignored by the collector until another MotionEvent.ACTION_DOWN is passed in. Loading @@ -276,8 +283,8 @@ class FalsingCollectorImpl implements FalsingCollector { @Override public void avoidGesture() { if (mPendingDownEvent != null) { mAvoidGesture = true; if (mPendingDownEvent != null) { mPendingDownEvent.recycle(); mPendingDownEvent = null; } Loading
packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java +22 −3 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import com.android.internal.logging.testing.FakeMetricsLogger; import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.FalsingDataProvider.GestureCompleteListener; import com.android.systemui.dock.DockManagerFake; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.time.FakeSystemClock; Loading Loading @@ -71,7 +72,10 @@ public class BrightLineClassifierTest extends SysuiTestCase { private FalsingClassifier mClassifierB; private final List<MotionEvent> mMotionEventList = new ArrayList<>(); @Mock private HistoryTracker mHistoryTracker;; private HistoryTracker mHistoryTracker; @Mock private KeyguardStateController mKeyguardStateController; private final FakeExecutor mFakeExecutor = new FakeExecutor(new FakeSystemClock()); private final FalsingClassifier.Result mFalsedResult = FalsingClassifier.Result.falsed(1, ""); Loading @@ -88,9 +92,10 @@ public class BrightLineClassifierTest extends SysuiTestCase { mClassifiers.add(mClassifierA); mClassifiers.add(mClassifierB); when(mFalsingDataProvider.getRecentMotionEvents()).thenReturn(mMotionEventList); when(mKeyguardStateController.isShowing()).thenReturn(true); mBrightLineFalsingManager = new BrightLineFalsingManager(mFalsingDataProvider, mDockManager, mMetricsLogger, mClassifiers, mSingleTapClassfier, mDoubleTapClassifier, mHistoryTracker, false); mHistoryTracker, mKeyguardStateController, false); ArgumentCaptor<GestureCompleteListener> gestureCompleteListenerCaptor = Loading Loading @@ -120,7 +125,7 @@ public class BrightLineClassifierTest extends SysuiTestCase { } @Test public void testIsFalseTouch_ClassffiersPass() { public void testIsFalseTouch_ClassifiersPass() { assertThat(mBrightLineFalsingManager.isFalseTouch(0)).isFalse(); } Loading Loading @@ -233,4 +238,18 @@ public class BrightLineClassifierTest extends SysuiTestCase { assertThat(mFakeExecutor.numPending()).isEqualTo(0); } @Test public void testNoFalsingUnlocked() { when(mKeyguardStateController.isShowing()).thenReturn(false); when(mClassifierA.classifyGesture(anyDouble(), anyDouble())).thenReturn(mFalsedResult); assertThat(mBrightLineFalsingManager.isFalseTouch(0)).isFalse(); when(mSingleTapClassfier.isTap(mMotionEventList)).thenReturn(mFalsedResult); assertThat(mBrightLineFalsingManager.isFalseTap(false, 0)).isFalse(); when(mDoubleTapClassifier.classifyGesture()).thenReturn(mFalsedResult); assertThat(mBrightLineFalsingManager.isFalseDoubleTap()).isFalse(); } }
packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingCollectorImplTest.java +21 −1 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ import com.android.systemui.SysuiTestCase; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ThresholdSensor; import com.android.systemui.util.time.FakeSystemClock; Loading Loading @@ -62,16 +63,19 @@ public class FalsingCollectorImplTest extends SysuiTestCase { private ProximitySensor mProximitySensor; @Mock private SysuiStatusBarStateController mStatusBarStateController; @Mock private KeyguardStateController mKeyguardStateController; @Before public void setUp() { MockitoAnnotations.initMocks(this); when(mStatusBarStateController.getState()).thenReturn(StatusBarState.KEYGUARD); when(mKeyguardStateController.isShowing()).thenReturn(true); mFalsingCollector = new FalsingCollectorImpl(mFalsingDataProvider, mFalsingManager, mKeyguardUpdateMonitor, mHistoryTracker, mProximitySensor, mStatusBarStateController, new FakeSystemClock()); mStatusBarStateController, mKeyguardStateController, new FakeSystemClock()); } @Test Loading Loading @@ -159,4 +163,20 @@ public class FalsingCollectorImplTest extends SysuiTestCase { mFalsingCollector.onTouchEvent(up); verify(mFalsingDataProvider, never()).onMotionEvent(any(MotionEvent.class)); } @Test public void testAvoidUnlocked() { MotionEvent down = MotionEvent.obtain(0, 0, MotionEvent.ACTION_DOWN, 0, 0, 0); MotionEvent up = MotionEvent.obtain(0, 0, MotionEvent.ACTION_UP, 0, 0, 0); when(mKeyguardStateController.isShowing()).thenReturn(false); // Nothing passed initially mFalsingCollector.onTouchEvent(down); verify(mFalsingDataProvider, never()).onMotionEvent(any(MotionEvent.class)); // Up event would normally flush the up event. mFalsingCollector.onTouchEvent(up); verify(mFalsingDataProvider, never()).onMotionEvent(any(MotionEvent.class)); } }