From b52b0457e1bad14697341cb81f6d391755b009be Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Tue, 16 Jul 2019 17:43:15 +0200 Subject: [PATCH] Only consider gone for layout if parent is gone for layout If we check getParentWindowHidden, that determines mostly actual visibility. However, we don't want that because we still would like to follow the parent's window layout lifecycle, as otherwise we may be stuck in a transition in case the parent window is hidden but the child is waiting for a layout to happen. Test: Click "Customize" on wallpaper picker, go back, ensure no transition timeout Fixes: 135976008 Change-Id: I66aeab29a81cd82b170aaf337249616b1f559848 --- services/core/java/com/android/server/wm/WindowState.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 9ea6e30ef89b7..f68d7c077e72d 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -1633,7 +1633,7 @@ class WindowState extends WindowContainer implements WindowManagerP || !mRelayoutCalled || (atoken == null && mToken.isHidden()) || (atoken != null && atoken.hiddenRequested) - || isParentWindowHidden() + || isParentWindowGoneForLayout() || (mAnimatingExit && !isAnimatingLw()) || mDestroying; } @@ -3840,6 +3840,11 @@ class WindowState extends WindowContainer implements WindowManagerP return parent != null && parent.mHidden; } + private boolean isParentWindowGoneForLayout() { + final WindowState parent = getParentWindow(); + return parent != null && parent.isGoneForLayoutLw(); + } + void setWillReplaceWindow(boolean animate) { for (int i = mChildren.size() - 1; i >= 0; i--) { final WindowState c = mChildren.get(i);