From 51795c90788493d9056d7d8b2ca342f6e6a42612 Mon Sep 17 00:00:00 2001 From: gallonyin Date: Tue, 14 Mar 2023 14:29:10 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E5=85=BC=E5=AE=B9=E6=96=B0=E7=89=88?= =?UTF-8?q?=E6=9C=AC;=E6=A3=80=E6=9F=A5=E6=9C=80=E8=BF=91=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E5=8F=AF=E4=B8=AD=E6=96=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yameida/worktool/service/WeworkGetImpl.kt | 2 +- .../worktool/service/WeworkLoopImpl.kt | 70 +++++++++++++++---- 2 files changed, 56 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/yameida/worktool/service/WeworkGetImpl.kt b/app/src/main/java/org/yameida/worktool/service/WeworkGetImpl.kt index d3880f5..38d03b8 100644 --- a/app/src/main/java/org/yameida/worktool/service/WeworkGetImpl.kt +++ b/app/src/main/java/org/yameida/worktool/service/WeworkGetImpl.kt @@ -369,7 +369,7 @@ object WeworkGetImpl { //tvList title/time/content if (tvList.size == 3) { //只查看最近一周内的消息 - if (tvList[1].isNotBlank() && !tvList[1].contains("(刚刚)|(分钟前)|(上午)|(下午)|(昨天)|(星期)|(日程)|(会议)".toRegex())) { + if (tvList[1].isNotBlank() && !tvList[1].contains("(刚刚)|(分钟前)|(上午)|(下午)|(昨天)|(星期)|(日程)|(会议)|(:)".toRegex())) { return true } } diff --git a/app/src/main/java/org/yameida/worktool/service/WeworkLoopImpl.kt b/app/src/main/java/org/yameida/worktool/service/WeworkLoopImpl.kt index a37ad9a..0bafd58 100644 --- a/app/src/main/java/org/yameida/worktool/service/WeworkLoopImpl.kt +++ b/app/src/main/java/org/yameida/worktool/service/WeworkLoopImpl.kt @@ -436,19 +436,23 @@ object WeworkLoopImpl { //让企微切换页面使APP保持活跃 goHomeTab("通讯录") goHomeTab("消息") - //滚动到顶端查看是否有无提示消息 - AccessibilityUtil.scrollToTop(WeworkController.weworkService, getRoot()) - //如果有新消息则停止 - val list = AccessibilityUtil.findAllOnceByText(getRoot(), "消息", exact = true) - for (item in list) { - val childCount = item.parent?.parent?.parent?.childCount - if (childCount == 4 || childCount == 5) { - if (item.parent != null && item.parent.childCount > 1) { - return false - } - } + LogUtils.d("检查最近列表") + log("检查最近列表") + if (hasNewMessage()) { + return false } - if (!mainLoopRunning) { + var stop = false + //滚动到顶端查看是否有无提示消息 + AccessibilityUtil.scrollToTop(WeworkController.weworkService, getRoot(), listener = object : AccessibilityUtil.OnScrollListener() { + override fun onScroll(): Boolean { + if (hasNewMessage()) { + stop = true + return true + } + return false + } + }) + if (stop) { return false } val listview = AccessibilityUtil.findOneByClazz(getRoot(), Views.RecyclerView, Views.ListView, Views.ViewGroup) @@ -456,7 +460,7 @@ object WeworkLoopImpl { if (checkNoTipMessage(listview) != 1) { AccessibilityUtil.scrollToBottom(WeworkController.weworkService, getRoot(), listener = object : AccessibilityUtil.OnScrollListener() { override fun onScroll(): Boolean { - if (!mainLoopRunning) { + if (hasNewMessage()) { return true } if (checkNoTipMessage(listview) != 0) { @@ -522,7 +526,7 @@ object WeworkLoopImpl { //tvList title/time/content if (tvList.size == 3) { //只查看最近一周内的消息 - if (tvList[1].isBlank() || tvList[1].contains("(刚刚)|(分钟前)|(上午)|(下午)|(昨天)|(星期)|(日程)|(会议)".toRegex())) { + if (tvList[1].isBlank() || tvList[1].contains("(刚刚)|(分钟前)|(上午)|(下午)|(昨天)|(星期)|(日程)|(会议)|(:)".toRegex())) { if (tvList[2].contains("(移出了群聊)|(邀请你加入了)|(修改群名为)|(此群为外部群)|(加入了外部群)".toRegex())) { val interval = System.currentTimeMillis() / 1000 - SPUtils.getInstance("noTipMessage").getLong(tvList[0], 0) if (interval > 3600) { @@ -540,6 +544,7 @@ object WeworkLoopImpl { } } } else { + LogUtils.v("未发现无提示消息: ${tvList[1]}") return -1 } } @@ -562,7 +567,7 @@ object WeworkLoopImpl { if (tvList.size == 3) { //只查看最近一周内的消息 val title = tvList[0] - if (tvList[1].isBlank() || tvList[1].contains("(刚刚)|(分钟前)|(上午)|(下午)|(昨天)|(星期)|(日程)|(会议)".toRegex())) { + if (tvList[1].isBlank() || tvList[1].contains("(刚刚)|(分钟前)|(上午)|(下午)|(昨天)|(星期)|(日程)|(会议)|(:)".toRegex())) { val lastSyncMessage = SPUtils.getInstance("lastSyncMessage").getString(title, null) ?: continue if (tvList[2].contains(lastSyncMessage.replace("\n", " "))) { @@ -582,6 +587,7 @@ object WeworkLoopImpl { LogUtils.v("消息多次不一致: $tvList") } } else { + LogUtils.v("未发现不一致消息: ${tvList[1]}") return -1 } } @@ -813,4 +819,38 @@ object WeworkLoopImpl { return message } + /** + * 有新消息时停止 or 不在消息页时停止 or 停止读循环时停止 + * @return true 停止 false 继续 + */ + private fun hasNewMessage(): Boolean { + //如果有新消息则停止 + val list = AccessibilityUtil.findAllOnceByText(getRoot(), "消息", exact = true) + var isSelect = false + for (item in list) { + val childCount = item.parent?.parent?.parent?.childCount + if (childCount == 4 || childCount == 5) { + if (item.parent != null && item.parent.childCount > 1) { + LogUtils.d("有新消息时停止") + return true + } + if (!item.isSelected) { + LogUtils.d("不在消息页时停止") + return true + } else { + isSelect = true + } + if (!mainLoopRunning) { + LogUtils.d("停止读循环时停止") + return true + } + } + } + if (!isSelect) { + LogUtils.d("不在消息页时停止") + return true + } + return false + } + } \ No newline at end of file