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 91f1668..26b9b40 100644 --- a/app/src/main/java/org/yameida/worktool/activity/ListenActivity.kt +++ b/app/src/main/java/org/yameida/worktool/activity/ListenActivity.kt @@ -28,6 +28,7 @@ import kotlin.random.Random class ListenActivity : AppCompatActivity() { var riskRetry: Int = 0 + private var updatingAccessibilitySwitch = false companion object { /** @@ -66,7 +67,7 @@ class ListenActivity : AppCompatActivity() { override fun onResume() { super.onResume() sw_overlay.isChecked = Settings.canDrawOverlays(Utils.getApp()) && FlowPermissionHelper.canBackgroundStart(Utils.getApp()) - sw_accessibility.isChecked = PermissionHelper.isAccessibilitySettingOn() + refreshAccessibilitySwitch() if (needToWork) { needToWork = false goToWork() @@ -128,6 +129,9 @@ class ListenActivity : AppCompatActivity() { private fun initAccessibility() { sw_accessibility.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked -> + if (updatingAccessibilitySwitch) { + return@OnCheckedChangeListener + } LogUtils.i("sw_accessibility onCheckedChanged: $isChecked") if (isChecked) { if (Constant.robotId.isBlank()) { @@ -322,10 +326,21 @@ class ListenActivity : AppCompatActivity() { private val openWsReceiver = object : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { - if (intent.getStringExtra("type") == "openWs") { - needToWork = intent.getBooleanExtra("switch", false) + when (intent.getStringExtra("type")) { + "openWs" -> { + needToWork = intent.getBooleanExtra("switch", false) + } + "accessibility_state" -> { + refreshAccessibilitySwitch(intent.getBooleanExtra("enabled", PermissionHelper.isAccessibilitySettingOn())) + } } } } + private fun refreshAccessibilitySwitch(checked: Boolean = PermissionHelper.isAccessibilitySettingOn()) { + updatingAccessibilitySwitch = true + sw_accessibility.isChecked = checked + updatingAccessibilitySwitch = false + } + } diff --git a/app/src/main/java/org/yameida/worktool/service/WeworkService.kt b/app/src/main/java/org/yameida/worktool/service/WeworkService.kt index 7a8f942..d79e489 100644 --- a/app/src/main/java/org/yameida/worktool/service/WeworkService.kt +++ b/app/src/main/java/org/yameida/worktool/service/WeworkService.kt @@ -37,8 +37,11 @@ class WeworkService : AccessibilityService() { LogUtils.i("初始化成功") //隐藏软键盘模式 softKeyboardController.showMode = SHOW_MODE_HIDDEN + // 服务重启后恢复主功能默认运行态,避免被上一次暂停状态卡住 + FloatWindowHelper.isPause = false WeworkController.weworkService = this WeworkController.enableLoopRunning = true + notifyAccessibilityState(true) //初始化长连接 initWebSocket() //初始化消息处理器 @@ -115,11 +118,21 @@ class WeworkService : AccessibilityService() { LogUtils.i("onDestroy") //关闭自动回复 WeworkController.enableLoopRunning = false + // 关闭主功能时清理暂停态,确保下次开启可立即进入检测 + FloatWindowHelper.isPause = false + notifyAccessibilityState(false) //隐藏软键盘模式 softKeyboardController.showMode = SHOW_MODE_AUTO webSocketManager.close(1000, "service Destroy") } + private fun notifyAccessibilityState(enabled: Boolean) { + sendBroadcast(Intent(Constant.WEWORK_NOTIFY).apply { + putExtra("type", "accessibility_state") + putExtra("enabled", enabled) + }) + } + inner class EchoWebSocketListener : WebSocketListener() { private val TAG = "WeworkService.EchoWebSocketListener" override fun onOpen(webSocket: WebSocket, response: Response) { diff --git a/app/src/main/java/org/yameida/worktool/utils/FloatWindowHelper.kt b/app/src/main/java/org/yameida/worktool/utils/FloatWindowHelper.kt index d35f138..3279614 100644 --- a/app/src/main/java/org/yameida/worktool/utils/FloatWindowHelper.kt +++ b/app/src/main/java/org/yameida/worktool/utils/FloatWindowHelper.kt @@ -144,6 +144,28 @@ object FloatWindowHelper { ToastUtils.showShort("请先打开Awin WorkTool主功能~") } } + 5 -> { + if (PermissionHelper.isAccessibilitySettingOn()) { + if (isPause) { + Glide.with(Utils.getApp()).load(R.drawable.float_icon_pause).into(v as ImageView) + accessibilityServiceResume() + } else { + Glide.with(Utils.getApp()).load(R.drawable.float_icon_play).into(v as ImageView) + accessibilityServicePause() + } + } else { + ToastUtils.showShort("请先打开Awin WorkTool主功能~") + } + } + 6 -> { + if (PermissionHelper.isAccessibilitySettingOn()) { + // 停止主功能时复位暂停状态,避免下次开启后主循环被卡住 + isPause = false + WeworkController.weworkService.disableSelf() + } else { + ToastUtils.showShort("主功能已关闭~") + } + } 3 -> { Utils.getApp().packageManager.getLaunchIntentForPackage(Constant.PACKAGE_NAMES)?.apply { this.flags = Intent.FLAG_ACTIVITY_NEW_TASK