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

Commit 88015e23 authored by Maryam Dehaini's avatar Maryam Dehaini Committed by Automerger Merge Worker
Browse files

Merge "Fix add and remove times for visual indicator" into udc-dev am: ed2c1144 am: 2a7d42fe

parents f0d3813a 2a7d42fe
Loading
Loading
Loading
Loading
+1 −6
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@ public class DesktopModeVisualIndicator {
    /**
     * Release the indicator and its components when it is no longer needed.
     */
    public void releaseVisualIndicator() {
    public void releaseVisualIndicator(SurfaceControl.Transaction t) {
        if (mViewHost == null) return;
        if (mViewHost != null) {
            mViewHost.release();
@@ -170,13 +170,8 @@ public class DesktopModeVisualIndicator {
        }

        if (mLeash != null) {
            final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
            t.remove(mLeash);
            mLeash = null;
            mSyncQueue.runInSync(transaction -> {
                transaction.merge(t);
                t.close();
            });
        }
    }

+31 −14
Original line number Diff line number Diff line
@@ -78,6 +78,11 @@ class DesktopTasksController(

    private val desktopMode: DesktopModeImpl
    private var visualIndicator: DesktopModeVisualIndicator? = null
    private val mOnAnimationFinishedCallback = Consumer<SurfaceControl.Transaction> {
        t: SurfaceControl.Transaction ->
        visualIndicator?.releaseVisualIndicator(t)
        visualIndicator = null
    }

    init {
        desktopMode = DesktopModeImpl()
@@ -154,14 +159,14 @@ class DesktopTasksController(

        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
            enterDesktopTaskTransitionHandler.startTransition(
                    Transitions.TRANSIT_ENTER_FREEFORM, wct)
                    Transitions.TRANSIT_ENTER_FREEFORM, wct, mOnAnimationFinishedCallback)
        } else {
            shellTaskOrganizer.applyTransaction(wct)
        }
    }

    /** Brings apps to front and sets freeform task bounds */
    fun moveToDesktopWithAnimation(
    private fun moveToDesktopWithAnimation(
            taskInfo: RunningTaskInfo,
            freeformBounds: Rect
    ) {
@@ -172,9 +177,10 @@ class DesktopTasksController(

        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
            enterDesktopTaskTransitionHandler.startTransition(
                Transitions.TRANSIT_ENTER_DESKTOP_MODE, wct)
                Transitions.TRANSIT_ENTER_DESKTOP_MODE, wct, mOnAnimationFinishedCallback)
        } else {
            shellTaskOrganizer.applyTransaction(wct)
            releaseVisualIndicator()
        }
    }

@@ -205,21 +211,24 @@ class DesktopTasksController(
        val wct = WindowContainerTransaction()
        addMoveToFullscreenChanges(wct, task.token)
        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
            enterDesktopTaskTransitionHandler.startCancelMoveToDesktopMode(wct, startPosition)
            enterDesktopTaskTransitionHandler.startCancelMoveToDesktopMode(wct, startPosition,
                    mOnAnimationFinishedCallback)
        } else {
            shellTaskOrganizer.applyTransaction(wct)
            releaseVisualIndicator()
        }
    }

    fun moveToFullscreenWithAnimation(task: ActivityManager.RunningTaskInfo) {
    private fun moveToFullscreenWithAnimation(task: ActivityManager.RunningTaskInfo) {
        val wct = WindowContainerTransaction()
        addMoveToFullscreenChanges(wct, task.token)

        if (Transitions.ENABLE_SHELL_TRANSITIONS) {
            exitDesktopTaskTransitionHandler.startTransition(
            Transitions.TRANSIT_EXIT_DESKTOP_MODE, wct)
            Transitions.TRANSIT_EXIT_DESKTOP_MODE, wct, mOnAnimationFinishedCallback)
        } else {
            shellTaskOrganizer.applyTransaction(wct)
            releaseVisualIndicator()
        }
    }

@@ -330,6 +339,16 @@ class DesktopTasksController(
            ?.let { homeTask -> wct.reorder(homeTask.getToken(), true /* onTop */) }
    }

    private fun releaseVisualIndicator() {
        val t = SurfaceControl.Transaction()
        visualIndicator?.releaseVisualIndicator(t)
        visualIndicator = null
        syncQueue.runInSync { transaction ->
            transaction.merge(t)
            t.close()
        }
    }

    override fun getContext(): Context {
        return context
    }
@@ -471,8 +490,7 @@ class DesktopTasksController(
                        rootTaskDisplayAreaOrganizer)
                visualIndicator?.createFullscreenIndicatorWithAnimatedBounds()
            } else if (y > statusBarHeight && visualIndicator != null) {
                visualIndicator?.releaseVisualIndicator()
                visualIndicator = null
                releaseVisualIndicator()
            }
        }
    }
@@ -489,8 +507,6 @@ class DesktopTasksController(
    ) {
        val statusBarHeight = getStatusBarHeight(taskInfo)
        if (y <= statusBarHeight && taskInfo.windowingMode == WINDOWING_MODE_FREEFORM) {
            visualIndicator?.releaseVisualIndicator()
            visualIndicator = null
            moveToFullscreenWithAnimation(taskInfo)
        }
    }
@@ -508,6 +524,11 @@ class DesktopTasksController(
            taskSurface: SurfaceControl,
            y: Float
    ) {
        // If the motion event is above the status bar, return since we do not need to show the
        // visual indicator at this point.
        if (y < getStatusBarHeight(taskInfo)) {
            return
        }
        if (visualIndicator == null) {
            visualIndicator = DesktopModeVisualIndicator(syncQueue, taskInfo,
                    displayController, context, taskSurface, shellTaskOrganizer,
@@ -535,11 +556,8 @@ class DesktopTasksController(
            freeformBounds: Rect
    ) {
        moveToDesktopWithAnimation(taskInfo, freeformBounds)
        visualIndicator?.releaseVisualIndicator()
        visualIndicator = null
    }


    private fun getStatusBarHeight(taskInfo: RunningTaskInfo): Int {
        return displayController.getDisplayLayout(taskInfo.displayId)?.stableInsets()?.top ?: 0
    }
@@ -566,7 +584,6 @@ class DesktopTasksController(
        desktopModeTaskRepository.removeTaskCorners(taskId)
    }


    /**
     * Adds a listener to find out about changes in the visibility of freeform tasks.
     *
+20 −5
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import com.android.wm.shell.transition.Transitions;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;

/**
@@ -58,6 +59,7 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition

    private final List<IBinder> mPendingTransitionTokens = new ArrayList<>();
    private Point mStartPosition;
    private Consumer<SurfaceControl.Transaction> mOnAnimationFinishedCallback;

    public EnterDesktopTaskTransitionHandler(
            Transitions transitions) {
@@ -75,9 +77,12 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
     * Starts Transition of a given type
     * @param type Transition type
     * @param wct WindowContainerTransaction for transition
     * @param onAnimationEndCallback to be called after animation
     */
    public void startTransition(@WindowManager.TransitionType int type,
                @NonNull WindowContainerTransaction wct) {
            @NonNull WindowContainerTransaction wct,
            Consumer<SurfaceControl.Transaction> onAnimationEndCallback) {
        mOnAnimationFinishedCallback = onAnimationEndCallback;
        final IBinder token = mTransitions.startTransition(type, wct, this);
        mPendingTransitionTokens.add(token);
    }
@@ -86,11 +91,14 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
     * Starts Transition of type TRANSIT_CANCEL_ENTERING_DESKTOP_MODE
     * @param wct WindowContainerTransaction for transition
     * @param startPosition Position of task when transition is triggered
     * @param onAnimationEndCallback to be called after animation
     */
    public void startCancelMoveToDesktopMode(@NonNull WindowContainerTransaction wct,
            Point startPosition) {
            Point startPosition,
            Consumer<SurfaceControl.Transaction> onAnimationEndCallback) {
        mStartPosition = startPosition;
        startTransition(Transitions.TRANSIT_CANCEL_ENTERING_DESKTOP_MODE, wct);
        startTransition(Transitions.TRANSIT_CANCEL_ENTERING_DESKTOP_MODE, wct,
                mOnAnimationFinishedCallback);
    }

    @Override
@@ -111,7 +119,7 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition

            if (change.getMode() == WindowManager.TRANSIT_CHANGE) {
                transitionHandled |= startChangeTransition(
                        transition, info.getType(), change, startT, finishCallback);
                        transition, info.getType(), change, startT, finishT, finishCallback);
            }
        }

@@ -125,6 +133,7 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
            @WindowManager.TransitionType int type,
            @NonNull TransitionInfo.Change change,
            @NonNull SurfaceControl.Transaction startT,
            @NonNull SurfaceControl.Transaction finishT,
            @NonNull Transitions.TransitionFinishCallback finishCallback) {
        if (!mPendingTransitionTokens.contains(transition)) {
            return false;
@@ -178,6 +187,9 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
            animator.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    if (mOnAnimationFinishedCallback != null) {
                        mOnAnimationFinishedCallback.accept(finishT);
                    }
                    mTransitions.getMainExecutor().execute(
                            () -> finishCallback.onTransitionFinished(null, null));
                }
@@ -204,7 +216,7 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
            animator.setDuration(FREEFORM_ANIMATION_DURATION);
            final SurfaceControl.Transaction t = mTransactionSupplier.get();
            animator.addUpdateListener(animation -> {
                final float scale = animation.getAnimatedFraction();
                final float scale = (float) animation.getAnimatedValue();
                t.setPosition(sc, mStartPosition.x * (1 - scale), mStartPosition.y * (1 - scale))
                        .setScale(sc, scale, scale)
                        .show(sc)
@@ -213,6 +225,9 @@ public class EnterDesktopTaskTransitionHandler implements Transitions.Transition
            animator.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    if (mOnAnimationFinishedCallback != null) {
                        mOnAnimationFinishedCallback.accept(finishT);
                    }
                    mTransitions.getMainExecutor().execute(
                            () -> finishCallback.onTransitionFinished(null, null));
                }
+11 −3
Original line number Diff line number Diff line
@@ -42,6 +42,7 @@ import com.android.wm.shell.transition.Transitions;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import java.util.function.Supplier;


@@ -54,7 +55,7 @@ public class ExitDesktopTaskTransitionHandler implements Transitions.TransitionH
    private final Context mContext;
    private final Transitions mTransitions;
    private final List<IBinder> mPendingTransitionTokens = new ArrayList<>();

    private Consumer<SurfaceControl.Transaction> mOnAnimationFinishedCallback;
    private Supplier<SurfaceControl.Transaction> mTransactionSupplier;

    public ExitDesktopTaskTransitionHandler(
@@ -76,9 +77,12 @@ public class ExitDesktopTaskTransitionHandler implements Transitions.TransitionH
     * Starts Transition of a given type
     * @param type Transition type
     * @param wct WindowContainerTransaction for transition
     * @param onAnimationEndCallback to be called after animation
     */
    public void startTransition(@WindowManager.TransitionType int type,
            @NonNull WindowContainerTransaction wct) {
            @NonNull WindowContainerTransaction wct,
            Consumer<SurfaceControl.Transaction> onAnimationEndCallback) {
        mOnAnimationFinishedCallback = onAnimationEndCallback;
        final IBinder token = mTransitions.startTransition(type, wct, this);
        mPendingTransitionTokens.add(token);
    }
@@ -101,7 +105,7 @@ public class ExitDesktopTaskTransitionHandler implements Transitions.TransitionH

            if (change.getMode() == WindowManager.TRANSIT_CHANGE) {
                transitionHandled |= startChangeTransition(
                        transition, info.getType(), change, startT, finishCallback);
                        transition, info.getType(), change, startT, finishT, finishCallback);
            }
        }

@@ -116,6 +120,7 @@ public class ExitDesktopTaskTransitionHandler implements Transitions.TransitionH
            @WindowManager.TransitionType int type,
            @NonNull TransitionInfo.Change change,
            @NonNull SurfaceControl.Transaction startT,
            @NonNull SurfaceControl.Transaction finishT,
            @NonNull Transitions.TransitionFinishCallback finishCallback) {
        if (!mPendingTransitionTokens.contains(transition)) {
            return false;
@@ -156,6 +161,9 @@ public class ExitDesktopTaskTransitionHandler implements Transitions.TransitionH
            animator.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    if (mOnAnimationFinishedCallback != null) {
                        mOnAnimationFinishedCallback.accept(finishT);
                    }
                    mTransitions.getMainExecutor().execute(
                            () -> finishCallback.onTransitionFinished(null, null));
                }
+3 −4
Original line number Diff line number Diff line
@@ -111,7 +111,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
    private ValueAnimator mDragToDesktopValueAnimator;
    private final Rect mDragToDesktopAnimationStartBounds = new Rect();
    private boolean mDragToDesktopAnimationStarted;
    private float mCaptionDragStartX;

    public DesktopModeWindowDecorViewModel(
            Context context,
@@ -525,7 +524,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
            DesktopModeWindowDecoration relevantDecor) {
        switch (ev.getActionMasked()) {
            case MotionEvent.ACTION_DOWN: {
                mCaptionDragStartX = ev.getX();
                // Begin drag through status bar if applicable.
                if (relevantDecor != null) {
                    mDragToDesktopAnimationStartBounds.set(
@@ -580,7 +578,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                }
                if (mTransitionDragActive) {
                    mDesktopTasksController.ifPresent(
                            c -> c.onDragPositioningMoveThroughStatusBar(relevantDecor.mTaskInfo,
                            c -> c.onDragPositioningMoveThroughStatusBar(
                                    relevantDecor.mTaskInfo,
                                    relevantDecor.mTaskSurface, ev.getY()));
                    final int statusBarHeight = getStatusBarHeight(
                            relevantDecor.mTaskInfo.displayId);
Loading