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

Commit e3da10d2 authored by Biswarup Pal's avatar Biswarup Pal
Browse files

Add event time to virtual input events

Test: atest VirtualKeyEventTest, VirtualTouchEventTest, VirtualMouseScrollEventTest, VirtualMouseRelativeEventTest, VirtualMouseButtonEventTest
Bug: 271946580
Change-Id: I7ee339f4541794a22a0fed1bab4ccb7279869e48
parent ec7800f9
Loading
Loading
Loading
Loading
+10 −0
Original line number Diff line number Diff line
@@ -4957,6 +4957,7 @@ package android.hardware.input {
  public final class VirtualKeyEvent implements android.os.Parcelable {
    method public int describeContents();
    method public int getAction();
    method public long getEventTimeNanos();
    method public int getKeyCode();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field public static final int ACTION_DOWN = 0; // 0x0
@@ -4968,6 +4969,7 @@ package android.hardware.input {
    ctor public VirtualKeyEvent.Builder();
    method @NonNull public android.hardware.input.VirtualKeyEvent build();
    method @NonNull public android.hardware.input.VirtualKeyEvent.Builder setAction(int);
    method @NonNull public android.hardware.input.VirtualKeyEvent.Builder setEventTimeNanos(long);
    method @NonNull public android.hardware.input.VirtualKeyEvent.Builder setKeyCode(int);
  }
@@ -5005,6 +5007,7 @@ package android.hardware.input {
    method public int describeContents();
    method public int getAction();
    method public int getButtonCode();
    method public long getEventTimeNanos();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field public static final int ACTION_BUTTON_PRESS = 11; // 0xb
    field public static final int ACTION_BUTTON_RELEASE = 12; // 0xc
@@ -5021,6 +5024,7 @@ package android.hardware.input {
    method @NonNull public android.hardware.input.VirtualMouseButtonEvent build();
    method @NonNull public android.hardware.input.VirtualMouseButtonEvent.Builder setAction(int);
    method @NonNull public android.hardware.input.VirtualMouseButtonEvent.Builder setButtonCode(int);
    method @NonNull public android.hardware.input.VirtualMouseButtonEvent.Builder setEventTimeNanos(long);
  }
  public final class VirtualMouseConfig extends android.hardware.input.VirtualInputDeviceConfig implements android.os.Parcelable {
@@ -5036,6 +5040,7 @@ package android.hardware.input {
  public final class VirtualMouseRelativeEvent implements android.os.Parcelable {
    method public int describeContents();
    method public long getEventTimeNanos();
    method public float getRelativeX();
    method public float getRelativeY();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
@@ -5045,12 +5050,14 @@ package android.hardware.input {
  public static final class VirtualMouseRelativeEvent.Builder {
    ctor public VirtualMouseRelativeEvent.Builder();
    method @NonNull public android.hardware.input.VirtualMouseRelativeEvent build();
    method @NonNull public android.hardware.input.VirtualMouseRelativeEvent.Builder setEventTimeNanos(long);
    method @NonNull public android.hardware.input.VirtualMouseRelativeEvent.Builder setRelativeX(float);
    method @NonNull public android.hardware.input.VirtualMouseRelativeEvent.Builder setRelativeY(float);
  }
  public final class VirtualMouseScrollEvent implements android.os.Parcelable {
    method public int describeContents();
    method public long getEventTimeNanos();
    method public float getXAxisMovement();
    method public float getYAxisMovement();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
@@ -5060,6 +5067,7 @@ package android.hardware.input {
  public static final class VirtualMouseScrollEvent.Builder {
    ctor public VirtualMouseScrollEvent.Builder();
    method @NonNull public android.hardware.input.VirtualMouseScrollEvent build();
    method @NonNull public android.hardware.input.VirtualMouseScrollEvent.Builder setEventTimeNanos(long);
    method @NonNull public android.hardware.input.VirtualMouseScrollEvent.Builder setXAxisMovement(@FloatRange(from=-1.0F, to=1.0f) float);
    method @NonNull public android.hardware.input.VirtualMouseScrollEvent.Builder setYAxisMovement(@FloatRange(from=-1.0F, to=1.0f) float);
  }
@@ -5085,6 +5093,7 @@ package android.hardware.input {
  public final class VirtualTouchEvent implements android.os.Parcelable {
    method public int describeContents();
    method public int getAction();
    method public long getEventTimeNanos();
    method public float getMajorAxisSize();
    method public int getPointerId();
    method public float getPressure();
@@ -5105,6 +5114,7 @@ package android.hardware.input {
    ctor public VirtualTouchEvent.Builder();
    method @NonNull public android.hardware.input.VirtualTouchEvent build();
    method @NonNull public android.hardware.input.VirtualTouchEvent.Builder setAction(int);
    method @NonNull public android.hardware.input.VirtualTouchEvent.Builder setEventTimeNanos(long);
    method @NonNull public android.hardware.input.VirtualTouchEvent.Builder setMajorAxisSize(@FloatRange(from=0.0f) float);
    method @NonNull public android.hardware.input.VirtualTouchEvent.Builder setPointerId(@IntRange(from=0, to=0x10 - 1) int);
    method @NonNull public android.hardware.input.VirtualTouchEvent.Builder setPressure(@FloatRange(from=0.0f) float);
+36 −2
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
import android.view.InputEvent;
import android.view.KeyEvent;

import java.lang.annotation.Retention;
@@ -177,21 +179,25 @@ public final class VirtualKeyEvent implements Parcelable {

    private final @Action int mAction;
    private final int mKeyCode;
    private final long mEventTimeNanos;

    private VirtualKeyEvent(@Action int action, int keyCode) {
    private VirtualKeyEvent(@Action int action, int keyCode, long eventTimeNanos) {
        mAction = action;
        mKeyCode = keyCode;
        mEventTimeNanos = eventTimeNanos;
    }

    private VirtualKeyEvent(@NonNull Parcel parcel) {
        mAction = parcel.readInt();
        mKeyCode = parcel.readInt();
        mEventTimeNanos = parcel.readLong();
    }

    @Override
    public void writeToParcel(@NonNull Parcel parcel, int parcelableFlags) {
        parcel.writeInt(mAction);
        parcel.writeInt(mKeyCode);
        parcel.writeLong(mEventTimeNanos);
    }

    @Override
@@ -213,6 +219,16 @@ public final class VirtualKeyEvent implements Parcelable {
        return mAction;
    }

    /**
     * Returns the time this event occurred, in the {@link SystemClock#uptimeMillis()} time base but
     * with nanosecond (instead of millisecond) precision.
     *
     * @see InputEvent#getEventTime()
     */
    public long getEventTimeNanos() {
        return mEventTimeNanos;
    }

    /**
     * Builder for {@link VirtualKeyEvent}.
     */
@@ -220,6 +236,7 @@ public final class VirtualKeyEvent implements Parcelable {

        private @Action int mAction = ACTION_UNKNOWN;
        private int mKeyCode = -1;
        private long mEventTimeNanos = 0L;

        /**
         * Creates a {@link VirtualKeyEvent} object with the current builder configuration.
@@ -229,7 +246,7 @@ public final class VirtualKeyEvent implements Parcelable {
                throw new IllegalArgumentException(
                        "Cannot build virtual key event with unset fields");
            }
            return new VirtualKeyEvent(mAction, mKeyCode);
            return new VirtualKeyEvent(mAction, mKeyCode, mEventTimeNanos);
        }

        /**
@@ -254,6 +271,23 @@ public final class VirtualKeyEvent implements Parcelable {
            mAction = action;
            return this;
        }

        /**
         * Sets the time (in nanoseconds) when this specific event was generated. This may be
         * obtained from {@link SystemClock#uptimeMillis()} (with nanosecond precision instead of
         * millisecond), but can be different depending on the use case.
         * This field is optional and can be omitted.
         *
         * @return this builder, to allow for chaining of calls
         * @see InputEvent#getEventTime()
         */
        public @NonNull Builder setEventTimeNanos(long eventTimeNanos) {
            if (eventTimeNanos < 0L) {
                throw new IllegalArgumentException("Event time cannot be negative");
            }
            mEventTimeNanos = eventTimeNanos;
            return this;
        }
    }

    public static final @NonNull Parcelable.Creator<VirtualKeyEvent> CREATOR =
+37 −2
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
import android.view.InputEvent;
import android.view.MotionEvent;

import java.lang.annotation.Retention;
@@ -81,21 +83,26 @@ public final class VirtualMouseButtonEvent implements Parcelable {

    private final @Action int mAction;
    private final @Button int mButtonCode;
    private final long mEventTimeNanos;

    private VirtualMouseButtonEvent(@Action int action, @Button int buttonCode) {
    private VirtualMouseButtonEvent(@Action int action, @Button int buttonCode,
            long eventTimeNanos) {
        mAction = action;
        mButtonCode = buttonCode;
        mEventTimeNanos = eventTimeNanos;
    }

    private VirtualMouseButtonEvent(@NonNull Parcel parcel) {
        mAction = parcel.readInt();
        mButtonCode = parcel.readInt();
        mEventTimeNanos = parcel.readLong();
    }

    @Override
    public void writeToParcel(@NonNull Parcel parcel, int parcelableFlags) {
        parcel.writeInt(mAction);
        parcel.writeInt(mButtonCode);
        parcel.writeLong(mEventTimeNanos);
    }

    @Override
@@ -117,6 +124,16 @@ public final class VirtualMouseButtonEvent implements Parcelable {
        return mAction;
    }

    /**
     * Returns the time this event occurred, in the {@link SystemClock#uptimeMillis()} time base but
     * with nanosecond (instead of millisecond) precision.
     *
     * @see InputEvent#getEventTime()
     */
    public long getEventTimeNanos() {
        return mEventTimeNanos;
    }

    /**
     * Builder for {@link VirtualMouseButtonEvent}.
     */
@@ -124,6 +141,7 @@ public final class VirtualMouseButtonEvent implements Parcelable {

        private @Action int mAction = ACTION_UNKNOWN;
        private @Button int mButtonCode = -1;
        private long mEventTimeNanos = 0L;

        /**
         * Creates a {@link VirtualMouseButtonEvent} object with the current builder configuration.
@@ -133,7 +151,7 @@ public final class VirtualMouseButtonEvent implements Parcelable {
                throw new IllegalArgumentException(
                        "Cannot build virtual mouse button event with unset fields");
            }
            return new VirtualMouseButtonEvent(mAction, mButtonCode);
            return new VirtualMouseButtonEvent(mAction, mButtonCode, mEventTimeNanos);
        }

        /**
@@ -165,6 +183,23 @@ public final class VirtualMouseButtonEvent implements Parcelable {
            mAction = action;
            return this;
        }

        /**
         * Sets the time (in nanoseconds) when this specific event was generated. This may be
         * obtained from {@link SystemClock#uptimeMillis()} (with nanosecond precision instead of
         * millisecond), but can be different depending on the use case.
         * This field is optional and can be omitted.
         *
         * @return this builder, to allow for chaining of calls
         * @see InputEvent#getEventTime()
         */
        public @NonNull Builder setEventTimeNanos(long eventTimeNanos) {
            if (eventTimeNanos < 0L) {
                throw new IllegalArgumentException("Event time cannot be negative");
            }
            this.mEventTimeNanos = eventTimeNanos;
            return this;
        }
    }

    public static final @NonNull Parcelable.Creator<VirtualMouseButtonEvent> CREATOR =
+36 −2
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
import android.view.InputEvent;

/**
 * An event describing a mouse movement interaction originating from a remote device.
@@ -33,21 +35,25 @@ public final class VirtualMouseRelativeEvent implements Parcelable {

    private final float mRelativeX;
    private final float mRelativeY;
    private final long mEventTimeNanos;

    private VirtualMouseRelativeEvent(float relativeX, float relativeY) {
    private VirtualMouseRelativeEvent(float relativeX, float relativeY, long eventTimeNanos) {
        mRelativeX = relativeX;
        mRelativeY = relativeY;
        mEventTimeNanos = eventTimeNanos;
    }

    private VirtualMouseRelativeEvent(@NonNull Parcel parcel) {
        mRelativeX = parcel.readFloat();
        mRelativeY = parcel.readFloat();
        mEventTimeNanos = parcel.readLong();
    }

    @Override
    public void writeToParcel(@NonNull Parcel parcel, int parcelableFlags) {
        parcel.writeFloat(mRelativeX);
        parcel.writeFloat(mRelativeY);
        parcel.writeLong(mEventTimeNanos);
    }

    @Override
@@ -69,6 +75,16 @@ public final class VirtualMouseRelativeEvent implements Parcelable {
        return mRelativeY;
    }

    /**
     * Returns the time this event occurred, in the {@link SystemClock#uptimeMillis()} time base but
     * with nanosecond (instead of millisecond) precision.
     *
     * @see InputEvent#getEventTime()
     */
    public long getEventTimeNanos() {
        return mEventTimeNanos;
    }

    /**
     * Builder for {@link VirtualMouseRelativeEvent}.
     */
@@ -76,13 +92,14 @@ public final class VirtualMouseRelativeEvent implements Parcelable {

        private float mRelativeX;
        private float mRelativeY;
        private long mEventTimeNanos = 0L;

        /**
         * Creates a {@link VirtualMouseRelativeEvent} object with the current builder
         * configuration.
         */
        public @NonNull VirtualMouseRelativeEvent build() {
            return new VirtualMouseRelativeEvent(mRelativeX, mRelativeY);
            return new VirtualMouseRelativeEvent(mRelativeX, mRelativeY, mEventTimeNanos);
        }

        /**
@@ -104,6 +121,23 @@ public final class VirtualMouseRelativeEvent implements Parcelable {
            mRelativeY = relativeY;
            return this;
        }

        /**
         * Sets the time (in nanoseconds) when this specific event was generated. This may be
         * obtained from {@link SystemClock#uptimeMillis()} (with nanosecond precision instead of
         * millisecond), but can be different depending on the use case.
         * This field is optional and can be omitted.
         *
         * @return this builder, to allow for chaining of calls
         * @see InputEvent#getEventTime()
         */
        public @NonNull Builder setEventTimeNanos(long eventTimeNanos) {
            if (eventTimeNanos < 0L) {
                throw new IllegalArgumentException("Event time cannot be negative");
            }
            this.mEventTimeNanos = eventTimeNanos;
            return this;
        }
    }

    public static final @NonNull Parcelable.Creator<VirtualMouseRelativeEvent> CREATOR =
+37 −2
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@ import android.annotation.NonNull;
import android.annotation.SystemApi;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.SystemClock;
import android.view.InputEvent;

import com.android.internal.util.Preconditions;

@@ -36,21 +38,26 @@ public final class VirtualMouseScrollEvent implements Parcelable {

    private final float mXAxisMovement;
    private final float mYAxisMovement;
    private final long mEventTimeNanos;

    private VirtualMouseScrollEvent(float xAxisMovement, float yAxisMovement) {
    private VirtualMouseScrollEvent(float xAxisMovement, float yAxisMovement,
            long eventTimeNanos) {
        mXAxisMovement = xAxisMovement;
        mYAxisMovement = yAxisMovement;
        mEventTimeNanos = eventTimeNanos;
    }

    private VirtualMouseScrollEvent(@NonNull Parcel parcel) {
        mXAxisMovement = parcel.readFloat();
        mYAxisMovement = parcel.readFloat();
        mEventTimeNanos = parcel.readLong();
    }

    @Override
    public void writeToParcel(@NonNull Parcel parcel, int parcelableFlags) {
        parcel.writeFloat(mXAxisMovement);
        parcel.writeFloat(mYAxisMovement);
        parcel.writeLong(mEventTimeNanos);
    }

    @Override
@@ -74,6 +81,16 @@ public final class VirtualMouseScrollEvent implements Parcelable {
        return mYAxisMovement;
    }

    /**
     * Returns the time this event occurred, in the {@link SystemClock#uptimeMillis()} time base but
     * with nanosecond (instead of millisecond) precision.
     *
     * @see InputEvent#getEventTime()
     */
    public long getEventTimeNanos() {
        return mEventTimeNanos;
    }

    /**
     * Builder for {@link VirtualMouseScrollEvent}.
     */
@@ -81,12 +98,13 @@ public final class VirtualMouseScrollEvent implements Parcelable {

        private float mXAxisMovement;
        private float mYAxisMovement;
        private long mEventTimeNanos = 0L;

        /**
         * Creates a {@link VirtualMouseScrollEvent} object with the current builder configuration.
         */
        public @NonNull VirtualMouseScrollEvent build() {
            return new VirtualMouseScrollEvent(mXAxisMovement, mYAxisMovement);
            return new VirtualMouseScrollEvent(mXAxisMovement, mYAxisMovement, mEventTimeNanos);
        }

        /**
@@ -114,6 +132,23 @@ public final class VirtualMouseScrollEvent implements Parcelable {
            mYAxisMovement = yAxisMovement;
            return this;
        }

        /**
         * Sets the time (in nanoseconds) when this specific event was generated. This may be
         * obtained from {@link SystemClock#uptimeMillis()} (with nanosecond precision instead of
         * millisecond), but can be different depending on the use case.
         * This field is optional and can be omitted.
         *
         * @return this builder, to allow for chaining of calls
         * @see InputEvent#getEventTime()
         */
        public @NonNull Builder setEventTimeNanos(long eventTimeNanos) {
            if (eventTimeNanos < 0L) {
                throw new IllegalArgumentException("Event time cannot be negative");
            }
            mEventTimeNanos = eventTimeNanos;
            return this;
        }
    }

    public static final @NonNull Parcelable.Creator<VirtualMouseScrollEvent> CREATOR =
Loading