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:
@@ -43,6 +43,15 @@ public class KeyguardPinViewController
|
|||||||
private long mPinLength;
|
private long mPinLength;
|
||||||
|
|
||||||
private boolean mDisabledAutoConfirmation;
|
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,
|
protected KeyguardPinViewController(KeyguardPINView view,
|
||||||
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
KeyguardUpdateMonitor keyguardUpdateMonitor,
|
||||||
@@ -63,6 +72,9 @@ public class KeyguardPinViewController
|
|||||||
mFeatureFlags = featureFlags;
|
mFeatureFlags = featureFlags;
|
||||||
mBackspaceKey = view.findViewById(R.id.delete_button);
|
mBackspaceKey = view.findViewById(R.id.delete_button);
|
||||||
mPinLength = mLockPatternUtils.getPinLength(KeyguardUpdateMonitor.getCurrentUser());
|
mPinLength = mLockPatternUtils.getPinLength(KeyguardUpdateMonitor.getCurrentUser());
|
||||||
|
mIsPinHinting = mPinLength == DEFAULT_PIN_LENGTH;
|
||||||
|
mIsAutoPinConfirmEnabledInSettings = mLockPatternUtils.isAutoPinConfirmEnabled(
|
||||||
|
KeyguardUpdateMonitor.getCurrentUser());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -82,7 +94,7 @@ public class KeyguardPinViewController
|
|||||||
|
|
||||||
protected void onUserInput() {
|
protected void onUserInput() {
|
||||||
super.onUserInput();
|
super.onUserInput();
|
||||||
if (isAutoPinConfirmEnabledInSettings()) {
|
if (mIsAutoPinConfirmEnabledInSettings) {
|
||||||
updateAutoConfirmationState();
|
updateAutoConfirmationState();
|
||||||
if (mPasswordEntry.getText().length() == mPinLength
|
if (mPasswordEntry.getText().length() == mPinLength
|
||||||
&& mOkButton.getVisibility() == View.INVISIBLE) {
|
&& mOkButton.getVisibility() == View.INVISIBLE) {
|
||||||
@@ -130,7 +142,7 @@ public class KeyguardPinViewController
|
|||||||
* Updates the visibility of the OK button for auto confirm feature
|
* Updates the visibility of the OK button for auto confirm feature
|
||||||
*/
|
*/
|
||||||
private void updateOKButtonVisibility() {
|
private void updateOKButtonVisibility() {
|
||||||
if (isAutoPinConfirmEnabledInSettings() && !mDisabledAutoConfirmation) {
|
if (mIsPinHinting && !mDisabledAutoConfirmation) {
|
||||||
mOkButton.setVisibility(View.INVISIBLE);
|
mOkButton.setVisibility(View.INVISIBLE);
|
||||||
} else {
|
} else {
|
||||||
mOkButton.setVisibility(View.VISIBLE);
|
mOkButton.setVisibility(View.VISIBLE);
|
||||||
@@ -142,10 +154,9 @@ public class KeyguardPinViewController
|
|||||||
* Visibility changes are only for auto confirmation configuration.
|
* Visibility changes are only for auto confirmation configuration.
|
||||||
*/
|
*/
|
||||||
private void updateBackSpaceVisibility() {
|
private void updateBackSpaceVisibility() {
|
||||||
boolean isAutoConfirmation = isAutoPinConfirmEnabledInSettings();
|
|
||||||
mBackspaceKey.setTransparentMode(/* isTransparentMode= */
|
mBackspaceKey.setTransparentMode(/* isTransparentMode= */
|
||||||
isAutoConfirmation && !mDisabledAutoConfirmation);
|
mIsAutoPinConfirmEnabledInSettings && !mDisabledAutoConfirmation);
|
||||||
if (isAutoConfirmation) {
|
if (mIsAutoPinConfirmEnabledInSettings) {
|
||||||
if (mPasswordEntry.getText().length() > 0
|
if (mPasswordEntry.getText().length() > 0
|
||||||
|| mDisabledAutoConfirmation) {
|
|| mDisabledAutoConfirmation) {
|
||||||
mBackspaceKey.setVisibility(View.VISIBLE);
|
mBackspaceKey.setVisibility(View.VISIBLE);
|
||||||
@@ -155,24 +166,8 @@ public class KeyguardPinViewController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/** Updates whether to use pin hinting or not. */
|
/** Updates whether to use pin hinting or not. */
|
||||||
void updatePinHinting() {
|
private void updatePinHinting() {
|
||||||
mPasswordEntry.setIsPinHinting(isAutoPinConfirmEnabledInSettings() && isPinHinting()
|
mPasswordEntry.setIsPinHinting(mIsAutoPinConfirmEnabledInSettings && mIsPinHinting
|
||||||
&& !mDisabledAutoConfirmation);
|
&& !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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -281,6 +281,8 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
|
|||||||
|
|
||||||
public interface SwipeListener {
|
public interface SwipeListener {
|
||||||
void onSwipeUp();
|
void onSwipeUp();
|
||||||
|
/** */
|
||||||
|
void onSwipeDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
@@ -543,6 +545,11 @@ public class KeyguardSecurityContainer extends ConstraintLayout {
|
|||||||
if (mSwipeListener != null) {
|
if (mSwipeListener != null) {
|
||||||
mSwipeListener.onSwipeUp();
|
mSwipeListener.onSwipeUp();
|
||||||
}
|
}
|
||||||
|
} else if (getTranslationY() > TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
|
||||||
|
MIN_DRAG_SIZE, getResources().getDisplayMetrics())) {
|
||||||
|
if (mSwipeListener != null) {
|
||||||
|
mSwipeListener.onSwipeDown();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -70,11 +70,11 @@ import com.android.systemui.Gefingerpoken;
|
|||||||
import com.android.systemui.R;
|
import com.android.systemui.R;
|
||||||
import com.android.systemui.biometrics.SideFpsController;
|
import com.android.systemui.biometrics.SideFpsController;
|
||||||
import com.android.systemui.biometrics.SideFpsUiRequestSource;
|
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.FalsingA11yDelegate;
|
||||||
import com.android.systemui.classifier.FalsingCollector;
|
import com.android.systemui.classifier.FalsingCollector;
|
||||||
import com.android.systemui.flags.FeatureFlags;
|
import com.android.systemui.flags.FeatureFlags;
|
||||||
import com.android.systemui.flags.Flags;
|
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.keyguard.domain.interactor.KeyguardFaceAuthInteractor;
|
||||||
import com.android.systemui.log.SessionTracker;
|
import com.android.systemui.log.SessionTracker;
|
||||||
import com.android.systemui.plugins.ActivityStarter;
|
import com.android.systemui.plugins.ActivityStarter;
|
||||||
@@ -319,6 +319,11 @@ public class KeyguardSecurityContainerController extends ViewController<Keyguard
|
|||||||
"swipeUpOnBouncer");
|
"swipeUpOnBouncer");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSwipeDown() {
|
||||||
|
mViewMediatorCallback.onBouncerSwipeDown();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
private final ConfigurationController.ConfigurationListener mConfigurationListener =
|
private final ConfigurationController.ConfigurationListener mConfigurationListener =
|
||||||
new ConfigurationController.ConfigurationListener() {
|
new ConfigurationController.ConfigurationListener() {
|
||||||
|
|||||||
@@ -104,4 +104,9 @@ public interface ViewMediatorCallback {
|
|||||||
* Call when cancel button is pressed in bouncer.
|
* Call when cancel button is pressed in bouncer.
|
||||||
*/
|
*/
|
||||||
void onCancelClicked();
|
void onCancelClicked();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if bouncer has swiped down.
|
||||||
|
*/
|
||||||
|
void onBouncerSwipeDown();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -834,6 +834,11 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
|
|||||||
mKeyguardViewControllerLazy.get().onCancelClicked();
|
mKeyguardViewControllerLazy.get().onCancelClicked();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBouncerSwipeDown() {
|
||||||
|
mKeyguardViewControllerLazy.get().reset(/* hideBouncerWhenShowing= */ true);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playTrustedSound() {
|
public void playTrustedSound() {
|
||||||
KeyguardViewMediator.this.playTrustedSound();
|
KeyguardViewMediator.this.playTrustedSound();
|
||||||
|
|||||||
@@ -703,7 +703,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reset(boolean hideBouncerWhenShowing) {
|
public void reset(boolean hideBouncerWhenShowing) {
|
||||||
if (mKeyguardStateController.isShowing()) {
|
if (mKeyguardStateController.isShowing() && !bouncerIsAnimatingAway()) {
|
||||||
final boolean isOccluded = mKeyguardStateController.isOccluded();
|
final boolean isOccluded = mKeyguardStateController.isOccluded();
|
||||||
// Hide quick settings.
|
// Hide quick settings.
|
||||||
mShadeViewController.resetViews(/* animate= */ !isOccluded);
|
mShadeViewController.resetViews(/* animate= */ !isOccluded);
|
||||||
|
|||||||
@@ -97,21 +97,7 @@ class KeyguardPinViewControllerTest : SysuiTestCase() {
|
|||||||
`when`(keyguardPinView.findViewById<NumPadButton>(R.id.delete_button))
|
`when`(keyguardPinView.findViewById<NumPadButton>(R.id.delete_button))
|
||||||
.thenReturn(deleteButton)
|
.thenReturn(deleteButton)
|
||||||
`when`(keyguardPinView.findViewById<View>(R.id.key_enter)).thenReturn(enterButton)
|
`when`(keyguardPinView.findViewById<View>(R.id.key_enter)).thenReturn(enterButton)
|
||||||
pinViewController =
|
constructViewController()
|
||||||
KeyguardPinViewController(
|
|
||||||
keyguardPinView,
|
|
||||||
keyguardUpdateMonitor,
|
|
||||||
securityMode,
|
|
||||||
lockPatternUtils,
|
|
||||||
mKeyguardSecurityCallback,
|
|
||||||
keyguardMessageAreaControllerFactory,
|
|
||||||
mLatencyTracker,
|
|
||||||
liftToActivateListener,
|
|
||||||
mEmergencyButtonController,
|
|
||||||
falsingCollector,
|
|
||||||
postureController,
|
|
||||||
featureFlags
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -135,8 +121,10 @@ class KeyguardPinViewControllerTest : SysuiTestCase() {
|
|||||||
`when`(lockPatternUtils.isAutoPinConfirmEnabled(anyInt())).thenReturn(true)
|
`when`(lockPatternUtils.isAutoPinConfirmEnabled(anyInt())).thenReturn(true)
|
||||||
`when`(lockPatternUtils.getCurrentFailedPasswordAttempts(anyInt())).thenReturn(3)
|
`when`(lockPatternUtils.getCurrentFailedPasswordAttempts(anyInt())).thenReturn(3)
|
||||||
`when`(passwordTextView.text).thenReturn("")
|
`when`(passwordTextView.text).thenReturn("")
|
||||||
|
constructViewController()
|
||||||
|
|
||||||
pinViewController.startAppearAnimation()
|
pinViewController.startAppearAnimation()
|
||||||
|
|
||||||
verify(deleteButton).visibility = View.INVISIBLE
|
verify(deleteButton).visibility = View.INVISIBLE
|
||||||
verify(enterButton).visibility = View.INVISIBLE
|
verify(enterButton).visibility = View.INVISIBLE
|
||||||
verify(passwordTextView).setUsePinShapes(true)
|
verify(passwordTextView).setUsePinShapes(true)
|
||||||
@@ -150,8 +138,10 @@ class KeyguardPinViewControllerTest : SysuiTestCase() {
|
|||||||
`when`(lockPatternUtils.isAutoPinConfirmEnabled(anyInt())).thenReturn(true)
|
`when`(lockPatternUtils.isAutoPinConfirmEnabled(anyInt())).thenReturn(true)
|
||||||
`when`(lockPatternUtils.getCurrentFailedPasswordAttempts(anyInt())).thenReturn(6)
|
`when`(lockPatternUtils.getCurrentFailedPasswordAttempts(anyInt())).thenReturn(6)
|
||||||
`when`(passwordTextView.text).thenReturn("")
|
`when`(passwordTextView.text).thenReturn("")
|
||||||
|
constructViewController()
|
||||||
|
|
||||||
pinViewController.startAppearAnimation()
|
pinViewController.startAppearAnimation()
|
||||||
|
|
||||||
verify(deleteButton).visibility = View.VISIBLE
|
verify(deleteButton).visibility = View.VISIBLE
|
||||||
verify(enterButton).visibility = View.VISIBLE
|
verify(enterButton).visibility = View.VISIBLE
|
||||||
verify(passwordTextView).setUsePinShapes(true)
|
verify(passwordTextView).setUsePinShapes(true)
|
||||||
@@ -163,4 +153,22 @@ class KeyguardPinViewControllerTest : SysuiTestCase() {
|
|||||||
pinViewController.handleAttemptLockout(0)
|
pinViewController.handleAttemptLockout(0)
|
||||||
verify(lockPatternUtils).getCurrentFailedPasswordAttempts(anyInt())
|
verify(lockPatternUtils).getCurrentFailedPasswordAttempts(anyInt())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun constructViewController() {
|
||||||
|
pinViewController =
|
||||||
|
KeyguardPinViewController(
|
||||||
|
keyguardPinView,
|
||||||
|
keyguardUpdateMonitor,
|
||||||
|
securityMode,
|
||||||
|
lockPatternUtils,
|
||||||
|
mKeyguardSecurityCallback,
|
||||||
|
keyguardMessageAreaControllerFactory,
|
||||||
|
mLatencyTracker,
|
||||||
|
liftToActivateListener,
|
||||||
|
mEmergencyButtonController,
|
||||||
|
falsingCollector,
|
||||||
|
postureController,
|
||||||
|
featureFlags
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -780,6 +780,11 @@ public class KeyguardViewMediatorTest extends SysuiTestCase {
|
|||||||
assertTrue(mViewMediator.isShowingAndNotOccluded());
|
assertTrue(mViewMediator.isShowingAndNotOccluded());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testBouncerSwipeDown() {
|
||||||
|
mViewMediator.getViewMediatorCallback().onBouncerSwipeDown();
|
||||||
|
verify(mStatusBarKeyguardViewManager).reset(true);
|
||||||
|
}
|
||||||
private void createAndStartViewMediator() {
|
private void createAndStartViewMediator() {
|
||||||
mViewMediator = new KeyguardViewMediator(
|
mViewMediator = new KeyguardViewMediator(
|
||||||
mContext,
|
mContext,
|
||||||
|
|||||||
@@ -736,6 +736,16 @@ public class StatusBarKeyguardViewManagerTest extends SysuiTestCase {
|
|||||||
verify(mAlternateBouncerInteractor, never()).hide();
|
verify(mAlternateBouncerInteractor, never()).hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testResetBouncerAnimatingAway() {
|
||||||
|
reset(mPrimaryBouncerInteractor);
|
||||||
|
when(mPrimaryBouncerInteractor.isAnimatingAway()).thenReturn(true);
|
||||||
|
|
||||||
|
mStatusBarKeyguardViewManager.reset(true);
|
||||||
|
|
||||||
|
verify(mPrimaryBouncerInteractor, never()).hide();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void handleDispatchTouchEvent_alternateBouncerNotVisible() {
|
public void handleDispatchTouchEvent_alternateBouncerNotVisible() {
|
||||||
mStatusBarKeyguardViewManager.addCallback(mCallback);
|
mStatusBarKeyguardViewManager.addCallback(mCallback);
|
||||||
|
|||||||
Reference in New Issue
Block a user