diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index 240e7fd8e9b05..b6712c097e231 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -265,7 +265,7 @@ class WindowState extends WindowContainer implements WindowManagerP // This is a non-system overlay window that is currently force hidden. private boolean mForceHideNonSystemOverlayWindow; boolean mAppFreezing; - boolean mHidden; // Used to determine if to show child windows. + boolean mHidden = true; // Used to determine if to show child windows. boolean mWallpaperVisible; // for wallpaper, what was last vis report? private boolean mDragResizing; private boolean mDragResizingChangeReported = true; @@ -4505,13 +4505,12 @@ class WindowState extends WindowContainer implements WindowManagerP if (!mAnimatingExit && mAppDied) { mIsDimming = true; dimmer.dimAbove(getPendingTransaction(), this, DEFAULT_DIM_AMOUNT_DEAD_WINDOW); - } else if ((mAttrs.flags & FLAG_DIM_BEHIND) != 0 && isVisibleNow() - && !mWinAnimator.mLastHidden) { + } else if ((mAttrs.flags & FLAG_DIM_BEHIND) != 0 && isVisibleNow() && !mHidden) { // Only show a dim behind when the following is satisfied: // 1. The window has the flag FLAG_DIM_BEHIND // 2. The WindowToken is not hidden so dims aren't shown when the window is exiting. // 3. The WS is considered visible according to the isVisible() method - // 4. The WSA is not hidden. + // 4. The WS is not hidden. mIsDimming = true; dimmer.dimBelow(getPendingTransaction(), this, mAttrs.dimAmount); } diff --git a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java index 2284bbbbf3acd..63ac4af472079 100644 --- a/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/DisplayContentTests.java @@ -28,6 +28,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR; import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION; import static com.android.server.wm.WindowContainer.POSITION_TOP; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -38,7 +39,6 @@ import org.junit.runner.RunWith; import android.annotation.SuppressLint; import android.content.res.Configuration; import android.graphics.Path; -import android.graphics.Point; import android.graphics.Rect; import android.os.SystemClock; import android.platform.test.annotations.Presubmit; @@ -166,6 +166,7 @@ public class DisplayContentTests extends WindowTestsBase { assertTrue(appWin.canBeImeTarget()); WindowState imeTarget = mDisplayContent.computeImeTarget(false /* updateImeTarget */); assertEquals(appWin, imeTarget); + appWin.mHidden = false; // Verify that an child window can be an ime target. final WindowState childWin = createWindow(appWin, diff --git a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java index 6a4710bb06a4e..4d41718e4da07 100644 --- a/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/WindowStateTests.java @@ -36,6 +36,7 @@ import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL; import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNull; @@ -57,15 +58,17 @@ public class WindowStateTests extends WindowTestsBase { final WindowState child1 = createWindow(parentWindow, FIRST_SUB_WINDOW, "child1"); final WindowState child2 = createWindow(parentWindow, FIRST_SUB_WINDOW, "child2"); - assertFalse(parentWindow.mHidden); + // parentWindow is initially set to hidden. + assertTrue(parentWindow.mHidden); + assertFalse(parentWindow.isParentWindowHidden()); + assertTrue(child1.isParentWindowHidden()); + assertTrue(child2.isParentWindowHidden()); + + parentWindow.mHidden = false; assertFalse(parentWindow.isParentWindowHidden()); assertFalse(child1.isParentWindowHidden()); assertFalse(child2.isParentWindowHidden()); - parentWindow.mHidden = true; - assertFalse(parentWindow.isParentWindowHidden()); - assertTrue(child1.isParentWindowHidden()); - assertTrue(child2.isParentWindowHidden()); } @Test