Merge "SysUI co-ex updates" into sc-dev

This commit is contained in:
TreeHugger Robot
2021-07-18 21:20:50 +00:00
committed by Android (Google) Code Review
5 changed files with 64 additions and 33 deletions

View File

@@ -1428,32 +1428,42 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
final FaceManager.AuthenticationCallback mFaceAuthenticationCallback final FaceManager.AuthenticationCallback mFaceAuthenticationCallback
= new FaceManager.AuthenticationCallback() { = new FaceManager.AuthenticationCallback() {
@Override @Override
public void onAuthenticationFailed() { public void onAuthenticationFailed() {
handleFaceAuthFailed(); handleFaceAuthFailed();
} if (mKeyguardBypassController != null) {
mKeyguardBypassController.setUserHasDeviceEntryIntent(false);
}
}
@Override @Override
public void onAuthenticationSucceeded(FaceManager.AuthenticationResult result) { public void onAuthenticationSucceeded(FaceManager.AuthenticationResult result) {
Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded"); Trace.beginSection("KeyguardUpdateMonitor#onAuthenticationSucceeded");
handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric()); handleFaceAuthenticated(result.getUserId(), result.isStrongBiometric());
Trace.endSection(); Trace.endSection();
}
@Override if (mKeyguardBypassController != null) {
public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) { mKeyguardBypassController.setUserHasDeviceEntryIntent(false);
handleFaceHelp(helpMsgId, helpString.toString()); }
} }
@Override @Override
public void onAuthenticationError(int errMsgId, CharSequence errString) { public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
handleFaceError(errMsgId, errString.toString()); handleFaceHelp(helpMsgId, helpString.toString());
} }
@Override @Override
public void onAuthenticationAcquired(int acquireInfo) { public void onAuthenticationError(int errMsgId, CharSequence errString) {
handleFaceAcquired(acquireInfo); handleFaceError(errMsgId, errString.toString());
} if (mKeyguardBypassController != null) {
mKeyguardBypassController.setUserHasDeviceEntryIntent(false);
}
}
@Override
public void onAuthenticationAcquired(int acquireInfo) {
handleFaceAcquired(acquireInfo);
}
}; };
private CancellationSignal mFingerprintCancelSignal; private CancellationSignal mFingerprintCancelSignal;

View File

@@ -68,6 +68,7 @@ import com.android.systemui.keyguard.ScreenLifecycle;
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.LockscreenShadeTransitionController; import com.android.systemui.statusbar.LockscreenShadeTransitionController;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -120,6 +121,7 @@ public class UdfpsController implements DozeReceiver {
@NonNull private final AccessibilityManager mAccessibilityManager; @NonNull private final AccessibilityManager mAccessibilityManager;
@NonNull private final LockscreenShadeTransitionController mLockscreenShadeTransitionController; @NonNull private final LockscreenShadeTransitionController mLockscreenShadeTransitionController;
@Nullable private final UdfpsHbmProvider mHbmProvider; @Nullable private final UdfpsHbmProvider mHbmProvider;
@NonNull private final KeyguardBypassController mKeyguardBypassController;
@VisibleForTesting @NonNull final BiometricOrientationEventListener mOrientationListener; @VisibleForTesting @NonNull final BiometricOrientationEventListener mOrientationListener;
// Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple // Currently the UdfpsController supports a single UDFPS sensor. If devices have multiple
// sensors, this, in addition to a lot of the code here, will be updated. // sensors, this, in addition to a lot of the code here, will be updated.
@@ -397,7 +399,10 @@ public class UdfpsController implements DozeReceiver {
handled = true; handled = true;
} }
if ((withinSensorArea || fromUdfpsView) && shouldTryToDismissKeyguard()) { if ((withinSensorArea || fromUdfpsView) && shouldTryToDismissKeyguard()) {
Log.v(TAG, "onTouch | dismiss keyguard from ACTION_DOWN"); Log.v(TAG, "onTouch | dismiss keyguard ACTION_DOWN");
if (!mOnFingerDown) {
playStartHaptic();
}
mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */); mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */);
mAttemptedToDismissKeyguard = true; mAttemptedToDismissKeyguard = true;
} }
@@ -414,6 +419,16 @@ public class UdfpsController implements DozeReceiver {
boolean actionMoveWithinSensorArea = boolean actionMoveWithinSensorArea =
isWithinSensorArea(udfpsView, event.getX(idx), event.getY(idx), isWithinSensorArea(udfpsView, event.getX(idx), event.getY(idx),
fromUdfpsView); fromUdfpsView);
if ((fromUdfpsView || actionMoveWithinSensorArea)
&& shouldTryToDismissKeyguard()) {
Log.v(TAG, "onTouch | dismiss keyguard ACTION_MOVE");
if (!mOnFingerDown) {
playStartHaptic();
}
mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */);
mAttemptedToDismissKeyguard = true;
break;
}
if (actionMoveWithinSensorArea) { if (actionMoveWithinSensorArea) {
if (mVelocityTracker == null) { if (mVelocityTracker == null) {
// touches could be injected, so the velocity tracker may not have // touches could be injected, so the velocity tracker may not have
@@ -449,12 +464,6 @@ public class UdfpsController implements DozeReceiver {
Log.v(TAG, "onTouch | finger outside"); Log.v(TAG, "onTouch | finger outside");
onFingerUp(); onFingerUp();
} }
if ((fromUdfpsView || actionMoveWithinSensorArea)
&& shouldTryToDismissKeyguard()) {
Log.v(TAG, "onTouch | dismiss keyguard from ACTION_MOVE");
mKeyguardViewManager.notifyKeyguardAuthenticated(false /* strongAuth */);
mAttemptedToDismissKeyguard = true;
}
} }
Trace.endSection(); Trace.endSection();
break; break;
@@ -509,7 +518,8 @@ public class UdfpsController implements DozeReceiver {
@Nullable Vibrator vibrator, @Nullable Vibrator vibrator,
@NonNull UdfpsHapticsSimulator udfpsHapticsSimulator, @NonNull UdfpsHapticsSimulator udfpsHapticsSimulator,
@NonNull Optional<UdfpsHbmProvider> hbmProvider, @NonNull Optional<UdfpsHbmProvider> hbmProvider,
@NonNull KeyguardStateController keyguardStateController) { @NonNull KeyguardStateController keyguardStateController,
@NonNull KeyguardBypassController keyguardBypassController) {
mContext = context; mContext = context;
mExecution = execution; mExecution = execution;
// TODO (b/185124905): inject main handler and vibrator once done prototyping // TODO (b/185124905): inject main handler and vibrator once done prototyping
@@ -539,6 +549,7 @@ public class UdfpsController implements DozeReceiver {
onOrientationChanged(); onOrientationChanged();
return Unit.INSTANCE; return Unit.INSTANCE;
}); });
mKeyguardBypassController = keyguardBypassController;
mSensorProps = findFirstUdfps(); mSensorProps = findFirstUdfps();
// At least one UDFPS sensor exists // At least one UDFPS sensor exists
@@ -863,12 +874,17 @@ public class UdfpsController implements DozeReceiver {
private void onFingerDown(int x, int y, float minor, float major) { private void onFingerDown(int x, int y, float minor, float major) {
mExecution.assertIsMainThread(); mExecution.assertIsMainThread();
mKeyguardBypassController.setUserHasDeviceEntryIntent(true);
if (mView == null) { if (mView == null) {
Log.w(TAG, "Null view in onFingerDown"); Log.w(TAG, "Null view in onFingerDown");
return; return;
} }
if (!mOnFingerDown) { if (!mOnFingerDown) {
playStartHaptic(); playStartHaptic();
if (!mKeyguardUpdateMonitor.isFaceDetectionRunning()) {
mKeyguardUpdateMonitor.requestFaceAuth(/* userInitiatedRequest */ false);
}
} }
mOnFingerDown = true; mOnFingerDown = true;
mFingerprintManager.onPointerDown(mSensorProps.sensorId, x, y, minor, major); mFingerprintManager.onPointerDown(mSensorProps.sensorId, x, y, minor, major);

View File

@@ -564,8 +564,8 @@ public class BiometricUnlockController extends KeyguardUpdateMonitorCallback imp
boolean unlockingAllowed = boolean unlockingAllowed =
mUpdateMonitor.isUnlockingWithBiometricAllowed(isStrongBiometric); mUpdateMonitor.isUnlockingWithBiometricAllowed(isStrongBiometric);
boolean deviceDreaming = mUpdateMonitor.isDreaming(); boolean deviceDreaming = mUpdateMonitor.isDreaming();
boolean bypass = mKeyguardBypassController.getBypassEnabled(); boolean bypass = mKeyguardBypassController.getBypassEnabled()
|| mKeyguardBypassController.getUserHasDeviceEntryIntent();
if (!mUpdateMonitor.isDeviceInteractive()) { if (!mUpdateMonitor.isDeviceInteractive()) {
if (!mKeyguardViewController.isShowing()) { if (!mKeyguardViewController.isShowing()) {
return bypass ? MODE_WAKE_AND_UNLOCK : MODE_ONLY_WAKE; return bypass ? MODE_WAKE_AND_UNLOCK : MODE_ONLY_WAKE;

View File

@@ -43,6 +43,7 @@ open class KeyguardBypassController : Dumpable, StackScrollAlgorithm.BypassContr
@BypassOverride private val bypassOverride: Int @BypassOverride private val bypassOverride: Int
private var hasFaceFeature: Boolean private var hasFaceFeature: Boolean
private var pendingUnlock: PendingUnlock? = null private var pendingUnlock: PendingUnlock? = null
var userHasDeviceEntryIntent: Boolean = false // ie: attempted udfps auth
@IntDef( @IntDef(
FACE_UNLOCK_BYPASS_NO_OVERRIDE, FACE_UNLOCK_BYPASS_NO_OVERRIDE,

View File

@@ -59,6 +59,7 @@ import com.android.systemui.keyguard.ScreenLifecycle;
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.LockscreenShadeTransitionController; import com.android.systemui.statusbar.LockscreenShadeTransitionController;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
@@ -136,6 +137,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
private UdfpsHapticsSimulator mUdfpsHapticsSimulator; private UdfpsHapticsSimulator mUdfpsHapticsSimulator;
@Mock @Mock
private KeyguardStateController mKeyguardStateController; private KeyguardStateController mKeyguardStateController;
@Mock
private KeyguardBypassController mKeyguardBypassController;
private FakeExecutor mFgExecutor; private FakeExecutor mFgExecutor;
@@ -204,7 +207,8 @@ public class UdfpsControllerTest extends SysuiTestCase {
mVibrator, mVibrator,
mUdfpsHapticsSimulator, mUdfpsHapticsSimulator,
Optional.of(mHbmProvider), Optional.of(mHbmProvider),
mKeyguardStateController); mKeyguardStateController,
mKeyguardBypassController);
verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture()); verify(mFingerprintManager).setUdfpsOverlayController(mOverlayCaptor.capture());
mOverlayController = mOverlayCaptor.getValue(); mOverlayController = mOverlayCaptor.getValue();
verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture()); verify(mScreenLifecycle).addObserver(mScreenObserverCaptor.capture());