SystemUI Split via TaskOrganizer
Use the early TaskOrganizer concepts to implement Split-screen in system-ui. This includes changes to both FW and SystemUI. The changes to FW involve removing the use of split-screen specific behavior (like minimize dock and direct ordering) and also reducing things that care about primary vs secondary. It also changed ActivityStack to inherit bounds from parent** when in split-mode so that sysui only needs to manipulate the tile and/or reparent stacks to effect their geometry. This means a lot of layout logic moves to SystemUI. The bulk of the work done in ActivityStack which is split-screen related is moved into SplitDisplayLayout. This basically takes a snapshot of display configuration and manages the sizes of splits and their snap targets. Intermediate dragging of divider bar now only moves root task leashes around rather than talking to WM. This includes position as well as crop (which used to be stack crop). Once the user releases the divider bar, it will calculate (based on snaps) the new root task sizes and update their configurations via WindowContainerTransaction. Because the interim updates are only on the leashes, no configuration updates occur until the end. Entering/Exiting split-mode is now handled by SplitScreentaskOrganizer# onTaskInfoChanged. This is effectively a state-machine that looks at the current split task membership vs. previous and then decides when to move things into/out-of split tasks and how to coordinate with the DividerView. Minimized dock is relegated to a purely system-ui concept. To accomplish this, **the home *stack* is set to the minimizedhomebounds by systemui. This means that it's relative position to its parent is negative! This allows us to leave the split sizes constant, have their children inherit the "actual" split sizes, but keep the home stack unchanging in its minimized size. We just adjust the crop negative to reveal it. IME handling is done through the same mechanism as app-driven IME animation... only Divider receives the control instead of the app. This allows synchronized animation of split tasks with IME. To account for insets, though, when IME is opened, the bottom stack will be repositioned in WM. Bug: 133381284 Test: Manual, use split-screen, rotate device, launch unresizable apps in split, use divider snap to close/maximize apps, etc. Change-Id: I7133e151a1037c42b275b97857936437a7a6725f
Loading
Please register or sign in to comment