Skip to content
This repository was archived by the owner on Oct 5, 2023. It is now read-only.

Commit

Permalink
keycode
Browse files Browse the repository at this point in the history
  • Loading branch information
jiangyitao committed Dec 28, 2020
1 parent cd854b9 commit 35058e5
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 70 deletions.
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.daxiang</groupId>
<artifactId>agent</artifactId>
<version>0.8.0</version>
<version>0.8.1</version>
<packaging>jar</packaging>

<properties>
Expand Down
57 changes: 17 additions & 40 deletions src/main/java/com/daxiang/core/mobile/android/scrcpy/Scrcpy.java
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,11 @@ private void pushScrcpyToDevice() throws Exception {
iDevice.executeShellCommand(chmodCmd, new NullOutputReceiver());
}

// android.view.MotionEvent
private static final byte ACTION_DOWN = 0;
private static final byte ACTION_UP = 1;
private static final byte ACTION_MOVE = 2;

public void touchDown(int x, int y, int screenWidth, int screenHeight) {
commitTouchEvent(ACTION_DOWN, x, y, screenWidth, screenHeight);
}
Expand All @@ -226,35 +231,12 @@ public void moveTo(int x, int y, int screenWidth, int screenHeight) {
commitTouchEvent(ACTION_MOVE, x, y, screenWidth, screenHeight);
}

public void home() {
commitKeycode(KEYCODE_HOME);
}

public void back() {
commitKeycode(KEYCODE_BACK);
}

public void menu() {
commitKeycode(KEYCODE_MENU);
}

public void power() {
commitKeycode(KEYCODE_POWER);
}

// Scrcpy.server ControlMessage
private static final int TYPE_INJECT_TOUCH_EVENT = 2;
private static final int TYPE_INJECT_KEYCODE = 0;

// android.view.MotionEvent
private static final int ACTION_DOWN = 0;
private static final int ACTION_UP = 1;
private static final int ACTION_MOVE = 2;

private static final byte TYPE_INJECT_TOUCH_EVENT = 2;
private ByteBuffer touchEventBuffer = ByteBuffer.allocate(28);

// Scrcpy.server ControlMessageReader.parseInjectTouchEvent
private void commitTouchEvent(int actionType, int x, int y, int screenWidth, int screenHeight) {
private void commitTouchEvent(byte actionType, int x, int y, int screenWidth, int screenHeight) {
// Scrcpy.server Device.computeVideoSize
// 由于H264只接收8的倍数的宽高,所以scrcpy重新计算了video size
// scrcpy输出的video size不能直接拿来用,否则会出现commitTouchEvent无效的问题
Expand All @@ -266,8 +248,8 @@ private void commitTouchEvent(int actionType, int x, int y, int screenWidth, int

touchEventBuffer.rewind();

touchEventBuffer.put((byte) TYPE_INJECT_TOUCH_EVENT);
touchEventBuffer.put((byte) actionType);
touchEventBuffer.put(TYPE_INJECT_TOUCH_EVENT);
touchEventBuffer.put(actionType);
touchEventBuffer.putLong(-1L); // pointerId
touchEventBuffer.putInt(x);
touchEventBuffer.putInt(y);
Expand All @@ -279,27 +261,22 @@ private void commitTouchEvent(int actionType, int x, int y, int screenWidth, int
commit(touchEventBuffer.array());
}

// android.view.KeyEvent
private static final int KEYCODE_HOME = 3;
private static final int KEYCODE_BACK = 4;
private static final int KEYCODE_MENU = 82;
private static final int KEYCODE_POWER = 26;
private static final int KEY_EVENT_ACTION_DOWN = 0;
private static final int KEY_EVENT_ACTION_UP = 1;

private static final byte KEY_EVENT_ACTION_DOWN = 0;
private static final byte KEY_EVENT_ACTION_UP = 1;
private static final byte TYPE_INJECT_KEYCODE = 0;
private ByteBuffer keycodeBuffer = ByteBuffer.allocate(20);

// Scrcpy.server ControlMessageReader.parseInjectKeycode
private void commitKeycode(int keycode) {
public void commitKeycode(int keycode) {
keycodeBuffer.rewind();

keycodeBuffer.put((byte) TYPE_INJECT_KEYCODE);
keycodeBuffer.put((byte) KEY_EVENT_ACTION_DOWN); // 按下
keycodeBuffer.put(TYPE_INJECT_KEYCODE);
keycodeBuffer.put(KEY_EVENT_ACTION_DOWN); // 按下
keycodeBuffer.putInt(keycode); // keycode
keycodeBuffer.putInt(0); // metaState

keycodeBuffer.put((byte) TYPE_INJECT_KEYCODE);
keycodeBuffer.put((byte) KEY_EVENT_ACTION_UP); // 抬起
keycodeBuffer.put(TYPE_INJECT_KEYCODE);
keycodeBuffer.put(KEY_EVENT_ACTION_UP); // 抬起
keycodeBuffer.putInt(keycode); // keycode
keycodeBuffer.putInt(0); // metaState

Expand Down
19 changes: 5 additions & 14 deletions src/main/java/com/daxiang/websocket/AndroidScrcpySocketServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -60,25 +60,16 @@ public void onMessage(String msg) {
String operation = message.getString("operation");
switch (operation) {
case "m":
scrcpy.moveTo(message.getInteger("x"), message.getInteger("y"), message.getInteger("width"), message.getInteger("height"));
scrcpy.moveTo(message.getIntValue("x"), message.getIntValue("y"), message.getIntValue("width"), message.getIntValue("height"));
break;
case "d":
scrcpy.touchDown(message.getInteger("x"), message.getInteger("y"), message.getInteger("width"), message.getInteger("height"));
scrcpy.touchDown(message.getIntValue("x"), message.getIntValue("y"), message.getIntValue("width"), message.getIntValue("height"));
break;
case "u":
scrcpy.touchUp(message.getInteger("x"), message.getInteger("y"), message.getInteger("width"), message.getInteger("height"));
scrcpy.touchUp(message.getIntValue("x"), message.getIntValue("y"), message.getIntValue("width"), message.getIntValue("height"));
break;
case "home":
scrcpy.home();
break;
case "back":
scrcpy.back();
break;
case "power":
scrcpy.power();
break;
case "menu":
scrcpy.menu();
case "k":
scrcpy.commitKeycode(message.getIntValue("keycode"));
break;
}
}
Expand Down
19 changes: 4 additions & 15 deletions src/main/java/com/daxiang/websocket/AndroidStfSocketServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@
import com.daxiang.App;
import com.daxiang.core.mobile.android.AndroidDevice;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.nativekey.AndroidKey;
import io.appium.java_client.android.nativekey.KeyEvent;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

Expand Down Expand Up @@ -79,26 +77,17 @@ public void onMessage(String msg) {
switch (operation) {
case "m":
androidDevice.getMinitouch()
.moveTo(message.getInteger("x"), message.getInteger("y"), message.getInteger("width"), message.getInteger("height"));
.moveTo(message.getIntValue("x"), message.getIntValue("y"), message.getIntValue("width"), message.getIntValue("height"));
break;
case "d":
androidDevice.getMinitouch()
.touchDown(message.getInteger("x"), message.getInteger("y"), message.getInteger("width"), message.getInteger("height"));
.touchDown(message.getIntValue("x"), message.getIntValue("y"), message.getIntValue("width"), message.getIntValue("height"));
break;
case "u":
androidDevice.getMinitouch().touchUp();
break;
case "home":
((AndroidDriver) androidDevice.getDriver()).pressKey(new KeyEvent(AndroidKey.HOME));
break;
case "back":
((AndroidDriver) androidDevice.getDriver()).pressKey(new KeyEvent(AndroidKey.BACK));
break;
case "power":
((AndroidDriver) androidDevice.getDriver()).pressKey(new KeyEvent(AndroidKey.POWER));
break;
case "menu":
((AndroidDriver) androidDevice.getDriver()).pressKey(new KeyEvent(AndroidKey.MENU));
case "k":
((AndroidDriver) androidDevice.getDriver()).pressKeyCode(message.getIntValue("keycode"));
break;
}
}
Expand Down

0 comments on commit 35058e5

Please sign in to comment.