Merge changes I8c2d2ccd,I9bc97666,I52783d0a into udc-qpr-dev

* changes:
  Ensure swipe down works for bouncer to dismiss
  Do not refetch pin length
  Ensure that disappear animation callback is run.
This commit is contained in:
Aaron Liu
2023-06-26 16:50:13 +00:00
committed by Android (Google) Code Review
9 changed files with 80 additions and 40 deletions

View File

@@ -43,6 +43,15 @@ public class KeyguardPinViewController
private long mPinLength;
private boolean mDisabledAutoConfirmation;
/**
* Responsible for identifying if PIN hinting is to be enabled or not
*/
private boolean mIsPinHinting;
/**
* Responsible for identifying if auto confirm is enabled or not in Settings
*/
private boolean mIsAutoPinConfirmEnabledInSettings;
protected KeyguardPinViewController(KeyguardPINView view,
KeyguardUpdateMonitor keyguardUpdateMonitor,
@@ -63,6 +72,9 @@ public class KeyguardPinViewController
mFeatureFlags = featureFlags;
mBackspaceKey = view.findViewById(R.id.delete_button);
mPinLength = mLockPatternUtils.getPinLength(KeyguardUpdateMonitor.getCurrentUser());
mIsPinHinting = mPinLength == DEFAULT_PIN_LENGTH;
mIsAutoPinConfirmEnabledInSettings = mLockPatternUtils.isAutoPinConfirmEnabled(
KeyguardUpdateMonitor.getCurrentUser());
}
@Override
@@ -82,7 +94,7 @@ public class KeyguardPinViewController
protected void onUserInput() {
super.onUserInput();
if (isAutoPinConfirmEnabledInSettings()) {
if (mIsAutoPinConfirmEnabledInSettings) {
updateAutoConfirmationState();
if (mPasswordEntry.getText().length() == mPinLength
&& mOkButton.getVisibility() == View.INVISIBLE) {
@@ -130,7 +142,7 @@ public class KeyguardPinViewController
* Updates the visibility of the OK button for auto confirm feature
*/
private void updateOKButtonVisibility() {
if (isAutoPinConfirmEnabledInSettings() && !mDisabledAutoConfirmation) {
if (mIsPinHinting && !mDisabledAutoConfirmation) {
mOkButton.setVisibility(View.INVISIBLE);
} else {
mOkButton.setVisibility(View.VISIBLE);
@@ -142,10 +154,9 @@ public class KeyguardPinViewController
* Visibility changes are only for auto confirmation configuration.
*/
private void updateBackSpaceVisibility() {
boolean isAutoConfirmation = isAutoPinConfirmEnabledInSettings();
mBackspaceKey.setTransparentMode(/* isTransparentMode= */
isAutoConfirmation && !mDisabledAutoConfirmation);
if (isAutoConfirmation) {
mIsAutoPinConfirmEnabledInSettings && !mDisabledAutoConfirmation);
if (mIsAutoPinConfirmEnabledInSettings) {
if (mPasswordEntry.getText().length() > 0
|| mDisabledAutoConfirmation) {
mBackspaceKey.setVisibility(View.VISIBLE);
@@ -155,24 +166,8 @@ public class KeyguardPinViewController
}
}
/** Updates whether to use pin hinting or not. */
void updatePinHinting() {
mPasswordEntry.setIsPinHinting(isAutoPinConfirmEnabledInSettings() && isPinHinting()
private void updatePinHinting() {
mPasswordEntry.setIsPinHinting(mIsAutoPinConfirmEnabledInSettings && mIsPinHinting
&& !mDisabledAutoConfirmation);
}
/**
* Responsible for identifying if PIN hinting is to be enabled or not
*/
private boolean isPinHinting() {
return mLockPatternUtils.getPinLength(KeyguardUpdateMonitor.getCurrentUser())
== DEFAULT_PIN_LENGTH;
}
/**
* Responsible for identifying if auto confirm is enabled or not in Settings
*/
private boolean isAutoPinConfirmEnabledInSettings() {
//Checks if user has enabled the auto confirm in Settings
return mLockPatternUtils.isAutoPinConfirmEnabled(KeyguardUpdateMonitor.getCurrentUser());
}
}

View File

@@ -281,6 +281,8 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
public interface SwipeListener {
void onSwipeUp();
/** */
void onSwipeDown();
}
@VisibleForTesting
@@ -543,6 +545,11 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
if (mSwipeListener != null) {
mSwipeListener.onSwipeUp();
}
} else if (getTranslationY() > TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
MIN_DRAG_SIZE, getResources().getDisplayMetrics())) {
if (mSwipeListener != null) {
mSwipeListener.onSwipeDown();
}
}
}
return true;

View File

@@ -70,11 +70,11 @@ import com.android.systemui.Gefingerpoken;
import com.android.systemui.R;
import com.android.systemui.biometrics.SideFpsController;
import com.android.systemui.biometrics.SideFpsUiRequestSource;
import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor;
import com.android.systemui.classifier.FalsingA11yDelegate;
import com.android.systemui.classifier.FalsingCollector;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.flags.Flags;
import com.android.systemui.bouncer.domain.interactor.BouncerMessageInteractor;
import com.android.systemui.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
import com.android.systemui.log.SessionTracker;
import com.android.systemui.plugins.ActivityStarter;
@@ -319,6 +319,11 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
"swipeUpOnBouncer");
}
}
@Override
public void onSwipeDown() {
mViewMediatorCallback.onBouncerSwipeDown();
}
};
private final ConfigurationController.ConfigurationListener mConfigurationListener =
new ConfigurationController.ConfigurationListener() {

View File

@@ -104,4 +104,9 @@ public interface ViewMediatorCallback {
* Call when cancel button is pressed in bouncer.
*/
void onCancelClicked();
/**
* Determines if bouncer has swiped down.
*/
void onBouncerSwipeDown();
}

View File

@@ -834,6 +834,11 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
mKeyguardViewControllerLazy.get().onCancelClicked();
}
@Override
public void onBouncerSwipeDown() {
mKeyguardViewControllerLazy.get().reset(/* hideBouncerWhenShowing= */ true);
}
@Override
public void playTrustedSound() {
KeyguardViewMediator.this.playTrustedSound();

View File

@@ -703,7 +703,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
@Override
public void reset(boolean hideBouncerWhenShowing) {
if (mKeyguardStateController.isShowing()) {
if (mKeyguardStateController.isShowing() && !bouncerIsAnimatingAway()) {
final boolean isOccluded = mKeyguardStateController.isOccluded();
// Hide quick settings.
mShadeViewController.resetViews(/* animate= */ !isOccluded);

View File

@@ -97,21 +97,7 @@ class KeyguardPinViewControllerTest : SysuiTestCase() {
`when`(keyguardPinView.findViewById<NumPadButton>(R.id.delete_button))
.thenReturn(deleteButton)
`when`(keyguardPinView.findViewById<View>(R.id.key_enter)).thenReturn(enterButton)
pinViewController =
KeyguardPinViewController(
keyguardPinView,
keyguardUpdateMonitor,
securityMode,
lockPatternUtils,
mKeyguardSecurityCallback,
keyguardMessageAreaControllerFactory,
mLatencyTracker,
liftToActivateListener,
mEmergencyButtonController,
falsingCollector,
postureController,
featureFlags
)
constructViewController()
}
@Test
@@ -135,8 +121,10 @@ class KeyguardPinViewControllerTest : SysuiTestCase() {
`when`(lockPatternUtils.isAutoPinConfirmEnabled(anyInt())).thenReturn(true)
`when`(lockPatternUtils.getCurrentFailedPasswordAttempts(anyInt())).thenReturn(3)
`when`(passwordTextView.text).thenReturn("")
constructViewController()
pinViewController.startAppearAnimation()
verify(deleteButton).visibility = View.INVISIBLE
verify(enterButton).visibility = View.INVISIBLE
verify(passwordTextView).setUsePinShapes(true)
@@ -150,8 +138,10 @@ class KeyguardPinViewControllerTest : SysuiTestCase() {
`when`(lockPatternUtils.isAutoPinConfirmEnabled(anyInt())).thenReturn(true)
`when`(lockPatternUtils.getCurrentFailedPasswordAttempts(anyInt())).thenReturn(6)
`when`(passwordTextView.text).thenReturn("")
constructViewController()
pinViewController.startAppearAnimation()
verify(deleteButton).visibility = View.VISIBLE
verify(enterButton).visibility = View.VISIBLE
verify(passwordTextView).setUsePinShapes(true)
@@ -163,4 +153,22 @@ class KeyguardPinViewControllerTest : SysuiTestCase() {
pinViewController.handleAttemptLockout(0)
verify(lockPatternUtils).getCurrentFailedPasswordAttempts(anyInt())
}
fun constructViewController() {
pinViewController =
KeyguardPinViewController(
keyguardPinView,
keyguardUpdateMonitor,
securityMode,
lockPatternUtils,
mKeyguardSecurityCallback,
keyguardMessageAreaControllerFactory,
mLatencyTracker,
liftToActivateListener,
mEmergencyButtonController,
falsingCollector,
postureController,
featureFlags
)
}
}

View File

@@ -780,6 +780,11 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
assertTrue(mViewMediator.isShowingAndNotOccluded());
}
@Test
public void testBouncerSwipeDown() {
mViewMediator.getViewMediatorCallback().onBouncerSwipeDown();
verify(mStatusBarKeyguardViewManager).reset(true);
}
private void createAndStartViewMediator() {
mViewMediator = new KeyguardViewMediator(
mContext,

View File

@@ -736,6 +736,16 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
verify(mAlternateBouncerInteractor, never()).hide();
}
@Test
public void testResetBouncerAnimatingAway() {
reset(mPrimaryBouncerInteractor);
when(mPrimaryBouncerInteractor.isAnimatingAway()).thenReturn(true);
mStatusBarKeyguardViewManager.reset(true);
verify(mPrimaryBouncerInteractor, never()).hide();
}
@Test
public void handleDispatchTouchEvent_alternateBouncerNotVisible() {
mStatusBarKeyguardViewManager.addCallback(mCallback);