diff options
| -rw-r--r-- | services/core/java/com/android/server/policy/PhoneWindowManager.java | 24 |
1 files changed, 15 insertions, 9 deletions
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index afd9316092ff..be4fe09d593c 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -3341,7 +3341,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { mPendingKeyguardOccluded = occluded; mKeyguardOccludedChanged = true; } else { - setKeyguardOccludedLw(occluded, false /* transitionStarted */); + setKeyguardOccludedLw(occluded, false /* force */, + false /* transitionStarted */); } } @@ -3350,7 +3351,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (mKeyguardOccludedChanged) { if (DEBUG_KEYGUARD) Slog.d(TAG, "transition/occluded changed occluded=" + mPendingKeyguardOccluded); - if (setKeyguardOccludedLw(mPendingKeyguardOccluded, transitionStarted)) { + if (setKeyguardOccludedLw(mPendingKeyguardOccluded, false /* force */, + transitionStarted)) { return FINISH_LAYOUT_REDO_LAYOUT | FINISH_LAYOUT_REDO_WALLPAPER; } } @@ -3599,15 +3601,22 @@ public class PhoneWindowManager implements WindowManagerPolicy { } /** - * Updates the occluded state of the Keyguard immediately via - * {@link com.android.internal.policy.IKeyguardService}. + * Updates the occluded state of the Keyguard. * * @param isOccluded Whether the Keyguard is occluded by another window. + * @param force notify the occluded status to KeyguardService and update flags even though + * occlude status doesn't change. * @param transitionStarted {@code true} if keyguard (un)occluded transition started. * @return Whether the flags have changed and we have to redo the layout. */ - private boolean setKeyguardOccludedLw(boolean isOccluded, boolean transitionStarted) { + private boolean setKeyguardOccludedLw(boolean isOccluded, boolean force, + boolean transitionStarted) { if (DEBUG_KEYGUARD) Slog.d(TAG, "setKeyguardOccluded occluded=" + isOccluded); + mKeyguardOccludedChanged = false; + if (isKeyguardOccluded() == isOccluded && !force) { + return false; + } + final boolean showing = mKeyguardDelegate.isShowing(); final boolean animate = showing && !isOccluded; // When remote animation is enabled for keyguard (un)occlude transition, KeyguardService @@ -3615,10 +3624,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { // to notify here. final boolean notify = !WindowManagerService.sEnableRemoteKeyguardOccludeAnimation || !transitionStarted; - if (notify) { - mKeyguardOccludedChanged = false; - mKeyguardDelegate.setOccluded(isOccluded, animate, notify); - } + mKeyguardDelegate.setOccluded(isOccluded, animate, notify); return showing; } |