Calculate the scale up for quickscrub based on the available size of the screen

Bug: 80139193
Change-Id: I0492ce5bfa347bad12a09a13e404ded77e797623
diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml
index ad5f767..ed18bf5 100644
--- a/quickstep/res/values/dimens.xml
+++ b/quickstep/res/values/dimens.xml
@@ -21,6 +21,7 @@
     <dimen name="task_menu_background_radius">12dp</dimen>
     <dimen name="task_corner_radius">2dp</dimen>
     <dimen name="recents_page_spacing">10dp</dimen>
+    <dimen name="quickscrub_adjacent_visible_width">20dp</dimen>
 
     <!-- The speed in dp/s at which the user needs to be scrolling in recents such that we start
              loading full resolution screenshots. -->
diff --git a/quickstep/src/com/android/launcher3/uioverrides/FastOverviewState.java b/quickstep/src/com/android/launcher3/uioverrides/FastOverviewState.java
index da85990..43d9822 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/FastOverviewState.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/FastOverviewState.java
@@ -15,8 +15,13 @@
  */
 package com.android.launcher3.uioverrides;
 
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Rect;
+
 import com.android.launcher3.DeviceProfile;
 import com.android.launcher3.Launcher;
+import com.android.launcher3.R;
 import com.android.quickstep.QuickScrubController;
 import com.android.quickstep.views.RecentsView;
 
@@ -25,6 +30,12 @@
  */
 public class FastOverviewState extends OverviewState {
 
+    private static final float MAX_PREVIEW_SCALE_UP = 1.3f;
+    /**
+     * Vertical transition of the task previews relative to the full container.
+     */
+    public static final float OVERVIEW_TRANSLATION_FACTOR = 0.5f;
+
     private static final int STATE_FLAGS = FLAG_DISABLE_RESTORE | FLAG_DISABLE_INTERACTION
             | FLAG_OVERVIEW_UI | FLAG_HIDE_BACK_BUTTON | FLAG_DISABLE_ACCESSIBILITY;
 
@@ -46,15 +57,23 @@
 
     @Override
     public float[] getOverviewScaleAndTranslationYFactor(Launcher launcher) {
-        return new float[] {getOverviewScale(launcher.getDeviceProfile()), 0.5f};
+        RecentsView recentsView = launcher.getOverviewPanel();
+        recentsView.getTaskSize(sTempRect);
+
+        return new float[] {getOverviewScale(launcher.getDeviceProfile(), sTempRect, launcher),
+                OVERVIEW_TRANSLATION_FACTOR};
     }
 
-    public static float getOverviewScale(DeviceProfile dp) {
-        if (dp.isMultiWindowMode || dp.isVerticalBarLayout()) {
+    public static float getOverviewScale(DeviceProfile dp, Rect taskRect, Context context) {
+        if (dp.isVerticalBarLayout()) {
             return 1f;
         }
 
-        // TODO: Calculate it dynamically based on available space
-        return 1.3f;
+        Resources res = context.getResources();
+        float usedHeight = taskRect.height() + res.getDimension(R.dimen.task_thumbnail_top_margin);
+        float usedWidth = taskRect.width() + 2 * (res.getDimension(R.dimen.recents_page_spacing)
+                + res.getDimension(R.dimen.quickscrub_adjacent_visible_width));
+        return Math.min(Math.min(dp.availableHeightPx / usedHeight,
+                dp.availableWidthPx / usedWidth), MAX_PREVIEW_SCALE_UP);
     }
 }
diff --git a/quickstep/src/com/android/quickstep/ActivityControlHelper.java b/quickstep/src/com/android/quickstep/ActivityControlHelper.java
index d47fec5..e202c57 100644
--- a/quickstep/src/com/android/quickstep/ActivityControlHelper.java
+++ b/quickstep/src/com/android/quickstep/ActivityControlHelper.java
@@ -153,8 +153,8 @@
         @Override
         public float getTranslationYForQuickScrub(Launcher activity) {
             LauncherRecentsView recentsView = activity.getOverviewPanel();
-            float transYFactor = FAST_OVERVIEW.getOverviewScaleAndTranslationYFactor(activity)[1];
-            return recentsView.computeTranslationYForFactor(transYFactor);
+            return recentsView.computeTranslationYForFactor(
+                    FastOverviewState.OVERVIEW_TRANSLATION_FACTOR);
         }
 
         @Override
@@ -167,7 +167,7 @@
                 @InteractionType int interactionType, TransformedRect outRect) {
             LayoutUtils.calculateLauncherTaskSize(context, dp, outRect.rect);
             if (interactionType == INTERACTION_QUICK_SCRUB) {
-                outRect.scale = FastOverviewState.getOverviewScale(dp);
+                outRect.scale = FastOverviewState.getOverviewScale(dp, outRect.rect, context);
             }
             if (dp.isVerticalBarLayout()) {
                 Rect targetInsets = dp.getInsets();