diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java index 8174c139cf640..c640b2a2a56ea 100644 --- a/services/core/java/com/android/server/wm/DockedStackDividerController.java +++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java @@ -377,7 +377,7 @@ public class DockedStackDividerController implements DimLayerUser { // If the app that having visibility change is not the top visible one in the task, // it does not affect whether the docked stack is minimized, ignore it. - if (task.getTopVisibleAppToken() == null || task.getTopVisibleAppToken() != wtoken) { + if (task.getTopAppToken() == null || task.getTopAppToken() != wtoken) { return; } @@ -598,7 +598,7 @@ public class DockedStackDividerController implements DimLayerUser { } private boolean animateForMinimizedDockedStack(long now) { - final TaskStack stack = mDisplayContent.getDockedStackVisibleForUserLocked(); + final TaskStack stack = mService.mStackIdToStack.get(DOCKED_STACK_ID); if (!mAnimationStarted) { mAnimationStarted = true; mAnimationStartTime = now; diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 6925fa597c4b8..8d41dab431f7e 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -719,6 +719,10 @@ class Task implements DimLayer.DimLayerUser { return null; } + AppWindowToken getTopAppToken() { + return mAppTokens.size() > 0 ? mAppTokens.get(mAppTokens.size() - 1) : null; + } + @Override public boolean isFullscreen() { if (useCurrentBounds()) { diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 7c1d2d715a5b4..4224c57a95ed3 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -1098,6 +1098,14 @@ public class TaskStack implements DimLayer.DimLayerUser, pw.println(prefix + "mDeferDetach=" + mDeferDetach); pw.println(prefix + "mFullscreen=" + mFullscreen); pw.println(prefix + "mBounds=" + mBounds.toShortString()); + if (mMinimizeAmount != 0f) { + pw.println(prefix + "mMinimizeAmout=" + mMinimizeAmount); + } + if (mAdjustedForIme) { + pw.println(prefix + "mAdjustedForIme=true"); + pw.println(prefix + "mAdjustImeAmount=" + mAdjustImeAmount); + pw.println(prefix + "mAdjustDividerAmount=" + mAdjustDividerAmount); + } if (!mAdjustedBounds.isEmpty()) { pw.println(prefix + "mAdjustedBounds=" + mAdjustedBounds.toShortString()); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 534c661d0618e..e4be5a8d56eb5 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -4333,15 +4333,21 @@ public class WindowManagerService extends IWindowManager.Stub } } - if (visibilityChanged && !delayed) { - if (visible) { + if (visibilityChanged) { + if (visible && !delayed) { // The token was made immediately visible, there will be no entrance animation. // We need to inform the client the enter animation was finished. wtoken.mEnteringAnimation = true; mActivityManagerAppTransitionNotifier.onAppTransitionFinishedLocked(wtoken.token); } - getDefaultDisplayContentLocked().getDockedDividerController() - .notifyAppVisibilityChanged(wtoken, visible); + + if (!mClosingApps.contains(wtoken) && !mOpeningApps.contains(wtoken)) { + // The token is not closing nor opening, so even if there is an animation set, that + // doesn't mean that it goes through the normal app transition cycle so we have + // to inform the docked controller about visibility change. + getDefaultDisplayContentLocked().getDockedDividerController() + .notifyAppVisibilityChanged(wtoken, visible); + } } return delayed;