Merge "Import translations. DO NOT MERGE ANYWHERE" into main
diff --git a/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarFeatureEvaluator.kt b/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarFeatureEvaluator.kt
index 1ec075f..668a87d 100644
--- a/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarFeatureEvaluator.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarFeatureEvaluator.kt
@@ -19,7 +19,6 @@
 import com.android.launcher3.config.FeatureFlags.enableTaskbarPinning
 import com.android.launcher3.taskbar.TaskbarActivityContext
 import com.android.launcher3.taskbar.TaskbarControllers
-import com.android.launcher3.taskbar.TaskbarRecentAppsController
 import com.android.launcher3.util.DisplayController
 
 /** Evaluates all the features taskbar can have. */
@@ -41,4 +40,7 @@
 
     val isTransient: Boolean
         get() = DisplayController.isTransientTaskbar(taskbarActivityContext)
+
+    val isLandscape: Boolean
+        get() = taskbarActivityContext.deviceProfile.isLandscape
 }
diff --git a/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarIconSpecs.kt b/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarIconSpecs.kt
index 4cd895d..67bbcce 100644
--- a/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarIconSpecs.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarIconSpecs.kt
@@ -29,13 +29,15 @@
     val defaultPersistentIconSize = iconSize40dp
     val defaultTransientIconSize = iconSize44dp
 
-    // defined as row, columns
     val transientTaskbarIconSizeByGridSize =
         mapOf(
-            Pair(6, 5) to iconSize52dp,
-            Pair(4, 5) to iconSize48dp,
-            Pair(5, 4) to iconSize48dp,
-            Pair(4, 4) to iconSize48dp,
-            Pair(5, 6) to iconSize44dp,
+            TransientTaskbarIconSizeKey(6, 5, false) to iconSize52dp,
+            TransientTaskbarIconSizeKey(6, 5, true) to iconSize52dp,
+            TransientTaskbarIconSizeKey(4, 4, false) to iconSize48dp,
+            TransientTaskbarIconSizeKey(4, 4, true) to iconSize52dp,
+            TransientTaskbarIconSizeKey(4, 5, false) to iconSize48dp,
+            TransientTaskbarIconSizeKey(4, 5, true) to iconSize48dp,
+            TransientTaskbarIconSizeKey(5, 5, false) to iconSize44dp,
+            TransientTaskbarIconSizeKey(5, 5, true) to iconSize44dp,
         )
 }
diff --git a/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarSpecsEvaluator.kt b/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarSpecsEvaluator.kt
index 02e5947..0b7be40 100644
--- a/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarSpecsEvaluator.kt
+++ b/quickstep/src/com/android/launcher3/taskbar/customization/TaskbarSpecsEvaluator.kt
@@ -22,7 +22,7 @@
     fun getIconSizeByGrid(row: Int, column: Int): TaskbarIconSize {
         return if (taskbarFeatureEvaluator.isTransient) {
             TaskbarIconSpecs.transientTaskbarIconSizeByGridSize.getOrDefault(
-                Pair(row, column),
+                TransientTaskbarIconSizeKey(row, column, taskbarFeatureEvaluator.isLandscape),
                 TaskbarIconSpecs.defaultTransientIconSize,
             )
         } else {
@@ -58,3 +58,5 @@
 }
 
 data class TaskbarIconSize(val size: Int)
+
+data class TransientTaskbarIconSizeKey(val row: Int, val column: Int, val isLandscape: Boolean)
diff --git a/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java b/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java
index fb54241..ba33c62 100644
--- a/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java
+++ b/quickstep/src/com/android/quickstep/SwipeUpAnimationLogic.java
@@ -17,6 +17,7 @@
 
 import static com.android.app.animation.Interpolators.ACCELERATE_1_5;
 import static com.android.app.animation.Interpolators.LINEAR;
+import static com.android.launcher3.Flags.enableAdditionalHomeAnimations;
 import static com.android.launcher3.PagedView.INVALID_PAGE;
 
 import android.animation.Animator;
@@ -449,7 +450,7 @@
             float alpha = mAnimationFactory.getWindowAlpha(progress);
 
             mHomeAnim.setPlayFraction(progress);
-            if (mTargetTaskView == null) {
+            if (!enableAdditionalHomeAnimations() || mTargetTaskView == null) {
                 mHomeToWindowPositionMap.mapRect(mWindowCurrentRect, currentRect);
                 mMatrix.setRectToRect(mCropRectF, mWindowCurrentRect, ScaleToFit.FILL);
                 mLocalTransformParams
@@ -464,10 +465,15 @@
 
             mLocalTransformParams.applySurfaceParams(
                     mLocalTransformParams.createSurfaceParams(this));
-            mAnimationFactory.update(
-                    currentRect, progress, mMatrix.mapRadius(cornerRadius), (int) (alpha * 255));
 
-            if (mTargetTaskView == null) {
+            mAnimationFactory.update(
+                    currentRect,
+                    progress,
+                    mMatrix.mapRadius(cornerRadius),
+                    !enableAdditionalHomeAnimations() || mTargetTaskView == null
+                            ? 0 : (int) (alpha * 255));
+
+            if (!enableAdditionalHomeAnimations() || mTargetTaskView == null) {
                 return;
             }
             if (mAnimationFactory.isAnimatingIntoIcon() && mAnimationFactory.isAnimationReady()) {
@@ -506,7 +512,7 @@
         public void onAnimationStart(Animator animation) {
             setUp();
             mHomeAnim.dispatchOnStart();
-            if (mTargetTaskView == null) {
+            if (!enableAdditionalHomeAnimations() || mTargetTaskView == null) {
                 return;
             }
             Rect thumbnailBounds = new Rect();
@@ -521,7 +527,7 @@
         }
 
         private void setUp() {
-            if (mTargetTaskView == null) {
+            if (!enableAdditionalHomeAnimations() || mTargetTaskView == null) {
                 return;
             }
             RecentsView recentsView = mTargetTaskView.getRecentsView();
@@ -542,7 +548,7 @@
         }
 
         private void cleanUp() {
-            if (mTargetTaskView == null) {
+            if (!enableAdditionalHomeAnimations() || mTargetTaskView == null) {
                 return;
             }
             RecentsView recentsView = mTargetTaskView.getRecentsView();
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index 4f802c9..b332652 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -34,6 +34,7 @@
 import static com.android.launcher3.AbstractFloatingView.TYPE_TASK_MENU;
 import static com.android.launcher3.AbstractFloatingView.getTopOpenViewWithType;
 import static com.android.launcher3.BaseActivity.STATE_HANDLER_INVISIBILITY_FLAGS;
+import static com.android.launcher3.Flags.enableAdditionalHomeAnimations;
 import static com.android.launcher3.Flags.enableGridOnlyOverview;
 import static com.android.launcher3.Flags.enableRefactorTaskThumbnail;
 import static com.android.launcher3.LauncherAnimUtils.SUCCESS_TRANSITION_PROGRESS;
@@ -4520,6 +4521,9 @@
      * than the running task, when updating page offsets.
      */
     public void setOffsetMidpointIndexOverride(int offsetMidpointIndexOverride) {
+        if (!enableAdditionalHomeAnimations()) {
+            return;
+        }
         mOffsetMidpointIndexOverride = offsetMidpointIndexOverride;
         updatePageOffsets();
     }
diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsControllerTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsControllerTest.kt
index c09dcf2..fe4e2d2 100644
--- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsControllerTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsControllerTest.kt
@@ -16,6 +16,7 @@
 
 package com.android.launcher3.taskbar.allapps
 
+import android.animation.AnimatorTestRule
 import android.content.ComponentName
 import android.content.Intent
 import android.os.Process
@@ -42,6 +43,7 @@
 class TaskbarAllAppsControllerTest {
 
     @get:Rule val taskbarUnitTestRule = TaskbarUnitTestRule()
+    @get:Rule val animatorTestRule = AnimatorTestRule(this)
 
     @InjectController lateinit var allAppsController: TaskbarAllAppsController
     @InjectController lateinit var overlayController: TaskbarOverlayController
@@ -166,6 +168,21 @@
         assertThat(btv.hasDot()).isTrue()
     }
 
+    @Test
+    fun testToggleSearch_searchEditTextFocused() {
+        getInstrumentation().runOnMainSync { allAppsController.toggleSearch() }
+        getInstrumentation().runOnMainSync {
+            // All Apps is now attached to window. Open animation is posted but not started.
+        }
+
+        getInstrumentation().runOnMainSync {
+            // Animation has started. Advance to end of animation.
+            animatorTestRule.advanceTimeBy(overlayController.openDuration.toLong())
+        }
+        val editText = overlayController.requestWindow().appsView.searchUiManager.editText
+        assertThat(editText?.hasFocus()).isTrue()
+    }
+
     private companion object {
         private val TEST_APPS =
             Array(16) {
diff --git a/quickstep/tests/src/com/android/quickstep/taskbar/customization/TaskbarSpecsEvaluatorTest.kt b/quickstep/tests/src/com/android/quickstep/taskbar/customization/TaskbarSpecsEvaluatorTest.kt
index b637e7d..0bf68eb 100644
--- a/quickstep/tests/src/com/android/quickstep/taskbar/customization/TaskbarSpecsEvaluatorTest.kt
+++ b/quickstep/tests/src/com/android/quickstep/taskbar/customization/TaskbarSpecsEvaluatorTest.kt
@@ -35,13 +35,22 @@
     private val taskbarSpecsEvaluator = spy(TaskbarSpecsEvaluator(taskbarFeatureEvaluator))
 
     @Test
-    fun testGetIconSizeByGrid_whenTaskbarIsTransient_withValidRowAndColumn() {
+    fun testGetIconSizeByGrid_whenTaskbarIsTransient_withValidRowAndColumnInLandscape() {
         doReturn(true).whenever(taskbarFeatureEvaluator).isTransient
-        assertThat(taskbarSpecsEvaluator.getIconSizeByGrid(6, 5))
+        doReturn(true).whenever(taskbarFeatureEvaluator).isLandscape
+        assertThat(taskbarSpecsEvaluator.getIconSizeByGrid(4, 4))
             .isEqualTo(TaskbarIconSpecs.iconSize52dp)
     }
 
     @Test
+    fun testGetIconSizeByGrid_whenTaskbarIsTransient_withValidRowAndColumnInPortrait() {
+        doReturn(true).whenever(taskbarFeatureEvaluator).isTransient
+        doReturn(false).whenever(taskbarFeatureEvaluator).isLandscape
+        assertThat(taskbarSpecsEvaluator.getIconSizeByGrid(4, 4))
+            .isEqualTo(TaskbarIconSpecs.iconSize48dp)
+    }
+
+    @Test
     fun testGetIconSizeByGrid_whenTaskbarIsTransient_withInvalidRowAndColumn() {
         doReturn(true).whenever(taskbarFeatureEvaluator).isTransient
         assertThat(taskbarSpecsEvaluator.getIconSizeByGrid(1, 2))
diff --git a/src/com/android/launcher3/views/ClipIconView.java b/src/com/android/launcher3/views/ClipIconView.java
index 325c1cd..f90a3e4 100644
--- a/src/com/android/launcher3/views/ClipIconView.java
+++ b/src/com/android/launcher3/views/ClipIconView.java
@@ -16,6 +16,7 @@
 package com.android.launcher3.views;
 
 import static com.android.app.animation.Interpolators.LINEAR;
+import static com.android.launcher3.Flags.enableAdditionalHomeAnimations;
 import static com.android.launcher3.Utilities.boundToRange;
 import static com.android.launcher3.Utilities.mapToRange;
 import static com.android.launcher3.anim.AnimatorListeners.forEndCallback;
@@ -97,6 +98,9 @@
      * within the clip bounds of this view.
      */
     public void setTaskViewArtist(TaskViewArtist taskViewArtist) {
+        if (!enableAdditionalHomeAnimations()) {
+            return;
+        }
         mTaskViewArtist = taskViewArtist;
         invalidate();
     }
diff --git a/src/com/android/launcher3/views/FloatingIconView.java b/src/com/android/launcher3/views/FloatingIconView.java
index 1d5a9dc..1e577be 100644
--- a/src/com/android/launcher3/views/FloatingIconView.java
+++ b/src/com/android/launcher3/views/FloatingIconView.java
@@ -18,6 +18,7 @@
 import static android.view.Gravity.LEFT;
 
 import static com.android.app.animation.Interpolators.LINEAR;
+import static com.android.launcher3.Flags.enableAdditionalHomeAnimations;
 import static com.android.launcher3.Utilities.getFullDrawable;
 import static com.android.launcher3.Utilities.mapToRange;
 import static com.android.launcher3.util.Executors.MODEL_EXECUTOR;
@@ -164,7 +165,12 @@
      */
     public void update(float alpha, RectF rect, float progress, float shapeProgressStart,
             float cornerRadius, boolean isOpening, int taskViewDrawAlpha) {
-        setAlpha(isLaidOut() ? alpha : 0f);
+        // The non-running task home animation has some very funky first few frames because this
+        // FIV hasn't fully laid out. During those frames, hide this FIV and continue drawing the
+        // TaskView directly while transforming it in the place of this FIV. However, if we fade
+        // the TaskView at all, we need to display this FIV regardless.
+        setAlpha(!enableAdditionalHomeAnimations() || isLaidOut() || taskViewDrawAlpha < 255
+                ? alpha : 0f);
         mClipIconView.update(rect, progress, shapeProgressStart, cornerRadius, isOpening, this,
                 mLauncher.getDeviceProfile(), taskViewDrawAlpha);