From e05d29e383a3635c19cb304cb5ac5e526b41851b Mon Sep 17 00:00:00 2001 From: Adrian Roos Date: Mon, 11 May 2020 17:10:49 +0200 Subject: [PATCH] InsetsSourceProvider: Fix serverVisible update order in onPostLayout Fixes an issue where serverVisible was only updated after updateFrames, but updating the frames depends on the server visibility being correct since [1]. Also addresses an issue in the test fixture which prevented this regression from being caught: the server visibility is now set by onPostLayout, instead of onSetup, to mirror how the server visibility would be set at runtime. [1]: Id2c482e112c1d73cf7d5b3ba5e1a2d5775f47298 Fixes: 156226586 Test: atest ScreenDecorWindowTests InsetsSourceProviderTest Change-Id: Id90e6315e9fe230307929a8d992a76a5dae1107c --- .../core/java/com/android/server/wm/InsetsSourceProvider.java | 4 ++-- .../src/com/android/server/wm/InsetsSourceProviderTest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/wm/InsetsSourceProvider.java b/services/core/java/com/android/server/wm/InsetsSourceProvider.java index dfd44f549c494..a6a21fc557702 100644 --- a/services/core/java/com/android/server/wm/InsetsSourceProvider.java +++ b/services/core/java/com/android/server/wm/InsetsSourceProvider.java @@ -219,6 +219,8 @@ class InsetsSourceProvider { return; } + setServerVisible(mWin.wouldBeVisibleIfPolicyIgnored() && mWin.isVisibleByPolicy() + && !mWin.mGivenInsetsPending); updateSourceFrame(); if (mControl != null) { final Rect frame = mWin.getWindowFrames().mFrame; @@ -228,8 +230,6 @@ class InsetsSourceProvider { mStateController.notifyControlChanged(mControlTarget); } } - setServerVisible(mWin.wouldBeVisibleIfPolicyIgnored() && mWin.isVisibleByPolicy() - && !mWin.mGivenInsetsPending); } /** diff --git a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java index 9bf9ffed57be3..1d6dd0b566a10 100644 --- a/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/InsetsSourceProviderTest.java @@ -54,7 +54,6 @@ public class InsetsSourceProviderTest extends WindowTestsBase { mSource.setVisible(true); mProvider = new InsetsSourceProvider(mSource, mDisplayContent.getInsetsStateController(), mDisplayContent); - mProvider.setServerVisible(true); mImeProvider = new InsetsSourceProvider(mImeSource, mDisplayContent.getInsetsStateController(), mDisplayContent); } @@ -106,6 +105,7 @@ public class InsetsSourceProviderTest extends WindowTestsBase { public void testPostLayout_frameProvider() { final WindowState statusBar = createWindow(null, TYPE_APPLICATION, "statusBar"); statusBar.getFrameLw().set(0, 0, 500, 100); + statusBar.mHasSurface = true; mProvider.setWindow(statusBar, (displayFrames, windowState, rect) -> { rect.set(10, 10, 20, 20);