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
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user