diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2012-10-16 19:50:21 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-10-16 19:50:22 -0700 |
commit | 05ad745ff63ed3bcdb86d42290ddc2ee214fe90f (patch) | |
tree | 5f32078e6e00df02f39448af94bd2babbbc0eaa2 | |
parent | 8e6145013a6533ca6a33e03c8a5e45ad2de431e4 (diff) | |
parent | 72e351296046d61ecc5863da2faca0ab4ba0fd62 (diff) | |
download | frameworks_base-05ad745ff63ed3bcdb86d42290ddc2ee214fe90f.zip frameworks_base-05ad745ff63ed3bcdb86d42290ddc2ee214fe90f.tar.gz frameworks_base-05ad745ff63ed3bcdb86d42290ddc2ee214fe90f.tar.bz2 |
Merge "Long press not working if explore by touch and magnification are on." into jb-mr1-dev
-rw-r--r-- | services/java/com/android/server/accessibility/ScreenMagnifier.java | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/services/java/com/android/server/accessibility/ScreenMagnifier.java b/services/java/com/android/server/accessibility/ScreenMagnifier.java index d5a8537..caf37b7 100644 --- a/services/java/com/android/server/accessibility/ScreenMagnifier.java +++ b/services/java/com/android/server/accessibility/ScreenMagnifier.java @@ -38,6 +38,7 @@ import android.os.Handler; import android.os.Message; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.SystemClock; import android.provider.Settings; import android.util.Property; import android.util.Slog; @@ -662,12 +663,33 @@ public final class ScreenMagnifier implements EventStreamTransformation { while (mDelayedEventQueue != null) { MotionEventInfo info = mDelayedEventQueue; mDelayedEventQueue = info.mNext; - ScreenMagnifier.this.onMotionEvent(info.mEvent, info.mRawEvent, - info.mPolicyFlags); + final long offset = SystemClock.uptimeMillis() - info.mCachedTimeMillis; + MotionEvent event = obtainEventWithOffsetTimeAndDownTime(info.mEvent, offset); + MotionEvent rawEvent = obtainEventWithOffsetTimeAndDownTime(info.mRawEvent, offset); + ScreenMagnifier.this.onMotionEvent(event, rawEvent, info.mPolicyFlags); + event.recycle(); + rawEvent.recycle(); info.recycle(); } } + private MotionEvent obtainEventWithOffsetTimeAndDownTime(MotionEvent event, long offset) { + final int pointerCount = event.getPointerCount(); + PointerCoords[] coords = getTempPointerCoordsWithMinSize(pointerCount); + PointerProperties[] properties = getTempPointerPropertiesWithMinSize(pointerCount); + for (int i = 0; i < pointerCount; i++) { + event.getPointerCoords(i, coords[i]); + event.getPointerProperties(i, properties[i]); + } + final long downTime = event.getDownTime() + offset; + final long eventTime = event.getEventTime() + offset; + return MotionEvent.obtain(downTime, eventTime, + event.getAction(), pointerCount, properties, coords, + event.getMetaState(), event.getButtonState(), + 1.0f, 1.0f, event.getDeviceId(), event.getEdgeFlags(), + event.getSource(), event.getFlags()); + } + private void clearDelayedMotionEvents() { while (mDelayedEventQueue != null) { MotionEventInfo info = mDelayedEventQueue; @@ -746,6 +768,7 @@ public final class ScreenMagnifier implements EventStreamTransformation { public MotionEvent mEvent; public MotionEvent mRawEvent; public int mPolicyFlags; + public long mCachedTimeMillis; public static MotionEventInfo obtain(MotionEvent event, MotionEvent rawEvent, int policyFlags) { @@ -770,6 +793,7 @@ public final class ScreenMagnifier implements EventStreamTransformation { mEvent = MotionEvent.obtain(event); mRawEvent = MotionEvent.obtain(rawEvent); mPolicyFlags = policyFlags; + mCachedTimeMillis = SystemClock.uptimeMillis(); } public void recycle() { @@ -793,6 +817,7 @@ public final class ScreenMagnifier implements EventStreamTransformation { mRawEvent.recycle(); mRawEvent = null; mPolicyFlags = 0; + mCachedTimeMillis = 0; } } |