Call requestFocus and ensure that screenOn is set.
When maybeCreateKeyguardLocked was called from methods other than show(), the requestFocus() call on the new KeyguardHostView was never made. At boot time the screen on notification was not propagated to KeyguardViewManager because the showListener callback was null. This passes on the notification but does not make the callback if it is null. Bug: 7299119 fixed. Change-Id: Iaf058954473dc63fe4864ab1f435db4463b1110e
This commit is contained in:
@@ -43,7 +43,7 @@ import com.android.internal.widget.LockPatternUtils;
|
||||
|
||||
/**
|
||||
* Manages creating, showing, hiding and resetting the keyguard. Calls back
|
||||
* via {@link com.android.internal.policy.impl.KeyguardViewCallback} to poke
|
||||
* via {@link KeyguardViewMediator.ViewMediatorCallback} to poke
|
||||
* the wake lock and report that the keyguard is done, which is in turn,
|
||||
* reported to this class by the current {@link KeyguardViewBase}.
|
||||
*/
|
||||
@@ -233,6 +233,7 @@ public class KeyguardViewManager {
|
||||
|
||||
if (mScreenOn) {
|
||||
mKeyguardView.show();
|
||||
mKeyguardView.requestFocus();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -314,22 +315,25 @@ public class KeyguardViewManager {
|
||||
|
||||
// Caller should wait for this window to be shown before turning
|
||||
// on the screen.
|
||||
if (mKeyguardHost.getVisibility() == View.VISIBLE) {
|
||||
// Keyguard may be in the process of being shown, but not yet
|
||||
// updated with the window manager... give it a chance to do so.
|
||||
mKeyguardHost.post(new Runnable() {
|
||||
public void run() {
|
||||
if (mKeyguardHost.getVisibility() == View.VISIBLE) {
|
||||
showListener.onShown(mKeyguardHost.getWindowToken());
|
||||
} else {
|
||||
showListener.onShown(null);
|
||||
if (showListener != null) {
|
||||
if (mKeyguardHost.getVisibility() == View.VISIBLE) {
|
||||
// Keyguard may be in the process of being shown, but not yet
|
||||
// updated with the window manager... give it a chance to do so.
|
||||
mKeyguardHost.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (mKeyguardHost.getVisibility() == View.VISIBLE) {
|
||||
showListener.onShown(mKeyguardHost.getWindowToken());
|
||||
} else {
|
||||
showListener.onShown(null);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
} else {
|
||||
showListener.onShown(null);
|
||||
});
|
||||
} else {
|
||||
showListener.onShown(null);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
} else if (showListener != null) {
|
||||
showListener.onShown(null);
|
||||
}
|
||||
}
|
||||
@@ -356,10 +360,9 @@ public class KeyguardViewManager {
|
||||
if (mKeyguardView != null) {
|
||||
mKeyguardView.wakeWhenReadyTq(keyCode);
|
||||
return true;
|
||||
} else {
|
||||
Log.w(TAG, "mKeyguardView is null in wakeWhenReadyTq");
|
||||
return false;
|
||||
}
|
||||
Log.w(TAG, "mKeyguardView is null in wakeWhenReadyTq");
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -382,6 +385,7 @@ public class KeyguardViewManager {
|
||||
final KeyguardViewBase lastView = mKeyguardView;
|
||||
mKeyguardView = null;
|
||||
mKeyguardHost.postDelayed(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
synchronized (KeyguardViewManager.this) {
|
||||
lastView.cleanUp();
|
||||
|
||||
@@ -629,9 +629,7 @@ public class KeyguardViewMediator {
|
||||
mScreenOn = true;
|
||||
cancelDoKeyguardLaterLocked();
|
||||
if (DEBUG) Log.d(TAG, "onScreenTurnedOn, seq = " + mDelayedShowingSequence);
|
||||
if (showListener != null) {
|
||||
notifyScreenOnLocked(showListener);
|
||||
}
|
||||
notifyScreenOnLocked(showListener);
|
||||
}
|
||||
maybeSendUserPresentBroadcast();
|
||||
}
|
||||
@@ -1365,7 +1363,7 @@ public class KeyguardViewMediator {
|
||||
|
||||
/**
|
||||
* Handle message sent by {@link #verifyUnlock}
|
||||
* @see #RESET
|
||||
* @see #VERIFY_UNLOCK
|
||||
*/
|
||||
private void handleVerifyUnlock() {
|
||||
synchronized (KeyguardViewMediator.this) {
|
||||
|
||||
Reference in New Issue
Block a user