diff options
| author | 2020-02-26 21:48:14 +0000 | |
|---|---|---|
| committer | 2020-02-26 21:48:14 +0000 | |
| commit | 6b0bccc9c2c6b3e3036e0141ada9f496e21ceba8 (patch) | |
| tree | d06b1cd1fffd66425fbf2c4d93182f77ef412e90 | |
| parent | 149bbf89bc0d9eb6ee0e8234222402472782de3e (diff) | |
| parent | 6e63679e5209f06256b25fdda322a51c29cdb003 (diff) | |
Merge "Ensure that FalsingManager is not active when phone unlocked." into rvc-dev
5 files changed, 68 insertions, 17 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java index 0ac1c1215a28..79b691bb3e37 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java @@ -39,6 +39,7 @@ import com.android.systemui.dump.DumpManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingPlugin; import com.android.systemui.plugins.PluginListener; +import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.plugins.PluginManager; import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.sensors.ProximitySensor; @@ -69,6 +70,7 @@ public class FalsingManagerProxy implements FalsingManager, Dumpable { private final DockManager mDockManager; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private Executor mUiBgExecutor; + private final StatusBarStateController mStatusBarStateController; @Inject FalsingManagerProxy(Context context, PluginManager pluginManager, @Main Executor executor, @@ -76,12 +78,14 @@ public class FalsingManagerProxy implements FalsingManager, Dumpable { DeviceConfigProxy deviceConfig, DockManager dockManager, KeyguardUpdateMonitor keyguardUpdateMonitor, DumpManager dumpManager, - @UiBackground Executor uiBgExecutor) { + @UiBackground Executor uiBgExecutor, + StatusBarStateController statusBarStateController) { mDisplayMetrics = displayMetrics; mProximitySensor = proximitySensor; mDockManager = dockManager; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mUiBgExecutor = uiBgExecutor; + mStatusBarStateController = statusBarStateController; mProximitySensor.setTag(PROXIMITY_SENSOR_TAG); mProximitySensor.setSensorDelay(SensorManager.SENSOR_DELAY_GAME); mDeviceConfig = deviceConfig; @@ -143,7 +147,8 @@ public class FalsingManagerProxy implements FalsingManager, Dumpable { mKeyguardUpdateMonitor, mProximitySensor, mDeviceConfig, - mDockManager + mDockManager, + mStatusBarStateController ); } } 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 a084ae6ed50f..ec81b9f5a291 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java @@ -32,6 +32,8 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.systemui.classifier.Classifier; import com.android.systemui.dock.DockManager; import com.android.systemui.plugins.FalsingManager; +import com.android.systemui.plugins.statusbar.StatusBarStateController; +import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.sensors.ProximitySensor; @@ -59,6 +61,7 @@ public class BrightLineFalsingManager implements FalsingManager { private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private final ProximitySensor mProximitySensor; private final DockManager mDockManager; + private final StatusBarStateController mStatusBarStateController; private boolean mSessionStarted; private MetricsLogger mMetricsLogger; private int mIsFalseTouchCalls; @@ -88,15 +91,29 @@ public class BrightLineFalsingManager implements FalsingManager { }; private boolean mPreviousResult = false; + private StatusBarStateController.StateListener mStatusBarStateListener = + new StatusBarStateController.StateListener() { + @Override + public void onStateChanged(int newState) { + logDebug("StatusBarState=" + StatusBarState.toShortString(newState)); + mState = newState; + updateSessionActive(); + } + }; + private int mState; + public BrightLineFalsingManager(FalsingDataProvider falsingDataProvider, KeyguardUpdateMonitor keyguardUpdateMonitor, ProximitySensor proximitySensor, DeviceConfigProxy deviceConfigProxy, - DockManager dockManager) { + DockManager dockManager, StatusBarStateController statusBarStateController) { mKeyguardUpdateMonitor = keyguardUpdateMonitor; mDataProvider = falsingDataProvider; mProximitySensor = proximitySensor; mDockManager = dockManager; + mStatusBarStateController = statusBarStateController; mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateCallback); + mStatusBarStateController.addCallback(mStatusBarStateListener); + mState = mStatusBarStateController.getState(); mMetricsLogger = new MetricsLogger(); mClassifiers = new ArrayList<>(); @@ -116,13 +133,12 @@ public class BrightLineFalsingManager implements FalsingManager { mProximitySensor.register(mSensorEventListener); } - private void unregisterSensors() { mProximitySensor.unregister(mSensorEventListener); } private void sessionStart() { - if (!mSessionStarted && !mShowingAod && mScreenOn) { + if (!mSessionStarted && shouldSessionBeActive()) { logDebug("Starting Session"); mSessionStarted = true; mJustUnlockedWithFace = false; @@ -145,6 +161,19 @@ public class BrightLineFalsingManager implements FalsingManager { } } + + private void updateSessionActive() { + if (shouldSessionBeActive()) { + sessionStart(); + } else { + sessionEnd(); + } + } + + private boolean shouldSessionBeActive() { + return mScreenOn && (mState == StatusBarState.KEYGUARD) && !mShowingAod; + } + private void updateInteractionType(@Classifier.InteractionType int type) { logDebug("InteractionType: " + type); mDataProvider.setInteractionType(type); @@ -232,11 +261,7 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public void setShowingAod(boolean showingAod) { mShowingAod = showingAod; - if (showingAod) { - sessionEnd(); - } else { - sessionStart(); - } + updateSessionActive(); } @Override @@ -343,13 +368,13 @@ public class BrightLineFalsingManager implements FalsingManager { @Override public void onScreenTurningOn() { mScreenOn = true; - sessionStart(); + updateSessionActive(); } @Override public void onScreenOff() { mScreenOn = false; - sessionEnd(); + updateSessionActive(); } @@ -421,6 +446,7 @@ public class BrightLineFalsingManager implements FalsingManager { public void cleanup() { unregisterSensors(); mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateCallback); + mStatusBarStateController.removeCallback(mStatusBarStateListener); } static void logDebug(String msg) { diff --git a/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java b/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java index 2fdc54a438f4..13ba1a3cbf31 100644 --- a/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java +++ b/packages/SystemUI/src/com/android/systemui/util/sensors/ProximitySensor.java @@ -40,7 +40,7 @@ import javax.inject.Inject; */ public class ProximitySensor { private static final String TAG = "ProxSensor"; - private static final boolean DEBUG = false; + private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private final Sensor mSensor; private final AsyncSensorManager mSensorManager; diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java index 545d2d4229b3..5b78067ef81a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java @@ -33,7 +33,9 @@ import com.android.systemui.classifier.brightline.BrightLineFalsingManager; import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManagerFake; import com.android.systemui.dump.DumpManager; +import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.shared.plugins.PluginManager; +import com.android.systemui.statusbar.StatusBarStateControllerImpl; import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.DeviceConfigProxyFake; import com.android.systemui.util.concurrency.FakeExecutor; @@ -63,6 +65,7 @@ public class FalsingManagerProxyTest extends SysuiTestCase { private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); private DockManager mDockManager = new DockManagerFake(); + private StatusBarStateController mStatusBarStateController = new StatusBarStateControllerImpl(); @Before public void setup() { @@ -83,7 +86,7 @@ public class FalsingManagerProxyTest extends SysuiTestCase { public void test_brightLineFalsingManagerDisabled() { mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics, mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor, - mDumpManager, mUiBgExecutor); + mDumpManager, mUiBgExecutor, mStatusBarStateController); assertThat(mProxy.getInternalFalsingManager(), instanceOf(FalsingManagerImpl.class)); } @@ -94,7 +97,7 @@ public class FalsingManagerProxyTest extends SysuiTestCase { mExecutor.runAllReady(); mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics, mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor, - mDumpManager, mUiBgExecutor); + mDumpManager, mUiBgExecutor, mStatusBarStateController); assertThat(mProxy.getInternalFalsingManager(), instanceOf(BrightLineFalsingManager.class)); } @@ -102,7 +105,7 @@ public class FalsingManagerProxyTest extends SysuiTestCase { public void test_brightLineFalsingManagerToggled() throws InterruptedException { mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics, mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor, - mDumpManager, mUiBgExecutor); + mDumpManager, mUiBgExecutor, mStatusBarStateController); assertThat(mProxy.getInternalFalsingManager(), instanceOf(FalsingManagerImpl.class)); mDeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI, 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 index 0aaa3b6ad329..8b5cc9abb777 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/BrightLineFalsingManagerTest.java @@ -22,12 +22,16 @@ import static org.mockito.Mockito.verify; import android.test.suitebuilder.annotation.SmallTest; import android.testing.AndroidTestingRunner; +import android.testing.TestableLooper; 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.statusbar.StatusBarState; +import com.android.systemui.statusbar.StatusBarStateControllerImpl; +import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.DeviceConfigProxyFake; import com.android.systemui.util.sensors.ProximitySensor; @@ -40,6 +44,7 @@ import org.mockito.MockitoAnnotations; @SmallTest @RunWith(AndroidTestingRunner.class) +@TestableLooper.RunWithLooper public class BrightLineFalsingManagerTest extends SysuiTestCase { @@ -47,6 +52,7 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase { private KeyguardUpdateMonitor mKeyguardUpdateMonitor; @Mock private ProximitySensor mProximitySensor; + private SysuiStatusBarStateController mStatusBarStateController; private BrightLineFalsingManager mFalsingManager; @@ -61,8 +67,11 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase { FalsingDataProvider falsingDataProvider = new FalsingDataProvider(dm); DeviceConfigProxy deviceConfigProxy = new DeviceConfigProxyFake(); DockManager dockManager = new DockManagerFake(); + mStatusBarStateController = new StatusBarStateControllerImpl(); + mStatusBarStateController.setState(StatusBarState.KEYGUARD); mFalsingManager = new BrightLineFalsingManager(falsingDataProvider, - mKeyguardUpdateMonitor, mProximitySensor, deviceConfigProxy, dockManager); + mKeyguardUpdateMonitor, mProximitySensor, deviceConfigProxy, dockManager, + mStatusBarStateController); } @Test @@ -98,4 +107,12 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase { mFalsingManager.onBouncerHidden(); verify(mProximitySensor).register(any(ProximitySensor.ProximitySensorListener.class)); } + + @Test + public void testUnregisterSensor_StateTransition() { + mFalsingManager.onScreenTurningOn(); + reset(mProximitySensor); + mStatusBarStateController.setState(StatusBarState.SHADE); + verify(mProximitySensor).unregister(any(ProximitySensor.ProximitySensorListener.class)); + } } |