From bf0bf99a038c71e8a40e8ca10cb33c3bf4830747 Mon Sep 17 00:00:00 2001 From: Adam Wright Date: Wed, 22 Feb 2023 14:45:04 +0000 Subject: [PATCH] Revert "Refactor KeyEvent constructors." This reverts commit 1aa18e2f2197f96abe5e20ff3062c52f26900923. Reason for revert: DM P0 regression (b/270247000) Change-Id: I8b976d0e390d33b133e54aaa51b3a7aea0563259 --- core/java/android/view/KeyEvent.java | 134 +++++++++++++++++---------- 1 file changed, 85 insertions(+), 49 deletions(-) diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index 66442bb9e2c96..1a5613ebef021 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -1352,7 +1352,6 @@ public class KeyEvent extends InputEvent implements Parcelable { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private int mSource; private int mDisplayId = INVALID_DISPLAY; - // NOTE: mHmac is private and not used in this class, but it's used on native side / parcel. private @Nullable byte[] mHmac; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) private int mMetaState; @@ -1378,7 +1377,7 @@ public class KeyEvent extends InputEvent implements Parcelable { */ private long mEventTime; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) - private @Nullable String mCharacters; + private String mCharacters; public interface Callback { /** @@ -1442,11 +1441,7 @@ public class KeyEvent extends InputEvent implements Parcelable { private static native int nativeKeyCodeFromString(String keyCode); private static native int nativeNextId(); - private KeyEvent() { - this(/* downTime= */ 0, /* eventTime= */ 0, /* action= */ 0, /* code= */0, /* repeat= */ 0, - /* metaState= */ 0, /* deviceId= */ 0, /* scancode= */ 0, /* flags= */ 0, - /* source= */ 0); - } + private KeyEvent() {} /** * Create a new key event. @@ -1456,9 +1451,11 @@ public class KeyEvent extends InputEvent implements Parcelable { * @param code The key code. */ public KeyEvent(int action, int code) { - this(/* downTime= */ 0, /* eventTime= */ 0, action, code, /* repeat= */ 0, - /* metaState= */ 0, /* deviceId= */ KeyCharacterMap.VIRTUAL_KEYBOARD, - /* scancode= */ 0, /* flags= */ 0, /* source= */ 0); + mId = nativeNextId(); + mAction = action; + mKeyCode = code; + mRepeatCount = 0; + mDeviceId = KeyCharacterMap.VIRTUAL_KEYBOARD; } /** @@ -1476,9 +1473,13 @@ public class KeyEvent extends InputEvent implements Parcelable { */ public KeyEvent(long downTime, long eventTime, int action, int code, int repeat) { - this(downTime, eventTime, action, code, repeat, /* metaState= */ 0, - KeyCharacterMap.VIRTUAL_KEYBOARD, /* scancode= */ 0, /* flags= */ 0, - /* source= */ 0); + mId = nativeNextId(); + mDownTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS); + mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS); + mAction = action; + mKeyCode = code; + mRepeatCount = repeat; + mDeviceId = KeyCharacterMap.VIRTUAL_KEYBOARD; } /** @@ -1497,8 +1498,14 @@ public class KeyEvent extends InputEvent implements Parcelable { */ public KeyEvent(long downTime, long eventTime, int action, int code, int repeat, int metaState) { - this(downTime, eventTime, action, code, repeat, metaState, KeyCharacterMap.VIRTUAL_KEYBOARD, - /* scancode= */ 0, /* flags= */ 0, /* source= */ 0); + mId = nativeNextId(); + mDownTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS); + mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS); + mAction = action; + mKeyCode = code; + mRepeatCount = repeat; + mMetaState = metaState; + mDeviceId = KeyCharacterMap.VIRTUAL_KEYBOARD; } /** @@ -1520,8 +1527,15 @@ public class KeyEvent extends InputEvent implements Parcelable { public KeyEvent(long downTime, long eventTime, int action, int code, int repeat, int metaState, int deviceId, int scancode) { - this(downTime, eventTime, action, code, repeat, metaState, deviceId, scancode, - /* flags= */ 0, /* source= */ 0); + mId = nativeNextId(); + mDownTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS); + mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS); + mAction = action; + mKeyCode = code; + mRepeatCount = repeat; + mMetaState = metaState; + mDeviceId = deviceId; + mScanCode = scancode; } /** @@ -1544,8 +1558,16 @@ public class KeyEvent extends InputEvent implements Parcelable { public KeyEvent(long downTime, long eventTime, int action, int code, int repeat, int metaState, int deviceId, int scancode, int flags) { - this(downTime, eventTime, action, code, repeat, metaState, deviceId, scancode, flags, - /* source= */ 0); + mId = nativeNextId(); + mDownTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS); + mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS); + mAction = action; + mKeyCode = code; + mRepeatCount = repeat; + mMetaState = metaState; + mDeviceId = deviceId; + mScanCode = scancode; + mFlags = flags; } /** @@ -1569,8 +1591,6 @@ public class KeyEvent extends InputEvent implements Parcelable { public KeyEvent(long downTime, long eventTime, int action, int code, int repeat, int metaState, int deviceId, int scancode, int flags, int source) { - // NOTE: this is the canonical constructor, every other constructor that takes KeyEvent - // attributes should call it mId = nativeNextId(); mDownTime = TimeUnit.NANOSECONDS.convert(downTime, TimeUnit.MILLISECONDS); mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS); @@ -1597,18 +1617,36 @@ public class KeyEvent extends InputEvent implements Parcelable { * @param flags The flags for this key event */ public KeyEvent(long time, String characters, int deviceId, int flags) { - this(/* downTime= */ time, /* eventTime= */ time, ACTION_MULTIPLE, KEYCODE_UNKNOWN, - /* repeat= */ 0, /* metaState= */ 0, deviceId, /* scancode= */ 0, flags, - /* source= */ InputDevice.SOURCE_KEYBOARD); + mId = nativeNextId(); + mDownTime = TimeUnit.NANOSECONDS.convert(time, TimeUnit.MILLISECONDS); + mEventTime = TimeUnit.NANOSECONDS.convert(time, TimeUnit.MILLISECONDS); + mCharacters = characters; + mAction = ACTION_MULTIPLE; + mKeyCode = KEYCODE_UNKNOWN; + mRepeatCount = 0; + mDeviceId = deviceId; + mFlags = flags; + mSource = InputDevice.SOURCE_KEYBOARD; } /** * Make an exact copy of an existing key event. */ public KeyEvent(KeyEvent origEvent) { - this(origEvent, origEvent.mId, origEvent.mEventTime, origEvent.mAction, - origEvent.mRepeatCount, origEvent.mHmac == null ? null : origEvent.mHmac.clone(), - origEvent.mCharacters); + mId = origEvent.mId; + mDownTime = origEvent.mDownTime; + mEventTime = origEvent.mEventTime; + mAction = origEvent.mAction; + mKeyCode = origEvent.mKeyCode; + mRepeatCount = origEvent.mRepeatCount; + mMetaState = origEvent.mMetaState; + mDeviceId = origEvent.mDeviceId; + mSource = origEvent.mSource; + mDisplayId = origEvent.mDisplayId; + mHmac = origEvent.mHmac == null ? null : origEvent.mHmac.clone(); + mScanCode = origEvent.mScanCode; + mFlags = origEvent.mFlags; + mCharacters = origEvent.mCharacters; } /** @@ -1624,30 +1662,20 @@ public class KeyEvent extends InputEvent implements Parcelable { */ @Deprecated public KeyEvent(KeyEvent origEvent, long eventTime, int newRepeat) { - // Not an exact copy so assign a new ID. - // Don't copy HMAC, it will be invalid because eventTime is changing - this(origEvent, nativeNextId(), - TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS), origEvent.mAction, - newRepeat, /* hmac= */ null, origEvent.mCharacters); - } - - // This is the canonical constructor that should be called for constructors that take a KeyEvent - private KeyEvent(KeyEvent origEvent, int id, long eventTime, int action, int newRepeat, - @Nullable byte[] hmac, @Nullable String characters) { - mId = id; + mId = nativeNextId(); // Not an exact copy so assign a new ID. mDownTime = origEvent.mDownTime; - mEventTime = eventTime; - mAction = action; + mEventTime = TimeUnit.NANOSECONDS.convert(eventTime, TimeUnit.MILLISECONDS); + mAction = origEvent.mAction; mKeyCode = origEvent.mKeyCode; mRepeatCount = newRepeat; mMetaState = origEvent.mMetaState; mDeviceId = origEvent.mDeviceId; mSource = origEvent.mSource; mDisplayId = origEvent.mDisplayId; - mHmac = hmac; + mHmac = null; // Don't copy HMAC, it will be invalid because eventTime is changing mScanCode = origEvent.mScanCode; mFlags = origEvent.mFlags; - mCharacters = characters; + mCharacters = origEvent.mCharacters; } private static KeyEvent obtain() { @@ -1829,11 +1857,21 @@ public class KeyEvent extends InputEvent implements Parcelable { * @param action The new action code of the event. */ private KeyEvent(KeyEvent origEvent, int action) { - // Not an exact copy so assign a new ID - // Don't copy the hmac, it will be invalid since action is changing - // Don't copy mCharacters, since one way or the other we'll lose it when changing action. - this(origEvent, nativeNextId(), origEvent.mEventTime, action, origEvent.mRepeatCount, - /* hmac= */ null, /* characters= */ null); + mId = nativeNextId(); // Not an exact copy so assign a new ID. + mDownTime = origEvent.mDownTime; + mEventTime = origEvent.mEventTime; + mAction = action; + mKeyCode = origEvent.mKeyCode; + mRepeatCount = origEvent.mRepeatCount; + mMetaState = origEvent.mMetaState; + mDeviceId = origEvent.mDeviceId; + mSource = origEvent.mSource; + mDisplayId = origEvent.mDisplayId; + mHmac = null; // Don't copy the hmac, it will be invalid since action is changing + mScanCode = origEvent.mScanCode; + mFlags = origEvent.mFlags; + // Don't copy mCharacters, since one way or the other we'll lose it + // when changing the action. } /** @@ -3181,8 +3219,6 @@ public class KeyEvent extends InputEvent implements Parcelable { } private KeyEvent(Parcel in) { - // NOTE: ideally this constructor should call the canonical one, but that would require - // changing the order the fields are written to the parcel, which could break native code mId = in.readInt(); mDeviceId = in.readInt(); mSource = in.readInt();