From 1b2144d69d4b24a0c90f3d4d77353af48f8b2507 Mon Sep 17 00:00:00 2001 From: Dave Mankoff Date: Tue, 11 Feb 2020 14:45:46 -0500 Subject: [PATCH] Unregister prox sensor when QS or Bouncer are expanded. The FalsingManager doesn't need the prox sensor when its not being used. Bug: 149307116 Test: atest SystemUITests Change-Id: Ib68c0a269c9f94b1a1bb0ba137a2bb5fde340bba --- .../systemui/plugins/FalsingManager.java | 2 +- .../classifier/FalsingManagerFake.java | 2 +- .../classifier/FalsingManagerImpl.java | 2 +- .../classifier/FalsingManagerProxy.java | 4 +- .../brightline/BrightLineFalsingManager.java | 16 ++- .../brightline/FalsingClassifier.java | 4 - .../keyguard/KeyguardViewMediator.java | 2 +- .../BrightLineFalsingManagerTest.java | 101 ++++++++++++++++++ 8 files changed, 119 insertions(+), 14 deletions(-) create mode 100644 packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java index 0a2dd6c027dec..bcff634713028 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java @@ -32,7 +32,7 @@ import java.io.PrintWriter; public interface FalsingManager { int VERSION = 3; - void onSucccessfulUnlock(); + void onSuccessfulUnlock(); void onNotificationActive(); diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java index 099909d000f9f..e105795ad57f2 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java @@ -35,7 +35,7 @@ public class FalsingManagerFake implements FalsingManager { private boolean mIsReportingEnabled; @Override - public void onSucccessfulUnlock() { + public void onSuccessfulUnlock() { } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java index d6faed5413d8c..6a64c8386798e 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerImpl.java @@ -375,7 +375,7 @@ public class FalsingManagerImpl implements FalsingManager { sessionExitpoint(false /* force */); } - public void onSucccessfulUnlock() { + public void onSuccessfulUnlock() { if (FalsingLog.ENABLED) { FalsingLog.i("onSucccessfulUnlock", ""); } diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java index b2131e72be56d..e791fb0e574f9 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java @@ -147,8 +147,8 @@ public class FalsingManagerProxy implements FalsingManager { } @Override - public void onSucccessfulUnlock() { - mInternalFalsingManager.onSucccessfulUnlock(); + public void onSuccessfulUnlock() { + mInternalFalsingManager.onSuccessfulUnlock(); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java index b2e61a2564d32..682075db7ddb8 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java @@ -138,7 +138,7 @@ public class BrightLineFalsingManager implements FalsingManager { private void updateInteractionType(@Classifier.InteractionType int type) { logDebug("InteractionType: " + type); - mClassifiers.forEach((classifier) -> classifier.setInteractionType(type)); + mDataProvider.setInteractionType(type); } @Override @@ -187,7 +187,7 @@ public class BrightLineFalsingManager implements FalsingManager { } @Override - public void onSucccessfulUnlock() { + public void onSuccessfulUnlock() { if (mIsFalseTouchCalls != 0) { mMetricsLogger.histogram(FALSING_SUCCESS, mIsFalseTouchCalls); mIsFalseTouchCalls = 0; @@ -212,7 +212,6 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public void onNotificatonStartDraggingDown() { updateInteractionType(Classifier.NOTIFICATION_DRAG_DOWN); - } @Override @@ -235,7 +234,12 @@ public class BrightLineFalsingManager implements FalsingManager { } @Override - public void setQsExpanded(boolean b) { + public void setQsExpanded(boolean expanded) { + if (expanded) { + unregisterSensors(); + } else if (mSessionStarted) { + registerSensors(); + } } @Override @@ -338,10 +342,14 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public void onBouncerShown() { + unregisterSensors(); } @Override public void onBouncerHidden() { + if (mSessionStarted) { + registerSensors(); + } } @Override diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingClassifier.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingClassifier.java index 7555051fac486..cf088213644e9 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingClassifier.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingClassifier.java @@ -85,10 +85,6 @@ abstract class FalsingClassifier { return mDataProvider.getInteractionType(); } - final void setInteractionType(@Classifier.InteractionType int interactionType) { - mDataProvider.setInteractionType(interactionType); - } - /** * Called whenever a MotionEvent occurs. * diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java index 9da99c453022d..83a6d7528dbb8 100644 --- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java +++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java @@ -1651,7 +1651,7 @@ public class KeyguardViewMediator extends SystemUI { "KeyguardViewMediator#handleMessage START_KEYGUARD_EXIT_ANIM"); StartKeyguardExitAnimParams params = (StartKeyguardExitAnimParams) msg.obj; handleStartKeyguardExitAnimation(params.startTime, params.fadeoutDuration); - mFalsingManager.onSucccessfulUnlock(); + mFalsingManager.onSuccessfulUnlock(); Trace.endSection(); break; case KEYGUARD_DONE_PENDING_TIMEOUT: diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java new file mode 100644 index 0000000000000..0aaa3b6ad3293 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java @@ -0,0 +1,101 @@ +/* + * 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. + * 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.brightline; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.reset; +import static org.mockito.Mockito.verify; + +import android.test.suitebuilder.annotation.SmallTest; +import android.testing.AndroidTestingRunner; +import android.util.DisplayMetrics; + +import com.android.keyguard.KeyguardUpdateMonitor; +import com.android.systemui.SysuiTestCase; +import com.android.systemui.dock.DockManager; +import com.android.systemui.dock.DockManagerFake; +import com.android.systemui.util.DeviceConfigProxy; +import com.android.systemui.util.DeviceConfigProxyFake; +import com.android.systemui.util.sensors.ProximitySensor; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +@SmallTest +@RunWith(AndroidTestingRunner.class) +public class BrightLineFalsingManagerTest extends SysuiTestCase { + + + @Mock + private KeyguardUpdateMonitor mKeyguardUpdateMonitor; + @Mock + private ProximitySensor mProximitySensor; + + private BrightLineFalsingManager mFalsingManager; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + DisplayMetrics dm = new DisplayMetrics(); + dm.xdpi = 100; + dm.ydpi = 100; + dm.widthPixels = 100; + dm.heightPixels = 100; + FalsingDataProvider falsingDataProvider = new FalsingDataProvider(dm); + DeviceConfigProxy deviceConfigProxy = new DeviceConfigProxyFake(); + DockManager dockManager = new DockManagerFake(); + mFalsingManager = new BrightLineFalsingManager(falsingDataProvider, + mKeyguardUpdateMonitor, mProximitySensor, deviceConfigProxy, dockManager); + } + + @Test + public void testRegisterSensor() { + mFalsingManager.onScreenTurningOn(); + verify(mProximitySensor).register(any(ProximitySensor.ProximitySensorListener.class)); + } + + @Test + public void testUnregisterSensor() { + mFalsingManager.onScreenTurningOn(); + reset(mProximitySensor); + mFalsingManager.onScreenOff(); + verify(mProximitySensor).unregister(any(ProximitySensor.ProximitySensorListener.class)); + } + + @Test + public void testUnregisterSensor_QS() { + mFalsingManager.onScreenTurningOn(); + reset(mProximitySensor); + mFalsingManager.setQsExpanded(true); + verify(mProximitySensor).unregister(any(ProximitySensor.ProximitySensorListener.class)); + mFalsingManager.setQsExpanded(false); + verify(mProximitySensor).register(any(ProximitySensor.ProximitySensorListener.class)); + } + + @Test + public void testUnregisterSensor_Bouncer() { + mFalsingManager.onScreenTurningOn(); + reset(mProximitySensor); + mFalsingManager.onBouncerShown(); + verify(mProximitySensor).unregister(any(ProximitySensor.ProximitySensorListener.class)); + mFalsingManager.onBouncerHidden(); + verify(mProximitySensor).register(any(ProximitySensor.ProximitySensorListener.class)); + } +}