Fixed a bug with encryption where the keyguard was never shown with PIN

This led to the network being unusable.
We now ensure that the Keyguard is not notified of the SIM PIN
changes until after the initial dismissal logic is done.
In addition, the fullscreen PIN is now always shown immediately
and not until the user swipes up, which was an error before.
Also made sure that the Keyguard Scrim is correctly visible
when shown.

Bug: 21850021
Change-Id: I81804124bae30adf0e17e26cc42f67e48fc446e8
This commit is contained in:
Selim Cinek
2015-06-23 22:05:58 -04:00
parent 9a634991cf
commit edd32b8817
4 changed files with 16 additions and 5 deletions

View File

@@ -622,9 +622,8 @@ public class KeyguardViewMediator extends SystemUI {
synchronized (this) {
if (DEBUG) Log.d(TAG, "onSystemReady");
mSystemReady = true;
mUpdateMonitor.registerCallback(mUpdateCallback);
doKeyguardLocked(null);
mUpdateMonitor.registerCallback(mUpdateCallback);
}
// Most services aren't available until the system reaches the ready state, so we
// send it here when the device first boots.

View File

@@ -200,6 +200,7 @@ public class KeyguardBouncer {
* notifications on Keyguard, like SIM PIN/PUK.
*/
public boolean needsFullscreenBouncer() {
ensureView();
if (mKeyguardView != null) {
SecurityMode mode = mKeyguardView.getSecurityMode();
return mode == SecurityMode.SimPin || mode == SecurityMode.SimPuk;

View File

@@ -137,6 +137,12 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
scheduleUpdate();
}
public void abortKeyguardFadingOut() {
if (mAnimateKeyguardFadingOut) {
endAnimateKeyguardFadingOut();
}
}
public void animateGoingToFullShade(long delay, long duration) {
mDurationOverride = duration;
mAnimationDelay = delay;
@@ -321,17 +327,21 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener,
mScrimBehind.getViewTreeObserver().removeOnPreDrawListener(this);
mUpdatePending = false;
updateScrims();
mAnimateKeyguardFadingOut = false;
mDurationOverride = -1;
mAnimationDelay = 0;
// Make sure that we always call the listener even if we didn't start an animation.
endAnimateKeyguardFadingOut();
mAnimationStarted = false;
return true;
}
private void endAnimateKeyguardFadingOut() {
mAnimateKeyguardFadingOut = false;
if (!mAnimationStarted && mOnAnimationFinished != null) {
mOnAnimationFinished.run();
mOnAnimationFinished = null;
}
mAnimationStarted = false;
return true;
}
public void setBackDropView(BackDropView backDropView) {

View File

@@ -100,6 +100,7 @@ public class StatusBarKeyguardViewManager {
public void show(Bundle options) {
mShowing = true;
mStatusBarWindowManager.setKeyguardShowing(true);
mScrimController.abortKeyguardFadingOut();
reset();
}