diff options
author | Jeff Brown <jeffbrown@google.com> | 2010-10-21 18:05:53 -0700 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2010-10-21 18:05:53 -0700 |
commit | 482284ad0e3226b49c27bf41442c1cb150853226 (patch) | |
tree | f0c08378742b02e947bba89537111c249eed94e4 | |
parent | 2f1eee34706cf42855541def5737c37a071d7293 (diff) | |
parent | 6b3178a6323e015644590ebaee86523e4bb81773 (diff) | |
download | frameworks_base-482284ad0e3226b49c27bf41442c1cb150853226.zip frameworks_base-482284ad0e3226b49c27bf41442c1cb150853226.tar.gz frameworks_base-482284ad0e3226b49c27bf41442c1cb150853226.tar.bz2 |
am 6b3178a6: Merge "Fix a race condition in wallpaper move throttling." into gingerbread
Merge commit '6b3178a6323e015644590ebaee86523e4bb81773' into gingerbread-plus-aosp
* commit '6b3178a6323e015644590ebaee86523e4bb81773':
Fix a race condition in wallpaper move throttling.
-rw-r--r-- | core/java/android/service/wallpaper/WallpaperService.java | 27 |
1 files changed, 16 insertions, 11 deletions
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index 2b083dc..9645a17 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -452,17 +452,14 @@ public abstract class WallpaperService extends Service { private void dispatchPointer(MotionEvent event) { synchronized (mLock) { if (event.getAction() == MotionEvent.ACTION_MOVE) { - if (mPendingMove != null) { - mCaller.removeMessages(MSG_TOUCH_EVENT, mPendingMove); - mPendingMove.recycle(); - } mPendingMove = event; } else { mPendingMove = null; } - Message msg = mCaller.obtainMessageO(MSG_TOUCH_EVENT, event); - mCaller.sendMessage(msg); } + + Message msg = mCaller.obtainMessageO(MSG_TOUCH_EVENT, event); + mCaller.sendMessage(msg); } void updateSurface(boolean forceRelayout, boolean forceReport, boolean redrawNeeded) { @@ -905,14 +902,22 @@ public abstract class WallpaperService extends Service { mEngine.doOffsetsChanged(); } break; case MSG_TOUCH_EVENT: { + boolean skip = false; MotionEvent ev = (MotionEvent)message.obj; - synchronized (mEngine.mLock) { - if (mEngine.mPendingMove == ev) { - mEngine.mPendingMove = null; + if (ev.getAction() == MotionEvent.ACTION_MOVE) { + synchronized (mEngine.mLock) { + if (mEngine.mPendingMove == ev) { + mEngine.mPendingMove = null; + } else { + // this is not the motion event we are looking for.... + skip = true; + } } } - if (DEBUG) Log.v(TAG, "Delivering touch event: " + ev); - mEngine.onTouchEvent(ev); + if (!skip) { + if (DEBUG) Log.v(TAG, "Delivering touch event: " + ev); + mEngine.onTouchEvent(ev); + } ev.recycle(); } break; default : |