Loading quickstep/src/com/android/quickstep/util/SplitAnimationController.kt +9 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ import com.android.launcher3.config.FeatureFlags import com.android.launcher3.statehandlers.DepthController import com.android.launcher3.statemanager.StateManager import com.android.launcher3.statemanager.StatefulActivity import com.android.launcher3.taskbar.TaskbarActivityContext import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource import com.android.launcher3.views.BaseDragLayer import com.android.quickstep.TaskViewUtils Loading Loading @@ -390,6 +391,14 @@ class SplitAnimationController(val splitSelectStateController: SplitSelectStateC "trying to launch an app pair icon, but encountered an unexpected null" } // If launching an app pair from Taskbar inside of an app context, use fade-in animation // TODO (b/316485863): Replace with desired app pair launch animation if (launchingIconView.context is TaskbarActivityContext) { composeFadeInSplitLaunchAnimator( initialTaskId, secondTaskId, info, t, finishCallback) return } composeIconSplitLaunchAnimator(launchingIconView, info, t, finishCallback) } else { // Fallback case: simple fade-in animation Loading quickstep/tests/src/com/android/quickstep/util/SplitAnimationControllerTest.kt +32 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.quickstep.util import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.view.ContextThemeWrapper import android.view.SurfaceControl.Transaction import android.view.View import android.window.TransitionInfo Loading @@ -26,6 +27,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.launcher3.apppairs.AppPairIcon import com.android.launcher3.statehandlers.DepthController import com.android.launcher3.statemanager.StateManager import com.android.launcher3.taskbar.TaskbarActivityContext import com.android.launcher3.util.SplitConfigurationOptions import com.android.quickstep.views.GroupedTaskView import com.android.quickstep.views.IconView Loading Loading @@ -64,6 +66,8 @@ class SplitAnimationControllerTest { private val mockTaskIdAttributeContainer: TaskIdAttributeContainer = mock() // AppPairIcon private val mockAppPairIcon: AppPairIcon = mock() private val mockContextThemeWrapper: ContextThemeWrapper = mock() private val mockTaskbarActivityContext: TaskbarActivityContext = mock() // SplitSelectSource private val splitSelectSource: SplitConfigurationOptions.SplitSelectSource = mock() Loading Loading @@ -247,6 +251,7 @@ class SplitAnimationControllerTest { @Test fun playsAppropriateSplitLaunchAnimation_playsIconLaunchCorrectly() { val spySplitAnimationController = spy(splitAnimationController) whenever(mockAppPairIcon.context).thenReturn(mockContextThemeWrapper) doNothing() .whenever(spySplitAnimationController) .composeIconSplitLaunchAnimator(any(), any(), any(), any()) Loading @@ -270,6 +275,33 @@ class SplitAnimationControllerTest { .composeIconSplitLaunchAnimator(any(), any(), any(), any()) } @Test fun playsAppropriateSplitLaunchAnimation_playsIconLaunchFromTaskbarContextCorrectly() { val spySplitAnimationController = spy(splitAnimationController) whenever(mockAppPairIcon.context).thenReturn(mockTaskbarActivityContext) doNothing() .whenever(spySplitAnimationController) .composeFadeInSplitLaunchAnimator(any(), any(), any(), any(), any()) spySplitAnimationController.playSplitLaunchAnimation( null /* launchingTaskView */, mockAppPairIcon, taskId, taskId2, null /* apps */, null /* wallpapers */, null /* nonApps */, stateManager, depthController, transitionInfo, transaction, {} /* finishCallback */ ) verify(spySplitAnimationController) .composeFadeInSplitLaunchAnimator(any(), any(), any(), any(), any()) } @Test fun playsAppropriateSplitLaunchAnimation_playsFadeInLaunchCorrectly() { val spySplitAnimationController = spy(splitAnimationController) Loading Loading
quickstep/src/com/android/quickstep/util/SplitAnimationController.kt +9 −0 Original line number Diff line number Diff line Loading @@ -49,6 +49,7 @@ import com.android.launcher3.config.FeatureFlags import com.android.launcher3.statehandlers.DepthController import com.android.launcher3.statemanager.StateManager import com.android.launcher3.statemanager.StatefulActivity import com.android.launcher3.taskbar.TaskbarActivityContext import com.android.launcher3.util.SplitConfigurationOptions.SplitSelectSource import com.android.launcher3.views.BaseDragLayer import com.android.quickstep.TaskViewUtils Loading Loading @@ -390,6 +391,14 @@ class SplitAnimationController(val splitSelectStateController: SplitSelectStateC "trying to launch an app pair icon, but encountered an unexpected null" } // If launching an app pair from Taskbar inside of an app context, use fade-in animation // TODO (b/316485863): Replace with desired app pair launch animation if (launchingIconView.context is TaskbarActivityContext) { composeFadeInSplitLaunchAnimator( initialTaskId, secondTaskId, info, t, finishCallback) return } composeIconSplitLaunchAnimator(launchingIconView, info, t, finishCallback) } else { // Fallback case: simple fade-in animation Loading
quickstep/tests/src/com/android/quickstep/util/SplitAnimationControllerTest.kt +32 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.quickstep.util import android.graphics.Bitmap import android.graphics.drawable.Drawable import android.view.ContextThemeWrapper import android.view.SurfaceControl.Transaction import android.view.View import android.window.TransitionInfo Loading @@ -26,6 +27,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.launcher3.apppairs.AppPairIcon import com.android.launcher3.statehandlers.DepthController import com.android.launcher3.statemanager.StateManager import com.android.launcher3.taskbar.TaskbarActivityContext import com.android.launcher3.util.SplitConfigurationOptions import com.android.quickstep.views.GroupedTaskView import com.android.quickstep.views.IconView Loading Loading @@ -64,6 +66,8 @@ class SplitAnimationControllerTest { private val mockTaskIdAttributeContainer: TaskIdAttributeContainer = mock() // AppPairIcon private val mockAppPairIcon: AppPairIcon = mock() private val mockContextThemeWrapper: ContextThemeWrapper = mock() private val mockTaskbarActivityContext: TaskbarActivityContext = mock() // SplitSelectSource private val splitSelectSource: SplitConfigurationOptions.SplitSelectSource = mock() Loading Loading @@ -247,6 +251,7 @@ class SplitAnimationControllerTest { @Test fun playsAppropriateSplitLaunchAnimation_playsIconLaunchCorrectly() { val spySplitAnimationController = spy(splitAnimationController) whenever(mockAppPairIcon.context).thenReturn(mockContextThemeWrapper) doNothing() .whenever(spySplitAnimationController) .composeIconSplitLaunchAnimator(any(), any(), any(), any()) Loading @@ -270,6 +275,33 @@ class SplitAnimationControllerTest { .composeIconSplitLaunchAnimator(any(), any(), any(), any()) } @Test fun playsAppropriateSplitLaunchAnimation_playsIconLaunchFromTaskbarContextCorrectly() { val spySplitAnimationController = spy(splitAnimationController) whenever(mockAppPairIcon.context).thenReturn(mockTaskbarActivityContext) doNothing() .whenever(spySplitAnimationController) .composeFadeInSplitLaunchAnimator(any(), any(), any(), any(), any()) spySplitAnimationController.playSplitLaunchAnimation( null /* launchingTaskView */, mockAppPairIcon, taskId, taskId2, null /* apps */, null /* wallpapers */, null /* nonApps */, stateManager, depthController, transitionInfo, transaction, {} /* finishCallback */ ) verify(spySplitAnimationController) .composeFadeInSplitLaunchAnimator(any(), any(), any(), any(), any()) } @Test fun playsAppropriateSplitLaunchAnimation_playsFadeInLaunchCorrectly() { val spySplitAnimationController = spy(splitAnimationController) Loading