Merge "Udfps icon, udfps bouncer, and lockicon/button bug fixes" into sc-dev

This commit is contained in:
Beverly Tai
2021-05-21 01:11:16 +00:00
committed by Android (Google) Code Review
5 changed files with 71 additions and 51 deletions

View File

@@ -2145,7 +2145,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
&& !isEncryptedOrLockdown(getCurrentUser()) && !isEncryptedOrLockdown(getCurrentUser())
&& !userNeedsStrongAuth() && !userNeedsStrongAuth()
&& userDoesNotHaveTrust); && userDoesNotHaveTrust);
return shouldListenKeyguardState && shouldListenUserState && shouldListenBouncerState return shouldListenKeyguardState && shouldListenUserState && shouldListenBouncerState
&& shouldListenUdfpsState; && shouldListenUdfpsState;
} }
@@ -3270,7 +3269,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener, Dumpab
pw.println(" disabled(DPM)=" + isFingerprintDisabled(userId)); pw.println(" disabled(DPM)=" + isFingerprintDisabled(userId));
pw.println(" possible=" + isUnlockWithFingerprintPossible(userId)); pw.println(" possible=" + isUnlockWithFingerprintPossible(userId));
pw.println(" listening: actual=" + mFingerprintRunningState pw.println(" listening: actual=" + mFingerprintRunningState
+ " expected=" + (shouldListenForFingerprint(false) ? 1 : 0)); + " expected=" + (shouldListenForFingerprint(isUdfpsEnrolled()) ? 1 : 0));
pw.println(" strongAuthFlags=" + Integer.toHexString(strongAuthFlags)); pw.println(" strongAuthFlags=" + Integer.toHexString(strongAuthFlags));
pw.println(" trustManaged=" + getUserTrustIsManaged(userId)); pw.println(" trustManaged=" + getUserTrustIsManaged(userId));
pw.println(" udfpsEnrolled=" + isUdfpsEnrolled()); pw.println(" udfpsEnrolled=" + isUdfpsEnrolled());

View File

@@ -40,6 +40,7 @@ import com.android.settingslib.Utils;
import com.android.systemui.Dumpable; import com.android.systemui.Dumpable;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.biometrics.AuthController; import com.android.systemui.biometrics.AuthController;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dump.DumpManager; import com.android.systemui.dump.DumpManager;
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;
@@ -48,6 +49,7 @@ import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.ViewController; import com.android.systemui.util.ViewController;
import com.android.systemui.util.concurrency.DelayableExecutor;
import java.io.FileDescriptor; import java.io.FileDescriptor;
import java.io.PrintWriter; import java.io.PrintWriter;
@@ -70,6 +72,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
@NonNull private final AuthController mAuthController; @NonNull private final AuthController mAuthController;
@NonNull private final AccessibilityManager mAccessibilityManager; @NonNull private final AccessibilityManager mAccessibilityManager;
@NonNull private final ConfigurationController mConfigurationController; @NonNull private final ConfigurationController mConfigurationController;
@NonNull private final DelayableExecutor mExecutor;
private boolean mHasUdfpsOrFaceAuthFeatures; private boolean mHasUdfpsOrFaceAuthFeatures;
private boolean mUdfpsEnrolled; private boolean mUdfpsEnrolled;
@@ -90,6 +93,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
private int mStatusBarState; private int mStatusBarState;
private boolean mIsKeyguardShowing; private boolean mIsKeyguardShowing;
private boolean mUserUnlockedWithBiometric; private boolean mUserUnlockedWithBiometric;
private Runnable mCancelDelayedUpdateVisibilityRunnable;
private boolean mShowButton; private boolean mShowButton;
private boolean mShowUnlockIcon; private boolean mShowUnlockIcon;
@@ -106,7 +110,8 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
@NonNull AuthController authController, @NonNull AuthController authController,
@NonNull DumpManager dumpManager, @NonNull DumpManager dumpManager,
@NonNull AccessibilityManager accessibilityManager, @NonNull AccessibilityManager accessibilityManager,
@NonNull ConfigurationController configurationController @NonNull ConfigurationController configurationController,
@NonNull @Main DelayableExecutor executor
) { ) {
super(view); super(view);
mStatusBarStateController = statusBarStateController; mStatusBarStateController = statusBarStateController;
@@ -117,6 +122,7 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
mFalsingManager = falsingManager; mFalsingManager = falsingManager;
mAccessibilityManager = accessibilityManager; mAccessibilityManager = accessibilityManager;
mConfigurationController = configurationController; mConfigurationController = configurationController;
mExecutor = executor;
final Context context = view.getContext(); final Context context = view.getContext();
mButton = context.getResources().getDrawable( mButton = context.getResources().getDrawable(
@@ -202,6 +208,11 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
mKeyguardStateController.removeCallback(mKeyguardStateCallback); mKeyguardStateController.removeCallback(mKeyguardStateCallback);
mAccessibilityManager.removeTouchExplorationStateChangeListener( mAccessibilityManager.removeTouchExplorationStateChangeListener(
mTouchExplorationStateChangeListener); mTouchExplorationStateChangeListener);
if (mCancelDelayedUpdateVisibilityRunnable != null) {
mCancelDelayedUpdateVisibilityRunnable.run();
mCancelDelayedUpdateVisibilityRunnable = null;
}
} }
public float getTop() { public float getTop() {
@@ -213,8 +224,8 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
return false; return false;
} }
// pre-emptively set to false to hide view // pre-emptively set to true to hide view
mIsKeyguardShowing = false; mIsBouncerShowing = true;
updateVisibility(); updateVisibility();
mKeyguardViewController.showBouncer(/* scrim */ true); mKeyguardViewController.showBouncer(/* scrim */ true);
return true; return true;
@@ -229,6 +240,11 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
} }
private void updateVisibility() { private void updateVisibility() {
if (mCancelDelayedUpdateVisibilityRunnable != null) {
mCancelDelayedUpdateVisibilityRunnable.run();
mCancelDelayedUpdateVisibilityRunnable = null;
}
if (!mIsKeyguardShowing || (!mUdfpsEnrolled && !mFaceAuthEnrolled)) { if (!mIsKeyguardShowing || (!mUdfpsEnrolled && !mFaceAuthEnrolled)) {
mView.setVisibility(View.INVISIBLE); mView.setVisibility(View.INVISIBLE);
return; return;
@@ -318,13 +334,13 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
@Override @Override
public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) { public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter pw, @NonNull String[] args) {
pw.println(" mShowBouncerButton: " + mShowButton); pw.println("mHasUdfpsOrFaceAuthFeatures: " + mHasUdfpsOrFaceAuthFeatures);
pw.println(" mShowUnlockIcon: " + mShowUnlockIcon); pw.println("mUdfpsEnrolled: " + mUdfpsEnrolled);
pw.println(" mShowLockIcon: " + mShowLockIcon); pw.println("mFaceAuthEnrolled: " + mFaceAuthEnrolled);
pw.println(" mHasUdfpsOrFaceAuthFeatures: " + mHasUdfpsOrFaceAuthFeatures); pw.println("mIsKeyguardShowing: " + mIsKeyguardShowing);
pw.println(" mUdfpsEnrolled: " + mUdfpsEnrolled); pw.println(" mShowBouncerButton: " + mShowButton);
pw.println(" mFaceAuthEnrolled: " + mFaceAuthEnrolled); pw.println(" mShowUnlockIcon: " + mShowUnlockIcon);
pw.println(" mIsKeyguardShowing: " + mIsKeyguardShowing); pw.println(" mShowLockIcon: " + mShowLockIcon);
pw.println(" mIsDozing: " + mIsDozing); pw.println(" mIsDozing: " + mIsDozing);
pw.println(" mIsBouncerShowing: " + mIsBouncerShowing); pw.println(" mIsBouncerShowing: " + mIsBouncerShowing);
pw.println(" mUserUnlockedWithBiometric: " + mUserUnlockedWithBiometric); pw.println(" mUserUnlockedWithBiometric: " + mUserUnlockedWithBiometric);
@@ -351,6 +367,14 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback = private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
new KeyguardUpdateMonitorCallback() { new KeyguardUpdateMonitorCallback() {
@Override
public void onKeyguardVisibilityChanged(boolean showing) {
// reset mIsBouncerShowing state in case it was preemptively set
// onAffordanceClick
mIsBouncerShowing = mKeyguardViewController.isBouncerShowing();
updateVisibility();
}
@Override @Override
public void onKeyguardBouncerChanged(boolean bouncer) { public void onKeyguardBouncerChanged(boolean bouncer) {
mIsBouncerShowing = bouncer; mIsBouncerShowing = bouncer;
@@ -366,7 +390,19 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
if (biometricSourceType == FINGERPRINT) { if (biometricSourceType == FINGERPRINT) {
mRunningFPS = running; mRunningFPS = running;
updateVisibility(); if (!mRunningFPS) {
if (mCancelDelayedUpdateVisibilityRunnable != null) {
mCancelDelayedUpdateVisibilityRunnable.run();
}
// For some devices, auth is cancelled immediately on screen off but
// before dozing state is set. We want to avoid briefly showing the
// button in this case, so we delay updating the visibility by 50ms.
mCancelDelayedUpdateVisibilityRunnable =
mExecutor.executeDelayed(() -> updateVisibility(), 50);
} else {
updateVisibility();
}
} }
} }
}; };

View File

@@ -56,7 +56,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
@NonNull private final KeyguardViewMediator mKeyguardViewMediator; @NonNull private final KeyguardViewMediator mKeyguardViewMediator;
@NonNull private final UdfpsController mUdfpsController; @NonNull private final UdfpsController mUdfpsController;
@Nullable private Runnable mCancelRunnable; @Nullable private Runnable mCancelDelayedHintRunnable;
private boolean mShowingUdfpsBouncer; private boolean mShowingUdfpsBouncer;
private boolean mUdfpsRequested; private boolean mUdfpsRequested;
private boolean mQsExpanded; private boolean mQsExpanded;
@@ -64,7 +64,6 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
private boolean mHintShown; private boolean mHintShown;
private boolean mTransitioningFromHome; private boolean mTransitioningFromHome;
private int mStatusBarState; private int mStatusBarState;
private boolean mKeyguardIsVisible;
/** /**
* hidden amount of pin/pattern/password bouncer * hidden amount of pin/pattern/password bouncer
@@ -111,7 +110,6 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
mUdfpsRequested = false; mUdfpsRequested = false;
mStatusBarState = mStatusBarStateController.getState(); mStatusBarState = mStatusBarStateController.getState();
mQsExpanded = mKeyguardViewManager.isQsExpanded(); mQsExpanded = mKeyguardViewManager.isQsExpanded();
mKeyguardIsVisible = mKeyguardUpdateMonitor.isKeyguardVisible();
mInputBouncerHiddenAmount = KeyguardBouncer.EXPANSION_HIDDEN; mInputBouncerHiddenAmount = KeyguardBouncer.EXPANSION_HIDDEN;
updateAlpha(); updateAlpha();
updatePauseAuth(); updatePauseAuth();
@@ -131,9 +129,9 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
mTransitioningFromHome = false; mTransitioningFromHome = false;
mKeyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false); mKeyguardUpdateMonitor.requestFaceAuthOnOccludingApp(false);
if (mCancelRunnable != null) { if (mCancelDelayedHintRunnable != null) {
mCancelRunnable.run(); mCancelDelayedHintRunnable.run();
mCancelRunnable = null; mCancelDelayedHintRunnable = null;
} }
} }
@@ -145,7 +143,6 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
pw.println("mTransitioningFromHomeToKeyguard=" + mTransitioningFromHome); pw.println("mTransitioningFromHomeToKeyguard=" + mTransitioningFromHome);
pw.println("mStatusBarState=" + StatusBarState.toShortString(mStatusBarState)); pw.println("mStatusBarState=" + StatusBarState.toShortString(mStatusBarState));
pw.println("mQsExpanded=" + mQsExpanded); pw.println("mQsExpanded=" + mQsExpanded);
pw.println("mKeyguardVisible=" + mKeyguardIsVisible);
pw.println("mIsBouncerVisible=" + mIsBouncerVisible); pw.println("mIsBouncerVisible=" + mIsBouncerVisible);
pw.println("mInputBouncerHiddenAmount=" + mInputBouncerHiddenAmount); pw.println("mInputBouncerHiddenAmount=" + mInputBouncerHiddenAmount);
pw.println("mAlpha=" + mView.getAlpha()); pw.println("mAlpha=" + mView.getAlpha());
@@ -205,11 +202,7 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
return true; return true;
} }
if (!mKeyguardIsVisible) { if (mInputBouncerHiddenAmount < .4f || mIsBouncerVisible) {
return true;
}
if (mInputBouncerHiddenAmount < .4f) {
return true; return true;
} }
@@ -240,9 +233,9 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
} }
private void cancelDelayedHint() { private void cancelDelayedHint() {
if (mCancelRunnable != null) { if (mCancelDelayedHintRunnable != null) {
mCancelRunnable.run(); mCancelDelayedHintRunnable.run();
mCancelRunnable = null; mCancelDelayedHintRunnable = null;
} }
} }
@@ -252,9 +245,9 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
} }
// show udfps hint a few seconds after face auth started running // show udfps hint a few seconds after face auth started running
if (!mFaceDetectRunning && running && !mHintShown && mCancelRunnable == null) { if (!mFaceDetectRunning && running && !mHintShown && mCancelDelayedHintRunnable == null) {
// Face detect started running, show udfps hint after a delay // Face detect started running, show udfps hint after a delay
mCancelRunnable = mExecutor.executeDelayed(() -> showHint(false), mCancelDelayedHintRunnable = mExecutor.executeDelayed(() -> showHint(false),
AFTER_FACE_AUTH_HINT_DELAY); AFTER_FACE_AUTH_HINT_DELAY);
} }
@@ -328,11 +321,6 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
cancelDelayedHint(); cancelDelayedHint();
} }
} }
public void onKeyguardVisibilityChangedRaw(boolean showing) {
mKeyguardIsVisible = showing;
updatePauseAuth();
}
}; };
private final StatusBarKeyguardViewManager.AlternateAuthInterceptor mAlternateAuthInterceptor = private final StatusBarKeyguardViewManager.AlternateAuthInterceptor mAlternateAuthInterceptor =
@@ -385,6 +373,9 @@ public class UdfpsKeyguardViewController extends UdfpsAnimationViewController<Ud
@Override @Override
public void onBouncerVisibilityChanged() { public void onBouncerVisibilityChanged() {
mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing(); mIsBouncerVisible = mKeyguardViewManager.bouncerIsOrWillBeShowing();
if (!mIsBouncerVisible) {
mInputBouncerHiddenAmount = 1f;
}
updatePauseAuth(); updatePauseAuth();
} }

View File

@@ -3669,7 +3669,9 @@ public class StatusBar extends SystemUI implements DemoMode,
public boolean onBackPressed() { public boolean onBackPressed() {
boolean isScrimmedBouncer = mScrimController.getState() == ScrimState.BOUNCER_SCRIMMED; boolean isScrimmedBouncer = mScrimController.getState() == ScrimState.BOUNCER_SCRIMMED;
if (mStatusBarKeyguardViewManager.onBackPressed(isScrimmedBouncer /* hideImmediately */)) { if (mStatusBarKeyguardViewManager.onBackPressed(isScrimmedBouncer /* hideImmediately */)) {
if (!isScrimmedBouncer) { if (isScrimmedBouncer) {
mStatusBarStateController.setLeaveOpenOnKeyguardHide(false);
} else {
mNotificationPanelViewController.expandWithoutQs(); mNotificationPanelViewController.expandWithoutQs();
} }
return true; return true;
@@ -3704,9 +3706,13 @@ public class StatusBar extends SystemUI implements DemoMode,
} }
private void showBouncerIfKeyguard() { private void showBouncerIfKeyguard() {
if ((mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED) if (!mKeyguardViewMediator.isHiding()) {
&& !mKeyguardViewMediator.isHiding()) { if (mState == StatusBarState.KEYGUARD
mStatusBarKeyguardViewManager.showGenericBouncer(true /* scrimmed */); && !mStatusBarKeyguardViewManager.bouncerIsOrWillBeShowing()) {
mStatusBarKeyguardViewManager.showGenericBouncer(true /* scrimmed */);
} else if (mState == StatusBarState.SHADE_LOCKED) {
mStatusBarKeyguardViewManager.showBouncer(true /* scrimmed */);
}
} }
} }

View File

@@ -97,7 +97,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
when(mView.getContext()).thenReturn(mResourceContext); when(mView.getContext()).thenReturn(mResourceContext);
when(mResourceContext.getString(anyInt())).thenReturn("test string"); when(mResourceContext.getString(anyInt())).thenReturn("test string");
when(mKeyguardViewMediator.isAnimatingScreenOff()).thenReturn(false); when(mKeyguardViewMediator.isAnimatingScreenOff()).thenReturn(false);
when(mKeyguardUpdateMonitor.isKeyguardVisible()).thenReturn(true);
mController = new UdfpsKeyguardViewController( mController = new UdfpsKeyguardViewController(
mView, mView,
mStatusBarStateController, mStatusBarStateController,
@@ -183,17 +182,6 @@ public class UdfpsKeyguardViewControllerTest extends SysuiTestCase {
assertFalse(mController.shouldPauseAuth()); assertFalse(mController.shouldPauseAuth());
} }
@Test
public void testShouldPauseAuthKeyguardNotVisible() {
mController.onViewAttached();
captureKeyguardUpdateMonitorCallback();
// WHEN keyguard isn't visible
mKeyguardUpdateMonitorCallback.onKeyguardVisibilityChangedRaw(false);
assertTrue(mController.shouldPauseAuth());
}
@Test @Test
public void testShouldPauseAuthOnShadeLocked() { public void testShouldPauseAuthOnShadeLocked() {
mController.onViewAttached(); mController.onViewAttached();