Make LaunchingTaskPositioner stateless.

The initial design cached calculations based on the available bounds.
This required the positioner to be involved in stack lifecycle events
and tied to a particular stack.

This changelist removes these dependencies and makes the
ActivityStackSupervisor the owner.

Bug: 64144308
Test: bit FrameworksServicesTests:com.android.server.am.LaunchBoundsTests
Change-Id: I4e2df4398b0818cec71d3d90fe409012191406c0
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index bac71c7..c5cb5bb 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -293,6 +293,8 @@
     WindowManagerService mWindowManager;
     DisplayManager mDisplayManager;
 
+    LaunchingTaskPositioner mTaskPositioner = new LaunchingTaskPositioner();
+
     /** Counter for next free stack ID to use for dynamic activity stacks. */
     private int mNextFreeStackId = 0;
 
@@ -2138,6 +2140,10 @@
                 || mService.mSupportsFreeformWindowManagement;
     }
 
+    LaunchingTaskPositioner getLaunchingTaskPositioner() {
+        return mTaskPositioner;
+    }
+
     protected <T extends ActivityStack> T getStack(int stackId) {
         for (int i = mActivityDisplays.size() - 1; i >= 0; --i) {
             final T stack = mActivityDisplays.valueAt(i).getStack(stackId);