summaryrefslogtreecommitdiffstats
path: root/core/java/android/view
diff options
context:
space:
mode:
authorMita Yun <mitayun@google.com>2012-12-10 16:50:22 -0800
committerMita Yun <mitayun@google.com>2012-12-10 16:50:22 -0800
commitd44280e28884085f014806d53413ec5a68d0ac25 (patch)
tree1c255c754481f793390ad10ee03366ab775845cc /core/java/android/view
parentf930fee835ab51400509c054f9a850715ddc6c24 (diff)
parentebcbfb3fc7750e2873a3e7c6c707fa4e203089b6 (diff)
downloadframeworks_base-d44280e28884085f014806d53413ec5a68d0ac25.zip
frameworks_base-d44280e28884085f014806d53413ec5a68d0ac25.tar.gz
frameworks_base-d44280e28884085f014806d53413ec5a68d0ac25.tar.bz2
resolved conflicts for merge of ebcbfb3f to master
Change-Id: I0658dd4a1418fbad91d9663e5b52418a979dc683
Diffstat (limited to 'core/java/android/view')
-rw-r--r--core/java/android/view/SimulatedTrackball.java67
1 files changed, 38 insertions, 29 deletions
diff --git a/core/java/android/view/SimulatedTrackball.java b/core/java/android/view/SimulatedTrackball.java
index b917371..0eb197e 100644
--- a/core/java/android/view/SimulatedTrackball.java
+++ b/core/java/android/view/SimulatedTrackball.java
@@ -40,7 +40,7 @@ class SimulatedTrackball {
private static final int MAX_TAP_TIME = 250;
// Where the cutoff is for determining an edge swipe
private static final float EDGE_SWIPE_THRESHOLD = 0.9f;
- private static final int FLICK_MSG_ID = 313;
+ private static final int MSG_FLICK = 313;
// TODO: Pass touch slop from the input device
private static final int TOUCH_SLOP = 30;
@@ -75,8 +75,11 @@ class SimulatedTrackball {
// Has the TouchSlop constraint been invalidated
private boolean mAlwaysInTapRegion = true;
- // Most recent event. Used to determine what device sent the event.
- private MotionEvent mRecentEvent;
+ // Information from the most recent event.
+ // Used to determine what device sent the event during a fling.
+ private int mLastSource;
+ private int mLastMetaState;
+ private int mLastDeviceId;
// TODO: Currently using screen dimensions tuned to a Galaxy Nexus, need to
// read this from a config file instead
@@ -101,33 +104,34 @@ class SimulatedTrackball {
mTouchSlopSquared = mTouchSlop * mTouchSlop;
}
- private final Handler mHandler = new Handler(new Callback() {
+ private final Handler mHandler = new Handler(true /*async*/) {
@Override
- public boolean handleMessage(Message msg) {
- if (msg.what != FLICK_MSG_ID)
- return false;
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_FLICK: {
+ final long time = SystemClock.uptimeMillis();
+ ViewRootImpl viewroot = (ViewRootImpl) msg.obj;
+ // Send the key
+ viewroot.enqueueInputEvent(new KeyEvent(time, time,
+ KeyEvent.ACTION_DOWN, msg.arg2, 0, mLastMetaState,
+ mLastDeviceId, 0, KeyEvent.FLAG_FALLBACK, mLastSource));
+ viewroot.enqueueInputEvent(new KeyEvent(time, time,
+ KeyEvent.ACTION_UP, msg.arg2, 0, mLastMetaState,
+ mLastDeviceId, 0, KeyEvent.FLAG_FALLBACK, mLastSource));
- final long time = SystemClock.uptimeMillis();
- ViewRootImpl viewroot = (ViewRootImpl) msg.obj;
- // Send the key
- viewroot.enqueueInputEvent(new KeyEvent(time, time,
- KeyEvent.ACTION_DOWN, msg.arg2, 0, mRecentEvent.getMetaState(),
- mRecentEvent.getDeviceId(), 0,
- KeyEvent.FLAG_FALLBACK, mRecentEvent.getSource()));
- viewroot.enqueueInputEvent(new KeyEvent(time, time,
- KeyEvent.ACTION_UP, msg.arg2, 0, mRecentEvent.getMetaState(),
- mRecentEvent.getDeviceId(), 0,
- KeyEvent.FLAG_FALLBACK, mRecentEvent.getSource()));
- Message msgCopy = Message.obtain(msg);
- // Increase the delay by the decay factor
- msgCopy.arg1 = (int) Math.ceil(mFlickDecay * msgCopy.arg1);
- if (msgCopy.arg1 <= mMaxRepeatDelay) {
- // Send the key again in arg1 milliseconds
- mHandler.sendMessageDelayed(msgCopy, msgCopy.arg1);
+ // Increase the delay by the decay factor and resend
+ final int delay = (int) Math.ceil(mFlickDecay * msg.arg1);
+ if (delay <= mMaxRepeatDelay) {
+ Message msgCopy = Message.obtain(msg);
+ msgCopy.arg1 = delay;
+ msgCopy.setAsynchronous(true);
+ mHandler.sendMessageDelayed(msgCopy, delay);
+ }
+ break;
+ }
}
- return false;
}
- });
+ };
public void updateTrackballDirection(ViewRootImpl viewroot, MotionEvent event) {
// Store what time the touchpad event occurred
@@ -148,7 +152,7 @@ class SimulatedTrackball {
mEdgeSwipePossible = true;
}
// Clear any flings
- mHandler.removeMessages(FLICK_MSG_ID);
+ mHandler.removeMessages(MSG_FLICK);
break;
case MotionEvent.ACTION_MOVE:
@@ -245,15 +249,20 @@ class SimulatedTrackball {
if (mMinFlickDistanceSquared <= xMoveSquared + yMoveSquared &&
time - mLastTouchPadEventTimeMs <= MAX_TAP_TIME &&
mKeySendRateMs <= mMaxRepeatDelay && mKeySendRateMs > 0) {
- Message message = Message.obtain(mHandler, FLICK_MSG_ID,
+ mLastDeviceId = event.getDeviceId();
+ mLastSource = event.getSource();
+ mLastMetaState = event.getMetaState();
+
+ Message message = Message.obtain(mHandler, MSG_FLICK,
mKeySendRateMs, mLastKeySent, viewroot);
- mRecentEvent = event;
+ message.setAsynchronous(true);
mHandler.sendMessageDelayed(message, mKeySendRateMs);
}
}
mEdgeSwipePossible = false;
break;
}
+
// Store touch event position and time
mLastTouchPadEventTimeMs = time;
mLastTouchpadXPosition = event.getX();