Hide "swipe up to unlock" when entering Doze
"Swipe up to unlock" should only be visible when the screen is interactive, even though it would last for 5sec otherwise. Test: manual Test: atest KeyguardIndicationControllerTest Fixes: 139400542 Change-Id: If7290459a3ae28f689cf4c9e2311398e5f6bcf13 Merged-In: If7290459a3ae28f689cf4c9e2311398e5f6bcf13
This commit is contained in:
@@ -108,6 +108,7 @@ public class KeyguardIndicationController implements StateListener,
|
||||
private ColorStateList mTransientTextColorState;
|
||||
private ColorStateList mInitialTextColorState;
|
||||
private boolean mVisible;
|
||||
private boolean mHideTransientMessageOnScreenOff;
|
||||
|
||||
private boolean mPowerPluggedIn;
|
||||
private boolean mPowerPluggedInWired;
|
||||
@@ -317,15 +318,17 @@ public class KeyguardIndicationController implements StateListener,
|
||||
* Shows {@param transientIndication} until it is hidden by {@link #hideTransientIndication}.
|
||||
*/
|
||||
public void showTransientIndication(CharSequence transientIndication) {
|
||||
showTransientIndication(transientIndication, mInitialTextColorState);
|
||||
showTransientIndication(transientIndication, mInitialTextColorState,
|
||||
false /* hideOnScreenOff */);
|
||||
}
|
||||
|
||||
/**
|
||||
* Shows {@param transientIndication} until it is hidden by {@link #hideTransientIndication}.
|
||||
*/
|
||||
public void showTransientIndication(CharSequence transientIndication,
|
||||
ColorStateList textColorState) {
|
||||
private void showTransientIndication(CharSequence transientIndication,
|
||||
ColorStateList textColorState, boolean hideOnScreenOff) {
|
||||
mTransientIndication = transientIndication;
|
||||
mHideTransientMessageOnScreenOff = hideOnScreenOff && transientIndication != null;
|
||||
mTransientTextColorState = textColorState;
|
||||
mHandler.removeMessages(MSG_HIDE_TRANSIENT);
|
||||
mHandler.removeMessages(MSG_SWIPE_UP_TO_UNLOCK);
|
||||
@@ -344,6 +347,7 @@ public class KeyguardIndicationController implements StateListener,
|
||||
public void hideTransientIndication() {
|
||||
if (mTransientIndication != null) {
|
||||
mTransientIndication = null;
|
||||
mHideTransientMessageOnScreenOff = false;
|
||||
mHandler.removeMessages(MSG_HIDE_TRANSIENT);
|
||||
updateIndication(false);
|
||||
}
|
||||
@@ -566,7 +570,8 @@ public class KeyguardIndicationController implements StateListener,
|
||||
String message = mContext.getString(R.string.keyguard_retry);
|
||||
mStatusBarKeyguardViewManager.showBouncerMessage(message, mInitialTextColorState);
|
||||
} else if (mKeyguardUpdateMonitor.isScreenOn()) {
|
||||
showTransientIndication(mContext.getString(R.string.keyguard_unlock));
|
||||
showTransientIndication(mContext.getString(R.string.keyguard_unlock),
|
||||
mInitialTextColorState, true /* hideOnScreenOff */);
|
||||
hideTransientIndicationDelayed(BaseKeyguardCallback.HIDE_DELAY_MS);
|
||||
}
|
||||
}
|
||||
@@ -576,7 +581,11 @@ public class KeyguardIndicationController implements StateListener,
|
||||
return;
|
||||
}
|
||||
mDozing = dozing;
|
||||
updateIndication(false);
|
||||
if (mHideTransientMessageOnScreenOff && mDozing) {
|
||||
hideTransientIndication();
|
||||
} else {
|
||||
updateIndication(false);
|
||||
}
|
||||
updateDisclosure();
|
||||
}
|
||||
|
||||
@@ -646,8 +655,7 @@ public class KeyguardIndicationController implements StateListener,
|
||||
@Override
|
||||
public void onBiometricHelp(int msgId, String helpString,
|
||||
BiometricSourceType biometricSourceType) {
|
||||
KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext);
|
||||
if (!updateMonitor.isUnlockingWithBiometricAllowed()) {
|
||||
if (!mKeyguardUpdateMonitor.isUnlockingWithBiometricAllowed()) {
|
||||
return;
|
||||
}
|
||||
boolean showSwipeToUnlock =
|
||||
@@ -655,8 +663,8 @@ public class KeyguardIndicationController implements StateListener,
|
||||
if (mStatusBarKeyguardViewManager.isBouncerShowing()) {
|
||||
mStatusBarKeyguardViewManager.showBouncerMessage(helpString,
|
||||
mInitialTextColorState);
|
||||
} else if (updateMonitor.isScreenOn()) {
|
||||
showTransientIndication(helpString);
|
||||
} else if (mKeyguardUpdateMonitor.isScreenOn()) {
|
||||
showTransientIndication(helpString, mInitialTextColorState, showSwipeToUnlock);
|
||||
if (!showSwipeToUnlock) {
|
||||
hideTransientIndicationDelayed(TRANSIENT_BIOMETRIC_ERROR_TIMEOUT);
|
||||
}
|
||||
@@ -670,8 +678,7 @@ public class KeyguardIndicationController implements StateListener,
|
||||
@Override
|
||||
public void onBiometricError(int msgId, String errString,
|
||||
BiometricSourceType biometricSourceType) {
|
||||
KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext);
|
||||
if (shouldSuppressBiometricError(msgId, biometricSourceType, updateMonitor)) {
|
||||
if (shouldSuppressBiometricError(msgId, biometricSourceType, mKeyguardUpdateMonitor)) {
|
||||
return;
|
||||
}
|
||||
animatePadlockError();
|
||||
@@ -681,7 +688,7 @@ public class KeyguardIndicationController implements StateListener,
|
||||
showSwipeUpToUnlock();
|
||||
} else if (mStatusBarKeyguardViewManager.isBouncerShowing()) {
|
||||
mStatusBarKeyguardViewManager.showBouncerMessage(errString, mInitialTextColorState);
|
||||
} else if (updateMonitor.isScreenOn()) {
|
||||
} else if (mKeyguardUpdateMonitor.isScreenOn()) {
|
||||
showTransientIndication(errString);
|
||||
// We want to keep this message around in case the screen was off
|
||||
hideTransientIndicationDelayed(HIDE_DELAY_MS);
|
||||
@@ -721,13 +728,15 @@ public class KeyguardIndicationController implements StateListener,
|
||||
|
||||
@Override
|
||||
public void onTrustAgentErrorMessage(CharSequence message) {
|
||||
showTransientIndication(message, Utils.getColorError(mContext));
|
||||
showTransientIndication(message, Utils.getColorError(mContext),
|
||||
false /* hideOnScreenOff */);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScreenTurnedOn() {
|
||||
if (mMessageToShowOnScreenOn != null) {
|
||||
showTransientIndication(mMessageToShowOnScreenOn, Utils.getColorError(mContext));
|
||||
showTransientIndication(mMessageToShowOnScreenOn, Utils.getColorError(mContext),
|
||||
false /* hideOnScreenOff */);
|
||||
// We want to keep this message around in case the screen was off
|
||||
hideTransientIndicationDelayed(HIDE_DELAY_MS);
|
||||
mMessageToShowOnScreenOn = null;
|
||||
|
||||
@@ -35,8 +35,11 @@ import android.app.admin.DevicePolicyManager;
|
||||
import android.app.trust.TrustManager;
|
||||
import android.content.Context;
|
||||
import android.graphics.Color;
|
||||
import android.hardware.biometrics.BiometricSourceType;
|
||||
import android.hardware.face.FaceManager;
|
||||
import android.hardware.fingerprint.FingerprintManager;
|
||||
import android.os.Looper;
|
||||
import android.os.UserManager;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
@@ -53,6 +56,7 @@ import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.phone.KeyguardIndicationTextView;
|
||||
import com.android.systemui.statusbar.phone.LockIcon;
|
||||
import com.android.systemui.statusbar.phone.ShadeController;
|
||||
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
|
||||
import com.android.systemui.statusbar.phone.UnlockMethodCache;
|
||||
import com.android.systemui.statusbar.policy.AccessibilityController;
|
||||
import com.android.systemui.util.wakelock.WakeLockFake;
|
||||
@@ -92,6 +96,10 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
||||
private StatusBarStateController mStatusBarStateController;
|
||||
@Mock
|
||||
private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
|
||||
@Mock
|
||||
private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
|
||||
@Mock
|
||||
private UserManager mUserManager;
|
||||
private KeyguardIndicationTextView mTextView;
|
||||
|
||||
private KeyguardIndicationController mController;
|
||||
@@ -105,14 +113,18 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
||||
mTextView = new KeyguardIndicationTextView(mContext);
|
||||
|
||||
mContext.addMockSystemService(Context.DEVICE_POLICY_SERVICE, mDevicePolicyManager);
|
||||
mContext.addMockSystemService(UserManager.class, mUserManager);
|
||||
mContext.addMockSystemService(Context.TRUST_SERVICE, mock(TrustManager.class));
|
||||
mContext.addMockSystemService(Context.FINGERPRINT_SERVICE, mock(FingerprintManager.class));
|
||||
mDisclosureWithOrganization = mContext.getString(R.string.do_disclosure_with_name,
|
||||
ORGANIZATION_NAME);
|
||||
|
||||
when(mKeyguardUpdateMonitor.isUnlockingWithBiometricAllowed()).thenReturn(true);
|
||||
when(mKeyguardUpdateMonitor.isScreenOn()).thenReturn(true);
|
||||
when(mIndicationArea.findViewById(R.id.keyguard_indication_enterprise_disclosure))
|
||||
.thenReturn(mDisclosure);
|
||||
when(mIndicationArea.findViewById(R.id.keyguard_indication_text)).thenReturn(mTextView);
|
||||
when(mUserManager.isUserUnlocked(anyInt())).thenReturn(true);
|
||||
|
||||
mWakeLock = new WakeLockFake();
|
||||
}
|
||||
@@ -124,6 +136,7 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
||||
mController = new KeyguardIndicationController(mContext, mIndicationArea, mLockIcon,
|
||||
mLockPatternUtils, mWakeLock, mShadeController, mAccessibilityController,
|
||||
mUnlockMethodCache, mStatusBarStateController, mKeyguardUpdateMonitor);
|
||||
mController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -244,6 +257,49 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase {
|
||||
assertThat(mTextView.getAlpha()).isEqualTo(1f);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void transientIndication_visibleWhenDozing_unlessSwipeUp_fromHelp() {
|
||||
createController();
|
||||
String message = "A message";
|
||||
|
||||
mController.setVisible(true);
|
||||
mController.getKeyguardCallback().onBiometricHelp(
|
||||
KeyguardUpdateMonitor.BIOMETRIC_HELP_FACE_NOT_RECOGNIZED, message,
|
||||
BiometricSourceType.FACE);
|
||||
assertThat(mTextView.getText()).isEqualTo(message);
|
||||
mController.setDozing(true);
|
||||
|
||||
assertThat(mTextView.getText()).isNotEqualTo(message);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void transientIndication_visibleWhenDozing_unlessSwipeUp_fromError() {
|
||||
createController();
|
||||
String message = mContext.getString(R.string.keyguard_unlock);
|
||||
|
||||
mController.setVisible(true);
|
||||
mController.getKeyguardCallback().onBiometricError(FaceManager.FACE_ERROR_TIMEOUT,
|
||||
"A message", BiometricSourceType.FACE);
|
||||
|
||||
assertThat(mTextView.getText()).isEqualTo(message);
|
||||
mController.setDozing(true);
|
||||
|
||||
assertThat(mTextView.getText()).isNotEqualTo(message);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void transientIndication_swipeUpToRetry() {
|
||||
createController();
|
||||
String message = mContext.getString(R.string.keyguard_retry);
|
||||
when(mStatusBarKeyguardViewManager.isBouncerShowing()).thenReturn(true);
|
||||
|
||||
mController.setVisible(true);
|
||||
mController.getKeyguardCallback().onBiometricError(FaceManager.FACE_ERROR_TIMEOUT,
|
||||
"A message", BiometricSourceType.FACE);
|
||||
|
||||
verify(mStatusBarKeyguardViewManager).showBouncerMessage(eq(message), any());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void lockIcon_click() {
|
||||
createController();
|
||||
|
||||
Reference in New Issue
Block a user