From 699e36062405fa66e8504b746492201bfab36b9d Mon Sep 17 00:00:00 2001 From: Charles Chen Date: Thu, 10 Jan 2019 15:00:25 +0800 Subject: [PATCH] Fix flaky navBar test in CTS This patch is to fix the timing issue, which is adding a navigation bar when a new display with system decoration support is created. When WMS#hasNavigationBar is called in createNavigationBar, the method may return false even if the display DOES support system decorations since DisplayContent is not yet created. It is because RootActivityContainer, which creates ActivityDisplay and also DisplayContent indirectly, uses DisplayThread to do it, which makes itself not receive the message until everyone is informed about the change. Change to use UiThread to fix this issue. Bug: 120748674 Test: atest ActivityMultiDisplayTests Test: atest ActivityMultiDisplayTests#testNavBarShowingOnDisplayWithDecor * 200 Change-Id: I733bbbe8deee452af87f0f1ca09316c207d82da3 --- .../core/java/com/android/server/wm/RootActivityContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/wm/RootActivityContainer.java b/services/core/java/com/android/server/wm/RootActivityContainer.java index f55c7c96e3259..d0eed5575253a 100644 --- a/services/core/java/com/android/server/wm/RootActivityContainer.java +++ b/services/core/java/com/android/server/wm/RootActivityContainer.java @@ -234,7 +234,7 @@ class RootActivityContainer extends ConfigurationContainer mWindowManager = wm; setWindowContainer(mWindowManager.mRoot); mDisplayManager = mService.mContext.getSystemService(DisplayManager.class); - mDisplayManager.registerDisplayListener(this, mService.mH); + mDisplayManager.registerDisplayListener(this, mService.mUiHandler); mDisplayManagerInternal = LocalServices.getService(DisplayManagerInternal.class); final Display[] displays = mDisplayManager.getDisplays();