diff --git a/app/src/main/java/org/yameida/worktool/service/WeworkController.kt b/app/src/main/java/org/yameida/worktool/service/WeworkController.kt index 3e1e4ed..cf49961 100644 --- a/app/src/main/java/org/yameida/worktool/service/WeworkController.kt +++ b/app/src/main/java/org/yameida/worktool/service/WeworkController.kt @@ -76,7 +76,7 @@ object WeworkController { */ @RequestMapping fun replyMessage(message: WeworkMessageBean): Boolean { - LogUtils.d("replyMessage(): ${message.receivedName} ${message.originalContent} ${message.receivedContent}") + LogUtils.d("replyMessage(): ${message.receivedName} ${message.originalContent} ${message.textType} ${message.receivedContent}") return WeworkOperationImpl.replyMessage( message, message.titleList, diff --git a/app/src/main/java/org/yameida/worktool/utils/AccessibilityUtil.kt b/app/src/main/java/org/yameida/worktool/utils/AccessibilityUtil.kt index 7d03eef..3ae6657 100644 --- a/app/src/main/java/org/yameida/worktool/utils/AccessibilityUtil.kt +++ b/app/src/main/java/org/yameida/worktool/utils/AccessibilityUtil.kt @@ -387,6 +387,7 @@ object AccessibilityUtil { while (nodeInfo != null) { if (nodeInfo.isLongClickable) { nodeInfo.performAction(AccessibilityNodeInfo.ACTION_LONG_CLICK) + LogUtils.d("performLongClickWithSon: text: ${nodeInfo.text} desc: ${nodeInfo.contentDescription}") return true } if (nodeInfo.childCount > 0) { @@ -1133,6 +1134,37 @@ object AccessibilityUtil { }, null) } + /** + * Gesture手势实现点击(Android7+) + * 解决 longClickable=false 无法点击问题 + */ + fun longClickByNode( + service: AccessibilityService, + nodeInfo: AccessibilityNodeInfo? + ): Boolean { + if (nodeInfo == null) return false + nodeInfo.refresh() + val rect = Rect() + nodeInfo.getBoundsInScreen(rect) + val x: Int = (rect.left + rect.right) / 2 + val y: Int = (rect.top + rect.bottom) / 2 + val point = Point(x, y) + val builder = GestureDescription.Builder() + val path = Path() + path.moveTo(point.x.toFloat(), point.y.toFloat()) + builder.addStroke(StrokeDescription(path, 0L, 500L)) + val gesture = builder.build() + return service.dispatchGesture(gesture, object : GestureResultCallback() { + override fun onCompleted(gestureDescription: GestureDescription) { + LogUtils.v("longClick ok onCompleted") + } + + override fun onCancelled(gestureDescription: GestureDescription) { + LogUtils.v("longClick ok onCancelled") + } + }, null) + } + /** * 向下滚动 * Gesture手势实现滚动(Android7+) diff --git a/app/src/main/java/org/yameida/worktool/utils/WeworkTextUtil.kt b/app/src/main/java/org/yameida/worktool/utils/WeworkTextUtil.kt index 4dde884..0a0fd2c 100644 --- a/app/src/main/java/org/yameida/worktool/utils/WeworkTextUtil.kt +++ b/app/src/main/java/org/yameida/worktool/utils/WeworkTextUtil.kt @@ -190,6 +190,9 @@ object WeworkTextUtil { 视频 2tv 2iv (视频大小、视频时长、缩略图、播放按钮) 链接 3tv 1iv (标题、副标题、下方来源、图标) 文件 3tv 1iv (文件名、文件大小、下方来源、图标) (需要和链接区分) +链接 2tv 1iv (文件名、副标题、图标) (微信*用户发的链接不带下方来源 需要和接龙和链接区分) +链接 1tv 1iv (文件名、图标) (微信*用户发的链接不带副标题和下方来源) +文件 2tv 1iv (文件名、文件大小、图标) (微信*用户发的文件不带下方来源 需要和接龙和链接区分) 小程序 3tv 2iv (标题、副标题、下方来源、小程序icon、图标) 合并聊天记录 2tv 0iv (标题、摘要) 收集表 6tv 0iv (标题、副标题、行1、行2、行3、下方来源) @@ -209,8 +212,10 @@ object WeworkTextUtil { val tvList = findAllOnceByClazz(node, Views.TextView) val tvCount = tvList.size val ivCount = findAllOnceByClazz(node, Views.ImageView).size + LogUtils.v("tvCount: $tvCount ivCount: $ivCount") return when { tvCount == 1 && ivCount == 0 -> WeworkMessageBean.TEXT_TYPE_PLAIN + tvCount == 1 && ivCount == 1 -> WeworkMessageBean.TEXT_TYPE_LINK tvCount == 0 && ivCount == 1 -> WeworkMessageBean.TEXT_TYPE_IMAGE tvCount == 2 && ivCount == 2 -> { val parent = tvList[0].parent @@ -227,11 +232,18 @@ object WeworkTextUtil { WeworkMessageBean.TEXT_TYPE_LINK } } - tvCount == 3 && ivCount == 1 -> WeworkMessageBean.TEXT_TYPE_FILE tvCount == 3 && ivCount == 2 -> WeworkMessageBean.TEXT_TYPE_MICROPROGRAM tvCount == 2 && ivCount == 0 -> WeworkMessageBean.TEXT_TYPE_CHAT_RECORD tvCount == 6 && ivCount == 0 -> WeworkMessageBean.TEXT_TYPE_COLLECTION - tvCount == 2 && ivCount == 1 -> WeworkMessageBean.TEXT_TYPE_SOLITAIRE + tvCount == 2 && ivCount == 1 -> { + if (isSolitaire(tvList[1].text?.toString())) { + WeworkMessageBean.TEXT_TYPE_SOLITAIRE + } else if (isFileSize(tvList[1].text?.toString())) { + WeworkMessageBean.TEXT_TYPE_FILE + } else { + WeworkMessageBean.TEXT_TYPE_LINK + } + } tvCount == 4 && ivCount == 2 -> WeworkMessageBean.TEXT_TYPE_VOICE tvCount == 5 && ivCount == 1 -> WeworkMessageBean.TEXT_TYPE_CARD tvCount == 1 && ivCount == 2 -> WeworkMessageBean.TEXT_TYPE_LOCATION @@ -254,6 +266,13 @@ object WeworkTextUtil { return size?.matches("[0-9\\.]+[BKMG]".toRegex()) ?: false } + /** + * 是否为接龙 + */ + fun isSolitaire(text: String?): Boolean { + return text?.contains("参与接龙") ?: false + } + /** * 群聊 提取发言人昵称 * 适用于左侧发言者