Skip to content

Commit 7710199

Browse files
Dianne HackbornAndroid (Google) Code Review
authored andcommitted
Merge "Bring up unlock screen for FLAG_DISMISS_KEYGUARD." into jb-mr1-dev
2 parents ac14efc + ad09bcc commit 7710199

File tree

5 files changed

+71
-10
lines changed

5 files changed

+71
-10
lines changed

policy/src/com/android/internal/policy/impl/PhoneWindowManager.java

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,17 @@ public void onInputEvent(InputEvent event) {
412412
boolean mForceStatusBar;
413413
boolean mForceStatusBarFromKeyguard;
414414
boolean mHideLockScreen;
415-
boolean mDismissKeyguard;
415+
416+
// States of keyguard dismiss.
417+
private static final int DISMISS_KEYGUARD_NONE = 0; // Keyguard not being dismissed.
418+
private static final int DISMISS_KEYGUARD_START = 1; // Keyguard needs to be dismissed.
419+
private static final int DISMISS_KEYGUARD_CONTINUE = 2; // Keyguard has been dismissed.
420+
int mDismissKeyguard = DISMISS_KEYGUARD_NONE;
421+
422+
/** The window that is currently dismissing the keyguard. Dismissing the keyguard must only
423+
* be done once per window. */
424+
private WindowState mWinDismissingKeyguard;
425+
416426
boolean mShowingLockscreen;
417427
boolean mShowingDream;
418428
boolean mDreamingLockscreen;
@@ -2921,19 +2931,21 @@ public void finishLayoutLw() {
29212931
}
29222932

29232933
/** {@inheritDoc} */
2934+
@Override
29242935
public void beginPostLayoutPolicyLw(int displayWidth, int displayHeight) {
29252936
mTopFullscreenOpaqueWindowState = null;
29262937
mForceStatusBar = false;
29272938
mForceStatusBarFromKeyguard = false;
29282939

29292940
mHideLockScreen = false;
29302941
mAllowLockscreenWhenOn = false;
2931-
mDismissKeyguard = false;
2942+
mDismissKeyguard = DISMISS_KEYGUARD_NONE;
29322943
mShowingLockscreen = false;
29332944
mShowingDream = false;
29342945
}
29352946

29362947
/** {@inheritDoc} */
2948+
@Override
29372949
public void applyPostLayoutPolicyLw(WindowState win,
29382950
WindowManager.LayoutParams attrs) {
29392951
if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisibleOrBehindKeyguardLw="
@@ -2971,9 +2983,12 @@ public void applyPostLayoutPolicyLw(WindowState win,
29712983
mHideLockScreen = true;
29722984
mForceStatusBarFromKeyguard = false;
29732985
}
2974-
if ((attrs.flags & FLAG_DISMISS_KEYGUARD) != 0) {
2986+
if ((attrs.flags & FLAG_DISMISS_KEYGUARD) != 0
2987+
&& mDismissKeyguard == DISMISS_KEYGUARD_NONE) {
29752988
if (DEBUG_LAYOUT) Log.v(TAG, "Setting mDismissKeyguard to true by win " + win);
2976-
mDismissKeyguard = true;
2989+
mDismissKeyguard = mWinDismissingKeyguard == win ?
2990+
DISMISS_KEYGUARD_CONTINUE : DISMISS_KEYGUARD_START;
2991+
mWinDismissingKeyguard = win;
29772992
mForceStatusBarFromKeyguard = false;
29782993
}
29792994
if ((attrs.flags & FLAG_ALLOW_LOCK_WHILE_SCREEN_ON) != 0) {
@@ -2984,6 +2999,7 @@ public void applyPostLayoutPolicyLw(WindowState win,
29842999
}
29853000

29863001
/** {@inheritDoc} */
3002+
@Override
29873003
public int finishPostLayoutPolicyLw() {
29883004
int changes = 0;
29893005
boolean topIsFullscreen = false;
@@ -3023,7 +3039,9 @@ public int finishPostLayoutPolicyLw() {
30233039
if (mStatusBar.hideLw(true)) {
30243040
changes |= FINISH_LAYOUT_REDO_LAYOUT;
30253041

3026-
mHandler.post(new Runnable() { public void run() {
3042+
mHandler.post(new Runnable() {
3043+
@Override
3044+
public void run() {
30273045
try {
30283046
IStatusBarService statusbar = getStatusBarService();
30293047
if (statusbar != null) {
@@ -3051,14 +3069,15 @@ public int finishPostLayoutPolicyLw() {
30513069
if (mKeyguard != null) {
30523070
if (localLOGV) Log.v(TAG, "finishPostLayoutPolicyLw: mHideKeyguard="
30533071
+ mHideLockScreen);
3054-
if (mDismissKeyguard && !mKeyguardMediator.isSecure()) {
3072+
if (mDismissKeyguard != DISMISS_KEYGUARD_NONE && !mKeyguardMediator.isSecure()) {
30553073
if (mKeyguard.hideLw(true)) {
30563074
changes |= FINISH_LAYOUT_REDO_LAYOUT
30573075
| FINISH_LAYOUT_REDO_CONFIG
30583076
| FINISH_LAYOUT_REDO_WALLPAPER;
30593077
}
30603078
if (mKeyguardMediator.isShowing()) {
30613079
mHandler.post(new Runnable() {
3080+
@Override
30623081
public void run() {
30633082
mKeyguardMediator.keyguardDone(false, false);
30643083
}
@@ -3071,7 +3090,25 @@ public void run() {
30713090
| FINISH_LAYOUT_REDO_WALLPAPER;
30723091
}
30733092
mKeyguardMediator.setHidden(true);
3093+
} else if (mDismissKeyguard != DISMISS_KEYGUARD_NONE) {
3094+
// This is the case of keyguard isSecure() and not mHideLockScreen.
3095+
if (mDismissKeyguard == DISMISS_KEYGUARD_START) {
3096+
// Only launch the next keyguard unlock window once per window.
3097+
if (mKeyguard.showLw(true)) {
3098+
changes |= FINISH_LAYOUT_REDO_LAYOUT
3099+
| FINISH_LAYOUT_REDO_CONFIG
3100+
| FINISH_LAYOUT_REDO_WALLPAPER;
3101+
}
3102+
mKeyguardMediator.setHidden(false);
3103+
mHandler.post(new Runnable() {
3104+
@Override
3105+
public void run() {
3106+
mKeyguardMediator.dismiss();
3107+
}
3108+
});
3109+
}
30743110
} else {
3111+
mWinDismissingKeyguard = null;
30753112
if (mKeyguard.showLw(true)) {
30763113
changes |= FINISH_LAYOUT_REDO_LAYOUT
30773114
| FINISH_LAYOUT_REDO_CONFIG
@@ -4549,6 +4586,7 @@ public void dump(String prefix, PrintWriter pw, String[] args) {
45494586
pw.print(" mForceStatusBarFromKeyguard=");
45504587
pw.println(mForceStatusBarFromKeyguard);
45514588
pw.print(prefix); pw.print("mDismissKeyguard="); pw.print(mDismissKeyguard);
4589+
pw.print(" mWinDismissingKeyguard="); pw.print(mWinDismissingKeyguard);
45524590
pw.print(" mHomePressed="); pw.println(mHomePressed);
45534591
pw.print(prefix); pw.print("mAllowLockscreenWhenOn="); pw.print(mAllowLockscreenWhenOn);
45544592
pw.print(" mLockScreenTimeout="); pw.print(mLockScreenTimeout);

policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1201,4 +1201,10 @@ public boolean handleBackKey() {
12011201
return false;
12021202
}
12031203

1204+
/**
1205+
* Dismisses the keyguard by going to the next screen or making it gone.
1206+
*/
1207+
public void dismiss() {
1208+
showNextSecurityScreenOrFinish(false);
1209+
}
12041210
}

policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewManager.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public class KeyguardViewManager {
6565
private FrameLayout mKeyguardHost;
6666
private KeyguardHostView mKeyguardView;
6767

68+
private boolean mScreenOn = false;
6869
private LockPatternUtils mLockPatternUtils;
6970

7071
public interface ShowListener {
@@ -302,6 +303,7 @@ public synchronized void reset(Bundle options) {
302303

303304
public synchronized void onScreenTurnedOff() {
304305
if (DEBUG) Log.d(TAG, "onScreenTurnedOff()");
306+
mScreenOn = false;
305307
if (mKeyguardView != null) {
306308
mKeyguardView.onScreenTurnedOff();
307309
}
@@ -310,6 +312,7 @@ public synchronized void onScreenTurnedOff() {
310312
public synchronized void onScreenTurnedOn(
311313
final KeyguardViewManager.ShowListener showListener) {
312314
if (DEBUG) Log.d(TAG, "onScreenTurnedOn()");
315+
mScreenOn = true;
313316
if (mKeyguardView != null) {
314317
mKeyguardView.onScreenTurnedOn();
315318

@@ -397,6 +400,15 @@ public void run() {
397400
}
398401
}
399402

403+
/**
404+
* Dismisses the keyguard by going to the next screen or making it gone.
405+
*/
406+
public synchronized void dismiss() {
407+
if (mScreenOn) {
408+
mKeyguardView.dismiss();
409+
}
410+
}
411+
400412
/**
401413
* @return Whether the keyguard is showing
402414
*/

policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewMediator.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -813,9 +813,7 @@ private void doKeyguardLocked() {
813813
}
814814

815815
/**
816-
* Enable the keyguard if the settings are appropriate. Return true if all
817-
* work that will happen is done; returns false if the caller can wait for
818-
* the keyguard to be shown.
816+
* Enable the keyguard if the settings are appropriate.
819817
*/
820818
private void doKeyguardLocked(Bundle options) {
821819
// if another app is disabling us, don't show
@@ -866,6 +864,13 @@ private void doKeyguardLocked(Bundle options) {
866864
showLocked(options);
867865
}
868866

867+
/**
868+
* Dismiss the keyguard through the security layers.
869+
*/
870+
public void dismiss() {
871+
mKeyguardViewManager.dismiss();
872+
}
873+
869874
/**
870875
* Send message to keyguard telling it to reset its state.
871876
* @param options options about how to show the keyguard

services/java/com/android/server/wm/WindowState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -282,7 +282,7 @@ final class WindowState implements WindowManagerPolicy.WindowState {
282282
mEnforceSizeCompat = (mAttrs.flags & FLAG_COMPATIBLE_WINDOW) != 0;
283283
if (WindowManagerService.localLOGV) Slog.v(
284284
TAG, "Window " + this + " client=" + c.asBinder()
285-
+ " token=" + token + " (" + mAttrs.token + ")");
285+
+ " token=" + token + " (" + mAttrs.token + ")" + " params=" + a);
286286
try {
287287
c.asBinder().linkToDeath(deathRecipient, 0);
288288
} catch (RemoteException e) {

0 commit comments

Comments
 (0)