From cd807632d145bd05b23bf8ac960693f02eb6967d Mon Sep 17 00:00:00 2001 From: gallonyin Date: Fri, 26 May 2023 22:34:15 +0800 Subject: [PATCH] =?UTF-8?q?update=20=E6=89=AB=E4=B8=80=E6=89=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../worktool/activity/ListenActivity.kt | 4 +- .../worktool/model/WeworkMessageBean.java | 3 + .../org/yameida/worktool/service/MyLooper.kt | 3 + .../worktool/service/WeworkController.kt | 16 ++++ .../worktool/service/WeworkOperationImpl.kt | 82 ++++++++++++++++++- .../org/yameida/worktool/utils/PropUtil.kt | 41 ++++++++++ 6 files changed, 146 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/org/yameida/worktool/utils/PropUtil.kt diff --git a/app/src/main/java/org/yameida/worktool/activity/ListenActivity.kt b/app/src/main/java/org/yameida/worktool/activity/ListenActivity.kt index bfca95c..c25e9cc 100644 --- a/app/src/main/java/org/yameida/worktool/activity/ListenActivity.kt +++ b/app/src/main/java/org/yameida/worktool/activity/ListenActivity.kt @@ -1,6 +1,5 @@ package org.yameida.worktool.activity -import android.Manifest import android.os.Bundle import android.provider.Settings import android.view.WindowManager @@ -13,6 +12,7 @@ import org.yameida.worktool.* import android.content.* import android.os.IBinder import android.text.InputType +import com.blankj.utilcode.constant.PermissionConstants import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.qmuiteam.qmui.widget.dialog.QMUIDialog import org.yameida.worktool.service.PlayNotifyService @@ -51,7 +51,7 @@ class ListenActivity : AppCompatActivity() { initOverlays() initData() initNotification() - PermissionUtils.permission(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE).request() + PermissionUtils.permission(PermissionConstants.STORAGE).request() registerReceiver(openWsReceiver, IntentFilter(Constant.WEWORK_NOTIFY)) } diff --git a/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java b/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java index 8a5c34b..7eea5d2 100644 --- a/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java +++ b/app/src/main/java/org/yameida/worktool/model/WeworkMessageBean.java @@ -93,6 +93,9 @@ public class WeworkMessageBean { public static final int RELAY_MERGE_MESSAGE = 228; public static final int SEND_MULTI_MESSAGE = 229; public static final int SEND_MERGE_MESSAGE = 230; + public static final int VOICE_CALL = 231; + public static final int VIDEO_CALL = 232; + public static final int SCAN_QR_CODE = 233; public static final int ROBOT_LOG = 301; public static final int ROBOT_ERROR_LOG = 302; diff --git a/app/src/main/java/org/yameida/worktool/service/MyLooper.kt b/app/src/main/java/org/yameida/worktool/service/MyLooper.kt index 1c43ad7..a75a16f 100644 --- a/app/src/main/java/org/yameida/worktool/service/MyLooper.kt +++ b/app/src/main/java/org/yameida/worktool/service/MyLooper.kt @@ -189,6 +189,9 @@ object MyLooper { WeworkMessageBean.SEND_MERGE_MESSAGE -> { WeworkController.sendMergeMessage(message) } + WeworkMessageBean.SCAN_QR_CODE -> { + WeworkController.scanQrCode(message) + } WeworkMessageBean.DISMISS_GROUP -> { WeworkController.dismissGroup(message) } 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 732671c..48d6fbe 100644 --- a/app/src/main/java/org/yameida/worktool/service/WeworkController.kt +++ b/app/src/main/java/org/yameida/worktool/service/WeworkController.kt @@ -513,6 +513,22 @@ object WeworkController { ) } + /** + * 扫一扫 + * @see WeworkMessageBean.SCAN_QR_CODE + * @param message#fileUrl 图片地址 + * @param message#fileBase64 文件Base64 + */ + @RequestMapping + fun scanQrCode(message: WeworkMessageBean): Boolean { + LogUtils.d("scanQrCode(): ${message.fileUrl} ${message.fileBase64?.substring(0, 100)}") + return WeworkOperationImpl.scanQrCode( + message, + message.fileUrl, + message.fileBase64 + ) + } + /** * 获取群信息 * @see WeworkMessageBean.GET_GROUP_INFO diff --git a/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt b/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt index edc750b..a276c8c 100644 --- a/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt +++ b/app/src/main/java/org/yameida/worktool/service/WeworkOperationImpl.kt @@ -1,5 +1,6 @@ package org.yameida.worktool.service +import android.graphics.Bitmap import android.view.accessibility.AccessibilityNodeInfo import org.yameida.worktool.Constant import org.yameida.worktool.model.WeworkMessageBean @@ -1644,6 +1645,85 @@ object WeworkOperationImpl { } } + /** + * 扫一扫 + * @see WeworkMessageBean.SCAN_QR_CODE + * @param fileUrl 图片地址 + * @param fileBase64 文件Base64 + */ + fun scanQrCode(message: WeworkMessageBean, fileUrl: String?, fileBase64: String?): Boolean { + val startTime = System.currentTimeMillis() + goHome() + var filePath = "" + if (fileUrl != null) { + LogUtils.i("下载开始 $fileUrl") + val execute = OkGo.get(fileUrl).execute() + LogUtils.i("下载完成 $fileUrl") + val body = execute.body() + if (body != null) { + val df = SimpleDateFormat("yyyy-MM-dd-HH:mm:ss") + filePath = "${Utils.getApp().getExternalFilesDir("scan")}/${df.format(Date())}_scan.jpg" + ImageUtils.save(ImageUtils.getBitmap(body.byteStream()), filePath, Bitmap.CompressFormat.JPEG, 100, true) + PropUtil.setProp(PropUtil.propVideo, filePath) + LogUtils.i("文件存储本地成功 $filePath") + } else { + LogUtils.e("文件下载失败") + uploadCommandResult(message, ExecCallbackBean.ERROR_FILE_DOWNLOAD, "文件下载失败 $fileUrl", startTime) + return false + } + } else { + //todo base64 + } + val list = AccessibilityUtil.findOneByClazz(getRoot(), Views.RecyclerView, Views.ListView, Views.ViewGroup) + if (list != null) { + val frontNode = AccessibilityUtil.findFrontNode(list) + val textViewList = AccessibilityUtil.findAllOnceByClazz(frontNode, Views.TextView) + if (textViewList.size >= 2) { + val searchButton: AccessibilityNodeInfo = textViewList[textViewList.size - 2] + val multiButton: AccessibilityNodeInfo = textViewList[textViewList.size - 1] + AccessibilityUtil.performClick(multiButton) + sleep(Constant.POP_WINDOW_INTERVAL) + val list = AccessibilityUtil.findAllByClazz(getRoot(), Views.ListView).lastOrNull() + if (list != null) { + if (AccessibilityUtil.findTextAndClick(list, "扫一扫", exact = true)) { + AccessibilityExtraUtil.loadingPage("LoginScannerActivity") + if (AccessibilityExtraUtil.loadingPage("LoginPcActivity")) { + if (AccessibilityUtil.findTextAndClick(getRoot(), "登录", exact = true)) { + LogUtils.i("点击登录") + uploadCommandResult(message, ExecCallbackBean.SUCCESS, "点击登录", startTime) + return true + } else { + LogUtils.e("未找到登录按钮") + uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到登录按钮", startTime) + return false + } + } else { + LogUtils.e("未找到确认登录页") + uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到确认登录页", startTime) + return false + } + } else { + LogUtils.e("未找到扫一扫按钮") + uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到扫一扫按钮", startTime) + return false + } + } else { + LogUtils.e("未找到扫一扫列表") + uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到扫一扫列表", startTime) + return false + } + } else { + LogUtils.e("未找到搜索按钮") + uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到搜索按钮", startTime) + return false + } + } else { + LogUtils.e("未找到聊天列表") + uploadCommandResult(message, ExecCallbackBean.ERROR_BUTTON, "未找到聊天列表", startTime) + return false + } + } + /** * 展示群信息 * @see WeworkMessageBean.SHOW_GROUP_INFO @@ -2500,7 +2580,7 @@ object WeworkOperationImpl { /** * 获取群二维码并上传后台 */ - fun getGroupQrcode(groupName: String, groupRemark: String?): Boolean { + private fun getGroupQrcode(groupName: String, groupRemark: String?): Boolean { if (!Constant.groupQrCode) return true if (AccessibilityUtil.findOneByText(getRoot(), "全部群成员", "微信用户创建", timeout = Constant.CHANGE_PAGE_INTERVAL) != null || (WeworkRoomUtil.intoRoom(groupName) && WeworkRoomUtil.intoGroupManager())) { diff --git a/app/src/main/java/org/yameida/worktool/utils/PropUtil.kt b/app/src/main/java/org/yameida/worktool/utils/PropUtil.kt new file mode 100644 index 0000000..1564e34 --- /dev/null +++ b/app/src/main/java/org/yameida/worktool/utils/PropUtil.kt @@ -0,0 +1,41 @@ +package org.yameida.worktool.utils + +import com.blankj.utilcode.util.LogUtils +import com.blankj.utilcode.util.ShellUtils +import java.io.BufferedReader +import java.io.IOException +import java.io.InputStreamReader + +/** + * 系统属性工具类 + */ +object PropUtil { + + const val propVideo = "persist.lg.sourc_video" + + fun getProp(propName: String = propVideo) { + try { + val process = Runtime.getRuntime().exec("getprop $propName") + val ir = InputStreamReader(process.inputStream) + val input = BufferedReader(ir) + var str: String? = null + while (input.readLine().also { str = it } != null) { + LogUtils.i("$propName: $str") + } + } catch (e: IOException) { + e.printStackTrace() + } + } + + fun setProp(propName: String = propVideo, propValue: String = "/storage/emulated/0/Download/1.mp4") { + try { + ShellUtils.execCmd("setprop $propName $propValue", true, false) + } catch (e: IOException) { + e.printStackTrace() + } catch (e: InterruptedException) { + e.printStackTrace() + } + getProp(propName) + } + +} \ No newline at end of file