diff options
11 files changed, 56 insertions, 47 deletions
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 937a7891a849..756c7d39eabd 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -2085,19 +2085,26 @@ public class PhoneWindowManager implements WindowManagerPolicy { public int onAppTransitionStartingLocked(boolean keyguardGoingAway, boolean keyguardOccluding, long duration, long statusBarAnimationStartTime, long statusBarAnimationDuration) { - // When remote animation is enabled for KEYGUARD_GOING_AWAY transition, SysUI - // receives IRemoteAnimationRunner#onAnimationStart to start animation, so we don't - // need to call IKeyguardService#keyguardGoingAway here. - return handleStartTransitionForKeyguardLw(keyguardGoingAway - && !WindowManagerService.sEnableRemoteKeyguardGoingAwayAnimation, - keyguardOccluding, duration); + // When remote animation is enabled for keyguard transition, SysUI receives + // IRemoteAnimationRunner#onAnimationStart to start animation, so we don't + // need to call IKeyguardService#keyguardGoingAway and #setOccluded. + final boolean notifyOccluded = + !WindowManagerService.sEnableRemoteKeyguardOccludeAnimation + && keyguardOccluding; + final boolean startKeyguardExitAnimation = + !WindowManagerService.sEnableRemoteKeyguardGoingAwayAnimation + && keyguardGoingAway; + return handleTransitionForKeyguardLw(startKeyguardExitAnimation, + notifyOccluded, duration); } @Override - public void onAppTransitionCancelledLocked(boolean keyguardGoingAway) { - handleStartTransitionForKeyguardLw( - keyguardGoingAway, false /* keyguardOccludingStarted */, - 0 /* duration */); + public void onAppTransitionCancelledLocked(boolean keyguardGoingAwayCancelled) { + // When KEYGUARD_GOING_AWAY app transition is canceled, we need to trigger relevant + // IKeyguardService calls to sync keyguard status in WindowManagerService and SysUI. + handleTransitionForKeyguardLw( + keyguardGoingAwayCancelled /* startKeyguardExitAnimation */, + true /* notifyOccluded */, 0 /* duration */); } }); @@ -3262,29 +3269,38 @@ public class PhoneWindowManager implements WindowManagerPolicy { mPendingKeyguardOccluded = occluded; mKeyguardOccludedChanged = true; } else { - setKeyguardOccludedLw(occluded, false /* force */, - false /* transitionStarted */); + setKeyguardOccludedLw(occluded, true /* notify */); } } @Override - public int applyKeyguardOcclusionChange(boolean transitionStarted) { + public int applyKeyguardOcclusionChange(boolean notify) { if (mKeyguardOccludedChanged) { if (DEBUG_KEYGUARD) Slog.d(TAG, "transition/occluded changed occluded=" + mPendingKeyguardOccluded); - if (setKeyguardOccludedLw(mPendingKeyguardOccluded, false /* force */, - transitionStarted)) { + if (setKeyguardOccludedLw(mPendingKeyguardOccluded, notify)) { return FINISH_LAYOUT_REDO_LAYOUT | FINISH_LAYOUT_REDO_WALLPAPER; } } return 0; } - private int handleStartTransitionForKeyguardLw(boolean keyguardGoingAway, - boolean keyguardOccluding, long duration) { - final int redoLayout = applyKeyguardOcclusionChange(keyguardOccluding); + /** + * Called when keyguard related app transition starts, or cancelled. + * + * @param startKeyguardExitAnimation Trigger IKeyguardService#startKeyguardExitAnimation to + * start keyguard exit animation. + * @param notifyOccluded Trigger IKeyguardService#setOccluded binder call to notify whether + * the top activity can occlude the keyguard or not. + * @param duration the duration of the exit animation, in milliseconds. + * + * @return Whether the flags have changed and we have to redo the layout. + */ + private int handleTransitionForKeyguardLw(boolean startKeyguardExitAnimation, + boolean notifyOccluded, long duration) { + final int redoLayout = applyKeyguardOcclusionChange(notifyOccluded); if (redoLayout != 0) return redoLayout; - if (keyguardGoingAway) { + if (startKeyguardExitAnimation) { if (DEBUG_KEYGUARD) Slog.d(TAG, "Starting keyguard exit animation"); startKeyguardExitAnimation(SystemClock.uptimeMillis(), duration); } @@ -3518,26 +3534,19 @@ public class PhoneWindowManager implements WindowManagerPolicy { * 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. + * @param notify Notify keyguard occlude status change immediately via + * {@link com.android.internal.policy.IKeyguardService}. * @return Whether the flags have changed and we have to redo the layout. */ - private boolean setKeyguardOccludedLw(boolean isOccluded, boolean force, - boolean transitionStarted) { + private boolean setKeyguardOccludedLw(boolean isOccluded, boolean notify) { if (DEBUG_KEYGUARD) Slog.d(TAG, "setKeyguardOccluded occluded=" + isOccluded); mKeyguardOccludedChanged = false; - if (isKeyguardOccluded() == isOccluded && !force) { + if (isKeyguardOccluded() == isOccluded) { return false; } final boolean showing = mKeyguardDelegate.isShowing(); final boolean animate = showing && !isOccluded; - // When remote animation is enabled for keyguard (un)occlude transition, KeyguardService - // uses remote animation start as a signal to update its occlusion status ,so we don't need - // to notify here. - final boolean notify = !WindowManagerService.sEnableRemoteKeyguardOccludeAnimation - || !transitionStarted; mKeyguardDelegate.setOccluded(isOccluded, animate, notify); return showing; } diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java index 4f00992c713e..034bf1d5dfdb 100644 --- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java +++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java @@ -171,10 +171,10 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { void onKeyguardOccludedChangedLw(boolean occluded); /** - * Applies a keyguard occlusion change if one happened. - * @param transitionStarted Whether keyguard (un)occlude transition is starting or not. + * @param notify {@code true} if the status change should be immediately notified via + * {@link com.android.internal.policy.IKeyguardService} */ - int applyKeyguardOcclusionChange(boolean transitionStarted); + int applyKeyguardOcclusionChange(boolean notify); /** * Interface to the Window Manager state associated with a particular diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index 55d6b2fe8226..be98e93c57e3 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -416,7 +416,7 @@ public class AppTransition implements Dump { } void freeze() { - final boolean keyguardGoingAway = mNextAppTransitionRequests.contains( + final boolean keyguardGoingAwayCancelled = mNextAppTransitionRequests.contains( TRANSIT_KEYGUARD_GOING_AWAY); // The RemoteAnimationControl didn't register AppTransitionListener and @@ -429,7 +429,7 @@ public class AppTransition implements Dump { mNextAppTransitionRequests.clear(); clear(); setReady(); - notifyAppTransitionCancelledLocked(keyguardGoingAway); + notifyAppTransitionCancelledLocked(keyguardGoingAwayCancelled); } private void setAppTransitionState(int state) { @@ -479,9 +479,9 @@ public class AppTransition implements Dump { } } - private void notifyAppTransitionCancelledLocked(boolean keyguardGoingAway) { + private void notifyAppTransitionCancelledLocked(boolean keyguardGoingAwayCancelled) { for (int i = 0; i < mListeners.size(); i++) { - mListeners.get(i).onAppTransitionCancelledLocked(keyguardGoingAway); + mListeners.get(i).onAppTransitionCancelledLocked(keyguardGoingAwayCancelled); } } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 8a34af3b0107..628c56f23d19 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -6598,7 +6598,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } @Override - public void onAppTransitionCancelledLocked(boolean keyguardGoingAway) { + public void onAppTransitionCancelledLocked(boolean keyguardGoingAwayCancelled) { // It is only needed when freezing display in legacy transition. if (mTransitionController.isShellTransitionsEnabled()) return; continueUpdateOrientationForDiffOrienLaunchingApp(); diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index 1a34c93f2ad6..2f0c88758c3a 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -616,7 +616,7 @@ public class DisplayPolicy { } @Override - public void onAppTransitionCancelledLocked(boolean keyguardGoingAway) { + public void onAppTransitionCancelledLocked(boolean keyguardGoingAwayCancelled) { mHandler.post(mAppTransitionCancelled); } diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java index 5b702eac7059..cf5481466269 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimationController.java +++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java @@ -169,7 +169,7 @@ public class RecentsAnimationController implements DeathRecipient { } @Override - public void onAppTransitionCancelledLocked(boolean keyguardGoingAway) { + public void onAppTransitionCancelledLocked(boolean keyguardGoingAwayCancelled) { continueDeferredCancel(); } diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 2d3e437bed60..7da75f5e1b0c 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -1095,7 +1095,7 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe } if ((flags & TRANSIT_FLAG_KEYGUARD_LOCKED) != 0) { mController.mAtm.mWindowManager.mPolicy.applyKeyguardOcclusionChange( - true /* keyguardOccludingStarted */); + false /* notify */); } } diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java index 846aa3e3739a..e74ce946dcdb 100644 --- a/services/core/java/com/android/server/wm/TransitionController.java +++ b/services/core/java/com/android/server/wm/TransitionController.java @@ -656,7 +656,7 @@ class TransitionController { void dispatchLegacyAppTransitionCancelled() { for (int i = 0; i < mLegacyListeners.size(); ++i) { mLegacyListeners.get(i).onAppTransitionCancelledLocked( - false /* keyguardGoingAway */); + false /* keyguardGoingAwayCancelled */); } } diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java index a71c3866ba38..1f2c6cef9cc6 100644 --- a/services/core/java/com/android/server/wm/WindowManagerInternal.java +++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java @@ -219,10 +219,10 @@ public abstract class WindowManagerInternal { /** * Called when a pending app transition gets cancelled. - * - * @param keyguardGoingAway true if keyguard going away transition got cancelled. + * @param keyguardGoingAwayCancelled {@code true} if keyguard going away transition was + * cancelled. */ - public void onAppTransitionCancelledLocked(boolean keyguardGoingAway) {} + public void onAppTransitionCancelledLocked(boolean keyguardGoingAwayCancelled) {} /** * Called when an app transition is timed out. diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 22411bb068a0..8e38e82753ba 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -1118,7 +1118,7 @@ public class WindowManagerService extends IWindowManager.Stub = new WindowManagerInternal.AppTransitionListener() { @Override - public void onAppTransitionCancelledLocked(boolean keyguardGoingAway) { + public void onAppTransitionCancelledLocked(boolean keyguardGoingAwayCancelled) { } @Override diff --git a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java index d2cb7ba5d311..d4525d7109c9 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java +++ b/services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java @@ -314,7 +314,7 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { } @Override - public int applyKeyguardOcclusionChange(boolean keyguardOccludingStarted) { + public int applyKeyguardOcclusionChange(boolean notify) { return 0; } |