Prevent orphaning of windows when token is removed
When the owner of a window token requests window manager to remove the token, we were removing it from it's parent which orphaned the token and all it's windows and prevented them from being accessed from calls like forAllWindows(). This problem wasn't visible before as the token windows would still be in the window list, so they can still be accessed for the exit animation transition which eventually removes them. We no longer remove tokens from their parent we when are asked to remove them from the system. We just set WindowToken.setExiting() so the token can be removed once all its windows are removed at the end of the exit animation. Also, - In AppWindowToken.removeIfPossible() and Task.removeIfPossible(), call removeImmediately() instead of parent.removeChild() to make sure the token and its windows are properly clean-up and avoid orphaning if they aren't. - Added DisplayContent.reParentWindowToken() for changing the display a window token is on which is different from DisplayContent.removeWindowToken which prepares the token and it's windows to be removed from the system. - Renamed WindowToken.explicit to WindowToken.mPersistOnEmpty which is what it does. Fixes: 33098800 Test: bit FrameworksServicesTests:com.android.server.wm.WindowTokenTests Test: Make sure toast windows don't persist on screen. Change-Id: I40e0e8832141514b614e79d8e95cd27f24e52366
Loading
Please register or sign in to comment