From 96f08b62b4ca7f6f8a1ab6e7f3bef31125fa1b67 Mon Sep 17 00:00:00 2001 From: Charles Chen Date: Wed, 27 Nov 2019 16:37:27 +0800 Subject: [PATCH] Avoid nav bar leakage when remove display Currently, we remove FragmentHostState when view detached from window. However, there's a case that a display is removed but view has not been yet removed from window. Remove FragmentHostState when display is detached. Test: manual - reproduce issue Fixes: 144129761 Change-Id: I93594b2ba035acc514aa4c6eaacce3f79c9fa0b6 --- .../android/systemui/statusbar/NavigationBarController.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java index 9f5cf684b3b4e..61043fbc1bc96 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java @@ -36,6 +36,7 @@ import com.android.internal.statusbar.RegisterStatusBarResult; import com.android.systemui.Dependency; import com.android.systemui.assist.AssistHandleViewController; import com.android.systemui.dagger.qualifiers.MainHandler; +import com.android.systemui.fragments.FragmentHostManager; import com.android.systemui.plugins.DarkIconDispatcher; import com.android.systemui.statusbar.CommandQueue.Callbacks; import com.android.systemui.statusbar.phone.AutoHideController; @@ -168,6 +169,9 @@ public class NavigationBarController implements Callbacks { View navigationWindow = navBar.getView().getRootView(); WindowManagerGlobal.getInstance() .removeView(navigationWindow, true /* immediate */); + // Also remove FragmentHostState here in case that onViewDetachedFromWindow has not yet + // invoked after display removal. + FragmentHostManager.removeAndDestroy(navigationWindow); mNavigationBars.remove(displayId); } }