Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bd838048 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Move the hardcoded animation duration to a res file" into main

parents 8bc5d8f5 d64e9b0e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -15,4 +15,6 @@
    limitations under the License.
-->
<resources>
    <!-- The time duration for animating a fullscreen task to a desktop. -->
    <integer name="to_desktop_animation_duration_ms">336</integer>
</resources>
 No newline at end of file
+2 −1
Original line number Diff line number Diff line
@@ -1203,11 +1203,12 @@ public abstract class WMShellModule {
    @Provides
    static EnterDesktopTaskTransitionHandler provideEnterDesktopModeTaskTransitionHandler(
            Transitions transitions,
            Context context,
            Optional<DesktopTasksLimiter> desktopTasksLimiter,
            InteractionJankMonitor interactionJankMonitor,
            LatencyTracker latencyTracker) {
        return new EnterDesktopTaskTransitionHandler(
                transitions, interactionJankMonitor, latencyTracker);
                transitions, context, interactionJankMonitor, latencyTracker);
    }

    @WMSingleton
+7 −5
Original line number Diff line number Diff line
@@ -113,7 +113,6 @@ import com.android.wm.shell.desktopmode.DesktopRepository.DeskChangeListener
import com.android.wm.shell.desktopmode.DesktopRepository.VisibleTasksListener
import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler.Companion.DRAG_TO_DESKTOP_FINISH_ANIM_DURATION_MS
import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler.DragToDesktopStateListener
import com.android.wm.shell.desktopmode.EnterDesktopTaskTransitionHandler.FREEFORM_ANIMATION_DURATION
import com.android.wm.shell.desktopmode.ExitDesktopTaskTransitionHandler.FULLSCREEN_ANIMATION_DURATION
import com.android.wm.shell.desktopmode.common.ToggleTaskSizeInteraction
import com.android.wm.shell.desktopmode.desktopfirst.isDisplayDesktopFirst
@@ -289,6 +288,9 @@ class DesktopTasksController(
    // A listener that is invoked after a desk has been remove from the system. */
    var onDeskRemovedListener: OnDeskRemovedListener? = null

    private val toDesktopAnimationDurationMs =
        context.resources.getInteger(SharedR.integer.to_desktop_animation_duration_ms)

    init {
        desktopMode = DesktopModeImpl()
        if (desktopState.canEnterDesktopMode) {
@@ -803,7 +805,7 @@ class DesktopTasksController(
            invokeCallbackToOverview(transition, callback)
        }
        desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted(
            FREEFORM_ANIMATION_DURATION
            toDesktopAnimationDurationMs
        )
        runOnTransitStart?.invoke(transition)
        exitResult.asExit()?.runOnTransitionStart?.invoke(transition)
@@ -848,7 +850,7 @@ class DesktopTasksController(
            invokeCallbackToOverview(transition, callback)
        }
        desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted(
            FREEFORM_ANIMATION_DURATION
            toDesktopAnimationDurationMs
        )
        runOnTransitStart?.invoke(transition)
        exitResult.asExit()?.runOnTransitionStart?.invoke(transition)
@@ -1432,7 +1434,7 @@ class DesktopTasksController(
            activateDeskWct.merge(launchTransaction, /* transfer= */ true)
            launchTransaction = activateDeskWct
            desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted(
                FREEFORM_ANIMATION_DURATION
                toDesktopAnimationDurationMs
            )
        }
        val t =
@@ -3526,7 +3528,7 @@ class DesktopTasksController(
        runOnTransitStart?.invoke(transition)

        desktopModeEnterExitTransitionListener?.onEnterDesktopModeTransitionStarted(
            FREEFORM_ANIMATION_DURATION
            toDesktopAnimationDurationMs
        )
    }

+13 −4
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.animation.AnimatorListenerAdapter;
import android.animation.RectEvaluator;
import android.animation.ValueAnimator;
import android.app.ActivityManager;
import android.content.Context;
import android.graphics.Rect;
import android.os.IBinder;
import android.util.Slog;
@@ -42,6 +43,7 @@ import androidx.annotation.Nullable;

import com.android.internal.jank.InteractionJankMonitor;
import com.android.internal.util.LatencyTracker;
import com.android.wm.shell.shared.R;
import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource;
import com.android.wm.shell.transition.Transitions;
import com.android.wm.shell.windowdecor.OnTaskResizeAnimationListener;
@@ -57,33 +59,40 @@ import java.util.function.Supplier;
public class EnterDesktopTaskTransitionHandler implements Transitions.TransitionHandler {

    private static final String TAG = "EnterDesktopTaskTransitionHandler";
    private final Context mContext;
    private final Transitions mTransitions;
    private final Supplier<SurfaceControl.Transaction> mTransactionSupplier;

    public static final int FREEFORM_ANIMATION_DURATION = 336;

    private final List<IBinder> mPendingTransitionTokens = new ArrayList<>();
    private final InteractionJankMonitor mInteractionJankMonitor;
    private final LatencyTracker mLatencyTracker;

    private OnTaskResizeAnimationListener mOnTaskResizeAnimationListener;

    private int mToDesktopAnimationDurationMs;

    public EnterDesktopTaskTransitionHandler(
            Transitions transitions,
            Context context,
            InteractionJankMonitor interactionJankMonitor,
            LatencyTracker latencyTracker) {
        this(transitions, interactionJankMonitor, latencyTracker, SurfaceControl.Transaction::new);
        this(transitions, context, interactionJankMonitor, latencyTracker,
                SurfaceControl.Transaction::new);
    }

    public EnterDesktopTaskTransitionHandler(
            Transitions transitions,
            Context context,
            InteractionJankMonitor interactionJankMonitor,
            LatencyTracker latencyTracker,
            Supplier<SurfaceControl.Transaction> supplier) {
        mContext = context;
        mTransitions = transitions;
        mInteractionJankMonitor = interactionJankMonitor;
        mLatencyTracker = latencyTracker;
        mTransactionSupplier = supplier;
        mToDesktopAnimationDurationMs =
                mContext.getResources().getInteger(R.integer.to_desktop_animation_duration_ms);
    }

    void setOnTaskResizeAnimationListener(OnTaskResizeAnimationListener listener) {
@@ -178,7 +187,7 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
        mOnTaskResizeAnimationListener.onAnimationStart(taskInfo.taskId, startT, startBounds);
        final ValueAnimator animator = ValueAnimator.ofObject(new RectEvaluator(),
                change.getStartAbsBounds(), change.getEndAbsBounds());
        animator.setDuration(FREEFORM_ANIMATION_DURATION);
        animator.setDuration(mToDesktopAnimationDurationMs);
        SurfaceControl.Transaction t = mTransactionSupplier.get();
        animator.addUpdateListener(animation -> {
            final Rect animationValue = (Rect) animator.getAnimatedValue();
+23 −17
Original line number Diff line number Diff line
@@ -124,7 +124,6 @@ import com.android.wm.shell.desktopmode.DesktopTestHelpers.createFreeformTask
import com.android.wm.shell.desktopmode.DesktopTestHelpers.createFullscreenTask
import com.android.wm.shell.desktopmode.DesktopTestHelpers.createHomeTask
import com.android.wm.shell.desktopmode.DesktopTestHelpers.createSplitScreenTask
import com.android.wm.shell.desktopmode.EnterDesktopTaskTransitionHandler.FREEFORM_ANIMATION_DURATION
import com.android.wm.shell.desktopmode.ExitDesktopTaskTransitionHandler.FULLSCREEN_ANIMATION_DURATION
import com.android.wm.shell.desktopmode.common.ToggleTaskSizeInteraction
import com.android.wm.shell.desktopmode.desktopwallpaperactivity.DesktopWallpaperActivityTokenProvider
@@ -143,6 +142,7 @@ import com.android.wm.shell.recents.RecentsTransitionHandler
import com.android.wm.shell.recents.RecentsTransitionStateListener
import com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_ANIMATING
import com.android.wm.shell.recents.RecentsTransitionStateListener.TRANSITION_STATE_REQUESTED
import com.android.wm.shell.shared.R as SharedR
import com.android.wm.shell.shared.desktopmode.DesktopModeCompatPolicy
import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource.ADB_COMMAND
import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource.APP_FROM_OVERVIEW
@@ -353,6 +353,10 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        desktopModeCompatPolicy = spy(DesktopModeCompatPolicy(spyContext))
        homeIntentProvider = HomeIntentProvider(context)

        mContext
            .getOrCreateTestableResources()
            .addOverride(SharedR.integer.to_desktop_animation_duration_ms, TO_DESKTOP_ANIM_DURATION)

        whenever(shellTaskOrganizer.getRunningTasks(anyInt())).thenAnswer { runningTasks }
        whenever(transitions.startTransition(anyInt(), any(), anyOrNull())).thenAnswer { Binder() }
        whenever(enterDesktopTransitionHandler.moveToDesktop(any(), any())).thenAnswer { Binder() }
@@ -1720,7 +1724,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        assertThat(wct.changes[task.token.asBinder()]?.windowingMode)
            .isEqualTo(WINDOWING_MODE_FREEFORM)
        verify(desktopModeEnterExitTransitionListener)
            .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
            .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
    }

    @Test
@@ -1734,7 +1738,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        assertThat(wct.changes[task.token.asBinder()]?.windowingMode)
            .isEqualTo(WINDOWING_MODE_UNDEFINED)
        verify(desktopModeEnterExitTransitionListener)
            .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
            .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
    }

    @Test
@@ -1773,7 +1777,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
            runCurrent()

            verify(desktopModeEnterExitTransitionListener)
                .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
                .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
        }

    @Test
@@ -1815,7 +1819,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        controller.moveTaskToDesk(taskId = task.taskId, deskId = 3, transitionSource = UNKNOWN)

        verify(desktopModeEnterExitTransitionListener)
            .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
            .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
    }

    @Test
@@ -1879,7 +1883,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
            runCurrent()

            verify(desktopModeEnterExitTransitionListener)
                .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
                .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
            assertIs<OneShotRemoteHandler>(transitionHandlerArgCaptor.firstValue)
        }

@@ -2031,7 +2035,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
            runCurrent()

            verify(desktopModeEnterExitTransitionListener)
                .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
                .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
            assertIs<OneShotRemoteHandler>(transitionHandlerArgCaptor.firstValue)
        }

@@ -2059,7 +2063,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
                .isEqualTo(WINDOWING_MODE_FREEFORM)
        }
        verify(desktopModeEnterExitTransitionListener)
            .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
            .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
    }

    @Test
@@ -2086,7 +2090,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
                .isEqualTo(WINDOWING_MODE_FREEFORM)
        }
        verify(desktopModeEnterExitTransitionListener)
            .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
            .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
    }

    @Test
@@ -2112,7 +2116,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
            verify(desksOrganizer).moveTaskToDesk(wct, deskId = 0, fullscreenTask)
            verify(desksOrganizer).activateDesk(wct, deskId = 0)
            verify(desktopModeEnterExitTransitionListener)
                .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
                .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
        }

    @Test
@@ -2156,7 +2160,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
                    .doesNotContain(freeformTaskSecond.token.asBinder())
            }
            verify(desktopModeEnterExitTransitionListener)
                .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
                .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
        }

    @Test
@@ -2172,7 +2176,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
            assertThat(wct.changes[task.token.asBinder()]?.windowingMode)
                .isEqualTo(WINDOWING_MODE_FREEFORM)
            verify(desktopModeEnterExitTransitionListener)
                .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
                .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
            verify(splitScreenController)
                .prepareExitSplitScreen(
                    any(),
@@ -2193,7 +2197,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
            val wct = getLatestEnterDesktopWct()
            verify(desksOrganizer).moveTaskToDesk(wct, deskId = 0, task)
            verify(desktopModeEnterExitTransitionListener)
                .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
                .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
            verify(splitScreenController)
                .prepareExitSplitScreen(
                    any(),
@@ -2212,7 +2216,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()

            val wct = getLatestEnterDesktopWct()
            verify(desktopModeEnterExitTransitionListener)
                .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
                .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
            verify(splitScreenController, never())
                .prepareExitSplitScreen(
                    any(),
@@ -2236,7 +2240,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()

        val wct = getLatestEnterDesktopWct()
        verify(desktopModeEnterExitTransitionListener)
            .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
            .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
        assertThat(wct.hierarchyOps.size).isEqualTo(MAX_TASK_LIMIT + 1) // visible tasks + home
        wct.assertReorderAt(0, homeTask)
        wct.assertReorderSequenceInRange(
@@ -2262,7 +2266,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()

        val wct = getLatestEnterDesktopWct()
        verify(desktopModeEnterExitTransitionListener)
            .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
            .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
        assertThat(wct.hierarchyOps.size).isEqualTo(MAX_TASK_LIMIT + 2) // tasks + home + wallpaper
        // Move home to front
        wct.assertReorderAt(0, homeTask)
@@ -6633,7 +6637,7 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        spyController.onDragPositioningEndThroughStatusBar(PointF(200f, 200f), task, mockSurface)

        verify(desktopModeEnterExitTransitionListener)
            .onEnterDesktopModeTransitionStarted(FREEFORM_ANIMATION_DURATION)
            .onEnterDesktopModeTransitionStarted(TO_DESKTOP_ANIM_DURATION)
    }

    @Test
@@ -9218,6 +9222,8 @@ class DesktopTasksControllerTest(flags: FlagsParameterization) : ShellTestCase()
        // For testing disconnecting a display containing a desk.
        private const val DISCONNECTED_DESK_ID = 200

        private const val TO_DESKTOP_ANIM_DURATION = 336

        @JvmStatic
        @Parameters(name = "{0}")
        fun getParams(): List<FlagsParameterization> =