summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java69
-rw-r--r--services/core/java/com/android/server/policy/WindowManagerPolicy.java6
-rw-r--r--services/core/java/com/android/server/wm/AppTransition.java8
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java2
-rw-r--r--services/core/java/com/android/server/wm/DisplayPolicy.java2
-rw-r--r--services/core/java/com/android/server/wm/RecentsAnimationController.java2
-rw-r--r--services/core/java/com/android/server/wm/Transition.java2
-rw-r--r--services/core/java/com/android/server/wm/TransitionController.java2
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerInternal.java6
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TestWindowManagerPolicy.java2
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;
}