From 6a1d698ace1a10f97242ce4478a32dbd24e2b1b2 Mon Sep 17 00:00:00 2001 From: Pablo Gamito Date: Fri, 18 Mar 2022 13:56:38 +0000 Subject: Don't increment colorLayerCounter on surface migration If the TDA's surface is migrated mid transition then the colorLayerCounter is increment an additional time leading to a colorLayerCounter that is out of sync by +1 which means the color is never cleared. Test: Run repo steps from b/221775939 and make sure the background color doesn't presist Bug: 221775939 Merged-In: Ifc93d5482bad9591e942e4be91e0039daae743b1 Change-Id: Ifc93d5482bad9591e942e4be91e0039daae743b1 --- .../core/java/com/android/server/wm/TaskDisplayArea.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index db6d3ce69cc8..15a294ee7484 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -971,9 +971,19 @@ final class TaskDisplayArea extends DisplayArea { } void setBackgroundColor(@ColorInt int colorInt) { + setBackgroundColor(colorInt, false /* restore */); + } + + void setBackgroundColor(@ColorInt int colorInt, boolean restore) { mBackgroundColor = colorInt; Color color = Color.valueOf(colorInt); - mColorLayerCounter++; + + // We don't want to increment the mColorLayerCounter if we are restoring the background + // color after a surface migration because in that case the mColorLayerCounter already + // accounts for setting that background color. + if (!restore) { + mColorLayerCounter++; + } // Only apply the background color if the TDA is actually attached and has a valid surface // to set the background color on. We still want to keep track of the background color state @@ -1002,7 +1012,7 @@ final class TaskDisplayArea extends DisplayArea { super.migrateToNewSurfaceControl(t); if (mColorLayerCounter > 0) { - setBackgroundColor(mBackgroundColor); + setBackgroundColor(mBackgroundColor, true /* restore */); } // As TaskDisplayArea is getting a new surface, reparent and reorder the child surfaces. -- cgit v1.2.3-59-g8ed1b