From 6ec402b5ae33c8927694d8522b4cc6a5c8ba974e Mon Sep 17 00:00:00 2001 From: Jeff Brown Date: Wed, 28 Jul 2010 15:48:59 -0700 Subject: DO NOT MERGE: Fix input event injection ANRs on UI thread. Added a new asynchronous injection mode and made the existing synchronization mechanism more robust. Change-Id: Ia4aa04fd9b75ea2461a844c5b7933c831c1027e6 --- core/java/android/view/KeyEvent.java | 42 ++++++++++++++++++++---------------- 1 file changed, 23 insertions(+), 19 deletions(-) (limited to 'core/java/android/view/KeyEvent.java') diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index dd0d21a..9223e17 100755 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -1211,44 +1211,48 @@ public class KeyEvent extends InputEvent implements Parcelable { public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { public KeyEvent createFromParcel(Parcel in) { - return new KeyEvent(in); + in.readInt(); // skip token, we already know this is a KeyEvent + return KeyEvent.createFromParcelBody(in); } public KeyEvent[] newArray(int size) { return new KeyEvent[size]; } }; - - public int describeContents() { - return 0; + + /** @hide */ + public static KeyEvent createFromParcelBody(Parcel in) { + return new KeyEvent(in); + } + + private KeyEvent(Parcel in) { + readBaseFromParcel(in); + + mAction = in.readInt(); + mKeyCode = in.readInt(); + mRepeatCount = in.readInt(); + mMetaState = in.readInt(); + mScanCode = in.readInt(); + mFlags = in.readInt(); + mDownTime = in.readLong(); + mEventTime = in.readLong(); } public void writeToParcel(Parcel out, int flags) { + out.writeInt(PARCEL_TOKEN_KEY_EVENT); + + writeBaseToParcel(out); + out.writeInt(mAction); out.writeInt(mKeyCode); out.writeInt(mRepeatCount); out.writeInt(mMetaState); - out.writeInt(mDeviceId); - out.writeInt(mSource); out.writeInt(mScanCode); out.writeInt(mFlags); out.writeLong(mDownTime); out.writeLong(mEventTime); } - private KeyEvent(Parcel in) { - mAction = in.readInt(); - mKeyCode = in.readInt(); - mRepeatCount = in.readInt(); - mMetaState = in.readInt(); - mDeviceId = in.readInt(); - mSource = in.readInt(); - mScanCode = in.readInt(); - mFlags = in.readInt(); - mDownTime = in.readLong(); - mEventTime = in.readLong(); - } - private native boolean native_isSystemKey(int keyCode); private native boolean native_hasDefaultAction(int keyCode); } -- cgit v1.1