From b672d860500120761bacb4fdde7aaa1d2fc93136 Mon Sep 17 00:00:00 2001 From: shawnlin Date: Thu, 3 Jun 2021 15:24:10 +0800 Subject: [PATCH] Reset the flag of attaching nav to app to prevent flickering The restoreNavigationBarFromApp() could now be called twice in live tile mode. Reset the mNavigationBarAttachedToApp once the nav bar is detached to prevent the nav fade-in animation playing twice. Bug: 189900722 Test: atest RecentsAnimationControllerTest Change-Id: Ifa02a7355d6503399de636646d73b9a4b6766a51 --- .../com/android/server/wm/RecentsAnimationController.java | 2 ++ .../android/server/wm/RecentsAnimationControllerTest.java | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/services/core/java/com/android/server/wm/RecentsAnimationController.java b/services/core/java/com/android/server/wm/RecentsAnimationController.java index 2feb8a7439304..e7ad18ff0b6b6 100644 --- a/services/core/java/com/android/server/wm/RecentsAnimationController.java +++ b/services/core/java/com/android/server/wm/RecentsAnimationController.java @@ -658,6 +658,8 @@ public class RecentsAnimationController implements DeathRecipient { if (!mNavigationBarAttachedToApp) { return; } + mNavigationBarAttachedToApp = false; + if (mStatusBar != null) { mStatusBar.setNavigationBarLumaSamplingEnabled(mDisplayId, true); } diff --git a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java index 41506f6ad9211..39a59c9e50646 100644 --- a/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java +++ b/services/tests/wmtests/src/com/android/server/wm/RecentsAnimationControllerTest.java @@ -519,12 +519,14 @@ public class RecentsAnimationControllerTest extends WindowTestsBase { eq(mDefaultDisplay.mDisplayId), eq(false)); verify(transaction).reparent(navToken.getSurfaceControl(), activity.getSurfaceControl()); verify(transaction).setLayer(navToken.getSurfaceControl(), Integer.MAX_VALUE); + assertTrue(mController.isNavigationBarAttachedToApp()); mController.cleanupAnimation(REORDER_MOVE_TO_TOP); verify(mController).restoreNavigationBarFromApp(eq(true)); verify(mController.mStatusBar).setNavigationBarLumaSamplingEnabled( eq(mDefaultDisplay.mDisplayId), eq(true)); verify(transaction).setLayer(navToken.getSurfaceControl(), 0); + assertFalse(mController.isNavigationBarAttachedToApp()); } @Test @@ -541,6 +543,7 @@ public class RecentsAnimationControllerTest extends WindowTestsBase { eq(mDefaultDisplay.mDisplayId), eq(false)); verify(transaction).reparent(navToken.getSurfaceControl(), activity.getSurfaceControl()); verify(transaction).setLayer(navToken.getSurfaceControl(), Integer.MAX_VALUE); + assertTrue(mController.isNavigationBarAttachedToApp()); final WindowContainer parent = navToken.getParent(); @@ -550,6 +553,7 @@ public class RecentsAnimationControllerTest extends WindowTestsBase { eq(mDefaultDisplay.mDisplayId), eq(true)); verify(transaction).setLayer(navToken.getSurfaceControl(), 0); verify(transaction).reparent(navToken.getSurfaceControl(), parent.getSurfaceControl()); + assertFalse(mController.isNavigationBarAttachedToApp()); } @Test @@ -566,6 +570,7 @@ public class RecentsAnimationControllerTest extends WindowTestsBase { eq(mDefaultDisplay.mDisplayId), eq(false)); verify(transaction).reparent(navToken.getSurfaceControl(), activity.getSurfaceControl()); verify(transaction).setLayer(navToken.getSurfaceControl(), Integer.MAX_VALUE); + assertTrue(mController.isNavigationBarAttachedToApp()); final WindowContainer parent = navToken.getParent(); @@ -575,6 +580,7 @@ public class RecentsAnimationControllerTest extends WindowTestsBase { verify(mController.mStatusBar).setNavigationBarLumaSamplingEnabled( eq(mDefaultDisplay.mDisplayId), eq(true)); verify(transaction).setLayer(navToken.getSurfaceControl(), 0); + assertFalse(mController.isNavigationBarAttachedToApp()); } @Test @@ -607,6 +613,7 @@ public class RecentsAnimationControllerTest extends WindowTestsBase { eq(mDefaultDisplay.mDisplayId), eq(false)); verify(navWindow).setSurfaceTranslationY(-secondary.getBounds().top); verify(transaction).reparent(navToken.getSurfaceControl(), secondary.getSurfaceControl()); + assertTrue(mController.isNavigationBarAttachedToApp()); reset(navWindow); mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION); @@ -616,6 +623,7 @@ public class RecentsAnimationControllerTest extends WindowTestsBase { verify(navWindow).setSurfaceTranslationY(0); verify(transaction).reparent(navToken.getSurfaceControl(), parent.getSurfaceControl()); verify(mController).restoreNavigationBarFromApp(eq(false)); + assertFalse(mController.isNavigationBarAttachedToApp()); } @Test