Keep visible requested for transient hide activities
If a process doesn't have other active component and its activity is not visible requested, it will become background state and may lose the access of various system services. The invisible requested will also cause other animation issues such as incorrect dim layer, window surface position. Because isGoneForLayout will return false by the visible state. By checking isTransientHide in TaskFragment#getVisibility, the task can keep visible even if it is occluded by the transient launch target. And then add FLAG_ABOVE_TRANSIENT_LAUNCH to the tree of transient-hide task so the ChangeInfo will always report as TRANSIT_TO_BACK. When the transient transition is finished, if the transient launch target is visible, then update the visibility to make the transient-hide activities to be invisible requested and add the activities to stopping list. So when checking the visibility participants, it can continue to commit the state. Also add a condition for mAvoidMoveToFront for the case that the moving-to-back task may be moved to front again after transient launch if the app uses a trampoline activity. - Previously during the transient transition, the trampoline launch will be blocked by BAL because invisible. - In legacy transition, the task is already on top (recent is launch-behind) and finish-recents-animation will move home to front. Now it will launch the new activity into its task without moving the task to front, e.g. during the swipe-return-to-home animation, the going-to-invisible activity launches next activity, it will still stay at home. And then launch the app again, the latest new activity on its task can be resumed directly. Fix: 269577449 Fix: 271282193 Test: atest TransitionTests#testTransientLaunch Change-Id: I887f63a4985804a59e6602817dce6aec0e6f2c69
Loading
Please register or sign in to comment