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

Commit 1bebdbbf authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Store time in nanoseconds in KeyEvent"

parents 7703de09 ec60764d
Loading
Loading
Loading
Loading
+37 −24
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ import android.util.Log;
import android.util.SparseIntArray;
import android.view.KeyCharacterMap.KeyData;

import java.util.concurrent.TimeUnit;

/**
 * Object used to report key and button events.
 * <p>
@@ -1298,9 +1300,16 @@ public class KeyEvent extends InputEvent implements Parcelable {
    private int mRepeatCount;
    @UnsupportedAppUsage
    private int mFlags;
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    /**
     * The time when the key initially was pressed, in nanoseconds. Only millisecond precision is
     * exposed as public api, so this must always be converted to / from milliseconds when used.
     */
    private long mDownTime;
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    /**
     * The time when the current key event occurred. If mAction is ACTION_DOWN, then this is equal
     * to mDownTime. Only millisecond precision is exposed as public api, so this must always be
     * converted to / from milliseconds when used.
     */
    private long mEventTime;
    @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553)
    private String mCharacters;
@@ -1400,8 +1409,8 @@ public class KeyEvent extends InputEvent implements Parcelable {
    public KeyEvent(long downTime, long eventTime, int action,
                    int code, int repeat) {
        mId = nativeNextId();
        mDownTime = downTime;
        mEventTime = eventTime;
        mDownTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS);
        mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS);
        mAction = action;
        mKeyCode = code;
        mRepeatCount = repeat;
@@ -1425,8 +1434,8 @@ public class KeyEvent extends InputEvent implements Parcelable {
    public KeyEvent(long downTime, long eventTime, int action,
                    int code, int repeat, int metaState) {
        mId = nativeNextId();
        mDownTime = downTime;
        mEventTime = eventTime;
        mDownTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS);
        mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS);
        mAction = action;
        mKeyCode = code;
        mRepeatCount = repeat;
@@ -1454,8 +1463,8 @@ public class KeyEvent extends InputEvent implements Parcelable {
                    int code, int repeat, int metaState,
                    int deviceId, int scancode) {
        mId = nativeNextId();
        mDownTime = downTime;
        mEventTime = eventTime;
        mDownTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS);
        mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS);
        mAction = action;
        mKeyCode = code;
        mRepeatCount = repeat;
@@ -1485,8 +1494,8 @@ public class KeyEvent extends InputEvent implements Parcelable {
                    int code, int repeat, int metaState,
                    int deviceId, int scancode, int flags) {
        mId = nativeNextId();
        mDownTime = downTime;
        mEventTime = eventTime;
        mDownTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS);
        mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS);
        mAction = action;
        mKeyCode = code;
        mRepeatCount = repeat;
@@ -1518,8 +1527,8 @@ public class KeyEvent extends InputEvent implements Parcelable {
                    int code, int repeat, int metaState,
                    int deviceId, int scancode, int flags, int source) {
        mId = nativeNextId();
        mDownTime = downTime;
        mEventTime = eventTime;
        mDownTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS);
        mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS);
        mAction = action;
        mKeyCode = code;
        mRepeatCount = repeat;
@@ -1545,8 +1554,8 @@ public class KeyEvent extends InputEvent implements Parcelable {
     */
    public KeyEvent(long time, String characters, int deviceId, int flags) {
        mId = nativeNextId();
        mDownTime = time;
        mEventTime = time;
        mDownTime = TimeUnit.NANOSECONDS.convert(time, TimeUnit.MILLISECONDS);
        mEventTime = TimeUnit.NANOSECONDS.convert(time, TimeUnit.MILLISECONDS);
        mCharacters = characters;
        mAction = ACTION_MULTIPLE;
        mKeyCode = KEYCODE_UNKNOWN;
@@ -1592,7 +1601,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
    public KeyEvent(KeyEvent origEvent, long eventTime, int newRepeat) {
        mId = nativeNextId();  // Not an exact copy so assign a new ID.
        mDownTime = origEvent.mDownTime;
        mEventTime = eventTime;
        mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS);
        mAction = origEvent.mAction;
        mKeyCode = origEvent.mKeyCode;
        mRepeatCount = newRepeat;
@@ -1626,14 +1635,14 @@ public class KeyEvent extends InputEvent implements Parcelable {
     *
     * @hide
     */
    public static KeyEvent obtain(int id, long downTime, long eventTime, int action,
    private static KeyEvent obtain(int id, long downTimeNanos, long eventTimeNanos, int action,
            int code, int repeat, int metaState,
            int deviceId, int scancode, int flags, int source, int displayId, @Nullable byte[] hmac,
            String characters) {
        KeyEvent ev = obtain();
        ev.mId = id;
        ev.mDownTime = downTime;
        ev.mEventTime = eventTime;
        ev.mDownTime = downTimeNanos;
        ev.mEventTime = eventTimeNanos;
        ev.mAction = action;
        ev.mKeyCode = code;
        ev.mRepeatCount = repeat;
@@ -1656,6 +1665,8 @@ public class KeyEvent extends InputEvent implements Parcelable {
    public static KeyEvent obtain(long downTime, long eventTime, int action,
            int code, int repeat, int metaState,
            int deviceId, int scanCode, int flags, int source, int displayId, String characters) {
        downTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS);
        eventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS);
        return obtain(nativeNextId(), downTime, eventTime, action, code, repeat, metaState,
                deviceId, scanCode, flags, source, displayId, null /* hmac */, characters);
    }
@@ -1669,6 +1680,8 @@ public class KeyEvent extends InputEvent implements Parcelable {
    public static KeyEvent obtain(long downTime, long eventTime, int action,
            int code, int repeat, int metaState,
            int deviceId, int scancode, int flags, int source, String characters) {
        // Do not convert downTime and eventTime here. We are calling the obtain method above,
        // which will do the conversion. Just specify INVALID_DISPLAY and forward the request.
        return obtain(downTime, eventTime, action, code, repeat, metaState, deviceId, scancode,
                flags, source, INVALID_DISPLAY, characters);
    }
@@ -1768,7 +1781,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
            int newRepeat, int newFlags) {
        KeyEvent ret = new KeyEvent(event);
        ret.mId = nativeNextId();  // Not an exact copy so assign a new ID.
        ret.mEventTime = eventTime;
        ret.mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS);
        ret.mRepeatCount = newRepeat;
        ret.mFlags = newFlags;
        return ret;
@@ -2617,8 +2630,8 @@ public class KeyEvent extends InputEvent implements Parcelable {
     * @hide
     */
    public final void setTime(long downTime, long eventTime) {
        mDownTime = downTime;
        mEventTime = eventTime;
        mDownTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS);
        mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS);
    }

    /**
@@ -2633,7 +2646,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
     * {@link android.os.SystemClock#uptimeMillis} time base
     */
    public final long getDownTime() {
        return mDownTime;
        return TimeUnit.MILLISECONDS.convert(mDownTime, TimeUnit.NANOSECONDS);
    }

    /**
@@ -2645,7 +2658,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
     */
    @Override
    public final long getEventTime() {
        return mEventTime;
        return TimeUnit.MILLISECONDS.convert(mEventTime, TimeUnit.NANOSECONDS);
    }

    /**
@@ -2664,7 +2677,7 @@ public class KeyEvent extends InputEvent implements Parcelable {
     */
    @Override
    public final long getEventTimeNano() {
        return mEventTime * 1000000L;
        return mEventTime;
    }

    /**
+2 −5
Original line number Diff line number Diff line
@@ -98,9 +98,7 @@ jobject android_view_KeyEvent_fromNative(JNIEnv* env, const KeyEvent* event) {
    ScopedLocalRef<jbyteArray> hmac = toJbyteArray(env, event->getHmac());
    jobject eventObj =
            env->CallStaticObjectMethod(gKeyEventClassInfo.clazz, gKeyEventClassInfo.obtain,
                                        event->getId(),
                                        nanoseconds_to_milliseconds(event->getDownTime()),
                                        nanoseconds_to_milliseconds(event->getEventTime()),
                                        event->getId(), event->getDownTime(), event->getEventTime(),
                                        event->getAction(), event->getKeyCode(),
                                        event->getRepeatCount(), event->getMetaState(),
                                        event->getDeviceId(), event->getScanCode(),
@@ -136,8 +134,7 @@ status_t android_view_KeyEvent_toNative(JNIEnv* env, jobject eventObj,
    jlong eventTime = env->GetLongField(eventObj, gKeyEventClassInfo.mEventTime);

    event->initialize(id, deviceId, source, displayId, *hmac, action, flags, keyCode, scanCode,
                      metaState, repeatCount, milliseconds_to_nanoseconds(downTime),
                      milliseconds_to_nanoseconds(eventTime));
                      metaState, repeatCount, downTime, eventTime);
    return OK;
}

+2 −4
Original line number Diff line number Diff line
@@ -36,7 +36,6 @@ import java.util.Set;
@RunWith(AndroidJUnit4.class)
public class KeyEventTest {

    private static final int ID = 0xabcdef;
    private static final int DOWN_TIME = 50;
    private static final long EVENT_TIME = 100;
    private static final int ACTION = KeyEvent.ACTION_DOWN;
@@ -47,7 +46,6 @@ public class KeyEventTest {
    private static final int SCAN_CODE = 0;
    private static final int FLAGS = 0;
    private static final int SOURCE = InputDevice.SOURCE_KEYBOARD;
    private static final byte[] HMAC = null;
    private static final String CHARACTERS = null;

    private static final int ID_SOURCE_MASK = 0x3 << 30;
@@ -164,8 +162,8 @@ public class KeyEventTest {
    }

    private static KeyEvent createKey() {
        return KeyEvent.obtain(ID, DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE,
                DEVICE_ID, SCAN_CODE, FLAGS, SOURCE, INVALID_DISPLAY, HMAC, CHARACTERS);
        return KeyEvent.obtain(DOWN_TIME, EVENT_TIME, ACTION, KEYCODE, REPEAT, METASTATE,
                DEVICE_ID, SCAN_CODE, FLAGS, SOURCE, INVALID_DISPLAY, CHARACTERS);
    }

    private static void compareKeys(KeyEvent key1, KeyEvent key2) {