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

Commit c063bef9 authored by Daniel Akinola's avatar Daniel Akinola Committed by Android (Google) Code Review
Browse files

Merge "Jank CUJ: Snap Resizing" into main

parents 98beb550 1cb524e3
Loading
Loading
Loading
Loading
+23 −2
Original line number Diff line number Diff line
@@ -218,8 +218,25 @@ public class Cuj {
     */
    public static final int CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE = 117;

    /**
     * Track attempting to snap resize a desktop window via button or drag.
     *
     * <p>CUJ has 3 different tags:
     * <ul>
     *     <li>snap resizing resizable apps via maximize menu button: maximize_menu_resizable </li>
     *     <li>snap resizing resizable via drag: drag_resizable </li>
     *     <li>snap resizing non-resizable via drag: drag_non_resizable </li>
     * </ul>
     *
     * <p>For non-resizable apps, the desktop window won't actually be resized, instead will return
     * to its pre-dragged position. Attempting to snap resize a non-resizable app via the
     * maximize menu will just result in no change, and a toast explaining the app can't be resized.
     *
     */
    public static final int CUJ_DESKTOP_MODE_SNAP_RESIZE = 118;

    // When adding a CUJ, update this and make sure to also update CUJ_TO_STATSD_INTERACTION_TYPE.
    @VisibleForTesting static final int LAST_CUJ = CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE;
    @VisibleForTesting static final int LAST_CUJ = CUJ_DESKTOP_MODE_SNAP_RESIZE;

    /** @hide */
    @IntDef({
@@ -328,7 +345,8 @@ public class Cuj {
            CUJ_LAUNCHER_KEYBOARD_QUICK_SWITCH_CLOSE,
            CUJ_LAUNCHER_KEYBOARD_QUICK_SWITCH_APP_LAUNCH,
            CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE,
            CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE
            CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE,
            CUJ_DESKTOP_MODE_SNAP_RESIZE
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface CujType {}
@@ -448,6 +466,7 @@ public class Cuj {
        CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_LAUNCHER_KEYBOARD_QUICK_SWITCH_APP_LAUNCH] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__LAUNCHER_KEYBOARD_QUICK_SWITCH_APP_LAUNCH;
        CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE;
        CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE;
        CUJ_TO_STATSD_INTERACTION_TYPE[CUJ_DESKTOP_MODE_SNAP_RESIZE] = FrameworkStatsLog.UIINTERACTION_FRAME_INFO_REPORTED__INTERACTION_TYPE__DESKTOP_MODE_SNAP_RESIZE;
    }

    private Cuj() {
@@ -678,6 +697,8 @@ public class Cuj {
                return "DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE";
            case CUJ_DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE:
                return "DESKTOP_MODE_EXIT_MODE_ON_LAST_WINDOW_CLOSE";
            case CUJ_DESKTOP_MODE_SNAP_RESIZE:
                return "CUJ_DESKTOP_MODE_SNAP_RESIZE";
        }
        return "UNKNOWN";
    }
+8 −0
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import androidx.annotation.BinderThread
import com.android.internal.annotations.VisibleForTesting
import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_HOLD
import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE
import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE
import com.android.internal.jank.InteractionJankMonitor
import com.android.internal.policy.ScreenDecorationsUtils
import com.android.internal.protolog.ProtoLog
@@ -693,6 +694,10 @@ class DesktopTasksController(
    ) {
        releaseVisualIndicator()
        if (!taskInfo.isResizeable && DesktopModeFlags.DISABLE_SNAP_RESIZE.isEnabled(context)) {
            interactionJankMonitor.begin(
                taskSurface, context, CUJ_DESKTOP_MODE_SNAP_RESIZE, "drag_non_resizable"
            )

            // reposition non-resizable app back to its original position before being dragged
            returnToDragStartAnimator.start(
                taskInfo.taskId,
@@ -701,6 +706,9 @@ class DesktopTasksController(
                endBounds = dragStartBounds
            )
        } else {
            interactionJankMonitor.begin(
                taskSurface, context, CUJ_DESKTOP_MODE_SNAP_RESIZE, "drag_resizable"
            )
            snapToHalfScreen(taskInfo, currentDragBounds, position)
        }
    }
+2 −1
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.graphics.Rect
import android.view.SurfaceControl
import android.widget.Toast
import androidx.core.animation.addListener
import com.android.internal.jank.Cuj
import com.android.internal.jank.InteractionJankMonitor
import com.android.wm.shell.R
import com.android.wm.shell.windowdecor.OnTaskRepositionAnimationListener
@@ -85,7 +86,7 @@ class ReturnToDragStartAnimator(
                                R.string.desktop_mode_non_resizable_snap_text,
                                Toast.LENGTH_SHORT
                            ).show()
                            // TODO(b/339582583) - add Jank CUJ using interactionJankMonitor
                            interactionJankMonitor.end(Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE)
                        }
                    )
                    addUpdateListener { anim ->
+2 −2
Original line number Diff line number Diff line
@@ -117,8 +117,8 @@ class ToggleResizeDesktopTaskTransitionHandler(
                            finishCallback.onTransitionFinished(null)
                            initialBounds = null
                            boundsAnimator = null
                            interactionJankMonitor.end(
                                Cuj.CUJ_DESKTOP_MODE_MAXIMIZE_WINDOW)
                            interactionJankMonitor.end(Cuj.CUJ_DESKTOP_MODE_MAXIMIZE_WINDOW)
                            interactionJankMonitor.end(Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE)
                        }
                    )
                    addUpdateListener { anim ->
+2 −0
Original line number Diff line number Diff line
@@ -480,6 +480,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
            Toast.makeText(mContext,
                    R.string.desktop_mode_non_resizable_snap_text, Toast.LENGTH_SHORT).show();
        } else {
            mInteractionJankMonitor.begin(decoration.mTaskSurface, mContext,
                    Cuj.CUJ_DESKTOP_MODE_SNAP_RESIZE, "maximize_menu_resizable");
            mDesktopTasksController.snapToHalfScreen(decoration.mTaskInfo,
                    decoration.mTaskInfo.configuration.windowConfiguration.getBounds(),
                    left ? SnapPosition.LEFT : SnapPosition.RIGHT);
Loading