fix(accessibility, floatwindow): 同步无障碍服务状态并优化悬浮窗控制逻辑
- 新增无障碍服务状态广播,实现服务启停状态与UI页面同步 - 重置悬浮窗暂停状态,避免服务重启后卡在上次暂停状态 - 为悬浮窗菜单添加播放/暂停和停止功能 - 修复ListenActivity中无障碍开关切换的无限循环问题
This commit is contained in:
@@ -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") {
|
||||
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
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user