Add support for delegating unhandled drags to SystemUI
- This CL adds two public flags that are used with drag and drop: DRAG_FLAG_GLOBAL_SAME_APPLICATION which allows cross-window drag and drop between windows of the same app (by uid), and DRAG_FLAG_START_INTENT_ON_UNHANDLED_DRAG which allows the system to delegate drags that are not handled by any app window to the SystemUI for handling (if the current state of the device supports it) - On the system side, it exposes a way for SysUI to register itself as an unhandled drag listener, and modifies the drag and drop flow to allow for WM to call the listener when an unhandled drag is detected. In this case in particular, ACTION_DRAG_ENDED will now be deferred until the unhandled listener calls back. ie. For a normal drop over a window that handles it: ... -> Input reports drop over window -> ACTION_DROP sent to target window -> Window reports drop consumed to WM -> DRAG_ENDED (result=true) to all notified windows For a normal drop over a window that does not handle it: ... -> Input reports drop over window -> ACTION_DROP to target window -> Window reports drop not consumed to WM -> Unhandled drag listener notified of drop, reports consumed to WM -> DRAG_ENDED (result=unhandled consumed) to all notified windows For an unhandled drag over no window ... -> Input reports drop over window (but window was not valid target) -> Unhandled drag listener notified of drop, reports consumed to WM -> DRAG_ENDED (result=unhandled consumed) to all notified windows All other existing drag and drop behavior is the same as before Bug: 320797628 API-Coverage-Bug: 324480328 Test: atest DragDropTest DragDropControllerTests CrossAppDragAndDropTests Change-Id: Icc42f28e30cf976e5068c12e071942fcc61ee965
Loading
Please register or sign in to comment