update log打印减少;响应速度提升;内部群已读数过滤

This commit is contained in:
尹甲仑
2022-06-21 17:19:16 +08:00
parent ac1f8f68f5
commit 5613725ccf
6 changed files with 102 additions and 100 deletions

View File

@@ -8,6 +8,8 @@ object Constant {
const val PACKAGE_NAMES = "com.tencent.wework" const val PACKAGE_NAMES = "com.tencent.wework"
val BASE_URL = WebConfig.HOST.replace("wss", "https").replace("ws", "http") val BASE_URL = WebConfig.HOST.replace("wss", "https").replace("ws", "http")
val URL_CHECK_UPDATE = "$BASE_URL/appUpdate/checkUpdate" val URL_CHECK_UPDATE = "$BASE_URL/appUpdate/checkUpdate"
const val CHANGE_PAGE_INTERVAL = 1000L
const val POP_WINDOW_INTERVAL = 500L
var key = "9876543210abcdef".toByteArray() var key = "9876543210abcdef".toByteArray()
var iv = "0123456789abcdef".toByteArray() var iv = "0123456789abcdef".toByteArray()

View File

@@ -1,6 +1,7 @@
package org.yameida.worktool.service package org.yameida.worktool.service
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import org.yameida.worktool.Constant
import org.yameida.worktool.model.WeworkMessageBean import org.yameida.worktool.model.WeworkMessageBean
import org.yameida.worktool.utils.AccessibilityUtil import org.yameida.worktool.utils.AccessibilityUtil
import org.yameida.worktool.utils.Views import org.yameida.worktool.utils.Views
@@ -47,10 +48,10 @@ object WeworkGetImpl {
if (!goHomeTab("")) { if (!goHomeTab("")) {
LogUtils.d("未找到我的信息") LogUtils.d("未找到我的信息")
goHomeTab("消息") goHomeTab("消息")
val firstTv = AccessibilityUtil.findAllByClazz(getRoot(), Views.TextView, root = true) val firstTv = AccessibilityUtil.findAllByClazz(getRoot(), Views.TextView)
.firstOrNull { it.text == null } .firstOrNull { it.text == null }
AccessibilityUtil.performClick(firstTv) AccessibilityUtil.performClick(firstTv)
sleep(1000) sleep(Constant.CHANGE_PAGE_INTERVAL)
val newFirstTv = AccessibilityUtil.findOneByClazz(getRoot(), Views.TextView) val newFirstTv = AccessibilityUtil.findOneByClazz(getRoot(), Views.TextView)
val nickname = newFirstTv?.text?.toString() val nickname = newFirstTv?.text?.toString()
AccessibilityUtil.performClick(firstTv) AccessibilityUtil.performClick(firstTv)
@@ -67,7 +68,7 @@ object WeworkGetImpl {
} }
} }
AccessibilityUtil.performClick(AccessibilityUtil.findOneByClazz(getRoot(), Views.ImageView)) AccessibilityUtil.performClick(AccessibilityUtil.findOneByClazz(getRoot(), Views.ImageView))
sleep(1000) sleep(Constant.CHANGE_PAGE_INTERVAL)
val relativeLayoutList = AccessibilityUtil.findAllByClazz(getRoot(), Views.RelativeLayout, minSize = 50) val relativeLayoutList = AccessibilityUtil.findAllByClazz(getRoot(), Views.RelativeLayout, minSize = 50)
val myInfo = WeworkMessageBean.MyInfo() val myInfo = WeworkMessageBean.MyInfo()
for (relativeLayout in relativeLayoutList.filter { it.childCount >= 2 }) { for (relativeLayout in relativeLayoutList.filter { it.childCount >= 2 }) {

View File

@@ -4,6 +4,7 @@ import android.os.Message
import android.view.accessibility.AccessibilityNodeInfo import android.view.accessibility.AccessibilityNodeInfo
import androidx.core.text.isDigitsOnly import androidx.core.text.isDigitsOnly
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import org.yameida.worktool.Constant
import org.yameida.worktool.model.WeworkMessageBean import org.yameida.worktool.model.WeworkMessageBean
import org.yameida.worktool.service.WeworkController.mainLoopRunning import org.yameida.worktool.service.WeworkController.mainLoopRunning
import org.yameida.worktool.utils.* import org.yameida.worktool.utils.*
@@ -40,7 +41,7 @@ object WeworkLoopImpl {
mainLoopRunning = true mainLoopRunning = true
try { try {
while (mainLoopRunning) { while (mainLoopRunning) {
if (WeworkRoomUtil.getRoomType(getRoot()) != WeworkMessageBean.ROOM_TYPE_UNKNOWN if (WeworkRoomUtil.getRoomType(getRoot(), false) != WeworkMessageBean.ROOM_TYPE_UNKNOWN
&& getChatMessageList()) { && getChatMessageList()) {
} }
goHomeTab("消息") goHomeTab("消息")
@@ -72,23 +73,23 @@ object WeworkLoopImpl {
AccessibilityUtil.performClick(item) AccessibilityUtil.performClick(item)
val addButton = AccessibilityUtil.findOneByText(getRoot(), "添加客户") val addButton = AccessibilityUtil.findOneByText(getRoot(), "添加客户")
val backNode = AccessibilityUtil.findBackNode(addButton) val backNode = AccessibilityUtil.findBackNode(addButton)
LogUtils.d(backNode?.className)
if (backNode?.className == Views.TextView) { if (backNode?.className == Views.TextView) {
LogUtils.d("有待添加客户") LogUtils.d("有待添加客户")
AccessibilityUtil.performClick(backNode) AccessibilityUtil.performClick(backNode)
sleep(2000)
AccessibilityUtil.findTextAndClick(getRoot(), "新的客户") AccessibilityUtil.findTextAndClick(getRoot(), "新的客户")
sleep(500)
var retry = 5 var retry = 5
while (retry-- > 0) { while (retry-- > 0) {
if (!AccessibilityUtil.findTextAndClick(getRoot(), "查看")) val checkButton = AccessibilityUtil.findOneByText(getRoot(), "查看", timeout = 2000)
if (checkButton == null) {
break break
sleep(2000) } else {
sleep(Constant.CHANGE_PAGE_INTERVAL)
val nameList = passFriendRequest() val nameList = passFriendRequest()
if (nameList.isEmpty()) if (nameList.isEmpty())
break break
//TODO nameList 通过的好友加入演示脚本 //TODO nameList 通过的好友加入演示脚本
} }
}
return true return true
} else { } else {
LogUtils.d("未发现待添加客户") LogUtils.d("未发现待添加客户")
@@ -115,11 +116,11 @@ object WeworkLoopImpl {
} }
if (titleList.size > 0) { if (titleList.size > 0) {
val title = titleList.joinToString() val title = titleList.joinToString()
LogUtils.i("聊天: $title") LogUtils.v("聊天: $title")
log("聊天: $title") log("聊天: $title")
val list = AccessibilityUtil.findOneByClazz(getRoot(), Views.ListView) val list = AccessibilityUtil.findOneByClazz(getRoot(), Views.ListView)
if (list != null) { if (list != null) {
LogUtils.d("消息条数: " + list.childCount) LogUtils.v("消息条数: " + list.childCount)
val messageList = arrayListOf<WeworkMessageBean.SubMessageBean>() val messageList = arrayListOf<WeworkMessageBean.SubMessageBean>()
for (i in 0 until list.childCount) { for (i in 0 until list.childCount) {
val item = list.getChild(i) val item = list.getChild(i)
@@ -162,11 +163,8 @@ object WeworkLoopImpl {
val tvNick = filter[0] val tvNick = filter[0]
LogUtils.d("好友请求: " + tvNick.text) LogUtils.d("好友请求: " + tvNick.text)
AccessibilityUtil.findTextAndClick(getRoot(), "通过验证") AccessibilityUtil.findTextAndClick(getRoot(), "通过验证")
sleep(1000)
AccessibilityUtil.findTextAndClick(getRoot(), "完成") AccessibilityUtil.findTextAndClick(getRoot(), "完成")
sleep(5000)
if (AccessibilityUtil.findTextAndClick(getRoot(), "确定")) { if (AccessibilityUtil.findTextAndClick(getRoot(), "确定")) {
sleep(500)
LogUtils.d("添加好友失败") LogUtils.d("添加好友失败")
} else { } else {
val weworkMessageBean = WeworkMessageBean() val weworkMessageBean = WeworkMessageBean()
@@ -192,6 +190,7 @@ object WeworkLoopImpl {
* 读取聊天列表 * 读取聊天列表
*/ */
private fun getChatroomList(): Boolean { private fun getChatroomList(): Boolean {
if (!isAtHome()) return true
if (logIndex % 3 == 0) { if (logIndex % 3 == 0) {
AccessibilityUtil.performScrollUp(getRoot(), 0) AccessibilityUtil.performScrollUp(getRoot(), 0)
AccessibilityUtil.performScrollUp(getRoot(), 0) AccessibilityUtil.performScrollUp(getRoot(), 0)
@@ -199,6 +198,7 @@ object WeworkLoopImpl {
} else if (logIndex % 120 < 3) { } else if (logIndex % 120 < 3) {
AccessibilityUtil.performScrollDown(getRoot(), 0) AccessibilityUtil.performScrollDown(getRoot(), 0)
} }
if (!isAtHome()) return true
if (logIndex++ % 15 == 0) { if (logIndex++ % 15 == 0) {
LogUtils.i("读取首页聊天列表") LogUtils.i("读取首页聊天列表")
log("读取首页聊天列表") log("读取首页聊天列表")
@@ -267,7 +267,7 @@ object WeworkLoopImpl {
val message: WeworkMessageBean.SubMessageBean val message: WeworkMessageBean.SubMessageBean
val nameList = arrayListOf<String>() val nameList = arrayListOf<String>()
val itemMessageList = arrayListOf<WeworkMessageBean.ItemMessageBean>() val itemMessageList = arrayListOf<WeworkMessageBean.ItemMessageBean>()
LogUtils.d("开始解析一条消息...") LogUtils.v("开始解析一条消息...")
//消息头(在消息主体上方 如时间信息) //消息头(在消息主体上方 如时间信息)
val linearLayoutItem = AccessibilityUtil.findOnceByClazz(node, Views.LinearLayout, 1) val linearLayoutItem = AccessibilityUtil.findOnceByClazz(node, Views.LinearLayout, 1)
if (linearLayoutItem != null) { if (linearLayoutItem != null) {
@@ -279,7 +279,7 @@ object WeworkLoopImpl {
sb.append(text).append("\t") sb.append(text).append("\t")
itemMessageList.add(itemMessage) itemMessageList.add(itemMessage)
} }
LogUtils.d(sb.toString()) LogUtils.v(sb.toString())
} }
//消息主体 //消息主体
val relativeLayoutItem = AccessibilityUtil.findOnceByClazz(node, Views.RelativeLayout, 1) val relativeLayoutItem = AccessibilityUtil.findOnceByClazz(node, Views.RelativeLayout, 1)
@@ -297,7 +297,7 @@ object WeworkLoopImpl {
AccessibilityUtil.findAllOnceByClazz(relativeLayoutContent, Views.TextView) AccessibilityUtil.findAllOnceByClazz(relativeLayoutContent, Views.TextView)
for (item in tvList.filter { it.text != null && !it.text.isNullOrBlank() }) { for (item in tvList.filter { it.text != null && !it.text.isNullOrBlank() }) {
val text = item.text.toString() val text = item.text.toString()
LogUtils.d(text) LogUtils.v(text)
if (text !in stopWords) { if (text !in stopWords) {
val itemMessage = WeworkMessageBean.ItemMessageBean(2, text) val itemMessage = WeworkMessageBean.ItemMessageBean(2, text)
itemMessageList.add(itemMessage) itemMessageList.add(itemMessage)
@@ -307,22 +307,28 @@ object WeworkLoopImpl {
message = WeworkMessageBean.SubMessageBean(0, textType, itemMessageList, nameList) message = WeworkMessageBean.SubMessageBean(0, textType, itemMessageList, nameList)
} else if (Views.ImageView.equals(relativeLayoutItem.getChild(1).className)) { } else if (Views.ImageView.equals(relativeLayoutItem.getChild(1).className)) {
LogUtils.v("头像在右边 本条消息发送者为自己") LogUtils.v("头像在右边 本条消息发送者为自己")
val tvList = AccessibilityUtil.findAllOnceByClazz(relativeLayoutItem, Views.TextView) val subLayout = relativeLayoutItem.getChild(0)
if (subLayout.childCount > 0) {
val tvList = AccessibilityUtil.findAllOnceByClazz(
subLayout.getChild(subLayout.childCount - 1),
Views.TextView
)
for (item in tvList.filter { it.text != null && !it.text.isNullOrBlank() }) { for (item in tvList.filter { it.text != null && !it.text.isNullOrBlank() }) {
val text = item.text.toString() val text = item.text.toString()
LogUtils.d(text) LogUtils.v(text)
if (text !in stopWords) { if (text !in stopWords) {
val itemMessage = WeworkMessageBean.ItemMessageBean(2, text) val itemMessage = WeworkMessageBean.ItemMessageBean(2, text)
itemMessageList.add(itemMessage) itemMessageList.add(itemMessage)
} }
} }
}
message = WeworkMessageBean.SubMessageBean(1, 0, itemMessageList, nameList) message = WeworkMessageBean.SubMessageBean(1, 0, itemMessageList, nameList)
} else { } else {
// 没有头像的消息(撤销消息、其他可能的系统消息) // 没有头像的消息(撤销消息、其他可能的系统消息)
val tvList = AccessibilityUtil.findAllOnceByClazz(node, Views.TextView) val tvList = AccessibilityUtil.findAllOnceByClazz(node, Views.TextView)
for (item in tvList.filter { it.text != null && !it.text.isNullOrBlank() }) { for (item in tvList.filter { it.text != null && !it.text.isNullOrBlank() }) {
val text = item.text.toString() val text = item.text.toString()
LogUtils.d(text) LogUtils.v(text)
val itemMessage = WeworkMessageBean.ItemMessageBean(1, text) val itemMessage = WeworkMessageBean.ItemMessageBean(1, text)
itemMessageList.add(itemMessage) itemMessageList.add(itemMessage)
} }
@@ -341,7 +347,7 @@ object WeworkLoopImpl {
itemMessageList.add(itemMessage) itemMessageList.add(itemMessage)
} }
} }
LogUtils.d(sb.toString()) LogUtils.v(sb.toString())
message = WeworkMessageBean.SubMessageBean(2, 0, itemMessageList, nameList) message = WeworkMessageBean.SubMessageBean(2, 0, itemMessageList, nameList)
} }
return message return message

View File

@@ -2,6 +2,7 @@ package org.yameida.worktool.service
import android.view.accessibility.AccessibilityNodeInfo import android.view.accessibility.AccessibilityNodeInfo
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import org.yameida.worktool.Constant
import org.yameida.worktool.model.WeworkMessageBean import org.yameida.worktool.model.WeworkMessageBean
import org.yameida.worktool.utils.AccessibilityUtil import org.yameida.worktool.utils.AccessibilityUtil
import org.yameida.worktool.utils.Views import org.yameida.worktool.utils.Views
@@ -58,7 +59,7 @@ object WeworkOperationImpl {
"回复" "回复"
) )
) { ) {
LogUtils.d("开始回复") LogUtils.v("开始回复")
sendChatMessage(receivedContent, "[自动回复]") sendChatMessage(receivedContent, "[自动回复]")
LogUtils.d("$title: 回复成功") LogUtils.d("$title: 回复成功")
WeworkLoopImpl.getChatMessageList() WeworkLoopImpl.getChatMessageList()
@@ -203,11 +204,11 @@ object WeworkOperationImpl {
val node = AccessibilityUtil.scrollAndFindByText(getRoot(), "微盘") val node = AccessibilityUtil.scrollAndFindByText(getRoot(), "微盘")
if (node != null) { if (node != null) {
AccessibilityUtil.performClick(node) AccessibilityUtil.performClick(node)
val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button, root = true) val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button)
if (buttonList.size >= 4) { if (buttonList.size >= 4) {
AccessibilityUtil.performClick(buttonList[2]) AccessibilityUtil.performClick(buttonList[2])
AccessibilityUtil.findTextInput(getRoot(), objectName) AccessibilityUtil.findTextInput(getRoot(), objectName)
val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView, root = true) val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView)
if (imageViewList.size >= 2) { if (imageViewList.size >= 2) {
AccessibilityUtil.performClick(imageViewList[1]) AccessibilityUtil.performClick(imageViewList[1])
val shareFileButton = AccessibilityUtil.findOneByDesc(getRoot(), "以原文件分享") val shareFileButton = AccessibilityUtil.findOneByDesc(getRoot(), "以原文件分享")
@@ -245,11 +246,11 @@ object WeworkOperationImpl {
val node = AccessibilityUtil.scrollAndFindByText(getRoot(), "微盘") val node = AccessibilityUtil.scrollAndFindByText(getRoot(), "微盘")
if (node != null) { if (node != null) {
AccessibilityUtil.performClick(node) AccessibilityUtil.performClick(node)
val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button, root = true) val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button)
if (buttonList.size >= 4) { if (buttonList.size >= 4) {
AccessibilityUtil.performClick(buttonList[2]) AccessibilityUtil.performClick(buttonList[2])
AccessibilityUtil.findTextInput(getRoot(), objectName) AccessibilityUtil.findTextInput(getRoot(), objectName)
val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView, root = true) val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView)
if (imageViewList.size >= 2) { if (imageViewList.size >= 2) {
AccessibilityUtil.performClick(imageViewList[1]) AccessibilityUtil.performClick(imageViewList[1])
val shareFileButton = AccessibilityUtil.findOneByDesc(getRoot(), "转发") val shareFileButton = AccessibilityUtil.findOneByDesc(getRoot(), "转发")
@@ -283,7 +284,7 @@ object WeworkOperationImpl {
val node = AccessibilityUtil.scrollAndFindByText(getRoot(), "用过的小程序") val node = AccessibilityUtil.scrollAndFindByText(getRoot(), "用过的小程序")
if (node != null) { if (node != null) {
AccessibilityUtil.performClick(node) AccessibilityUtil.performClick(node)
val textViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.TextView, root = true) val textViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.TextView)
if (textViewList.size > 3) { if (textViewList.size > 3) {
AccessibilityUtil.performClick(textViewList[2]) AccessibilityUtil.performClick(textViewList[2])
AccessibilityUtil.findTextInput(getRoot(), objectName) AccessibilityUtil.findTextInput(getRoot(), objectName)
@@ -325,11 +326,11 @@ object WeworkOperationImpl {
return false return false
} }
AccessibilityUtil.performClick(myFileButton) AccessibilityUtil.performClick(myFileButton)
val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button, root = true) val buttonList = AccessibilityUtil.findAllByClazz(getRoot(), Views.Button)
if (buttonList.size >= 4) { if (buttonList.size >= 4) {
AccessibilityUtil.performClick(buttonList[3]) AccessibilityUtil.performClick(buttonList[3])
AccessibilityUtil.findTextInput(getRoot(), objectName) AccessibilityUtil.findTextInput(getRoot(), objectName)
val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView, root = true) val imageViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ImageView)
if (imageViewList.size >= 2) { if (imageViewList.size >= 2) {
AccessibilityUtil.performClick(imageViewList[1]) AccessibilityUtil.performClick(imageViewList[1])
val shareFileButton = AccessibilityUtil.findOneByDesc(getRoot(), "转发") val shareFileButton = AccessibilityUtil.findOneByDesc(getRoot(), "转发")
@@ -362,26 +363,21 @@ object WeworkOperationImpl {
val searchButton: AccessibilityNodeInfo = textViewList[textViewList.size - 2] val searchButton: AccessibilityNodeInfo = textViewList[textViewList.size - 2]
val multiButton: AccessibilityNodeInfo = textViewList[textViewList.size - 1] val multiButton: AccessibilityNodeInfo = textViewList[textViewList.size - 1]
AccessibilityUtil.performClick(multiButton) AccessibilityUtil.performClick(multiButton)
sleep(500) sleep(Constant.POP_WINDOW_INTERVAL)
val listViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ListView, root = true) val listViewList = AccessibilityUtil.findAllByClazz(getRoot(), Views.ListView)
if (!listViewList.isNullOrEmpty()) { if (!listViewList.isNullOrEmpty()) {
if (AccessibilityUtil.findTextAndClick(listViewList.last(), "添加客户")) { if (AccessibilityUtil.findTextAndClick(listViewList.last(), "添加客户")) {
AccessibilityUtil.findTextAndClick(getRoot(), "搜索手机号添加") AccessibilityUtil.findTextAndClick(getRoot(), "搜索手机号添加")
AccessibilityUtil.findTextInput(getRoot(), friend.phone.trim()) AccessibilityUtil.findTextInput(getRoot(), friend.phone.trim())
if (AccessibilityUtil.findTextAndClick(getRoot(), "网络查找手机")) { if (AccessibilityUtil.findTextAndClick(getRoot(), "网络查找手机")) {
val bothUsedTv = AccessibilityUtil.findOneByText(getRoot(), "对方同时使用") val bothUsedTv = AccessibilityUtil.findOneByText(getRoot(), "对方同时使用", timeout = 2000)
if (bothUsedTv != null) { if (bothUsedTv != null) {
if (AccessibilityUtil.performClick( AccessibilityUtil.performClick(
AccessibilityUtil.findOnceByClazz( AccessibilityUtil.findOnceByClazz(
AccessibilityUtil.findBackNode(bothUsedTv), AccessibilityUtil.findBackNode(bothUsedTv),
Views.ImageView Views.ImageView
) )
) )
) {
sleep(2000)
} else {
LogUtils.e("未找到可点击图标")
}
} }
} else { } else {
LogUtils.e("未找到查找手机选项") LogUtils.e("未找到查找手机选项")
@@ -400,7 +396,7 @@ object WeworkOperationImpl {
) { ) {
AccessibilityUtil.performClick(markTv) AccessibilityUtil.performClick(markTv)
val etList = val etList =
AccessibilityUtil.findAllByClazz(getRoot(), Views.EditText, root = true, minSize = 5) AccessibilityUtil.findAllByClazz(getRoot(), Views.EditText, minSize = 5)
if (etList.size >= 5) { if (etList.size >= 5) {
if (friend.markName != null) { if (friend.markName != null) {
AccessibilityUtil.editTextInput(etList[0], friend.markName) AccessibilityUtil.editTextInput(etList[0], friend.markName)
@@ -413,14 +409,11 @@ object WeworkOperationImpl {
} }
} }
AccessibilityUtil.findTextAndClick(getRoot(), "保存") AccessibilityUtil.findTextAndClick(getRoot(), "保存")
sleep(2000)
} }
//设置标签 //设置标签
if (!friend.tagList.isNullOrEmpty()) { if (!friend.tagList.isNullOrEmpty()) {
if (AccessibilityUtil.findTextAndClick(getRoot(), "标签")) { if (AccessibilityUtil.findTextAndClick(getRoot(), "标签")) {
sleep(1000)
setFriendTags(friend.tagList) setFriendTags(friend.tagList)
sleep(1000)
} }
} }
//添加联系人 //添加联系人
@@ -440,7 +433,6 @@ object WeworkOperationImpl {
} }
if (AccessibilityUtil.findTextAndClick(getRoot(), "添加为联系人")) { if (AccessibilityUtil.findTextAndClick(getRoot(), "添加为联系人")) {
LogUtils.d("添加好友成功: " + friend.phone) LogUtils.d("添加好友成功: " + friend.phone)
sleep(2000)
if (AccessibilityUtil.findTextAndClick(getRoot(), "发送添加邀请")) { if (AccessibilityUtil.findTextAndClick(getRoot(), "发送添加邀请")) {
LogUtils.d("发送添加邀请成功: " + friend.phone) LogUtils.d("发送添加邀请成功: " + friend.phone)
} }
@@ -787,12 +779,9 @@ object WeworkOperationImpl {
private fun setFriendTags(tagList: List<String>): Boolean { private fun setFriendTags(tagList: List<String>): Boolean {
val tagList = if (tagList.size > 5) tagList.subList(0, 5) else tagList val tagList = if (tagList.size > 5) tagList.subList(0, 5) else tagList
val tvTag = AccessibilityUtil.findAllByText(getRoot(), "个人标签").lastOrNull() val tvTag = AccessibilityUtil.findAllByText(getRoot(), "个人标签").lastOrNull()
if (tvTag != null) { val oldTagList = arrayListOf<String>()
val list = AccessibilityUtil.findBackNode(tvTag) val list = AccessibilityUtil.findBackNode(tvTag)
if (list != null && list.childCount > 0) { if (list != null && list.childCount > 0) {
LogUtils.v("list.childCount: " + list.childCount)
val tvAdd = list.getChild(0)
val oldTagList = arrayListOf<String>()
for (i in 0 until list.childCount) { for (i in 0 until list.childCount) {
val child = list.getChild(i) val child = list.getChild(i)
if (child.className.equals(Views.TextView) && child.text != null) { if (child.className.equals(Views.TextView) && child.text != null) {
@@ -802,11 +791,15 @@ object WeworkOperationImpl {
//不存在的标签先添加 //不存在的标签先添加
for (tag in tagList) { for (tag in tagList) {
if (!oldTagList.contains(tag)) { if (!oldTagList.contains(tag)) {
AccessibilityUtil.performClick(tvAdd) AccessibilityUtil.findOneByText(getRoot(), "个人标签")
sleep(500) sleep(Constant.POP_WINDOW_INTERVAL)
val tempList = AccessibilityUtil.findBackNode(
AccessibilityUtil.findAllByText(getRoot(), "个人标签").lastOrNull())
if (tempList != null && tempList.childCount > 0) {
AccessibilityUtil.performClick(tempList.getChild(0))
AccessibilityUtil.findTextInput(getRoot(), tag) AccessibilityUtil.findTextInput(getRoot(), tag)
AccessibilityUtil.findTextAndClick(getRoot(), "确定") AccessibilityUtil.findTextAndClick(getRoot(), "确定")
sleep(1000) }
} }
} }
//确认只选择列表里的标签 //确认只选择列表里的标签
@@ -833,7 +826,6 @@ object WeworkOperationImpl {
return true return true
} }
} }
}
LogUtils.e("未找到个人标签") LogUtils.e("未找到个人标签")
return false return false
} }

View File

@@ -5,6 +5,7 @@ import org.yameida.worktool.utils.AccessibilityUtil.findOneByClazz
import org.yameida.worktool.utils.AccessibilityUtil.findFrontNode import org.yameida.worktool.utils.AccessibilityUtil.findFrontNode
import org.yameida.worktool.model.WeworkMessageBean import org.yameida.worktool.model.WeworkMessageBean
import com.blankj.utilcode.util.LogUtils import com.blankj.utilcode.util.LogUtils
import org.yameida.worktool.Constant
import org.yameida.worktool.service.backPress import org.yameida.worktool.service.backPress
import org.yameida.worktool.service.getRoot import org.yameida.worktool.service.getRoot
import org.yameida.worktool.service.goHome import org.yameida.worktool.service.goHome
@@ -20,7 +21,7 @@ object WeworkRoomUtil {
* 房间类型 ROOM_TYPE * 房间类型 ROOM_TYPE
* @see WeworkMessageBean.ROOM_TYPE * @see WeworkMessageBean.ROOM_TYPE
*/ */
fun getRoomType(root: AccessibilityNodeInfo): Int { fun getRoomType(root: AccessibilityNodeInfo, print: Boolean = true): Int {
when { when {
isExternalSingleChat(root) -> { isExternalSingleChat(root) -> {
LogUtils.d("ROOM_TYPE: ROOM_TYPE_EXTERNAL_CONTACT") LogUtils.d("ROOM_TYPE: ROOM_TYPE_EXTERNAL_CONTACT")
@@ -40,7 +41,7 @@ object WeworkRoomUtil {
return WeworkMessageBean.ROOM_TYPE_INTERNAL_CONTACT return WeworkMessageBean.ROOM_TYPE_INTERNAL_CONTACT
} }
else -> { else -> {
LogUtils.d("ROOM_TYPE: ROOM_TYPE_UNKNOWN") if (print) LogUtils.d("ROOM_TYPE: ROOM_TYPE_UNKNOWN")
return WeworkMessageBean.ROOM_TYPE_UNKNOWN return WeworkMessageBean.ROOM_TYPE_UNKNOWN
} }
} }
@@ -66,7 +67,7 @@ object WeworkRoomUtil {
} }
} }
} }
LogUtils.d("getRoomTitle: ", titleList) LogUtils.v("getRoomTitle: ", titleList)
return titleList return titleList
} }
@@ -96,11 +97,11 @@ object WeworkRoomUtil {
val multiButton: AccessibilityNodeInfo = textViewList[textViewList.size - 1] val multiButton: AccessibilityNodeInfo = textViewList[textViewList.size - 1]
AccessibilityUtil.performClick(searchButton) AccessibilityUtil.performClick(searchButton)
AccessibilityUtil.findTextInput(getRoot(), title.replace("", "")) AccessibilityUtil.findTextInput(getRoot(), title.replace("", ""))
sleep(1000) sleep(Constant.CHANGE_PAGE_INTERVAL)
val selectListView = findOneByClazz(getRoot(), Views.ListView) val selectListView = findOneByClazz(getRoot(), Views.ListView)
val imageView = AccessibilityUtil.findOnceByClazz(selectListView, Views.ImageView) val imageView = AccessibilityUtil.findOnceByClazz(selectListView, Views.ImageView)
AccessibilityUtil.performClick(imageView) AccessibilityUtil.performClick(imageView)
sleep(1000) sleep(Constant.CHANGE_PAGE_INTERVAL)
return true return true
} else { } else {
LogUtils.e("未找到搜索按钮") LogUtils.e("未找到搜索按钮")
@@ -192,7 +193,7 @@ object WeworkRoomUtil {
val buttonList = findAllOnceByClazz(textViewList.last().parent.parent, Views.TextView) val buttonList = findAllOnceByClazz(textViewList.last().parent.parent, Views.TextView)
return buttonList.size == 2 return buttonList.size == 2
} else { } else {
LogUtils.d("未找到群管理按钮") LogUtils.v("未找到群管理按钮")
} }
} else { } else {
LogUtils.d("未找到消息列表") LogUtils.d("未找到消息列表")

View File

@@ -309,7 +309,7 @@ object WeworkTextUtil {
private fun longClickMessageItem(item: AccessibilityNodeInfo, key: String): Boolean { private fun longClickMessageItem(item: AccessibilityNodeInfo, key: String): Boolean {
val backNode = getMessageListNode(item) val backNode = getMessageListNode(item)
AccessibilityUtil.performLongClickWithSon(backNode) AccessibilityUtil.performLongClickWithSon(backNode)
val optionRvList = findAllByClazz(getRoot(), Views.RecyclerView, root = true) val optionRvList = findAllByClazz(getRoot(), Views.RecyclerView)
for (optionRv in optionRvList) { for (optionRv in optionRvList) {
val optionTvList = findAllOnceByClazz(optionRv, Views.TextView) val optionTvList = findAllOnceByClazz(optionRv, Views.TextView)
for (optionTv in optionTvList) { for (optionTv in optionTvList) {