Merge "Use DockManager instead of BatteryController for Falsing." into sc-dev

This commit is contained in:
TreeHugger Robot
2021-07-13 13:59:38 +00:00
committed by Android (Google) Code Review
8 changed files with 138 additions and 51 deletions

View File

@@ -33,7 +33,6 @@ import com.android.internal.logging.MetricsLogger;
import com.android.systemui.classifier.FalsingDataProvider.SessionListener; import com.android.systemui.classifier.FalsingDataProvider.SessionListener;
import com.android.systemui.classifier.HistoryTracker.BeliefListener; import com.android.systemui.classifier.HistoryTracker.BeliefListener;
import com.android.systemui.dagger.qualifiers.TestHarness; import com.android.systemui.dagger.qualifiers.TestHarness;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -66,7 +65,6 @@ public class BrightLineFalsingManager implements FalsingManager {
private static final double FALSE_BELIEF_THRESHOLD = 0.9; private static final double FALSE_BELIEF_THRESHOLD = 0.9;
private final FalsingDataProvider mDataProvider; private final FalsingDataProvider mDataProvider;
private final DockManager mDockManager;
private final SingleTapClassifier mSingleTapClassifier; private final SingleTapClassifier mSingleTapClassifier;
private final DoubleTapClassifier mDoubleTapClassifier; private final DoubleTapClassifier mDoubleTapClassifier;
private final HistoryTracker mHistoryTracker; private final HistoryTracker mHistoryTracker;
@@ -173,14 +171,13 @@ public class BrightLineFalsingManager implements FalsingManager {
@Inject @Inject
public BrightLineFalsingManager(FalsingDataProvider falsingDataProvider, public BrightLineFalsingManager(FalsingDataProvider falsingDataProvider,
DockManager dockManager, MetricsLogger metricsLogger, MetricsLogger metricsLogger,
@Named(BRIGHT_LINE_GESTURE_CLASSIFERS) Set<FalsingClassifier> classifiers, @Named(BRIGHT_LINE_GESTURE_CLASSIFERS) Set<FalsingClassifier> classifiers,
SingleTapClassifier singleTapClassifier, DoubleTapClassifier doubleTapClassifier, SingleTapClassifier singleTapClassifier, DoubleTapClassifier doubleTapClassifier,
HistoryTracker historyTracker, KeyguardStateController keyguardStateController, HistoryTracker historyTracker, KeyguardStateController keyguardStateController,
AccessibilityManager accessibilityManager, AccessibilityManager accessibilityManager,
@TestHarness boolean testHarness) { @TestHarness boolean testHarness) {
mDataProvider = falsingDataProvider; mDataProvider = falsingDataProvider;
mDockManager = dockManager;
mMetricsLogger = metricsLogger; mMetricsLogger = metricsLogger;
mClassifiers = classifiers; mClassifiers = classifiers;
mSingleTapClassifier = singleTapClassifier; mSingleTapClassifier = singleTapClassifier;
@@ -332,7 +329,7 @@ public class BrightLineFalsingManager implements FalsingManager {
|| !mKeyguardStateController.isShowing() || !mKeyguardStateController.isShowing()
|| mTestHarness || mTestHarness
|| mDataProvider.isJustUnlockedWithFace() || mDataProvider.isJustUnlockedWithFace()
|| mDockManager.isDocked() || mDataProvider.isDocked()
|| mAccessibilityManager.isEnabled(); || mAccessibilityManager.isEnabled();
} }
@@ -400,7 +397,7 @@ public class BrightLineFalsingManager implements FalsingManager {
ipw.print("mJustUnlockedWithFace="); ipw.print("mJustUnlockedWithFace=");
ipw.println(mDataProvider.isJustUnlockedWithFace() ? 1 : 0); ipw.println(mDataProvider.isJustUnlockedWithFace() ? 1 : 0);
ipw.print("isDocked="); ipw.print("isDocked=");
ipw.println(mDockManager.isDocked() ? 1 : 0); ipw.println(mDataProvider.isDocked() ? 1 : 0);
ipw.print("width="); ipw.print("width=");
ipw.println(mDataProvider.getWidthPixels()); ipw.println(mDataProvider.getWidthPixels());
ipw.print("height="); ipw.print("height=");

View File

@@ -16,6 +16,8 @@
package com.android.systemui.classifier; package com.android.systemui.classifier;
import static com.android.systemui.dock.DockManager.DockEventListener;
import android.hardware.SensorManager; import android.hardware.SensorManager;
import android.hardware.biometrics.BiometricSourceType; import android.hardware.biometrics.BiometricSourceType;
import android.util.Log; import android.util.Log;
@@ -25,9 +27,12 @@ import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Main; import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dock.DockManager;
import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.FalsingManager;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryController.BatteryStateChangeCallback;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.DelayableExecutor; import com.android.systemui.util.concurrency.DelayableExecutor;
import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ProximitySensor;
@@ -53,6 +58,8 @@ class FalsingCollectorImpl implements FalsingCollector {
private final ProximitySensor mProximitySensor; private final ProximitySensor mProximitySensor;
private final StatusBarStateController mStatusBarStateController; private final StatusBarStateController mStatusBarStateController;
private final KeyguardStateController mKeyguardStateController; private final KeyguardStateController mKeyguardStateController;
private final BatteryController mBatteryController;
private final DockManager mDockManager;
private final DelayableExecutor mMainExecutor; private final DelayableExecutor mMainExecutor;
private final SystemClock mSystemClock; private final SystemClock mSystemClock;
@@ -89,12 +96,46 @@ class FalsingCollectorImpl implements FalsingCollector {
} }
}; };
private final BatteryStateChangeCallback mBatteryListener = new BatteryStateChangeCallback() {
@Override
public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
}
@Override
public void onWirelessChargingChanged(boolean isWirelessCharging) {
if (isWirelessCharging || mDockManager.isDocked()) {
mProximitySensor.pause();
} else {
mProximitySensor.resume();
}
}
};
private final DockEventListener mDockEventListener = new DockEventListener() {
@Override
public void onEvent(int event) {
if (event == DockManager.STATE_NONE && !mBatteryController.isWirelessCharging()) {
mProximitySensor.resume();
} else {
mProximitySensor.pause();
}
}
};
@Inject @Inject
FalsingCollectorImpl(FalsingDataProvider falsingDataProvider, FalsingManager falsingManager, FalsingCollectorImpl(
KeyguardUpdateMonitor keyguardUpdateMonitor, HistoryTracker historyTracker, FalsingDataProvider falsingDataProvider,
ProximitySensor proximitySensor, StatusBarStateController statusBarStateController, FalsingManager falsingManager,
KeyguardUpdateMonitor keyguardUpdateMonitor,
HistoryTracker historyTracker,
ProximitySensor proximitySensor,
StatusBarStateController statusBarStateController,
KeyguardStateController keyguardStateController, KeyguardStateController keyguardStateController,
@Main DelayableExecutor mainExecutor, SystemClock systemClock) { BatteryController batteryController,
DockManager dockManager,
@Main DelayableExecutor mainExecutor,
SystemClock systemClock) {
mFalsingDataProvider = falsingDataProvider; mFalsingDataProvider = falsingDataProvider;
mFalsingManager = falsingManager; mFalsingManager = falsingManager;
mKeyguardUpdateMonitor = keyguardUpdateMonitor; mKeyguardUpdateMonitor = keyguardUpdateMonitor;
@@ -102,10 +143,11 @@ class FalsingCollectorImpl implements FalsingCollector {
mProximitySensor = proximitySensor; mProximitySensor = proximitySensor;
mStatusBarStateController = statusBarStateController; mStatusBarStateController = statusBarStateController;
mKeyguardStateController = keyguardStateController; mKeyguardStateController = keyguardStateController;
mBatteryController = batteryController;
mDockManager = dockManager;
mMainExecutor = mainExecutor; mMainExecutor = mainExecutor;
mSystemClock = systemClock; mSystemClock = systemClock;
mProximitySensor.setTag(PROXIMITY_SENSOR_TAG); mProximitySensor.setTag(PROXIMITY_SENSOR_TAG);
mProximitySensor.setDelay(SensorManager.SENSOR_DELAY_GAME); mProximitySensor.setDelay(SensorManager.SENSOR_DELAY_GAME);
@@ -113,6 +155,9 @@ class FalsingCollectorImpl implements FalsingCollector {
mState = mStatusBarStateController.getState(); mState = mStatusBarStateController.getState();
mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateCallback); mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateCallback);
mBatteryController.addCallback(mBatteryListener);
mDockManager.addListener(mDockEventListener);
} }
@Override @Override
@@ -312,6 +357,8 @@ class FalsingCollectorImpl implements FalsingCollector {
unregisterSensors(); unregisterSensors();
mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateCallback); mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateCallback);
mStatusBarStateController.removeCallback(mStatusBarStateListener); mStatusBarStateController.removeCallback(mStatusBarStateListener);
mBatteryController.removeCallback(mBatteryListener);
mDockManager.removeListener(mDockEventListener);
} }
@Override @Override
@@ -351,9 +398,7 @@ class FalsingCollectorImpl implements FalsingCollector {
} }
private void registerSensors() { private void registerSensors() {
if (!mFalsingDataProvider.isWirelessCharging()) { mProximitySensor.register(mSensorEventListener);
mProximitySensor.register(mSensorEventListener);
}
} }
private void unregisterSensors() { private void unregisterSensors() {

View File

@@ -22,6 +22,7 @@ import android.view.MotionEvent.PointerCoords;
import android.view.MotionEvent.PointerProperties; import android.view.MotionEvent.PointerProperties;
import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dock.DockManager;
import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.BatteryController;
import java.util.ArrayList; import java.util.ArrayList;
@@ -40,7 +41,8 @@ public class FalsingDataProvider {
private final int mWidthPixels; private final int mWidthPixels;
private final int mHeightPixels; private final int mHeightPixels;
private final BatteryController mBatteryController; private BatteryController mBatteryController;
private final DockManager mDockManager;
private final float mXdpi; private final float mXdpi;
private final float mYdpi; private final float mYdpi;
private final List<SessionListener> mSessionListeners = new ArrayList<>(); private final List<SessionListener> mSessionListeners = new ArrayList<>();
@@ -59,12 +61,16 @@ public class FalsingDataProvider {
private boolean mJustUnlockedWithFace; private boolean mJustUnlockedWithFace;
@Inject @Inject
public FalsingDataProvider(DisplayMetrics displayMetrics, BatteryController batteryController) { public FalsingDataProvider(
DisplayMetrics displayMetrics,
BatteryController batteryController,
DockManager dockManager) {
mXdpi = displayMetrics.xdpi; mXdpi = displayMetrics.xdpi;
mYdpi = displayMetrics.ydpi; mYdpi = displayMetrics.ydpi;
mWidthPixels = displayMetrics.widthPixels; mWidthPixels = displayMetrics.widthPixels;
mHeightPixels = displayMetrics.heightPixels; mHeightPixels = displayMetrics.heightPixels;
mBatteryController = batteryController; mBatteryController = batteryController;
mDockManager = dockManager;
FalsingClassifier.logInfo("xdpi, ydpi: " + getXdpi() + ", " + getYdpi()); FalsingClassifier.logInfo("xdpi, ydpi: " + getXdpi() + ", " + getYdpi());
FalsingClassifier.logInfo("width, height: " + getWidthPixels() + ", " + getHeightPixels()); FalsingClassifier.logInfo("width, height: " + getWidthPixels() + ", " + getHeightPixels());
@@ -219,11 +225,6 @@ public class FalsingDataProvider {
return mLastMotionEvent.getY() < mFirstRecentMotionEvent.getY(); return mLastMotionEvent.getY() < mFirstRecentMotionEvent.getY();
} }
/** Returns true if phone is being charged without a cable. */
public boolean isWirelessCharging() {
return mBatteryController.isWirelessCharging();
}
private void recalculateData() { private void recalculateData() {
if (!mDirty) { if (!mDirty) {
return; return;
@@ -357,6 +358,11 @@ public class FalsingDataProvider {
mJustUnlockedWithFace = justUnlockedWithFace; mJustUnlockedWithFace = justUnlockedWithFace;
} }
/** Returns true if phone is sitting in a dock or is wirelessly charging. */
public boolean isDocked() {
return mBatteryController.isWirelessCharging() || mDockManager.isDocked();
}
/** Implement to be alerted abotu the beginning and ending of falsing tracking. */ /** Implement to be alerted abotu the beginning and ending of falsing tracking. */
public interface SessionListener { public interface SessionListener {
/** Called when the lock screen is shown and falsing-tracking begins. */ /** Called when the lock screen is shown and falsing-tracking begins. */

View File

@@ -39,7 +39,6 @@ import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.testing.FakeMetricsLogger; import com.android.internal.logging.testing.FakeMetricsLogger;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.classifier.FalsingDataProvider.GestureFinalizedListener; import com.android.systemui.classifier.FalsingDataProvider.GestureFinalizedListener;
import com.android.systemui.dock.DockManagerFake;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.time.FakeSystemClock; import com.android.systemui.util.time.FakeSystemClock;
@@ -62,7 +61,6 @@ public class BrightLineClassifierTest extends SysuiTestCase {
private BrightLineFalsingManager mBrightLineFalsingManager; private BrightLineFalsingManager mBrightLineFalsingManager;
@Mock @Mock
private FalsingDataProvider mFalsingDataProvider; private FalsingDataProvider mFalsingDataProvider;
private final DockManagerFake mDockManager = new DockManagerFake();
private final MetricsLogger mMetricsLogger = new FakeMetricsLogger(); private final MetricsLogger mMetricsLogger = new FakeMetricsLogger();
private final Set<FalsingClassifier> mClassifiers = new HashSet<>(); private final Set<FalsingClassifier> mClassifiers = new HashSet<>();
@Mock @Mock
@@ -102,7 +100,7 @@ public class BrightLineClassifierTest extends SysuiTestCase {
mClassifiers.add(mClassifierB); mClassifiers.add(mClassifierB);
when(mFalsingDataProvider.getRecentMotionEvents()).thenReturn(mMotionEventList); when(mFalsingDataProvider.getRecentMotionEvents()).thenReturn(mMotionEventList);
when(mKeyguardStateController.isShowing()).thenReturn(true); when(mKeyguardStateController.isShowing()).thenReturn(true);
mBrightLineFalsingManager = new BrightLineFalsingManager(mFalsingDataProvider, mDockManager, mBrightLineFalsingManager = new BrightLineFalsingManager(mFalsingDataProvider,
mMetricsLogger, mClassifiers, mSingleTapClassfier, mDoubleTapClassifier, mMetricsLogger, mClassifiers, mSingleTapClassfier, mDoubleTapClassifier,
mHistoryTracker, mKeyguardStateController, mAccessibilityManager, mHistoryTracker, mKeyguardStateController, mAccessibilityManager,
false); false);
@@ -168,7 +166,7 @@ public class BrightLineClassifierTest extends SysuiTestCase {
// Even when the classifiers report a false, we should allow. // Even when the classifiers report a false, we should allow.
when(mClassifierA.classifyGesture(anyInt(), anyDouble(), anyDouble())) when(mClassifierA.classifyGesture(anyInt(), anyDouble(), anyDouble()))
.thenReturn(mPassedResult); .thenReturn(mPassedResult);
mDockManager.setIsDocked(true); when(mFalsingDataProvider.isDocked()).thenReturn(true);
assertThat(mBrightLineFalsingManager.isFalseTouch(0)).isFalse(); assertThat(mBrightLineFalsingManager.isFalseTouch(0)).isFalse();
} }

View File

@@ -32,7 +32,6 @@ import androidx.test.filters.SmallTest;
import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.testing.FakeMetricsLogger; import com.android.internal.logging.testing.FakeMetricsLogger;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.dock.DockManagerFake;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import org.junit.Before; import org.junit.Before;
@@ -52,7 +51,6 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase {
private BrightLineFalsingManager mBrightLineFalsingManager; private BrightLineFalsingManager mBrightLineFalsingManager;
@Mock @Mock
private FalsingDataProvider mFalsingDataProvider; private FalsingDataProvider mFalsingDataProvider;
private final DockManagerFake mDockManager = new DockManagerFake();
private final MetricsLogger mMetricsLogger = new FakeMetricsLogger(); private final MetricsLogger mMetricsLogger = new FakeMetricsLogger();
private final Set<FalsingClassifier> mClassifiers = new HashSet<>(); private final Set<FalsingClassifier> mClassifiers = new HashSet<>();
@Mock @Mock
@@ -84,7 +82,7 @@ public class BrightLineFalsingManagerTest extends SysuiTestCase {
mClassifiers.add(mClassifierA); mClassifiers.add(mClassifierA);
when(mFalsingDataProvider.getRecentMotionEvents()).thenReturn(mMotionEventList); when(mFalsingDataProvider.getRecentMotionEvents()).thenReturn(mMotionEventList);
when(mKeyguardStateController.isShowing()).thenReturn(true); when(mKeyguardStateController.isShowing()).thenReturn(true);
mBrightLineFalsingManager = new BrightLineFalsingManager(mFalsingDataProvider, mDockManager, mBrightLineFalsingManager = new BrightLineFalsingManager(mFalsingDataProvider,
mMetricsLogger, mClassifiers, mSingleTapClassifier, mDoubleTapClassifier, mMetricsLogger, mClassifiers, mSingleTapClassifier, mDoubleTapClassifier,
mHistoryTracker, mKeyguardStateController, mAccessibilityManager, mHistoryTracker, mKeyguardStateController, mAccessibilityManager,
false); false);

View File

@@ -19,30 +19,35 @@ package com.android.systemui.classifier;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
import android.view.MotionEvent; import android.view.MotionEvent;
import com.android.systemui.utils.leaks.FakeBatteryController; import com.android.systemui.SysuiTestCase;
import com.android.systemui.utils.leaks.LeakCheckedTest; import com.android.systemui.dock.DockManagerFake;
import com.android.systemui.statusbar.policy.BatteryController;
import org.junit.After; import org.junit.After;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class ClassifierTest extends LeakCheckedTest { public class ClassifierTest extends SysuiTestCase {
private FalsingDataProvider mDataProvider; private FalsingDataProvider mDataProvider;
private List<MotionEvent> mMotionEvents = new ArrayList<>(); private final List<MotionEvent> mMotionEvents = new ArrayList<>();
private float mOffsetX = 0; private float mOffsetX = 0;
private float mOffsetY = 0; private float mOffsetY = 0;
private FakeBatteryController mFakeBatteryController; @Mock
private BatteryController mBatteryController;
private final DockManagerFake mDockManager = new DockManagerFake();
public void setup() { public void setup() {
MockitoAnnotations.initMocks(this);
DisplayMetrics displayMetrics = new DisplayMetrics(); DisplayMetrics displayMetrics = new DisplayMetrics();
displayMetrics.xdpi = 100; displayMetrics.xdpi = 100;
displayMetrics.ydpi = 100; displayMetrics.ydpi = 100;
displayMetrics.widthPixels = 1000; displayMetrics.widthPixels = 1000;
displayMetrics.heightPixels = 1000; displayMetrics.heightPixels = 1000;
mFakeBatteryController = new FakeBatteryController(getLeakCheck()); mDataProvider = new FalsingDataProvider(displayMetrics, mBatteryController, mDockManager);
mDataProvider = new FalsingDataProvider(displayMetrics, mFakeBatteryController);
} }
@After @After
@@ -54,10 +59,6 @@ public class ClassifierTest extends LeakCheckedTest {
return mDataProvider; return mDataProvider;
} }
FakeBatteryController getFakeBatteryController() {
return mFakeBatteryController;
}
protected void setOffsetX(float offsetX) { protected void setOffsetX(float offsetX) {
mOffsetX = offsetX; mOffsetX = offsetX;
} }

View File

@@ -32,9 +32,12 @@ import androidx.test.filters.SmallTest;
import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.systemui.SysuiTestCase; import com.android.systemui.SysuiTestCase;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManagerFake;
import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.SysuiStatusBarStateController; import com.android.systemui.statusbar.SysuiStatusBarStateController;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.concurrency.FakeExecutor; import com.android.systemui.util.concurrency.FakeExecutor;
import com.android.systemui.util.sensors.ProximitySensor; import com.android.systemui.util.sensors.ProximitySensor;
@@ -67,6 +70,9 @@ public class FalsingCollectorImplTest extends SysuiTestCase {
private SysuiStatusBarStateController mStatusBarStateController; private SysuiStatusBarStateController mStatusBarStateController;
@Mock @Mock
private KeyguardStateController mKeyguardStateController; private KeyguardStateController mKeyguardStateController;
@Mock
private BatteryController mBatteryController;
private final DockManagerFake mDockManager = new DockManagerFake();
private final FakeSystemClock mFakeSystemClock = new FakeSystemClock(); private final FakeSystemClock mFakeSystemClock = new FakeSystemClock();
private final FakeExecutor mFakeExecutor = new FakeExecutor(mFakeSystemClock); private final FakeExecutor mFakeExecutor = new FakeExecutor(mFakeSystemClock);
@@ -79,8 +85,8 @@ public class FalsingCollectorImplTest extends SysuiTestCase {
mFalsingCollector = new FalsingCollectorImpl(mFalsingDataProvider, mFalsingManager, mFalsingCollector = new FalsingCollectorImpl(mFalsingDataProvider, mFalsingManager,
mKeyguardUpdateMonitor, mHistoryTracker, mProximitySensor, mKeyguardUpdateMonitor, mHistoryTracker, mProximitySensor,
mStatusBarStateController, mKeyguardStateController, mFakeExecutor, mStatusBarStateController, mKeyguardStateController, mBatteryController,
mFakeSystemClock); mDockManager, mFakeExecutor, mFakeSystemClock);
} }
@Test @Test
@@ -91,9 +97,32 @@ public class FalsingCollectorImplTest extends SysuiTestCase {
@Test @Test
public void testNoProximityWhenWirelessCharging() { public void testNoProximityWhenWirelessCharging() {
when(mFalsingDataProvider.isWirelessCharging()).thenReturn(true); ArgumentCaptor<BatteryController.BatteryStateChangeCallback> batteryCallbackCaptor =
mFalsingCollector.onScreenTurningOn(); ArgumentCaptor.forClass(BatteryController.BatteryStateChangeCallback.class);
verify(mProximitySensor, never()).register(any(ThresholdSensor.Listener.class)); verify(mBatteryController).addCallback(batteryCallbackCaptor.capture());
batteryCallbackCaptor.getValue().onWirelessChargingChanged(true);
verify(mProximitySensor).pause();
}
@Test
public void testProximityWhenOffWirelessCharging() {
ArgumentCaptor<BatteryController.BatteryStateChangeCallback> batteryCallbackCaptor =
ArgumentCaptor.forClass(BatteryController.BatteryStateChangeCallback.class);
verify(mBatteryController).addCallback(batteryCallbackCaptor.capture());
batteryCallbackCaptor.getValue().onWirelessChargingChanged(false);
verify(mProximitySensor).resume();
}
@Test
public void testNoProximityWhenDocked() {
mDockManager.setDockEvent(DockManager.STATE_DOCKED);
verify(mProximitySensor).pause();
}
@Test
public void testProximityWhenUndocked() {
mDockManager.setDockEvent(DockManager.STATE_NONE);
verify(mProximitySensor).resume();
} }
@Test @Test

View File

@@ -22,6 +22,7 @@ import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never; import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.testing.AndroidTestingRunner; import android.testing.AndroidTestingRunner;
import android.util.DisplayMetrics; import android.util.DisplayMetrics;
@@ -30,12 +31,15 @@ import android.view.MotionEvent;
import androidx.test.filters.SmallTest; import androidx.test.filters.SmallTest;
import com.android.systemui.classifier.FalsingDataProvider.GestureFinalizedListener; import com.android.systemui.classifier.FalsingDataProvider.GestureFinalizedListener;
import com.android.systemui.utils.leaks.FakeBatteryController; import com.android.systemui.dock.DockManagerFake;
import com.android.systemui.statusbar.policy.BatteryController;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.List; import java.util.List;
@@ -43,19 +47,21 @@ import java.util.List;
@RunWith(AndroidTestingRunner.class) @RunWith(AndroidTestingRunner.class)
public class FalsingDataProviderTest extends ClassifierTest { public class FalsingDataProviderTest extends ClassifierTest {
private FakeBatteryController mFakeBatteryController;
private FalsingDataProvider mDataProvider; private FalsingDataProvider mDataProvider;
@Mock
private BatteryController mBatteryController;
private final DockManagerFake mDockManager = new DockManagerFake();
@Before @Before
public void setup() { public void setup() {
super.setup(); super.setup();
mFakeBatteryController = new FakeBatteryController(getLeakCheck()); MockitoAnnotations.initMocks(this);
DisplayMetrics displayMetrics = new DisplayMetrics(); DisplayMetrics displayMetrics = new DisplayMetrics();
displayMetrics.xdpi = 100; displayMetrics.xdpi = 100;
displayMetrics.ydpi = 100; displayMetrics.ydpi = 100;
displayMetrics.widthPixels = 1000; displayMetrics.widthPixels = 1000;
displayMetrics.heightPixels = 1000; displayMetrics.heightPixels = 1000;
mDataProvider = new FalsingDataProvider(displayMetrics, mFakeBatteryController); mDataProvider = new FalsingDataProvider(displayMetrics, mBatteryController, mDockManager);
} }
@After @After
@@ -250,10 +256,17 @@ public class FalsingDataProviderTest extends ClassifierTest {
@Test @Test
public void test_isWirelessCharging() { public void test_isWirelessCharging() {
assertThat(mDataProvider.isWirelessCharging()).isFalse(); assertThat(mDataProvider.isDocked()).isFalse();
mFakeBatteryController.setWirelessCharging(true); when(mBatteryController.isWirelessCharging()).thenReturn(true);
assertThat(mDataProvider.isWirelessCharging()).isTrue(); assertThat(mDataProvider.isDocked()).isTrue();
}
@Test
public void test_isDocked() {
assertThat(mDataProvider.isDocked()).isFalse();
mDockManager.setIsDocked(true);
assertThat(mDataProvider.isDocked()).isTrue();
} }
@Test @Test