From 1ffefc21a2f59d3805f3242f87a86f3dccfd8978 Mon Sep 17 00:00:00 2001 From: Tiger Huang Date: Mon, 8 Apr 2019 15:49:18 +0800 Subject: [PATCH] Set mEnterAnimationPending to true if a window was not visible mEnterAnimationPending will be cleared when enter-animation is applied. However, if a window was already visible, the enter-animation won't be applied. This CL ensures mEnterAnimationPending is set to true only if a window was not visible to prevent the state of mEnterAnimationPending from being leaked. Bug: 128510422 Test: Manual: 1. Go to Settings > Accessibility > Magnification > Magnify with triple-tap. 2. Turn on "Use service". 3. Triple-tap. 4. Press [back] button. 5. See if the orange border is around the entire screen except the navigation bar. Note: 1. ~ 4. should be done within 10 seconds. Change-Id: Id1a811175214af25ec8014b3f5814cff16d70331 --- .../core/java/com/android/server/wm/WindowManagerService.java | 2 +- services/core/java/com/android/server/wm/WindowState.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index ce496f47be54f..8ed2a15b2b98c 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -2107,7 +2107,7 @@ public class WindowManagerService extends IWindowManager.Stub if (shouldRelayout) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "relayoutWindow: viewVisibility_1"); - result = win.relayoutVisibleWindow(result, attrChanges, oldVisibility); + result = win.relayoutVisibleWindow(result, attrChanges); try { result = createSurfaceControl(outSurfaceControl, result, win, winAnimator); diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 08ade37c995ca..d990e6c6c24b2 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -4446,7 +4446,7 @@ class WindowState extends WindowContainer implements WindowManagerP return !mLastSurfaceInsets.equals(mAttrs.surfaceInsets); } - int relayoutVisibleWindow(int result, int attrChanges, int oldVisibility) { + int relayoutVisibleWindow(int result, int attrChanges) { final boolean wasVisible = isVisibleLw(); result |= (!wasVisible || !isDrawnLw()) ? RELAYOUT_RES_FIRST_TIME : 0; @@ -4466,7 +4466,7 @@ class WindowState extends WindowContainer implements WindowManagerP mDestroying = false; mWmService.mDestroySurface.remove(this); } - if (oldVisibility == View.GONE) { + if (!wasVisible) { mWinAnimator.mEnterAnimationPending = true; }