Reparent requestFullscreenMode requests from/to desks

Adds a new handler to identify client-requested to-fullscreen or
exit-fullscreen changes (through the Activity.requestFullscreenMode
API). When identified it performs the desktop-related setup/clean-up
logic such as reparenting out of desk and deactivating the desk, or
repareting to a desk and reactivating the desk.

The transition is animated through DesktopMixedTransitionHandler first,
since it's possible restoring might trigger a task-limit change.

Note that these client requests are currently identified only by their
transit type (TRANSIT_CHANGE) and Shell desktop state, which is enough
to disambiguate since the desktop handler only cared about OPEN/TO_FRONT
transitions before this, but may it may need to be updated to use a
stronger signal (transit type, flag or TransitionRequestInfo data) in
the future.

Flag: com.android.window.flags.enable_multiple_desktops_backend
Fix: 444605677
Test: m WMShellUnitTests
Test: using test app or Chrome, request fullscreen through the API from
a desk, then request exit and verify the task restores to the original
desk or an existing/new desk if the desk was deleted
Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:846261a3f3e3b14fbf68ad4ee3864d9ae65c10f9
Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:16064a31c161e996775ec2a00ca16b634b3575f2
Merged-In: I1565072a561165127cc1f6e36348339a773317ac
Change-Id: I1565072a561165127cc1f6e36348339a773317ac
16 files changed