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

Commit f4cc6acc authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge changes I3f413f7f,Ie5fade7e into main

* changes:
  Fix hover icon when drag resizing a freeform window with a stylus.
  Clean up edge resizing debug logging.
parents c07948e5 929da90d
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -468,8 +468,7 @@ class DragResizeInputListener implements AutoCloseable {
                case MotionEvent.ACTION_HOVER_ENTER:
                case MotionEvent.ACTION_HOVER_MOVE: {
                    updateCursorType(e.getDisplayId(), e.getDeviceId(),
                            e.getPointerId(/*pointerIndex=*/0), e.getXCursorPosition(),
                            e.getYCursorPosition());
                            e.getPointerId(/*pointerIndex=*/0), e.getX(), e.getY());
                    result = true;
                    break;
                }
+3 −34
Original line number Diff line number Diff line
@@ -33,9 +33,6 @@ import android.graphics.Region;
import android.util.Size;
import android.view.MotionEvent;

import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;

import com.android.wm.shell.R;

import java.util.Objects;
@@ -44,11 +41,6 @@ import java.util.Objects;
 * Geometry for a drag resize region for a particular window.
 */
final class DragResizeWindowGeometry {
    // TODO(b/337264971) clean up when no longer needed
    @VisibleForTesting static final boolean DEBUG = true;
    // The additional width to apply to edge resize bounds just for logging when a touch is
    // close.
    @VisibleForTesting static final int EDGE_DEBUG_BUFFER = 15;
    private final int mTaskCornerRadius;
    private final Size mTaskSize;
    // The size of the handle applied to the edges of the window, for the user to drag resize.
@@ -60,8 +52,6 @@ final class DragResizeWindowGeometry {
    private final @NonNull TaskCorners mFineTaskCorners;
    // The bounds for each edge drag region, which can resize the task in one direction.
    private final @NonNull TaskEdges mTaskEdges;
    // Extra-large edge bounds for logging to help debug when an edge resize is ignored.
    private final @Nullable TaskEdges mDebugTaskEdges;

    DragResizeWindowGeometry(int taskCornerRadius, @NonNull Size taskSize,
            int resizeHandleThickness, int fineCornerSize, int largeCornerSize) {
@@ -74,11 +64,6 @@ final class DragResizeWindowGeometry {

        // Save touch areas for each edge.
        mTaskEdges = new TaskEdges(mTaskSize, mResizeHandleThickness);
        if (DEBUG) {
            mDebugTaskEdges = new TaskEdges(mTaskSize, mResizeHandleThickness + EDGE_DEBUG_BUFFER);
        } else {
            mDebugTaskEdges = null;
        }
    }

    /**
@@ -120,13 +105,7 @@ final class DragResizeWindowGeometry {
     */
    void union(@NonNull Region region) {
        // Apply the edge resize regions.
        if (inDebugMode()) {
            // Use the larger edge sizes if we are debugging, to be able to log if we ignored a
            // touch due to the size of the edge region.
            mDebugTaskEdges.union(region);
        } else {
        mTaskEdges.union(region);
        }

        if (enableWindowingEdgeDragResize()) {
            // Apply the corners as well for the larger corners, to ensure we capture all possible
@@ -219,10 +198,6 @@ final class DragResizeWindowGeometry {

    @DragPositioningCallback.CtrlType
    private int calculateEdgeResizeCtrlType(float x, float y) {
        if (inDebugMode() && (mDebugTaskEdges.contains((int) x, (int) y)
                    && !mTaskEdges.contains((int) x, (int) y))) {
            return CTRL_TYPE_UNDEFINED;
        }
        int ctrlType = CTRL_TYPE_UNDEFINED;
        // mTaskCornerRadius is only used in comparing with corner regions. Comparisons with
        // sides will use the bounds specified in setGeometry and not go into task bounds.
@@ -313,9 +288,7 @@ final class DragResizeWindowGeometry {
                && this.mResizeHandleThickness == other.mResizeHandleThickness
                && this.mFineTaskCorners.equals(other.mFineTaskCorners)
                && this.mLargeTaskCorners.equals(other.mLargeTaskCorners)
                && (inDebugMode()
                        ? this.mDebugTaskEdges.equals(other.mDebugTaskEdges)
                        : this.mTaskEdges.equals(other.mTaskEdges));
                && this.mTaskEdges.equals(other.mTaskEdges);
    }

    @Override
@@ -326,11 +299,7 @@ final class DragResizeWindowGeometry {
                mResizeHandleThickness,
                mFineTaskCorners,
                mLargeTaskCorners,
                (inDebugMode() ? mDebugTaskEdges : mTaskEdges));
    }

    private boolean inDebugMode() {
        return DEBUG && mDebugTaskEdges != null;
                mTaskEdges);
    }

    /**
+15 −23
Original line number Diff line number Diff line
@@ -55,8 +55,6 @@ public class DragResizeWindowGeometryTests {
    private static final Size TASK_SIZE = new Size(500, 1000);
    private static final int TASK_CORNER_RADIUS = 10;
    private static final int EDGE_RESIZE_THICKNESS = 15;
    private static final int EDGE_RESIZE_DEBUG_THICKNESS = EDGE_RESIZE_THICKNESS
            + (DragResizeWindowGeometry.DEBUG ? DragResizeWindowGeometry.EDGE_DEBUG_BUFFER : 0);
    private static final int FINE_CORNER_SIZE = EDGE_RESIZE_THICKNESS * 2 + 10;
    private static final int LARGE_CORNER_SIZE = FINE_CORNER_SIZE + 10;
    private static final DragResizeWindowGeometry GEOMETRY = new DragResizeWindowGeometry(
@@ -91,14 +89,13 @@ public class DragResizeWindowGeometryTests {
                                EDGE_RESIZE_THICKNESS + 10, FINE_CORNER_SIZE, LARGE_CORNER_SIZE),
                        new DragResizeWindowGeometry(TASK_CORNER_RADIUS, TASK_SIZE,
                                EDGE_RESIZE_THICKNESS + 10, FINE_CORNER_SIZE, LARGE_CORNER_SIZE))
                .addEqualityGroup(new DragResizeWindowGeometry(TASK_CORNER_RADIUS, TASK_SIZE,
                                EDGE_RESIZE_THICKNESS, FINE_CORNER_SIZE, LARGE_CORNER_SIZE + 5),
                .addEqualityGroup(
                        new DragResizeWindowGeometry(TASK_CORNER_RADIUS, TASK_SIZE,
                                EDGE_RESIZE_THICKNESS, FINE_CORNER_SIZE, LARGE_CORNER_SIZE + 5))
                .addEqualityGroup(new DragResizeWindowGeometry(TASK_CORNER_RADIUS, TASK_SIZE,
                                EDGE_RESIZE_THICKNESS, FINE_CORNER_SIZE + 4, LARGE_CORNER_SIZE),
                                EDGE_RESIZE_THICKNESS + 10, FINE_CORNER_SIZE,
                                LARGE_CORNER_SIZE + 5),
                        new DragResizeWindowGeometry(TASK_CORNER_RADIUS, TASK_SIZE,
                                EDGE_RESIZE_THICKNESS, FINE_CORNER_SIZE + 4, LARGE_CORNER_SIZE))
                                EDGE_RESIZE_THICKNESS + 10, FINE_CORNER_SIZE,
                                LARGE_CORNER_SIZE + 5))
                .testEquals();
    }

@@ -124,21 +121,21 @@ public class DragResizeWindowGeometryTests {
    private static void verifyHorizontalEdge(@NonNull Region region, @NonNull Point point) {
        assertThat(region.contains(point.x, point.y)).isTrue();
        // Horizontally along the edge is still contained.
        assertThat(region.contains(point.x + EDGE_RESIZE_DEBUG_THICKNESS, point.y)).isTrue();
        assertThat(region.contains(point.x - EDGE_RESIZE_DEBUG_THICKNESS, point.y)).isTrue();
        assertThat(region.contains(point.x + EDGE_RESIZE_THICKNESS, point.y)).isTrue();
        assertThat(region.contains(point.x - EDGE_RESIZE_THICKNESS, point.y)).isTrue();
        // Vertically along the edge is not contained.
        assertThat(region.contains(point.x, point.y - EDGE_RESIZE_DEBUG_THICKNESS)).isFalse();
        assertThat(region.contains(point.x, point.y + EDGE_RESIZE_DEBUG_THICKNESS)).isFalse();
        assertThat(region.contains(point.x, point.y - EDGE_RESIZE_THICKNESS)).isFalse();
        assertThat(region.contains(point.x, point.y + EDGE_RESIZE_THICKNESS)).isFalse();
    }

    private static void verifyVerticalEdge(@NonNull Region region, @NonNull Point point) {
        assertThat(region.contains(point.x, point.y)).isTrue();
        // Horizontally along the edge is not contained.
        assertThat(region.contains(point.x + EDGE_RESIZE_DEBUG_THICKNESS, point.y)).isFalse();
        assertThat(region.contains(point.x - EDGE_RESIZE_DEBUG_THICKNESS, point.y)).isFalse();
        assertThat(region.contains(point.x + EDGE_RESIZE_THICKNESS, point.y)).isFalse();
        assertThat(region.contains(point.x - EDGE_RESIZE_THICKNESS, point.y)).isFalse();
        // Vertically along the edge is contained.
        assertThat(region.contains(point.x, point.y - EDGE_RESIZE_DEBUG_THICKNESS)).isTrue();
        assertThat(region.contains(point.x, point.y + EDGE_RESIZE_DEBUG_THICKNESS)).isTrue();
        assertThat(region.contains(point.x, point.y - EDGE_RESIZE_THICKNESS)).isTrue();
        assertThat(region.contains(point.x, point.y + EDGE_RESIZE_THICKNESS)).isTrue();
    }

    /**
@@ -151,10 +148,7 @@ public class DragResizeWindowGeometryTests {
    public void testRegionUnion_edgeDragResizeEnabled_containsLargeCorners() {
        Region region = new Region();
        GEOMETRY.union(region);
        // Make sure we're choosing a point outside of any debug region buffer.
        final int cornerRadius = DragResizeWindowGeometry.DEBUG
                ? Math.max(LARGE_CORNER_SIZE / 2, EDGE_RESIZE_DEBUG_THICKNESS)
                : LARGE_CORNER_SIZE / 2;
        final int cornerRadius = LARGE_CORNER_SIZE / 2;

        new TestPoints(TASK_SIZE, cornerRadius).validateRegion(region);
    }
@@ -168,9 +162,7 @@ public class DragResizeWindowGeometryTests {
    public void testRegionUnion_edgeDragResizeDisabled_containsFineCorners() {
        Region region = new Region();
        GEOMETRY.union(region);
        final int cornerRadius = DragResizeWindowGeometry.DEBUG
                ? Math.max(LARGE_CORNER_SIZE / 2, EDGE_RESIZE_DEBUG_THICKNESS)
                : LARGE_CORNER_SIZE / 2;
        final int cornerRadius = FINE_CORNER_SIZE / 2;

        new TestPoints(TASK_SIZE, cornerRadius).validateRegion(region);
    }