Merge "Don't turn on prox when wirelessly charging." into rvc-d1-dev
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -132,7 +132,9 @@ public class BrightLineFalsingManager implements FalsingManager {
|
||||
}
|
||||
|
||||
private void registerSensors() {
|
||||
mProximitySensor.register(mSensorEventListener);
|
||||
if (!mDataProvider.isWirelessCharging()) {
|
||||
mProximitySensor.register(mSensorEventListener);
|
||||
}
|
||||
}
|
||||
|
||||
private void unregisterSensors() {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -140,6 +140,10 @@ public abstract class SysuiTestCase {
|
||||
return null;
|
||||
}
|
||||
|
||||
protected FakeBroadcastDispatcher getFakeBroadcastDispatcher() {
|
||||
return mFakeBroadcastDispatcher;
|
||||
}
|
||||
|
||||
public SysuiTestableContext getContext() {
|
||||
return mContext;
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user