diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/constants/RequestCmd.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/constants/RequestCmd.java index a9a15be..b425663 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/constants/RequestCmd.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/constants/RequestCmd.java @@ -82,4 +82,6 @@ public interface RequestCmd { String PERF_STOP = "device_stop_per_data";//结束性能数据 + String TOUCH_CLICK = "touch_click"; //录制开启红框的时候用作点击 + } diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/harmony/HarmonyDevice.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/harmony/HarmonyDevice.java index 11a3492..56616aa 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/harmony/HarmonyDevice.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/driver/harmony/HarmonyDevice.java @@ -128,6 +128,30 @@ public class HarmonyDevice implements ICommandData { return result; } + /** + * 点击 + *
+ * 借助shell的实现,用于应对Agent无法准确执行点击效果时 + * + * @param x 屏幕x坐标 + * @param y 屏幕y坐标 + * @return 是否执行成功 + */ + public boolean click(int x, int y) { + String shellBuilder = "uitest uiInput click " + x + " " + y; + String outputText = ""; + try (HDCSession session = Hdc.getInstance().shell(hdcDevice, shellBuilder)) { + outputText = session.readAllLines(); + log.debug("设备{}点击{},{}输出{}", hdcDevice.getConnectKey(), x, y, outputText); + } + boolean result = outputText.contains("No Error"); + if (!result) { + log.debug("设备{}点击失败{},{},输出{}", hdcDevice.getConnectKey(), x, y, outputText); + } + return result; + } + + /** * 获取UI层级树 * diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AbstractIosMessageHandlerThread.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AbstractIosMessageHandlerThread.java index 96ef9c1..390c5d9 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AbstractIosMessageHandlerThread.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AbstractIosMessageHandlerThread.java @@ -1,5 +1,6 @@ package net.northking.cctp.upperComputer.webSocket.thread; +import com.alibaba.fastjson.JSON; import net.northking.cctp.upperComputer.constants.KeyBoardCodeEnum; import net.northking.cctp.upperComputer.deviceManager.IOSDeviceManager; import net.northking.cctp.upperComputer.deviceManager.screen.IosScreenResponseThread; @@ -76,6 +77,27 @@ public abstract class AbstractIosMessageHandlerThread extends AbstractMessageHan initDeviceRequireParam(); } + @Override + public void touchClick(CmdRequest request) { + Map data = request.getData(); + ParamCheck xCheck = ParamCheck.build().name("x").type("double").withMin(0).withMax(catchParam.getWidth()); + ParamCheck yCheck = ParamCheck.build().name("y").type("double").withMin(0).withMax(catchParam.getHeight()); + Map params = null; + try { + params = checkParam(data, false, xCheck, yCheck); + } catch (Exception e) { + logger.error("参数校验失败!", e); + if (e instanceof ParamMistakeException) { + SessionUtils.sendFailureMessage(session, request, e.getMessage()); + return; + } + } + Point point = calculatePoint(params); + logger.debug("计算后操作的坐标:{}", JSON.toJSONString(point)); + function.click(point.getX(), point.getY()); + logger.debug("抬起实际位置x:{},y:{}", point.getX(), point.getY()); + SessionUtils.sendSuccessData(session, request, null, "抬起成功"); + } @Override diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AbstractMessageHandler.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AbstractMessageHandler.java index eb64db9..f372a60 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AbstractMessageHandler.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AbstractMessageHandler.java @@ -130,6 +130,8 @@ public abstract class AbstractMessageHandler extends Thread implements MessageHa startPerf(request); } else if (RequestCmd.PERF_STOP.equals(request.getCmd())) { //关闭性能获取 stopPerf(request); + } else if (RequestCmd.TOUCH_CLICK.equals(request.getCmd())){ + touchClick(request); } else { logger.warn("未知指令:{}", request.getCmd()); SessionUtils.sendFailureMessage(session, request, "未知指令:" + request.getCmd()); diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AndroidMessageHandlerThread.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AndroidMessageHandlerThread.java index cd8921f..6d94527 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AndroidMessageHandlerThread.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/AndroidMessageHandlerThread.java @@ -94,6 +94,35 @@ public class AndroidMessageHandlerThread extends AbstractMessageHandler { initDeviceRequireParam(); } + @Override + public void touchClick(CmdRequest request) { + Map data = request.getData(); + ParamCheck xCheck = ParamCheck.build().name("x").type("double").withMin(0).withMax(catchParam.getWidth()); + ParamCheck yCheck = ParamCheck.build().name("y").type("double").withMin(0).withMax(catchParam.getHeight()); + Map params = null; + try { + params = checkParam(data, false, xCheck, yCheck); + } catch (Exception e) { + logger.error("参数校验失败!", e); + if (e instanceof ParamMistakeException) { + SessionUtils.sendFailureMessage(session, request, e.getMessage()); + return; + } + } + Point point = calculatePoint(params); + MotionEventCommand downCommand = new MotionEventCommand(4098, 0, point.getX(), point.getY()); + asyncSendCommand(downCommand); + try { + Thread.sleep(200); + } catch (InterruptedException e) { + return; + } + MotionEventCommand upDommand = new MotionEventCommand(4098, 1, point.getX(), point.getY()); + asyncSendCommand(upDommand); + SessionUtils.sendSuccessData(session, request, null, "点击成功"); + } + + @Override public void closeADBDebug(CmdRequest request) { } diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/HarmonyMessageHandlerThread.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/HarmonyMessageHandlerThread.java index 83f74e4..a83da6a 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/HarmonyMessageHandlerThread.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/HarmonyMessageHandlerThread.java @@ -9,6 +9,7 @@ import net.northking.cctp.upperComputer.deviceManager.HarmonyDeviceManager; import net.northking.cctp.upperComputer.deviceManager.screen.HarmonyScreenResponseThread; import net.northking.cctp.upperComputer.deviceManager.thread.HarmonyProvider; import net.northking.cctp.upperComputer.driver.harmony.HarmonyDevice; +import net.northking.cctp.upperComputer.driver.harmony.hdc.HDCConnectStatus; import net.northking.cctp.upperComputer.driver.harmony.hdc.HarmonyKeyCode; import net.northking.cctp.upperComputer.driver.harmony.hyppium.data.DisplaySize; import net.northking.cctp.upperComputer.exception.ExecuteException; @@ -560,6 +561,34 @@ public class HarmonyMessageHandlerThread extends AbstractMessageHandler{ logger.info("手机【{}】的实际宽:{}高:{}............................", this.serial,catchParam.getRealWidth(), catchParam.getRealHeight()); } + @Override + public void touchClick(CmdRequest request) { + Map data = request.getData(); + ParamCheck xCheck = ParamCheck.build().name("x").type("double").withMin(0).withMax(catchParam.getWidth()); + ParamCheck yCheck = ParamCheck.build().name("y").type("double").withMin(0).withMax(catchParam.getHeight()); + Map params = null; + try { + params = checkParam(data, false, xCheck, yCheck); + } catch (Exception e) { + logger.error("参数校验失败!", e); + if (e instanceof ParamMistakeException) { + SessionUtils.sendFailureMessage(session, request, e.getMessage()); + return; + } + } + Point point = calculatePoint(params); + HarmonyDevice currentDevice = HarmonyDeviceManager.getInstance().getCurrentDevice(serial); + if (null == currentDevice || currentDevice.getHdcDevice().getConnectStatus() != HDCConnectStatus.CONNECTED){ + SessionUtils.sendFailureMessage(session, request, "当前设备已经掉线,请稍后再试"); + } + boolean success = currentDevice.click(point.getX().intValue(), point.getY().intValue()); + if (success) { + SessionUtils.sendSuccessData(session, request, null, "点击成功"); + } else { + logger.warn("设备【{}】抬起失败............................", this.serial); + } + } + private HarmonyProvider getHarmonyProvider(){ HarmonyProvider provider = HarmonyDeviceManager.getInstance().getCurrentDeviceProvider(this.serial); if (null == provider) { diff --git a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/MessageHandler.java b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/MessageHandler.java index 2adc654..2031d18 100644 --- a/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/MessageHandler.java +++ b/cctp-atu/atu-upper-computer/src/main/java/net/northking/cctp/upperComputer/webSocket/thread/MessageHandler.java @@ -91,6 +91,8 @@ public interface MessageHandler { public void getNodeTreeOnce(CmdRequest request); + public void touchClick(CmdRequest request); + //掉线相关 public void clearAndCloseDeviceAgentConnection(); //断开原有的设备agent的连接 diff --git a/cctp-production/cctp-mobile/src/main/java/net/northking/cctp/mobile/constants/MobileConnectionConstants.java b/cctp-production/cctp-mobile/src/main/java/net/northking/cctp/mobile/constants/MobileConnectionConstants.java index 1d4eb05..c31612a 100644 --- a/cctp-production/cctp-mobile/src/main/java/net/northking/cctp/mobile/constants/MobileConnectionConstants.java +++ b/cctp-production/cctp-mobile/src/main/java/net/northking/cctp/mobile/constants/MobileConnectionConstants.java @@ -24,6 +24,8 @@ public interface MobileConnectionConstants { String CMD_INPUT_TOUCHMOVE = "input_touchMove"; //触控-抬起 String CMD_INPUT_TOUCHUP = "input_touchUp"; + //录制时点 + String CMD_TOUCH_CLICK = "touch_click"; //录制时点击 //发送热键 String CMD_INPUT_KEYPRESS = "input_keyPress"; //键盘按钮按下 diff --git a/cctp-production/cctp-mobile/src/main/java/net/northking/cctp/mobile/thread/ProcessMsgThread.java b/cctp-production/cctp-mobile/src/main/java/net/northking/cctp/mobile/thread/ProcessMsgThread.java index 55e935a..4ce3ed4 100644 --- a/cctp-production/cctp-mobile/src/main/java/net/northking/cctp/mobile/thread/ProcessMsgThread.java +++ b/cctp-production/cctp-mobile/src/main/java/net/northking/cctp/mobile/thread/ProcessMsgThread.java @@ -125,6 +125,9 @@ public class ProcessMsgThread extends Thread{ case MobileConnectionConstants.CommandConstants.CMD_DEVICE_NODE: handleMessageForward(msgRequest); break; + case MobileConnectionConstants.CommandConstants.CMD_TOUCH_CLICK: + handleMessageForward(msgRequest); + break; case MobileConnectionConstants.CommandConstants.CMD_DEVICE_EXIT: exitMobile(); break;