Overview - Add motion to the footer shown on overview tasks.

The motion mirrors the icon view.

Bug: 125844074
Test: manual
Change-Id: Ib980657763aa82c45319c7c93be652f6fc89ffe4
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
index 053b738..022201f 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
@@ -145,11 +145,13 @@
             };
 
     private final TaskOutlineProvider mOutlineProvider;
+    private final FooterOutlineProvider mFooterOutlineProvider;
 
     private Task mTask;
     private TaskThumbnailView mSnapshotView;
     private TaskMenuView mMenuView;
     private IconView mIconView;
+    private View mTaskFooterContainer;
     private DigitalWellBeingToast mDigitalWellBeingToast;
     private float mCurveScale;
     private float mFullscreenProgress;
@@ -203,6 +205,7 @@
         mWindowCornerRadius = QuickStepContract.getWindowCornerRadius(context.getResources());
         mCurrentFullscreenParams = new FullscreenDrawParams(mCornerRadius);
         mOutlineProvider = new TaskOutlineProvider(getResources(), mCurrentFullscreenParams);
+        mFooterOutlineProvider = new FooterOutlineProvider(mCurrentFullscreenParams);
         setOutlineProvider(mOutlineProvider);
     }
 
@@ -212,6 +215,9 @@
         mSnapshotView = findViewById(R.id.snapshot);
         mIconView = findViewById(R.id.icon);
         mDigitalWellBeingToast = findViewById(R.id.digital_well_being_toast);
+        mTaskFooterContainer = findViewById(R.id.task_footer_container);
+        mTaskFooterContainer.setOutlineProvider(mFooterOutlineProvider);
+        mTaskFooterContainer.setClipToOutline(true);
     }
 
     public TaskMenuView getMenuView() {
@@ -410,6 +416,15 @@
                 .getInterpolation(progress);
         mIconView.setScaleX(scale);
         mIconView.setScaleY(scale);
+
+        int footerVerticalOffset = (int) (mTaskFooterContainer.getHeight() * (1.0f - scale));
+        mTaskFooterContainer.setTranslationY(
+                mCurrentFullscreenParams.mCurrentDrawnInsets.bottom +
+                mCurrentFullscreenParams.mCurrentDrawnInsets.top +
+                footerVerticalOffset);
+        mFooterOutlineProvider.setFullscreenDrawParams(
+                mCurrentFullscreenParams, footerVerticalOffset);
+        mTaskFooterContainer.invalidateOutline();
     }
 
     public void setIconScaleAnimStartProgress(float startProgress) {
@@ -550,6 +565,29 @@
         }
     }
 
+    private static final class FooterOutlineProvider extends ViewOutlineProvider {
+
+        private FullscreenDrawParams mFullscreenDrawParams;
+        private int mVerticalOffset;
+        private final Rect mOutlineRect = new Rect();
+
+        FooterOutlineProvider(FullscreenDrawParams params) {
+            mFullscreenDrawParams = params;
+        }
+
+        void setFullscreenDrawParams(FullscreenDrawParams params, int verticalOffset) {
+            mFullscreenDrawParams = params;
+            mVerticalOffset = verticalOffset;
+        }
+
+        @Override
+        public void getOutline(View view, Outline outline) {
+            mOutlineRect.set(0, 0, view.getWidth(), view.getHeight());
+            mOutlineRect.offset(0, -mVerticalOffset);
+            outline.setRoundRect(mOutlineRect, mFullscreenDrawParams.mCurrentDrawnCornerRadius);
+        }
+    }
+
     @Override
     public void onInitializeAccessibilityNodeInfo(AccessibilityNodeInfo info) {
         super.onInitializeAccessibilityNodeInfo(info);
@@ -638,7 +676,6 @@
         }
         mFullscreenProgress = progress;
         boolean isFullscreen = mFullscreenProgress > 0;
-        setIconScaleAndDim(progress, true /* invert */);
         mIconView.setVisibility(progress < 1 ? VISIBLE : INVISIBLE);
         setClipChildren(!isFullscreen);
         setClipToPadding(!isFullscreen);
@@ -662,6 +699,9 @@
                     / (getWidth() + currentInsetsLeft + currentInsetsRight));
         }
 
+        // Some of the items in here are dependent on the current fullscreen params
+        setIconScaleAndDim(progress, true /* invert */);
+
         thumbnail.setFullscreenParams(mCurrentFullscreenParams);
         mOutlineProvider.setFullscreenParams(mCurrentFullscreenParams);
         invalidateOutline();