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

Commit 80368eae 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

parents bb30c904 ed2c1144
Loading
Loading
Loading
Loading
+1 −6
Original line number Original line Diff line number Diff line
@@ -162,7 +162,7 @@ public class DesktopModeVisualIndicator {
    /**
    /**
     * Release the indicator and its components when it is no longer needed.
     * 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) return;
        if (mViewHost != null) {
        if (mViewHost != null) {
            mViewHost.release();
            mViewHost.release();
@@ -170,13 +170,8 @@ public class DesktopModeVisualIndicator {
        }
        }


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


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


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


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


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


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


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


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


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


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


@@ -330,6 +339,16 @@ class DesktopTasksController(
            ?.let { homeTask -> wct.reorder(homeTask.getToken(), true /* onTop */) }
            ?.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 {
    override fun getContext(): Context {
        return context
        return context
    }
    }
@@ -471,8 +490,7 @@ class DesktopTasksController(
                        rootTaskDisplayAreaOrganizer)
                        rootTaskDisplayAreaOrganizer)
                visualIndicator?.createFullscreenIndicatorWithAnimatedBounds()
                visualIndicator?.createFullscreenIndicatorWithAnimatedBounds()
            } else if (y > statusBarHeight && visualIndicator != null) {
            } else if (y > statusBarHeight && visualIndicator != null) {
                visualIndicator?.releaseVisualIndicator()
                releaseVisualIndicator()
                visualIndicator = null
            }
            }
        }
        }
    }
    }
@@ -489,8 +507,6 @@ class DesktopTasksController(
    ) {
    ) {
        val statusBarHeight = getStatusBarHeight(taskInfo)
        val statusBarHeight = getStatusBarHeight(taskInfo)
        if (y <= statusBarHeight && taskInfo.windowingMode == WINDOWING_MODE_FREEFORM) {
        if (y <= statusBarHeight && taskInfo.windowingMode == WINDOWING_MODE_FREEFORM) {
            visualIndicator?.releaseVisualIndicator()
            visualIndicator = null
            moveToFullscreenWithAnimation(taskInfo)
            moveToFullscreenWithAnimation(taskInfo)
        }
        }
    }
    }
@@ -508,6 +524,11 @@ class DesktopTasksController(
            taskSurface: SurfaceControl,
            taskSurface: SurfaceControl,
            y: Float
            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) {
        if (visualIndicator == null) {
            visualIndicator = DesktopModeVisualIndicator(syncQueue, taskInfo,
            visualIndicator = DesktopModeVisualIndicator(syncQueue, taskInfo,
                    displayController, context, taskSurface, shellTaskOrganizer,
                    displayController, context, taskSurface, shellTaskOrganizer,
@@ -535,11 +556,8 @@ class DesktopTasksController(
            freeformBounds: Rect
            freeformBounds: Rect
    ) {
    ) {
        moveToDesktopWithAnimation(taskInfo, freeformBounds)
        moveToDesktopWithAnimation(taskInfo, freeformBounds)
        visualIndicator?.releaseVisualIndicator()
        visualIndicator = null
    }
    }



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



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


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


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


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


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


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


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


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




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

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


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


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


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