diff options
10 files changed, 92 insertions, 28 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java index ab7af43f91d2..f35322bd2a77 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java @@ -22,7 +22,6 @@ import android.content.Context; import android.hardware.SensorManager; import android.net.Uri; import android.provider.DeviceConfig; -import android.util.DisplayMetrics; import android.view.MotionEvent; import androidx.annotation.NonNull; @@ -62,7 +61,7 @@ public class FalsingManagerProxy implements FalsingManager, Dumpable { private static final String PROXIMITY_SENSOR_TAG = "FalsingManager"; private final ProximitySensor mProximitySensor; - private final DisplayMetrics mDisplayMetrics; + private final FalsingDataProvider mFalsingDataProvider; private FalsingManager mInternalFalsingManager; private DeviceConfig.OnPropertiesChangedListener mDeviceConfigListener; private final DeviceConfigProxy mDeviceConfig; @@ -74,18 +73,19 @@ public class FalsingManagerProxy implements FalsingManager, Dumpable { @Inject FalsingManagerProxy(Context context, PluginManager pluginManager, @Main Executor executor, - DisplayMetrics displayMetrics, ProximitySensor proximitySensor, + ProximitySensor proximitySensor, DeviceConfigProxy deviceConfig, DockManager dockManager, KeyguardUpdateMonitor keyguardUpdateMonitor, DumpManager dumpManager, @UiBackground Executor uiBgExecutor, - StatusBarStateController statusBarStateController) { - mDisplayMetrics = displayMetrics; + StatusBarStateController statusBarStateController, + FalsingDataProvider falsingDataProvider) { mProximitySensor = proximitySensor; mDockManager = dockManager; mKeyguardUpdateMonitor = keyguardUpdateMonitor; mUiBgExecutor = uiBgExecutor; mStatusBarStateController = statusBarStateController; + mFalsingDataProvider = falsingDataProvider; mProximitySensor.setTag(PROXIMITY_SENSOR_TAG); mProximitySensor.setDelay(SensorManager.SENSOR_DELAY_GAME); mDeviceConfig = deviceConfig; @@ -143,7 +143,7 @@ public class FalsingManagerProxy implements FalsingManager, Dumpable { mInternalFalsingManager = new FalsingManagerImpl(context, mUiBgExecutor); } else { mInternalFalsingManager = new BrightLineFalsingManager( - new FalsingDataProvider(mDisplayMetrics), + mFalsingDataProvider, mKeyguardUpdateMonitor, mProximitySensor, mDeviceConfig, 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 95d5ad9a7a94..a50f9ce9713b 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/BrightLineFalsingManager.java @@ -132,7 +132,9 @@ public class BrightLineFalsingManager implements FalsingManager { } private void registerSensors() { - mProximitySensor.register(mSensorEventListener); + if (!mDataProvider.isWirelessCharging()) { + mProximitySensor.register(mSensorEventListener); + } } private void unregisterSensors() { diff --git a/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java b/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java index 5494c644c22c..ea46441c8fbe 100644 --- a/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java +++ b/packages/SystemUI/src/com/android/systemui/classifier/brightline/FalsingDataProvider.java @@ -22,10 +22,13 @@ import android.view.MotionEvent.PointerCoords; import android.view.MotionEvent.PointerProperties; import com.android.systemui.classifier.Classifier; +import com.android.systemui.statusbar.policy.BatteryController; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + /** * Acts as a cache and utility class for FalsingClassifiers. */ @@ -36,6 +39,7 @@ public class FalsingDataProvider { private final int mWidthPixels; private final int mHeightPixels; + private final BatteryController mBatteryController; private final float mXdpi; private final float mYdpi; @@ -50,11 +54,13 @@ public class FalsingDataProvider { private MotionEvent mFirstRecentMotionEvent; private MotionEvent mLastMotionEvent; - public FalsingDataProvider(DisplayMetrics displayMetrics) { + @Inject + public FalsingDataProvider(DisplayMetrics displayMetrics, BatteryController batteryController) { mXdpi = displayMetrics.xdpi; mYdpi = displayMetrics.ydpi; mWidthPixels = displayMetrics.widthPixels; mHeightPixels = displayMetrics.heightPixels; + mBatteryController = batteryController; FalsingClassifier.logInfo("xdpi, ydpi: " + getXdpi() + ", " + getYdpi()); FalsingClassifier.logInfo("width, height: " + getWidthPixels() + ", " + getHeightPixels()); @@ -177,6 +183,11 @@ public class FalsingDataProvider { return mLastMotionEvent.getY() < mFirstRecentMotionEvent.getY(); } + /** Returns true if phone is being charged without a cable. */ + boolean isWirelessCharging() { + return mBatteryController.isWirelessCharging(); + } + private void recalculateData() { if (!mDirty) { return; diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java index eb2463b02ae4..cbf8f578744c 100644 --- a/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java +++ b/packages/SystemUI/src/com/android/systemui/doze/DozeTriggers.java @@ -399,10 +399,13 @@ public class DozeTriggers implements DozeMachine.Part { break; case DOZE_PULSING: case DOZE_PULSING_BRIGHT: - case DOZE_AOD_DOCKED: mWantProx = true; mWantTouchScreenSensors = false; break; + case DOZE_AOD_DOCKED: + mWantProx = false; + mWantTouchScreenSensors = false; + break; case DOZE_PULSE_DONE: mDozeSensors.requestTemporaryDisable(); // A pulse will temporarily disable sensors that require a touch screen. diff --git a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java index dd3a7858fd1f..b6cc2ee03f38 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java +++ b/packages/SystemUI/tests/src/com/android/systemui/SysuiTestCase.java @@ -140,6 +140,10 @@ public abstract class SysuiTestCase { return null; } + protected FakeBroadcastDispatcher getFakeBroadcastDispatcher() { + return mFakeBroadcastDispatcher; + } + public SysuiTestableContext getContext() { return mContext; } 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 ae7387996322..c3c9ecc23d59 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerProxyTest.java @@ -29,8 +29,8 @@ import androidx.test.filters.SmallTest; import com.android.internal.logging.testing.UiEventLoggerFake; import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.systemui.SysuiTestCase; import com.android.systemui.classifier.brightline.BrightLineFalsingManager; +import com.android.systemui.classifier.brightline.FalsingDataProvider; import com.android.systemui.dock.DockManager; import com.android.systemui.dock.DockManagerFake; import com.android.systemui.dump.DumpManager; @@ -42,6 +42,8 @@ import com.android.systemui.util.DeviceConfigProxyFake; import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.time.FakeSystemClock; +import com.android.systemui.utils.leaks.FakeBatteryController; +import com.android.systemui.utils.leaks.LeakCheckedTest; import org.junit.After; import org.junit.Before; @@ -52,7 +54,7 @@ import org.mockito.MockitoAnnotations; @SmallTest @RunWith(AndroidTestingRunner.class) -public class FalsingManagerProxyTest extends SysuiTestCase { +public class FalsingManagerProxyTest extends LeakCheckedTest { @Mock(stubOnly = true) PluginManager mPluginManager; @Mock(stubOnly = true) @@ -62,7 +64,7 @@ public class FalsingManagerProxyTest extends SysuiTestCase { @Mock DumpManager mDumpManager; private FalsingManagerProxy mProxy; private DeviceConfigProxy mDeviceConfig; - private DisplayMetrics mDisplayMetrics = new DisplayMetrics(); + private FalsingDataProvider mFalsingDataProvider; private FakeExecutor mExecutor = new FakeExecutor(new FakeSystemClock()); private FakeExecutor mUiBgExecutor = new FakeExecutor(new FakeSystemClock()); private DockManager mDockManager = new DockManagerFake(); @@ -75,6 +77,8 @@ public class FalsingManagerProxyTest extends SysuiTestCase { mDeviceConfig = new DeviceConfigProxyFake(); mDeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI, BRIGHTLINE_FALSING_MANAGER_ENABLED, "false", false); + mFalsingDataProvider = new FalsingDataProvider( + new DisplayMetrics(), new FakeBatteryController(getLeakCheck())); } @After @@ -86,9 +90,9 @@ public class FalsingManagerProxyTest extends SysuiTestCase { @Test public void test_brightLineFalsingManagerDisabled() { - mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics, + mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor, - mDumpManager, mUiBgExecutor, mStatusBarStateController); + mDumpManager, mUiBgExecutor, mStatusBarStateController, mFalsingDataProvider); assertThat(mProxy.getInternalFalsingManager(), instanceOf(FalsingManagerImpl.class)); } @@ -97,17 +101,17 @@ public class FalsingManagerProxyTest extends SysuiTestCase { mDeviceConfig.setProperty(DeviceConfig.NAMESPACE_SYSTEMUI, BRIGHTLINE_FALSING_MANAGER_ENABLED, "true", false); mExecutor.runAllReady(); - mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics, + mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor, - mDumpManager, mUiBgExecutor, mStatusBarStateController); + mDumpManager, mUiBgExecutor, mStatusBarStateController, mFalsingDataProvider); assertThat(mProxy.getInternalFalsingManager(), instanceOf(BrightLineFalsingManager.class)); } @Test public void test_brightLineFalsingManagerToggled() throws InterruptedException { - mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mDisplayMetrics, + mProxy = new FalsingManagerProxy(getContext(), mPluginManager, mExecutor, mProximitySensor, mDeviceConfig, mDockManager, mKeyguardUpdateMonitor, - mDumpManager, mUiBgExecutor, mStatusBarStateController); + mDumpManager, mUiBgExecutor, mStatusBarStateController, mFalsingDataProvider); 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 2f05f0b4c69b..061664b4f6d4 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 @@ -17,6 +17,7 @@ package com.android.systemui.classifier.brightline; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.verify; @@ -27,7 +28,6 @@ import android.util.DisplayMetrics; import com.android.internal.logging.testing.UiEventLoggerFake; 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; @@ -37,6 +37,8 @@ import com.android.systemui.util.DeviceConfigProxy; import com.android.systemui.util.DeviceConfigProxyFake; import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ThresholdSensor; +import com.android.systemui.utils.leaks.FakeBatteryController; +import com.android.systemui.utils.leaks.LeakCheckedTest; import org.junit.Before; import org.junit.Test; @@ -47,7 +49,7 @@ import org.mockito.MockitoAnnotations; @SmallTest @RunWith(AndroidTestingRunner.class) @TestableLooper.RunWithLooper -public class BrightLineFalsingManagerTest extends SysuiTestCase { +public class BrightLineFalsingManagerTest extends LeakCheckedTest { @Mock @@ -55,23 +57,26 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase { @Mock private ProximitySensor mProximitySensor; private SysuiStatusBarStateController mStatusBarStateController; + private FalsingDataProvider mFalsingDataProvider; + private FakeBatteryController mFakeBatteryController; private BrightLineFalsingManager mFalsingManager; @Before public void setup() { MockitoAnnotations.initMocks(this); + mFakeBatteryController = new FakeBatteryController(getLeakCheck()); DisplayMetrics dm = new DisplayMetrics(); dm.xdpi = 100; dm.ydpi = 100; dm.widthPixels = 100; dm.heightPixels = 100; - FalsingDataProvider falsingDataProvider = new FalsingDataProvider(dm); + mFalsingDataProvider = new FalsingDataProvider(dm, mFakeBatteryController); DeviceConfigProxy deviceConfigProxy = new DeviceConfigProxyFake(); DockManager dockManager = new DockManagerFake(); mStatusBarStateController = new StatusBarStateControllerImpl(new UiEventLoggerFake()); mStatusBarStateController.setState(StatusBarState.KEYGUARD); - mFalsingManager = new BrightLineFalsingManager(falsingDataProvider, + mFalsingManager = new BrightLineFalsingManager(mFalsingDataProvider, mKeyguardUpdateMonitor, mProximitySensor, deviceConfigProxy, dockManager, mStatusBarStateController); } @@ -83,6 +88,13 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase { } @Test + public void testNoProximityWhenWirelessCharging() { + mFakeBatteryController.setWirelessCharging(true); + mFalsingManager.onScreenTurningOn(); + verify(mProximitySensor, never()).register(any(ThresholdSensor.Listener.class)); + } + + @Test public void testUnregisterSensor() { mFalsingManager.onScreenTurningOn(); reset(mProximitySensor); diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/ClassifierTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/ClassifierTest.java index 3ba5d1ac79ea..a4d198a14541 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/ClassifierTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/ClassifierTest.java @@ -21,29 +21,30 @@ import static com.android.systemui.classifier.Classifier.UNLOCK; import android.util.DisplayMetrics; import android.view.MotionEvent; -import com.android.systemui.SysuiTestCase; +import com.android.systemui.utils.leaks.FakeBatteryController; +import com.android.systemui.utils.leaks.LeakCheckedTest; import org.junit.After; -import org.junit.Before; import java.util.ArrayList; import java.util.List; -public class ClassifierTest extends SysuiTestCase { +public class ClassifierTest extends LeakCheckedTest { private FalsingDataProvider mDataProvider; private List<MotionEvent> mMotionEvents = new ArrayList<>(); private float mOffsetX = 0; private float mOffsetY = 0; + private FakeBatteryController mFakeBatteryController; - @Before public void setup() { DisplayMetrics displayMetrics = new DisplayMetrics(); displayMetrics.xdpi = 100; displayMetrics.ydpi = 100; displayMetrics.widthPixels = 1000; displayMetrics.heightPixels = 1000; - mDataProvider = new FalsingDataProvider(displayMetrics); + mFakeBatteryController = new FakeBatteryController(getLeakCheck()); + mDataProvider = new FalsingDataProvider(displayMetrics, mFakeBatteryController); mDataProvider.setInteractionType(UNLOCK); } @@ -56,6 +57,10 @@ public class ClassifierTest extends SysuiTestCase { return mDataProvider; } + FakeBatteryController getFakeBatteryController() { + return mFakeBatteryController; + } + void setOffsetX(float offsetX) { mOffsetX = offsetX; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/FalsingDataProviderTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/FalsingDataProviderTest.java index 448c2f7b33ad..f13bc7379436 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/FalsingDataProviderTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/brightline/FalsingDataProviderTest.java @@ -26,6 +26,8 @@ import android.view.MotionEvent; import androidx.test.filters.SmallTest; +import com.android.systemui.utils.leaks.FakeBatteryController; + import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -37,17 +39,19 @@ import java.util.List; @RunWith(AndroidTestingRunner.class) public class FalsingDataProviderTest extends ClassifierTest { + private FakeBatteryController mFakeBatteryController; private FalsingDataProvider mDataProvider; @Before public void setup() { super.setup(); + mFakeBatteryController = new FakeBatteryController(getLeakCheck()); DisplayMetrics displayMetrics = new DisplayMetrics(); displayMetrics.xdpi = 100; displayMetrics.ydpi = 100; displayMetrics.widthPixels = 1000; displayMetrics.heightPixels = 1000; - mDataProvider = new FalsingDataProvider(displayMetrics); + mDataProvider = new FalsingDataProvider(displayMetrics, mFakeBatteryController); } @After @@ -246,4 +250,12 @@ public class FalsingDataProviderTest extends ClassifierTest { assertThat(mDataProvider.isUp(), is(false)); mDataProvider.onSessionEnd(); } + + @Test + public void test_isWirelessCharging() { + assertThat(mDataProvider.isWirelessCharging(), is(false)); + + mFakeBatteryController.setWirelessCharging(true); + assertThat(mDataProvider.isWirelessCharging(), is(true)); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBatteryController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBatteryController.java index 8ec4cb8b927b..50c1e73f6aac 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBatteryController.java +++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeBatteryController.java @@ -25,6 +25,8 @@ import java.io.PrintWriter; public class FakeBatteryController extends BaseLeakChecker<BatteryStateChangeCallback> implements BatteryController { + private boolean mWirelessCharging; + public FakeBatteryController(LeakCheck test) { super(test, "battery"); } @@ -58,4 +60,13 @@ public class FakeBatteryController extends BaseLeakChecker<BatteryStateChangeCal public boolean isAodPowerSave() { return false; } + + @Override + public boolean isWirelessCharging() { + return mWirelessCharging; + } + + public void setWirelessCharging(boolean wirelessCharging) { + mWirelessCharging = wirelessCharging; + } } |