Merge "Cancel AodTimeoutAction when display is unconfigured." into tm-qpr-dev am: 7e64429d94
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/20105620 Change-Id: Ib00fbf87e254bad732dca6d493b04b88804ca4f6 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -245,7 +245,7 @@ public class UdfpsController implements DozeReceiver {
|
|||||||
mAcquiredReceived = true;
|
mAcquiredReceived = true;
|
||||||
final UdfpsView view = mOverlay.getOverlayView();
|
final UdfpsView view = mOverlay.getOverlayView();
|
||||||
if (view != null) {
|
if (view != null) {
|
||||||
view.unconfigureDisplay();
|
unconfigureDisplay(view);
|
||||||
}
|
}
|
||||||
if (acquiredGood) {
|
if (acquiredGood) {
|
||||||
mOverlay.onAcquiredGood();
|
mOverlay.onAcquiredGood();
|
||||||
@@ -735,6 +735,19 @@ public class UdfpsController implements DozeReceiver {
|
|||||||
|
|
||||||
mOverlay = null;
|
mOverlay = null;
|
||||||
mOrientationListener.disable();
|
mOrientationListener.disable();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void unconfigureDisplay(@NonNull UdfpsView view) {
|
||||||
|
if (view.isDisplayConfigured()) {
|
||||||
|
view.unconfigureDisplay();
|
||||||
|
|
||||||
|
if (mCancelAodTimeoutAction != null) {
|
||||||
|
mCancelAodTimeoutAction.run();
|
||||||
|
mCancelAodTimeoutAction = null;
|
||||||
|
}
|
||||||
|
mIsAodInterruptActive = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -810,12 +823,12 @@ public class UdfpsController implements DozeReceiver {
|
|||||||
* sensors, this can result in illumination persisting for longer than necessary.
|
* sensors, this can result in illumination persisting for longer than necessary.
|
||||||
*/
|
*/
|
||||||
void onCancelUdfps() {
|
void onCancelUdfps() {
|
||||||
if (mOverlay != null && mOverlay.getOverlayView() != null) {
|
|
||||||
onFingerUp(mOverlay.getRequestId(), mOverlay.getOverlayView());
|
|
||||||
}
|
|
||||||
if (!mIsAodInterruptActive) {
|
if (!mIsAodInterruptActive) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (mOverlay != null && mOverlay.getOverlayView() != null) {
|
||||||
|
onFingerUp(mOverlay.getRequestId(), mOverlay.getOverlayView());
|
||||||
|
}
|
||||||
if (mCancelAodTimeoutAction != null) {
|
if (mCancelAodTimeoutAction != null) {
|
||||||
mCancelAodTimeoutAction.run();
|
mCancelAodTimeoutAction.run();
|
||||||
mCancelAodTimeoutAction = null;
|
mCancelAodTimeoutAction = null;
|
||||||
@@ -909,15 +922,8 @@ public class UdfpsController implements DozeReceiver {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
mOnFingerDown = false;
|
mOnFingerDown = false;
|
||||||
if (view.isDisplayConfigured()) {
|
unconfigureDisplay(view);
|
||||||
view.unconfigureDisplay();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mCancelAodTimeoutAction != null) {
|
|
||||||
mCancelAodTimeoutAction.run();
|
|
||||||
mCancelAodTimeoutAction = null;
|
|
||||||
}
|
|
||||||
mIsAodInterruptActive = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -38,6 +38,7 @@ import static org.mockito.Mockito.verify;
|
|||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
|
import android.hardware.biometrics.BiometricFingerprintConstants;
|
||||||
import android.hardware.biometrics.BiometricOverlayConstants;
|
import android.hardware.biometrics.BiometricOverlayConstants;
|
||||||
import android.hardware.biometrics.ComponentInfoInternal;
|
import android.hardware.biometrics.ComponentInfoInternal;
|
||||||
import android.hardware.biometrics.SensorProperties;
|
import android.hardware.biometrics.SensorProperties;
|
||||||
@@ -688,7 +689,7 @@ public class UdfpsControllerTest extends SysuiTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void aodInterruptCancelTimeoutActionWhenFingerUp() throws RemoteException {
|
public void aodInterruptCancelTimeoutActionOnFingerUp() throws RemoteException {
|
||||||
when(mUdfpsView.isWithinSensorArea(anyFloat(), anyFloat())).thenReturn(true);
|
when(mUdfpsView.isWithinSensorArea(anyFloat(), anyFloat())).thenReturn(true);
|
||||||
when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true);
|
when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true);
|
||||||
|
|
||||||
@@ -739,6 +740,56 @@ public class UdfpsControllerTest extends SysuiTestCase {
|
|||||||
verify(mUdfpsView, times(1)).unconfigureDisplay();
|
verify(mUdfpsView, times(1)).unconfigureDisplay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void aodInterruptCancelTimeoutActionOnAcquired() throws RemoteException {
|
||||||
|
when(mUdfpsView.isWithinSensorArea(anyFloat(), anyFloat())).thenReturn(true);
|
||||||
|
when(mKeyguardUpdateMonitor.isFingerprintDetectionRunning()).thenReturn(true);
|
||||||
|
|
||||||
|
// GIVEN AOD interrupt
|
||||||
|
mOverlayController.showUdfpsOverlay(TEST_REQUEST_ID, TEST_UDFPS_SENSOR_ID,
|
||||||
|
BiometricOverlayConstants.REASON_AUTH_KEYGUARD, mUdfpsOverlayControllerCallback);
|
||||||
|
mScreenObserver.onScreenTurnedOn();
|
||||||
|
mFgExecutor.runAllReady();
|
||||||
|
mUdfpsController.onAodInterrupt(0, 0, 0f, 0f);
|
||||||
|
mFgExecutor.runAllReady();
|
||||||
|
|
||||||
|
// Configure UdfpsView to accept the acquired event
|
||||||
|
when(mUdfpsView.isDisplayConfigured()).thenReturn(true);
|
||||||
|
|
||||||
|
// WHEN acquired is received
|
||||||
|
mOverlayController.onAcquired(TEST_UDFPS_SENSOR_ID,
|
||||||
|
BiometricFingerprintConstants.FINGERPRINT_ACQUIRED_GOOD);
|
||||||
|
|
||||||
|
// Configure UdfpsView to accept the ACTION_DOWN event
|
||||||
|
when(mUdfpsView.isDisplayConfigured()).thenReturn(false);
|
||||||
|
|
||||||
|
// WHEN ACTION_DOWN is received
|
||||||
|
verify(mUdfpsView).setOnTouchListener(mTouchListenerCaptor.capture());
|
||||||
|
MotionEvent downEvent = MotionEvent.obtain(0, 0, ACTION_DOWN, 0, 0, 0);
|
||||||
|
mTouchListenerCaptor.getValue().onTouch(mUdfpsView, downEvent);
|
||||||
|
mBiometricsExecutor.runAllReady();
|
||||||
|
downEvent.recycle();
|
||||||
|
|
||||||
|
// WHEN ACTION_MOVE is received
|
||||||
|
MotionEvent moveEvent = MotionEvent.obtain(0, 0, MotionEvent.ACTION_MOVE, 0, 0, 0);
|
||||||
|
mTouchListenerCaptor.getValue().onTouch(mUdfpsView, moveEvent);
|
||||||
|
mBiometricsExecutor.runAllReady();
|
||||||
|
moveEvent.recycle();
|
||||||
|
mFgExecutor.runAllReady();
|
||||||
|
|
||||||
|
// Configure UdfpsView to accept the finger up event
|
||||||
|
when(mUdfpsView.isDisplayConfigured()).thenReturn(true);
|
||||||
|
|
||||||
|
// WHEN it times out
|
||||||
|
mFgExecutor.advanceClockToNext();
|
||||||
|
mFgExecutor.runAllReady();
|
||||||
|
|
||||||
|
// THEN the display should be unconfigured once. If the timeout action is not
|
||||||
|
// cancelled, the display would be unconfigured twice which would cause two
|
||||||
|
// FP attempts.
|
||||||
|
verify(mUdfpsView, times(1)).unconfigureDisplay();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void aodInterruptScreenOff() throws RemoteException {
|
public void aodInterruptScreenOff() throws RemoteException {
|
||||||
// GIVEN screen off
|
// GIVEN screen off
|
||||||
|
|||||||
Reference in New Issue
Block a user