Crop the center when no source rect hint

When there is no source rect hint, forge a crop that matches the given
aspect ratio and centered, therefore we can use a consolidated animation
path and fix the issue with the round corner, which was inproperly
scaled in the past.

Flag: NONE bug fix
Bug: 298409662
Test: Test the overlay in both gesture and button navigation mode,\
      with both YouTube and Google Maps,\
      in both folded and unfolded mode.
Change-Id: I8ae48b999159a51eda2ff41c49cdb3c4e1541176
diff --git a/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java b/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java
index 99f10a7..b13e52d 100644
--- a/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java
+++ b/quickstep/src/com/android/quickstep/util/SwipePipToHomeAnimator.java
@@ -154,8 +154,23 @@
         }
 
         if (sourceRectHint.isEmpty()) {
-            mSourceRectHint.setEmpty();
-            mSourceHintRectInsets = null;
+            // Crop a Rect matches the aspect ratio and pivots at the center point.
+            // To make the animation path simplified.
+            final float aspectRatio = destinationBounds.width()
+                    / (float) destinationBounds.height();
+            if ((appBounds.width() / (float) appBounds.height()) > aspectRatio) {
+                // use the full height.
+                mSourceRectHint.set(0, 0,
+                        (int) (appBounds.height() * aspectRatio), appBounds.height());
+                mSourceRectHint.offset(
+                        (appBounds.width() - mSourceRectHint.width()) / 2, 0);
+            } else {
+                // use the full width.
+                mSourceRectHint.set(0, 0,
+                        appBounds.width(), (int) (appBounds.width() / aspectRatio));
+                mSourceRectHint.offset(
+                        0, (appBounds.height() - mSourceRectHint.height()) / 2);
+            }
 
             // Create a new overlay layer. We do not call detach on this instance, it's propagated
             // to other classes like PipTaskOrganizer / RecentsAnimationController to complete
@@ -168,11 +183,11 @@
             Log.d(TAG, getContentOverlay() + " is created: " + reasonForCreateOverlay);
         } else {
             mSourceRectHint.set(sourceRectHint);
-            mSourceHintRectInsets = new Rect(sourceRectHint.left - appBounds.left,
-                    sourceRectHint.top - appBounds.top,
-                    appBounds.right - sourceRectHint.right,
-                    appBounds.bottom - sourceRectHint.bottom);
         }
+        mSourceHintRectInsets = new Rect(mSourceRectHint.left - appBounds.left,
+                mSourceRectHint.top - appBounds.top,
+                appBounds.right - mSourceRectHint.right,
+                appBounds.bottom - mSourceRectHint.bottom);
 
         addAnimatorListener(new AnimationSuccessListener() {
             @Override
@@ -217,27 +232,7 @@
         if (mPipContentOverlay != null) {
             mPipContentOverlay.onAnimationUpdate(tx, mCurrentBounds, progress);
         }
-        final PictureInPictureSurfaceTransaction op;
-        if (mSourceHintRectInsets == null) {
-            // no source rect hint been set, directly scale the window down
-            op = onAnimationScale(progress, tx, mCurrentBounds);
-        } else {
-            // scale and crop according to the source rect hint
-            op = onAnimationScaleAndCrop(progress, tx, mCurrentBounds);
-        }
-        return op;
-    }
-
-    /** scale the window directly with no source rect hint being set */
-    private PictureInPictureSurfaceTransaction onAnimationScale(
-            float progress, SurfaceControl.Transaction tx, Rect bounds) {
-        if (mFromRotation == Surface.ROTATION_90 || mFromRotation == Surface.ROTATION_270) {
-            final RotatedPosition rotatedPosition = getRotatedPosition(progress);
-            return mSurfaceTransactionHelper.scale(tx, mLeash, mAppBounds, bounds,
-                    rotatedPosition.degree, rotatedPosition.positionX, rotatedPosition.positionY);
-        } else {
-            return mSurfaceTransactionHelper.scale(tx, mLeash, mAppBounds, bounds);
-        }
+        return onAnimationScaleAndCrop(progress, tx, mCurrentBounds);
     }
 
     /** scale and crop the window with source rect hint */