Picture in picture Z ordering fixes.

We fix two seperate issues here related to animation of the pip menu
activity within the stack. The first is that it may trigger an unexpected
call to assignChildLayers on aboveAppWindowContainers. assignChildLayers
was not overriden as it was assumed DisplayContent was the only caller.
This was causing the default implementation from WindowContainer to be called
and the docked divider to be assigned the wrong layer. We fix
this by adding an override that forwards to the correct implementation.

The second issue is we need to be more careful when placing the animation layer
above the highest animating stack. The pinned stack may be animating due to the
menu activity.

Bug: 69553456
Change-Id: I1a2205925a2f7e4d20a9dbb23b8aedd511d411cc
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index 8155656..75ac707 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -1618,7 +1618,15 @@
 
     @Override
     public SurfaceControl getAnimationLeashParent() {
-        return getAppAnimationLayer();
+        // All normal app transitions take place in an animation layer which is below the pinned
+        // stack but may be above the parent stacks of the given animating apps.
+        // For transitions in the pinned stack (menu activity) we just let them occur as a child
+        // of the pinned stack.
+        if (!inPinnedWindowingMode()) {
+            return getAppAnimationLayer();
+        } else {
+            return getStack().getSurfaceControl();
+        }
     }
 
     boolean applyAnimationLocked(WindowManager.LayoutParams lp, int transit, boolean enter,
@@ -1758,10 +1766,18 @@
 
     @Override
     public void onAnimationLeashCreated(Transaction t, SurfaceControl leash) {
-
         // The leash is parented to the animation layer. We need to preserve the z-order by using
         // the prefix order index, but we boost if necessary.
-        int layer = getPrefixOrderIndex();
+        int layer = 0;
+        if (!inPinnedWindowingMode()) {
+            layer = getPrefixOrderIndex();
+        } else {
+            // Pinned stacks have animations take place within themselves rather than an animation
+            // layer so we need to preserve the order relative to the stack (e.g. the order of our
+            // task/parent).
+            layer = getParent().getPrefixOrderIndex();
+        }
+
         if (mNeedsZBoost) {
             layer += Z_BOOST_BASE;
         }