summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2010-10-21 18:10:24 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2010-10-21 18:10:24 -0700
commit4924aee9cb1c5988359f3162b6e89689c5b101e1 (patch)
tree0573b166dacd33a847d4362c5fdd0563ac328a70
parentc981465aac939399eb597f62efe42ce701c0310a (diff)
parent482284ad0e3226b49c27bf41442c1cb150853226 (diff)
downloadframeworks_base-4924aee9cb1c5988359f3162b6e89689c5b101e1.zip
frameworks_base-4924aee9cb1c5988359f3162b6e89689c5b101e1.tar.gz
frameworks_base-4924aee9cb1c5988359f3162b6e89689c5b101e1.tar.bz2
am 482284ad: am 6b3178a6: Merge "Fix a race condition in wallpaper move throttling." into gingerbread
Merge commit '482284ad0e3226b49c27bf41442c1cb150853226' * commit '482284ad0e3226b49c27bf41442c1cb150853226': Fix a race condition in wallpaper move throttling.
-rw-r--r--core/java/android/service/wallpaper/WallpaperService.java27
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 :