Merge mouse and touch events
Both are handled the very same way on the device.
This commit is contained in:
parent
7e1d52c119
commit
6220456def
9 changed files with 48 additions and 133 deletions
|
@ -49,11 +49,6 @@ control_msg_serialize(const struct control_msg *msg, unsigned char *buf) {
|
||||||
CONTROL_MSG_TEXT_MAX_LENGTH, &buf[1]);
|
CONTROL_MSG_TEXT_MAX_LENGTH, &buf[1]);
|
||||||
return 1 + len;
|
return 1 + len;
|
||||||
}
|
}
|
||||||
case CONTROL_MSG_TYPE_INJECT_MOUSE_EVENT:
|
|
||||||
buf[1] = msg->inject_mouse_event.action;
|
|
||||||
buffer_write32be(&buf[2], msg->inject_mouse_event.buttons);
|
|
||||||
write_position(&buf[6], &msg->inject_mouse_event.position);
|
|
||||||
return 18;
|
|
||||||
case CONTROL_MSG_TYPE_INJECT_TOUCH_EVENT:
|
case CONTROL_MSG_TYPE_INJECT_TOUCH_EVENT:
|
||||||
buf[1] = msg->inject_touch_event.action;
|
buf[1] = msg->inject_touch_event.action;
|
||||||
buffer_write64be(&buf[2], msg->inject_touch_event.pointer_id);
|
buffer_write64be(&buf[2], msg->inject_touch_event.pointer_id);
|
||||||
|
@ -61,7 +56,8 @@ control_msg_serialize(const struct control_msg *msg, unsigned char *buf) {
|
||||||
uint16_t pressure =
|
uint16_t pressure =
|
||||||
to_fixed_point_16(msg->inject_touch_event.pressure);
|
to_fixed_point_16(msg->inject_touch_event.pressure);
|
||||||
buffer_write16be(&buf[22], pressure);
|
buffer_write16be(&buf[22], pressure);
|
||||||
return 24;
|
buffer_write32be(&buf[24], msg->inject_touch_event.buttons);
|
||||||
|
return 28;
|
||||||
case CONTROL_MSG_TYPE_INJECT_SCROLL_EVENT:
|
case CONTROL_MSG_TYPE_INJECT_SCROLL_EVENT:
|
||||||
write_position(&buf[1], &msg->inject_scroll_event.position);
|
write_position(&buf[1], &msg->inject_scroll_event.position);
|
||||||
buffer_write32be(&buf[13],
|
buffer_write32be(&buf[13],
|
||||||
|
|
|
@ -15,10 +15,11 @@
|
||||||
#define CONTROL_MSG_SERIALIZED_MAX_SIZE \
|
#define CONTROL_MSG_SERIALIZED_MAX_SIZE \
|
||||||
(3 + CONTROL_MSG_CLIPBOARD_TEXT_MAX_LENGTH)
|
(3 + CONTROL_MSG_CLIPBOARD_TEXT_MAX_LENGTH)
|
||||||
|
|
||||||
|
#define POINTER_ID_MOUSE UINT64_C(-1);
|
||||||
|
|
||||||
enum control_msg_type {
|
enum control_msg_type {
|
||||||
CONTROL_MSG_TYPE_INJECT_KEYCODE,
|
CONTROL_MSG_TYPE_INJECT_KEYCODE,
|
||||||
CONTROL_MSG_TYPE_INJECT_TEXT,
|
CONTROL_MSG_TYPE_INJECT_TEXT,
|
||||||
CONTROL_MSG_TYPE_INJECT_MOUSE_EVENT,
|
|
||||||
CONTROL_MSG_TYPE_INJECT_TOUCH_EVENT,
|
CONTROL_MSG_TYPE_INJECT_TOUCH_EVENT,
|
||||||
CONTROL_MSG_TYPE_INJECT_SCROLL_EVENT,
|
CONTROL_MSG_TYPE_INJECT_SCROLL_EVENT,
|
||||||
CONTROL_MSG_TYPE_BACK_OR_SCREEN_ON,
|
CONTROL_MSG_TYPE_BACK_OR_SCREEN_ON,
|
||||||
|
@ -49,10 +50,6 @@ struct control_msg {
|
||||||
struct {
|
struct {
|
||||||
enum android_motionevent_action action;
|
enum android_motionevent_action action;
|
||||||
enum android_motionevent_buttons buttons;
|
enum android_motionevent_buttons buttons;
|
||||||
struct position position;
|
|
||||||
} inject_mouse_event;
|
|
||||||
struct {
|
|
||||||
enum android_motionevent_action action;
|
|
||||||
uint64_t pointer_id;
|
uint64_t pointer_id;
|
||||||
struct position position;
|
struct position position;
|
||||||
float pressure;
|
float pressure;
|
||||||
|
|
|
@ -128,15 +128,6 @@ convert_keycode(SDL_Keycode from, enum android_keycode *to, uint16_t mod) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool
|
|
||||||
convert_mouse_action(SDL_EventType from, enum android_motionevent_action *to) {
|
|
||||||
switch (from) {
|
|
||||||
MAP(SDL_MOUSEBUTTONDOWN, AMOTION_EVENT_ACTION_DOWN);
|
|
||||||
MAP(SDL_MOUSEBUTTONUP, AMOTION_EVENT_ACTION_UP);
|
|
||||||
FAIL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static enum android_motionevent_buttons
|
static enum android_motionevent_buttons
|
||||||
convert_mouse_buttons(uint32_t state) {
|
convert_mouse_buttons(uint32_t state) {
|
||||||
enum android_motionevent_buttons buttons = 0;
|
enum android_motionevent_buttons buttons = 0;
|
||||||
|
@ -176,20 +167,31 @@ convert_input_key(const SDL_KeyboardEvent *from, struct control_msg *to) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool
|
||||||
|
convert_mouse_action(SDL_EventType from, enum android_motionevent_action *to) {
|
||||||
|
switch (from) {
|
||||||
|
MAP(SDL_MOUSEBUTTONDOWN, AMOTION_EVENT_ACTION_DOWN);
|
||||||
|
MAP(SDL_MOUSEBUTTONUP, AMOTION_EVENT_ACTION_UP);
|
||||||
|
FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
convert_mouse_button(const SDL_MouseButtonEvent *from, struct size screen_size,
|
convert_mouse_button(const SDL_MouseButtonEvent *from, struct size screen_size,
|
||||||
struct control_msg *to) {
|
struct control_msg *to) {
|
||||||
to->type = CONTROL_MSG_TYPE_INJECT_MOUSE_EVENT;
|
to->type = CONTROL_MSG_TYPE_INJECT_TOUCH_EVENT;
|
||||||
|
|
||||||
if (!convert_mouse_action(from->type, &to->inject_mouse_event.action)) {
|
if (!convert_mouse_action(from->type, &to->inject_touch_event.action)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
to->inject_mouse_event.buttons =
|
to->inject_touch_event.pointer_id = POINTER_ID_MOUSE;
|
||||||
|
to->inject_touch_event.position.screen_size = screen_size;
|
||||||
|
to->inject_touch_event.position.point.x = from->x;
|
||||||
|
to->inject_touch_event.position.point.y = from->y;
|
||||||
|
to->inject_touch_event.pressure = 1.f;
|
||||||
|
to->inject_touch_event.buttons =
|
||||||
convert_mouse_buttons(SDL_BUTTON(from->button));
|
convert_mouse_buttons(SDL_BUTTON(from->button));
|
||||||
to->inject_mouse_event.position.screen_size = screen_size;
|
|
||||||
to->inject_mouse_event.position.point.x = from->x;
|
|
||||||
to->inject_mouse_event.position.point.y = from->y;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -197,12 +199,14 @@ convert_mouse_button(const SDL_MouseButtonEvent *from, struct size screen_size,
|
||||||
bool
|
bool
|
||||||
convert_mouse_motion(const SDL_MouseMotionEvent *from, struct size screen_size,
|
convert_mouse_motion(const SDL_MouseMotionEvent *from, struct size screen_size,
|
||||||
struct control_msg *to) {
|
struct control_msg *to) {
|
||||||
to->type = CONTROL_MSG_TYPE_INJECT_MOUSE_EVENT;
|
to->type = CONTROL_MSG_TYPE_INJECT_TOUCH_EVENT;
|
||||||
to->inject_mouse_event.action = AMOTION_EVENT_ACTION_MOVE;
|
to->inject_touch_event.action = AMOTION_EVENT_ACTION_MOVE;
|
||||||
to->inject_mouse_event.buttons = convert_mouse_buttons(from->state);
|
to->inject_touch_event.pointer_id = POINTER_ID_MOUSE;
|
||||||
to->inject_mouse_event.position.screen_size = screen_size;
|
to->inject_touch_event.position.screen_size = screen_size;
|
||||||
to->inject_mouse_event.position.point.x = from->x;
|
to->inject_touch_event.position.point.x = from->x;
|
||||||
to->inject_mouse_event.position.point.y = from->y;
|
to->inject_touch_event.position.point.y = from->y;
|
||||||
|
to->inject_touch_event.pressure = 1.f;
|
||||||
|
to->inject_touch_event.buttons = convert_mouse_buttons(from->state);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -232,6 +236,7 @@ convert_touch(const SDL_TouchFingerEvent *from, struct size screen_size,
|
||||||
to->inject_touch_event.position.point.x = from->x * screen_size.width;
|
to->inject_touch_event.position.point.x = from->x * screen_size.width;
|
||||||
to->inject_touch_event.position.point.y = from->y * screen_size.height;
|
to->inject_touch_event.position.point.y = from->y * screen_size.height;
|
||||||
to->inject_touch_event.pressure = from->pressure;
|
to->inject_touch_event.pressure = from->pressure;
|
||||||
|
to->inject_touch_event.buttons = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -67,39 +67,6 @@ static void test_serialize_inject_text_long(void) {
|
||||||
assert(!memcmp(buf, expected, sizeof(expected)));
|
assert(!memcmp(buf, expected, sizeof(expected)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_serialize_inject_mouse_event(void) {
|
|
||||||
struct control_msg msg = {
|
|
||||||
.type = CONTROL_MSG_TYPE_INJECT_MOUSE_EVENT,
|
|
||||||
.inject_mouse_event = {
|
|
||||||
.action = AMOTION_EVENT_ACTION_DOWN,
|
|
||||||
.buttons = AMOTION_EVENT_BUTTON_PRIMARY,
|
|
||||||
.position = {
|
|
||||||
.point = {
|
|
||||||
.x = 260,
|
|
||||||
.y = 1026,
|
|
||||||
},
|
|
||||||
.screen_size = {
|
|
||||||
.width = 1080,
|
|
||||||
.height = 1920,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
unsigned char buf[CONTROL_MSG_SERIALIZED_MAX_SIZE];
|
|
||||||
int size = control_msg_serialize(&msg, buf);
|
|
||||||
assert(size == 18);
|
|
||||||
|
|
||||||
const unsigned char expected[] = {
|
|
||||||
CONTROL_MSG_TYPE_INJECT_MOUSE_EVENT,
|
|
||||||
0x00, // AKEY_EVENT_ACTION_DOWN
|
|
||||||
0x00, 0x00, 0x00, 0x01, // AMOTION_EVENT_BUTTON_PRIMARY
|
|
||||||
0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x04, 0x02, // 260 1026
|
|
||||||
0x04, 0x38, 0x07, 0x80, // 1080 1920
|
|
||||||
};
|
|
||||||
assert(!memcmp(buf, expected, sizeof(expected)));
|
|
||||||
}
|
|
||||||
|
|
||||||
static void test_serialize_inject_touch_event(void) {
|
static void test_serialize_inject_touch_event(void) {
|
||||||
struct control_msg msg = {
|
struct control_msg msg = {
|
||||||
.type = CONTROL_MSG_TYPE_INJECT_TOUCH_EVENT,
|
.type = CONTROL_MSG_TYPE_INJECT_TOUCH_EVENT,
|
||||||
|
@ -117,12 +84,13 @@ static void test_serialize_inject_touch_event(void) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
.pressure = 1.0f,
|
.pressure = 1.0f,
|
||||||
|
.buttons = AMOTION_EVENT_BUTTON_PRIMARY,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned char buf[CONTROL_MSG_SERIALIZED_MAX_SIZE];
|
unsigned char buf[CONTROL_MSG_SERIALIZED_MAX_SIZE];
|
||||||
int size = control_msg_serialize(&msg, buf);
|
int size = control_msg_serialize(&msg, buf);
|
||||||
assert(size == 24);
|
assert(size == 28);
|
||||||
|
|
||||||
const unsigned char expected[] = {
|
const unsigned char expected[] = {
|
||||||
CONTROL_MSG_TYPE_INJECT_TOUCH_EVENT,
|
CONTROL_MSG_TYPE_INJECT_TOUCH_EVENT,
|
||||||
|
@ -131,6 +99,7 @@ static void test_serialize_inject_touch_event(void) {
|
||||||
0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0xc8, // 100 200
|
0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0xc8, // 100 200
|
||||||
0x04, 0x38, 0x07, 0x80, // 1080 1920
|
0x04, 0x38, 0x07, 0x80, // 1080 1920
|
||||||
0xff, 0xff, // pressure
|
0xff, 0xff, // pressure
|
||||||
|
0x00, 0x00, 0x00, 0x01 // AMOTION_EVENT_BUTTON_PRIMARY
|
||||||
};
|
};
|
||||||
assert(!memcmp(buf, expected, sizeof(expected)));
|
assert(!memcmp(buf, expected, sizeof(expected)));
|
||||||
}
|
}
|
||||||
|
@ -271,7 +240,6 @@ int main(void) {
|
||||||
test_serialize_inject_keycode();
|
test_serialize_inject_keycode();
|
||||||
test_serialize_inject_text();
|
test_serialize_inject_text();
|
||||||
test_serialize_inject_text_long();
|
test_serialize_inject_text_long();
|
||||||
test_serialize_inject_mouse_event();
|
|
||||||
test_serialize_inject_touch_event();
|
test_serialize_inject_touch_event();
|
||||||
test_serialize_inject_scroll_event();
|
test_serialize_inject_scroll_event();
|
||||||
test_serialize_back_or_screen_on();
|
test_serialize_back_or_screen_on();
|
||||||
|
|
|
@ -7,15 +7,14 @@ public final class ControlMessage {
|
||||||
|
|
||||||
public static final int TYPE_INJECT_KEYCODE = 0;
|
public static final int TYPE_INJECT_KEYCODE = 0;
|
||||||
public static final int TYPE_INJECT_TEXT = 1;
|
public static final int TYPE_INJECT_TEXT = 1;
|
||||||
public static final int TYPE_INJECT_MOUSE_EVENT = 2;
|
public static final int TYPE_INJECT_TOUCH_EVENT = 2;
|
||||||
public static final int TYPE_INJECT_TOUCH_EVENT = 3;
|
public static final int TYPE_INJECT_SCROLL_EVENT = 3;
|
||||||
public static final int TYPE_INJECT_SCROLL_EVENT = 4;
|
public static final int TYPE_BACK_OR_SCREEN_ON = 4;
|
||||||
public static final int TYPE_BACK_OR_SCREEN_ON = 5;
|
public static final int TYPE_EXPAND_NOTIFICATION_PANEL = 5;
|
||||||
public static final int TYPE_EXPAND_NOTIFICATION_PANEL = 6;
|
public static final int TYPE_COLLAPSE_NOTIFICATION_PANEL = 6;
|
||||||
public static final int TYPE_COLLAPSE_NOTIFICATION_PANEL = 7;
|
public static final int TYPE_GET_CLIPBOARD = 7;
|
||||||
public static final int TYPE_GET_CLIPBOARD = 8;
|
public static final int TYPE_SET_CLIPBOARD = 8;
|
||||||
public static final int TYPE_SET_CLIPBOARD = 9;
|
public static final int TYPE_SET_SCREEN_POWER_MODE = 9;
|
||||||
public static final int TYPE_SET_SCREEN_POWER_MODE = 10;
|
|
||||||
|
|
||||||
private int type;
|
private int type;
|
||||||
private String text;
|
private String text;
|
||||||
|
@ -48,22 +47,15 @@ public final class ControlMessage {
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ControlMessage createInjectMouseEvent(int action, int buttons, Position position) {
|
public static ControlMessage createInjectTouchEvent(int action, long pointerId, Position position, float pressure,
|
||||||
ControlMessage msg = new ControlMessage();
|
int buttons) {
|
||||||
msg.type = TYPE_INJECT_MOUSE_EVENT;
|
|
||||||
msg.action = action;
|
|
||||||
msg.buttons = buttons;
|
|
||||||
msg.position = position;
|
|
||||||
return msg;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static ControlMessage createInjectTouchEvent(int action, long pointerId, Position position, float pressure) {
|
|
||||||
ControlMessage msg = new ControlMessage();
|
ControlMessage msg = new ControlMessage();
|
||||||
msg.type = TYPE_INJECT_TOUCH_EVENT;
|
msg.type = TYPE_INJECT_TOUCH_EVENT;
|
||||||
msg.action = action;
|
msg.action = action;
|
||||||
msg.pointerId = pointerId;
|
msg.pointerId = pointerId;
|
||||||
msg.pressure = pressure;
|
msg.pressure = pressure;
|
||||||
msg.position = position;
|
msg.position = position;
|
||||||
|
msg.buttons = buttons;
|
||||||
return msg;
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,9 +60,6 @@ public class ControlMessageReader {
|
||||||
case ControlMessage.TYPE_INJECT_TEXT:
|
case ControlMessage.TYPE_INJECT_TEXT:
|
||||||
msg = parseInjectText();
|
msg = parseInjectText();
|
||||||
break;
|
break;
|
||||||
case ControlMessage.TYPE_INJECT_MOUSE_EVENT:
|
|
||||||
msg = parseInjectMouseEvent();
|
|
||||||
break;
|
|
||||||
case ControlMessage.TYPE_INJECT_TOUCH_EVENT:
|
case ControlMessage.TYPE_INJECT_TOUCH_EVENT:
|
||||||
msg = parseInjectTouchEvent();
|
msg = parseInjectTouchEvent();
|
||||||
break;
|
break;
|
||||||
|
@ -124,16 +121,6 @@ public class ControlMessageReader {
|
||||||
return ControlMessage.createInjectText(text);
|
return ControlMessage.createInjectText(text);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ControlMessage parseInjectMouseEvent() {
|
|
||||||
if (buffer.remaining() < INJECT_MOUSE_EVENT_PAYLOAD_LENGTH) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
int action = toUnsigned(buffer.get());
|
|
||||||
int buttons = buffer.getInt();
|
|
||||||
Position position = readPosition(buffer);
|
|
||||||
return ControlMessage.createInjectMouseEvent(action, buttons, position);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("checkstyle:MagicNumber")
|
@SuppressWarnings("checkstyle:MagicNumber")
|
||||||
private ControlMessage parseInjectTouchEvent() {
|
private ControlMessage parseInjectTouchEvent() {
|
||||||
if (buffer.remaining() < INJECT_TOUCH_EVENT_PAYLOAD_LENGTH) {
|
if (buffer.remaining() < INJECT_TOUCH_EVENT_PAYLOAD_LENGTH) {
|
||||||
|
@ -146,7 +133,8 @@ public class ControlMessageReader {
|
||||||
int pressureInt = toUnsigned(buffer.getShort());
|
int pressureInt = toUnsigned(buffer.getShort());
|
||||||
// convert it to a float between 0 and 1 (0x1p16f is 2^16 as float)
|
// convert it to a float between 0 and 1 (0x1p16f is 2^16 as float)
|
||||||
float pressure = pressureInt == 0xffff ? 1f : (pressureInt / 0x1p16f);
|
float pressure = pressureInt == 0xffff ? 1f : (pressureInt / 0x1p16f);
|
||||||
return ControlMessage.createInjectTouchEvent(action, pointerId, position, pressure);
|
int buttons = buffer.getInt();
|
||||||
|
return ControlMessage.createInjectTouchEvent(action, pointerId, position, pressure, buttons);
|
||||||
}
|
}
|
||||||
|
|
||||||
private ControlMessage parseInjectScrollEvent() {
|
private ControlMessage parseInjectScrollEvent() {
|
||||||
|
|
|
@ -81,9 +81,6 @@ public class Controller {
|
||||||
case ControlMessage.TYPE_INJECT_TEXT:
|
case ControlMessage.TYPE_INJECT_TEXT:
|
||||||
injectText(msg.getText());
|
injectText(msg.getText());
|
||||||
break;
|
break;
|
||||||
case ControlMessage.TYPE_INJECT_MOUSE_EVENT:
|
|
||||||
injectTouch(msg.getAction(), PointersState.POINTER_ID_MOUSE, msg.getPosition(), 1, msg.getButtons());
|
|
||||||
break;
|
|
||||||
case ControlMessage.TYPE_INJECT_TOUCH_EVENT:
|
case ControlMessage.TYPE_INJECT_TOUCH_EVENT:
|
||||||
injectTouch(msg.getAction(), msg.getPointerId(), msg.getPosition(), msg.getPressure(), 0);
|
injectTouch(msg.getAction(), msg.getPointerId(), msg.getPosition(), msg.getPressure(), 0);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -8,7 +8,6 @@ import java.util.List;
|
||||||
public class PointersState {
|
public class PointersState {
|
||||||
|
|
||||||
public static final int MAX_POINTERS = 10;
|
public static final int MAX_POINTERS = 10;
|
||||||
public static final long POINTER_ID_MOUSE = -1;
|
|
||||||
|
|
||||||
private final List<Pointer> pointers = new ArrayList<>();
|
private final List<Pointer> pointers = new ArrayList<>();
|
||||||
|
|
||||||
|
|
|
@ -76,35 +76,6 @@ public class ControlMessageReaderTest {
|
||||||
Assert.assertEquals(new String(text, StandardCharsets.US_ASCII), event.getText());
|
Assert.assertEquals(new String(text, StandardCharsets.US_ASCII), event.getText());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
@SuppressWarnings("checkstyle:MagicNumber")
|
|
||||||
public void testParseMouseEvent() throws IOException {
|
|
||||||
ControlMessageReader reader = new ControlMessageReader();
|
|
||||||
|
|
||||||
ByteArrayOutputStream bos = new ByteArrayOutputStream();
|
|
||||||
DataOutputStream dos = new DataOutputStream(bos);
|
|
||||||
dos.writeByte(ControlMessage.TYPE_INJECT_MOUSE_EVENT);
|
|
||||||
dos.writeByte(MotionEvent.ACTION_DOWN);
|
|
||||||
dos.writeInt(MotionEvent.BUTTON_PRIMARY);
|
|
||||||
dos.writeInt(100);
|
|
||||||
dos.writeInt(200);
|
|
||||||
dos.writeShort(1080);
|
|
||||||
dos.writeShort(1920);
|
|
||||||
|
|
||||||
byte[] packet = bos.toByteArray();
|
|
||||||
|
|
||||||
reader.readFrom(new ByteArrayInputStream(packet));
|
|
||||||
ControlMessage event = reader.next();
|
|
||||||
|
|
||||||
Assert.assertEquals(ControlMessage.TYPE_INJECT_MOUSE_EVENT, event.getType());
|
|
||||||
Assert.assertEquals(MotionEvent.ACTION_DOWN, event.getAction());
|
|
||||||
Assert.assertEquals(MotionEvent.BUTTON_PRIMARY, event.getButtons());
|
|
||||||
Assert.assertEquals(100, event.getPosition().getPoint().getX());
|
|
||||||
Assert.assertEquals(200, event.getPosition().getPoint().getY());
|
|
||||||
Assert.assertEquals(1080, event.getPosition().getScreenSize().getWidth());
|
|
||||||
Assert.assertEquals(1920, event.getPosition().getScreenSize().getHeight());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@SuppressWarnings("checkstyle:MagicNumber")
|
@SuppressWarnings("checkstyle:MagicNumber")
|
||||||
public void testParseTouchEvent() throws IOException {
|
public void testParseTouchEvent() throws IOException {
|
||||||
|
@ -120,6 +91,7 @@ public class ControlMessageReaderTest {
|
||||||
dos.writeShort(1080);
|
dos.writeShort(1080);
|
||||||
dos.writeShort(1920);
|
dos.writeShort(1920);
|
||||||
dos.writeShort(0xffff); // pressure
|
dos.writeShort(0xffff); // pressure
|
||||||
|
dos.writeInt(MotionEvent.BUTTON_PRIMARY);
|
||||||
|
|
||||||
byte[] packet = bos.toByteArray();
|
byte[] packet = bos.toByteArray();
|
||||||
|
|
||||||
|
@ -134,6 +106,7 @@ public class ControlMessageReaderTest {
|
||||||
Assert.assertEquals(1080, event.getPosition().getScreenSize().getWidth());
|
Assert.assertEquals(1080, event.getPosition().getScreenSize().getWidth());
|
||||||
Assert.assertEquals(1920, event.getPosition().getScreenSize().getHeight());
|
Assert.assertEquals(1920, event.getPosition().getScreenSize().getHeight());
|
||||||
Assert.assertEquals(1f, event.getPressure(), 0f); // must be exact
|
Assert.assertEquals(1f, event.getPressure(), 0f); // must be exact
|
||||||
|
Assert.assertEquals(MotionEvent.BUTTON_PRIMARY, event.getButtons());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in a new issue