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

Commit 503c4a07 authored by mattsziklay's avatar mattsziklay
Browse files

Start blocking relayout sooner in exit/cancel enter desktop transitions.

Resolves a flicker issue in exit desktop and cancel enter desktop
transitions caused by relayout occurring before the animations
start. Relayout is now blocked in exit desktop transition and sooner for
cancel enter desktop transition.

Bug: 280834154
Test: Manual
Change-Id: I83c92d23b5d860bc558263cdb2acff281999026d
parent 6fa9219c
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import com.android.wm.shell.sysui.ShellInit
import com.android.wm.shell.sysui.ShellSharedConstants
import com.android.wm.shell.transition.Transitions
import com.android.wm.shell.util.KtProtoLog
import com.android.wm.shell.windowdecor.DesktopModeWindowDecoration
import java.io.PrintWriter
import java.util.concurrent.Executor
import java.util.function.Consumer
@@ -614,14 +615,17 @@ class DesktopTasksController(
     * @param taskInfo the task being dragged.
     * @param position position of surface when drag ends.
     * @param y the Y position of the motion event.
     * @param windowDecor the window decoration for the task being dragged
     */
    fun onDragPositioningEnd(
            taskInfo: RunningTaskInfo,
            position: Point,
            y: Float
            y: Float,
            windowDecor: DesktopModeWindowDecoration
    ) {
        val statusBarHeight = getStatusBarHeight(taskInfo)
        if (y <= statusBarHeight && taskInfo.windowingMode == WINDOWING_MODE_FREEFORM) {
            windowDecor.incrementRelayoutBlock()
            moveToFullscreenWithAnimation(taskInfo, position)
        }
    }
+6 −4
Original line number Diff line number Diff line
@@ -193,7 +193,9 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
            @NonNull TransitionInfo info,
            @NonNull TransitionInfo.Change change) {
        if (change.getMode() == WindowManager.TRANSIT_CHANGE
                && (info.getType() == Transitions.TRANSIT_ENTER_DESKTOP_MODE)) {
                && (info.getType() == Transitions.TRANSIT_ENTER_DESKTOP_MODE
                || info.getType() == Transitions.TRANSIT_CANCEL_ENTERING_DESKTOP_MODE
                || info.getType() == Transitions.TRANSIT_EXIT_DESKTOP_MODE)) {
            mWindowDecorByTaskId.get(change.getTaskInfo().taskId)
                    .addTransitionPausingRelayout(transition);
        }
@@ -411,7 +413,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                    mDragPositioningCallback.onDragPositioningEnd(
                            e.getRawX(dragPointerIdx), e.getRawY(dragPointerIdx));
                    mDesktopTasksController.ifPresent(c -> c.onDragPositioningEnd(taskInfo,
                            position, e.getRawY()));
                            position, e.getRawY(), mWindowDecorByTaskId.get(mTaskId)));
                    final boolean wasDragging = mIsDragging;
                    mIsDragging = false;
                    return wasDragging;
@@ -577,9 +579,9 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                        return;
                    } else if (mDragToDesktopAnimationStarted) {
                        Point position = new Point((int) ev.getX(), (int) ev.getY());
                        relevantDecor.incrementRelayoutBlock();
                        mDesktopTasksController.ifPresent(
                                c -> c.cancelMoveToFreeform(relevantDecor.mTaskInfo,
                                        position));
                                c -> c.cancelMoveToFreeform(relevantDecor.mTaskInfo, position));
                        mDragToDesktopAnimationStarted = false;
                        return;
                    }