Merge "Don't turn on prox when wirelessly charging." into rvc-d1-dev

This commit is contained in:
Lucas Dupin
2020-07-21 00:25:17 +00:00
committed by Android (Google) Code Review
10 changed files with 92 additions and 28 deletions

View File

@@ -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,

View File

@@ -132,7 +132,9 @@ public class BrightLineFalsingManager implements FalsingManager {
}
private void registerSensors() {
mProximitySensor.register(mSensorEventListener);
if (!mDataProvider.isWirelessCharging()) {
mProximitySensor.register(mSensorEventListener);
}
}
private void unregisterSensors() {

View File

@@ -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;

View File

@@ -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.

View File

@@ -140,6 +140,10 @@ public abstract class SysuiTestCase {
return null;
}
protected FakeBroadcastDispatcher getFakeBroadcastDispatcher() {
return mFakeBroadcastDispatcher;
}
public SysuiTestableContext getContext() {
return mContext;
}

View File

@@ -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,

View File

@@ -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);
}
@@ -82,6 +87,13 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase {
verify(mProximitySensor).register(any(ThresholdSensor.Listener.class));
}
@Test
public void testNoProximityWhenWirelessCharging() {
mFakeBatteryController.setWirelessCharging(true);
mFalsingManager.onScreenTurningOn();
verify(mProximitySensor, never()).register(any(ThresholdSensor.Listener.class));
}
@Test
public void testUnregisterSensor() {
mFalsingManager.onScreenTurningOn();

View File

@@ -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;
}

View File

@@ -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));
}
}

View File

@@ -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;
}
}