Merge "Respect ACTION_CANCEL for joystick fallbacks"

This commit is contained in:
Michael Wright
2014-03-25 01:48:06 +00:00
committed by Android (Google) Code Review
2 changed files with 18 additions and 6 deletions

View File

@@ -3372,11 +3372,11 @@ public final class MotionEvent extends InputEvent implements Parcelable {
throw new IllegalArgumentException("Axis out of range.");
}
final long bits = mPackedAxisBits;
final long axisBit = 1L << axis;
final long axisBit = 0x8000000000000000L >>> axis;
if ((bits & axisBit) == 0) {
return 0;
}
final int index = Long.bitCount(bits & (axisBit - 1L));
final int index = Long.bitCount(bits & ~(0xFFFFFFFFFFFFFFFFL >>> axis));
return mPackedAxisValues[index];
}
}
@@ -3425,8 +3425,8 @@ public final class MotionEvent extends InputEvent implements Parcelable {
throw new IllegalArgumentException("Axis out of range.");
}
final long bits = mPackedAxisBits;
final long axisBit = 1L << axis;
final int index = Long.bitCount(bits & (axisBit - 1L));
final long axisBit = 0x8000000000000000L >>> axis;
final int index = Long.bitCount(bits & ~(0xFFFFFFFFFFFFFFFFL >>> axis));
float[] values = mPackedAxisValues;
if ((bits & axisBit) == 0) {
if (values == null) {

View File

@@ -4309,6 +4309,7 @@ public final class ViewRootImpl implements ViewParent,
* Creates dpad events from unhandled joystick movements.
*/
final class SyntheticJoystickHandler extends Handler {
private final static String TAG = "SyntheticJoystickHandler";
private final static int MSG_ENQUEUE_X_AXIS_KEY_REPEAT = 1;
private final static int MSG_ENQUEUE_Y_AXIS_KEY_REPEAT = 2;
@@ -4341,10 +4342,21 @@ public final class ViewRootImpl implements ViewParent,
}
public void process(MotionEvent event) {
update(event, true);
switch(event.getActionMasked()) {
case MotionEvent.ACTION_CANCEL:
cancel(event);
break;
case MotionEvent.ACTION_MOVE:
update(event, true);
break;
default:
Log.w(TAG, "Unexpected action: " + event.getActionMasked());
}
}
public void cancel(MotionEvent event) {
private void cancel(MotionEvent event) {
removeMessages(MSG_ENQUEUE_X_AXIS_KEY_REPEAT);
removeMessages(MSG_ENQUEUE_Y_AXIS_KEY_REPEAT);
update(event, false);
}