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

Commit b872065c authored by Biswarup Pal's avatar Biswarup Pal Committed by Android (Google) Code Review
Browse files

Merge "ViewConfigurationParams APIs in pixels instead of dp" into main

parents 41a612e2 78a44caf
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -3527,12 +3527,12 @@ package android.companion.virtual {
    method @NonNull public java.time.Duration getDoubleTapMinTimeDuration();
    method @NonNull public java.time.Duration getDoubleTapTimeoutDuration();
    method @NonNull public java.time.Duration getLongPressTimeoutDuration();
    method @FloatRange(from=0) public float getMaximumFlingVelocityDpPerSecond();
    method @FloatRange(from=0) public float getMinimumFlingVelocityDpPerSecond();
    method @IntRange(from=0) public int getMaximumFlingVelocityPixelsPerSecond();
    method @IntRange(from=0) public int getMinimumFlingVelocityPixelsPerSecond();
    method @NonNull public java.time.Duration getMultiPressTimeoutDuration();
    method @FloatRange(from=0) public float getScrollFriction();
    method @NonNull public java.time.Duration getTapTimeoutDuration();
    method @FloatRange(from=0) public float getTouchSlopDp();
    method @IntRange(from=0) public int getTouchSlopPixels();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.companion.virtual.ViewConfigurationParams> CREATOR;
  }
@@ -3543,12 +3543,12 @@ package android.companion.virtual {
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setDoubleTapMinTimeDuration(@NonNull java.time.Duration);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setDoubleTapTimeoutDuration(@NonNull java.time.Duration);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setLongPressTimeoutDuration(@NonNull java.time.Duration);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setMaximumFlingVelocityDpPerSecond(@FloatRange(from=0) float);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setMinimumFlingVelocityDpPerSecond(@FloatRange(from=0) float);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setMaximumFlingVelocityPixelsPerSecond(@IntRange(from=0) int);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setMinimumFlingVelocityPixelsPerSecond(@IntRange(from=0) int);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setMultiPressTimeoutDuration(@NonNull java.time.Duration);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setScrollFriction(@FloatRange(from=0) float);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setTapTimeoutDuration(@NonNull java.time.Duration);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setTouchSlopDp(@FloatRange(from=0) float);
    method @NonNull public android.companion.virtual.ViewConfigurationParams.Builder setTouchSlopPixels(@IntRange(from=0) int);
  }
  public final class VirtualDevice implements android.os.Parcelable {
+76 −77
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.companion.virtual;

import android.annotation.FlaggedApi;
import android.annotation.FloatRange;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.companion.virtualdevice.flags.Flags;
@@ -44,9 +45,9 @@ public final class ViewConfigurationParams implements Parcelable {
     */
    public static final int INVALID_VALUE = -1;

    private final float mTouchSlopDp;
    private final float mMinimumFlingVelocityDpPerSecond;
    private final float mMaximumFlingVelocityDpPerSecond;
    private final int mTouchSlopPixels;
    private final int mMinimumFlingVelocityPixelsPerSecond;
    private final int mMaximumFlingVelocityPixelsPerSecond;
    private final float mScrollFriction;
    private final int mTapTimeoutMillis;
    private final int mDoubleTapTimeoutMillis;
@@ -54,13 +55,13 @@ public final class ViewConfigurationParams implements Parcelable {
    private final int mLongPressTimeoutMillis;
    private final int mMultiPressTimeoutMillis;

    private ViewConfigurationParams(float touchSlopDp, float minimumFlingVelocityDpPerSecond,
            float maximumFlingVelocityDpPerSecond, float scrollFriction, int tapTimeoutMillis,
            int doubleTapTimeoutMillis, int doubleTapMinTimeMillis, int longPressTimeoutMillis,
            int multiPressTimeoutMillis) {
        mTouchSlopDp = touchSlopDp;
        mMinimumFlingVelocityDpPerSecond = minimumFlingVelocityDpPerSecond;
        mMaximumFlingVelocityDpPerSecond = maximumFlingVelocityDpPerSecond;
    private ViewConfigurationParams(int touchSlopPixels,
            int minimumFlingVelocityPixelsPerSecond, int maximumFlingVelocityPixelsPerSecond,
            float scrollFriction, int tapTimeoutMillis, int doubleTapTimeoutMillis,
            int doubleTapMinTimeMillis, int longPressTimeoutMillis, int multiPressTimeoutMillis) {
        mTouchSlopPixels = touchSlopPixels;
        mMinimumFlingVelocityPixelsPerSecond = minimumFlingVelocityPixelsPerSecond;
        mMaximumFlingVelocityPixelsPerSecond = maximumFlingVelocityPixelsPerSecond;
        mScrollFriction = scrollFriction;
        mTapTimeoutMillis = tapTimeoutMillis;
        mDoubleTapTimeoutMillis = doubleTapTimeoutMillis;
@@ -70,9 +71,9 @@ public final class ViewConfigurationParams implements Parcelable {
    }

    private ViewConfigurationParams(Parcel in) {
        mTouchSlopDp = in.readFloat();
        mMinimumFlingVelocityDpPerSecond = in.readFloat();
        mMaximumFlingVelocityDpPerSecond = in.readFloat();
        mTouchSlopPixels = in.readInt();
        mMinimumFlingVelocityPixelsPerSecond = in.readInt();
        mMaximumFlingVelocityPixelsPerSecond = in.readInt();
        mScrollFriction = in.readFloat();
        mTapTimeoutMillis = in.readInt();
        mDoubleTapTimeoutMillis = in.readInt();
@@ -88,9 +89,9 @@ public final class ViewConfigurationParams implements Parcelable {

    @Override
    public void writeToParcel(@NonNull Parcel dest, int flags) {
        dest.writeFloat(mTouchSlopDp);
        dest.writeFloat(mMinimumFlingVelocityDpPerSecond);
        dest.writeFloat(mMaximumFlingVelocityDpPerSecond);
        dest.writeInt(mTouchSlopPixels);
        dest.writeInt(mMinimumFlingVelocityPixelsPerSecond);
        dest.writeInt(mMaximumFlingVelocityPixelsPerSecond);
        dest.writeFloat(mScrollFriction);
        dest.writeInt(mTapTimeoutMillis);
        dest.writeInt(mDoubleTapTimeoutMillis);
@@ -103,11 +104,9 @@ public final class ViewConfigurationParams implements Parcelable {
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof ViewConfigurationParams that)) return false;
        return Float.compare(mTouchSlopDp, that.mTouchSlopDp) == 0
                && Float.compare(mMinimumFlingVelocityDpPerSecond,
                    that.mMinimumFlingVelocityDpPerSecond) == 0
                && Float.compare(mMaximumFlingVelocityDpPerSecond,
                    that.mMaximumFlingVelocityDpPerSecond) == 0
        return mTouchSlopPixels == that.mTouchSlopPixels
                && mMinimumFlingVelocityPixelsPerSecond == that.mMinimumFlingVelocityPixelsPerSecond
                && mMaximumFlingVelocityPixelsPerSecond == that.mMaximumFlingVelocityPixelsPerSecond
                && Float.compare(mScrollFriction, that.mScrollFriction) == 0
                && mTapTimeoutMillis == that.mTapTimeoutMillis
                && mDoubleTapTimeoutMillis == that.mDoubleTapTimeoutMillis
@@ -118,8 +117,8 @@ public final class ViewConfigurationParams implements Parcelable {

    @Override
    public int hashCode() {
        return Objects.hash(mTouchSlopDp, mMinimumFlingVelocityDpPerSecond,
                mMaximumFlingVelocityDpPerSecond, mScrollFriction, mTapTimeoutMillis,
        return Objects.hash(mTouchSlopPixels, mMinimumFlingVelocityPixelsPerSecond,
                mMaximumFlingVelocityPixelsPerSecond, mScrollFriction, mTapTimeoutMillis,
                mDoubleTapTimeoutMillis, mDoubleTapMinTimeMillis, mLongPressTimeoutMillis,
                mMultiPressTimeoutMillis);
    }
@@ -128,9 +127,9 @@ public final class ViewConfigurationParams implements Parcelable {
    @NonNull
    public String toString() {
        return "ViewConfigurationParams("
                + "mTouchSlopDp=" + mTouchSlopDp
                + ", mMinimumFlingVelocityDpPerSecond=" + mMinimumFlingVelocityDpPerSecond
                + ", mMaximumFlingVelocityDpPerSecond=" + mMaximumFlingVelocityDpPerSecond
                + "mTouchSlopPixels=" + mTouchSlopPixels
                + ", mMinimumFlingVelocityPixelsPerSecond=" + mMinimumFlingVelocityPixelsPerSecond
                + ", mMaximumFlingVelocityPixelsPerSecond=" + mMaximumFlingVelocityPixelsPerSecond
                + ", mScrollFriction=" + mScrollFriction
                + ", mTapTimeoutMillis=" + mTapTimeoutMillis
                + ", mDoubleTapTimeoutMillis=" + mDoubleTapTimeoutMillis
@@ -141,33 +140,33 @@ public final class ViewConfigurationParams implements Parcelable {
    }

    /**
     * Returns the touch slop in density independent pixels (dp).
     * Returns the touch slop in pixels.
     *
     * @see ViewConfiguration#getScaledTouchSlop()
     */
    @FloatRange(from = 0)
    public float getTouchSlopDp() {
        return mTouchSlopDp;
    @IntRange(from = 0)
    public int getTouchSlopPixels() {
        return mTouchSlopPixels;
    }

    /**
     * Returns the minimum fling velocity in density independent pixels (dp) per second.
     * Returns the minimum fling velocity in pixels per second.
     *
     * @see ViewConfiguration#getScaledMinimumFlingVelocity()
     */
    @FloatRange(from = 0)
    public float getMinimumFlingVelocityDpPerSecond() {
        return mMinimumFlingVelocityDpPerSecond;
    @IntRange(from = 0)
    public int getMinimumFlingVelocityPixelsPerSecond() {
        return mMinimumFlingVelocityPixelsPerSecond;
    }

    /**
     * Returns the maximum fling velocity in density independent pixels (dp) per second.
     * Returns the maximum fling velocity in pixels per second.
     *
     * @see ViewConfiguration#getScaledMaximumFlingVelocity()
     */
    @FloatRange(from = 0)
    public float getMaximumFlingVelocityDpPerSecond() {
        return mMaximumFlingVelocityDpPerSecond;
    @IntRange(from = 0)
    public int getMaximumFlingVelocityPixelsPerSecond() {
        return mMaximumFlingVelocityPixelsPerSecond;
    }

    /**
@@ -244,9 +243,9 @@ public final class ViewConfigurationParams implements Parcelable {
    @FlaggedApi(Flags.FLAG_VIEWCONFIGURATION_APIS)
    public static final class Builder {

        private float mTouchSlopDp = INVALID_VALUE;
        private float mMinimumFlingVelocityDpPerSecond = INVALID_VALUE;
        private float mMaximumFlingVelocityDpPerSecond = INVALID_VALUE;
        private int mTouchSlopPixels = INVALID_VALUE;
        private int mMinimumFlingVelocityPixelsPerSecond = INVALID_VALUE;
        private int mMaximumFlingVelocityPixelsPerSecond = INVALID_VALUE;
        private float mScrollFriction = INVALID_VALUE;
        private int mTapTimeoutMillis = INVALID_VALUE;
        private int mDoubleTapTimeoutMillis = INVALID_VALUE;
@@ -255,57 +254,55 @@ public final class ViewConfigurationParams implements Parcelable {
        private int mMultiPressTimeoutMillis = INVALID_VALUE;

        /**
         * Sets the touch slop in density independent pixels (dp). When this is set,
         * {@link ViewConfiguration#getScaledTouchSlop()} would return this value multiplied by
         * the display density for any context associated with the virtual device.
         * Sets the touch slop in pixels. When this is set,
         * {@link ViewConfiguration#getScaledTouchSlop()} would return this value for any context
         * associated with the virtual device.
         *
         * @throws IllegalArgumentException if the value is negative.
         * @see ViewConfiguration#getScaledTouchSlop()
         */
        @NonNull
        public Builder setTouchSlopDp(@FloatRange(from = 0) float touchSlopDp) {
            if (touchSlopDp < 0) {
        public Builder setTouchSlopPixels(@IntRange(from = 0) int touchSlopPixels) {
            if (touchSlopPixels < 0) {
                throw new IllegalArgumentException("Touch slop cannot be negative");
            }
            mTouchSlopDp = touchSlopDp;
            mTouchSlopPixels = touchSlopPixels;
            return this;
        }

        /**
         * Sets the minimum fling velocity in density independent pixels (dp) per second. When
         * this is set, {@link ViewConfiguration#getScaledMinimumFlingVelocity()} would return this
         * value multiplied by the display density for any context associated with the virtual
         * device.
         * Sets the minimum fling velocity in pixels per second. When this is set,
         * {@link ViewConfiguration#getScaledMinimumFlingVelocity()} would return this value for
         * any context associated with the virtual device.
         *
         * @throws IllegalArgumentException if the value is negative.
         * @see ViewConfiguration#getScaledMinimumFlingVelocity()
         */
        @NonNull
        public Builder setMinimumFlingVelocityDpPerSecond(
                @FloatRange(from = 0) float minimumFlingVelocityDpPerSecond) {
            if (minimumFlingVelocityDpPerSecond < 0) {
                throw new IllegalArgumentException("Minimum ling velocity cannot be negative");
        public Builder setMinimumFlingVelocityPixelsPerSecond(
                @IntRange(from = 0) int minimumFlingVelocityPixelsPerSecond) {
            if (minimumFlingVelocityPixelsPerSecond < 0) {
                throw new IllegalArgumentException("Minimum fling velocity cannot be negative");
            }
            mMinimumFlingVelocityDpPerSecond = minimumFlingVelocityDpPerSecond;
            mMinimumFlingVelocityPixelsPerSecond = minimumFlingVelocityPixelsPerSecond;
            return this;
        }

        /**
         * Sets the maximum fling velocity in density independent pixels (dp) per second. When
         * this is set, {@link ViewConfiguration#getScaledMaximumFlingVelocity()} would return this
         * value multiplied by the display density for any context associated with the virtual
         * device.
         * Sets the maximum fling velocity in pixels per second. When this is set,
         * {@link ViewConfiguration#getScaledMaximumFlingVelocity()} would return this value for
         * any context associated with the virtual device.
         *
         * @throws IllegalArgumentException if the value is negative.
         * @see ViewConfiguration#getScaledMaximumFlingVelocity()
         */
        @NonNull
        public Builder setMaximumFlingVelocityDpPerSecond(
                @FloatRange(from = 0) float maximumFlingVelocityDpPerSecond) {
            if (maximumFlingVelocityDpPerSecond < 0) {
        public Builder setMaximumFlingVelocityPixelsPerSecond(
                @IntRange(from = 0) int maximumFlingVelocityPixelsPerSecond) {
            if (maximumFlingVelocityPixelsPerSecond < 0) {
                throw new IllegalArgumentException("Maximum fling velocity cannot be negative");
            }
            mMaximumFlingVelocityDpPerSecond = maximumFlingVelocityDpPerSecond;
            mMaximumFlingVelocityPixelsPerSecond = maximumFlingVelocityPixelsPerSecond;
            return this;
        }

@@ -439,9 +436,9 @@ public final class ViewConfigurationParams implements Parcelable {
         */
        @NonNull
        public ViewConfigurationParams build() {
            if (mTouchSlopDp == INVALID_VALUE
                    && mMinimumFlingVelocityDpPerSecond == INVALID_VALUE
                    && mMaximumFlingVelocityDpPerSecond == INVALID_VALUE
            if (mTouchSlopPixels == INVALID_VALUE
                    && mMinimumFlingVelocityPixelsPerSecond == INVALID_VALUE
                    && mMaximumFlingVelocityPixelsPerSecond == INVALID_VALUE
                    && mScrollFriction == INVALID_VALUE
                    && mTapTimeoutMillis == INVALID_VALUE
                    && mDoubleTapTimeoutMillis == INVALID_VALUE
@@ -450,14 +447,16 @@ public final class ViewConfigurationParams implements Parcelable {
                    && mMultiPressTimeoutMillis == INVALID_VALUE) {
                throw new IllegalArgumentException("None of the parameters are set");
            }
            if (mMinimumFlingVelocityDpPerSecond != INVALID_VALUE
                    && mMaximumFlingVelocityDpPerSecond != INVALID_VALUE
                    && mMinimumFlingVelocityDpPerSecond > mMaximumFlingVelocityDpPerSecond) {
            if (mMinimumFlingVelocityPixelsPerSecond != INVALID_VALUE
                    && mMaximumFlingVelocityPixelsPerSecond != INVALID_VALUE
                    && mMinimumFlingVelocityPixelsPerSecond
                    > mMaximumFlingVelocityPixelsPerSecond) {
                throw new IllegalArgumentException(
                        "Minimum fling velocity cannot be greater than the maximum fling velocity");
            }
            return new ViewConfigurationParams(mTouchSlopDp, mMinimumFlingVelocityDpPerSecond,
                    mMaximumFlingVelocityDpPerSecond, mScrollFriction, mTapTimeoutMillis,
            return new ViewConfigurationParams(mTouchSlopPixels,
                    mMinimumFlingVelocityPixelsPerSecond,
                    mMaximumFlingVelocityPixelsPerSecond, mScrollFriction, mTapTimeoutMillis,
                    mDoubleTapTimeoutMillis, mDoubleTapMinTimeMillis, mLongPressTimeoutMillis,
                    mMultiPressTimeoutMillis);
        }
+9 −9
Original line number Diff line number Diff line
@@ -110,12 +110,12 @@ public class ViewConfigurationController {
                .build();
        OverlayIdentifier overlayIdentifier = overlay.getIdentifier();
        boolean change = false;
        change |= setResourceDpValue(overlay, TOUCH_SLOP_RESOURCE_NAME,
                viewConfigurationParams.getTouchSlopDp());
        change |= setResourceDpValue(overlay, MIN_FLING_VELOCITY_RESOURCE_NAME,
                viewConfigurationParams.getMinimumFlingVelocityDpPerSecond());
        change |= setResourceDpValue(overlay, MAX_FLING_VELOCITY_RESOURCE_NAME,
                viewConfigurationParams.getMaximumFlingVelocityDpPerSecond());
        change |= setResourcePixelValue(overlay, TOUCH_SLOP_RESOURCE_NAME,
                viewConfigurationParams.getTouchSlopPixels());
        change |= setResourcePixelValue(overlay, MIN_FLING_VELOCITY_RESOURCE_NAME,
                viewConfigurationParams.getMinimumFlingVelocityPixelsPerSecond());
        change |= setResourcePixelValue(overlay, MAX_FLING_VELOCITY_RESOURCE_NAME,
                viewConfigurationParams.getMaximumFlingVelocityPixelsPerSecond());
        change |= setResourceFloatValue(overlay, SCROLL_FRICTION_RESOURCE_NAME,
                viewConfigurationParams.getScrollFriction());
        change |= setResourceIntValue(overlay, TAP_TIMEOUT_RESOURCE_NAME,
@@ -169,8 +169,8 @@ public class ViewConfigurationController {
        });
    }

    private static boolean setResourceDpValue(@NonNull FabricatedOverlay overlay,
            @NonNull String resourceName, float value) {
    private static boolean setResourcePixelValue(@NonNull FabricatedOverlay overlay,
            @NonNull String resourceName, int value) {
        if (isInvalid(value)) {
            return false;
        }
@@ -180,7 +180,7 @@ public class ViewConfigurationController {
            return false;
        }

        overlay.setResourceValue(resourceName, value, TypedValue.COMPLEX_UNIT_DIP,
        overlay.setResourceValue(resourceName, (float) value, TypedValue.COMPLEX_UNIT_PX,
                null /* configuration */);
        return true;
    }
+3 −3
Original line number Diff line number Diff line
@@ -136,9 +136,9 @@ public class ViewConfigurationControllerTest {
                .setDoubleTapTimeoutDuration(Duration.ofMillis(10L))
                .setDoubleTapMinTimeDuration(Duration.ofMillis(10L))
                .setScrollFriction(10f)
                .setMinimumFlingVelocityDpPerSecond(10f)
                .setMaximumFlingVelocityDpPerSecond(10f)
                .setTouchSlopDp(10f)
                .setMinimumFlingVelocityPixelsPerSecond(10)
                .setMaximumFlingVelocityPixelsPerSecond(10)
                .setTouchSlopPixels(10)
                .build();
    }

+3 −3
Original line number Diff line number Diff line
@@ -1471,9 +1471,9 @@ public class VirtualDeviceManagerServiceTest {
                .setDoubleTapTimeoutDuration(Duration.ofMillis(10L))
                .setDoubleTapMinTimeDuration(Duration.ofMillis(10L))
                .setScrollFriction(10f)
                .setMinimumFlingVelocityDpPerSecond(10f)
                .setMaximumFlingVelocityDpPerSecond(10f)
                .setTouchSlopDp(10f)
                .setMinimumFlingVelocityPixelsPerSecond(10)
                .setMaximumFlingVelocityPixelsPerSecond(10)
                .setTouchSlopPixels(10)
                .build();

        VirtualDeviceImpl virtualDevice = createVirtualDevice(VIRTUAL_DEVICE_ID_1,