fix(accessibility, floatwindow): 同步无障碍服务状态并优化悬浮窗控制逻辑
- 新增无障碍服务状态广播,实现服务启停状态与UI页面同步 - 重置悬浮窗暂停状态,避免服务重启后卡在上次暂停状态 - 为悬浮窗菜单添加播放/暂停和停止功能 - 修复ListenActivity中无障碍开关切换的无限循环问题
This commit is contained in:
@@ -28,6 +28,7 @@ import kotlin.random.Random
|
|||||||
class ListenActivity : AppCompatActivity() {
|
class ListenActivity : AppCompatActivity() {
|
||||||
|
|
||||||
var riskRetry: Int = 0
|
var riskRetry: Int = 0
|
||||||
|
private var updatingAccessibilitySwitch = false
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
/**
|
/**
|
||||||
@@ -66,7 +67,7 @@ class ListenActivity : AppCompatActivity() {
|
|||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
sw_overlay.isChecked = Settings.canDrawOverlays(Utils.getApp()) && FlowPermissionHelper.canBackgroundStart(Utils.getApp())
|
sw_overlay.isChecked = Settings.canDrawOverlays(Utils.getApp()) && FlowPermissionHelper.canBackgroundStart(Utils.getApp())
|
||||||
sw_accessibility.isChecked = PermissionHelper.isAccessibilitySettingOn()
|
refreshAccessibilitySwitch()
|
||||||
if (needToWork) {
|
if (needToWork) {
|
||||||
needToWork = false
|
needToWork = false
|
||||||
goToWork()
|
goToWork()
|
||||||
@@ -128,6 +129,9 @@ class ListenActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
private fun initAccessibility() {
|
private fun initAccessibility() {
|
||||||
sw_accessibility.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked ->
|
sw_accessibility.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked ->
|
||||||
|
if (updatingAccessibilitySwitch) {
|
||||||
|
return@OnCheckedChangeListener
|
||||||
|
}
|
||||||
LogUtils.i("sw_accessibility onCheckedChanged: $isChecked")
|
LogUtils.i("sw_accessibility onCheckedChanged: $isChecked")
|
||||||
if (isChecked) {
|
if (isChecked) {
|
||||||
if (Constant.robotId.isBlank()) {
|
if (Constant.robotId.isBlank()) {
|
||||||
@@ -322,10 +326,21 @@ class ListenActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
private val openWsReceiver = object : BroadcastReceiver() {
|
private val openWsReceiver = object : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context, intent: Intent) {
|
override fun onReceive(context: Context, intent: Intent) {
|
||||||
if (intent.getStringExtra("type") == "openWs") {
|
when (intent.getStringExtra("type")) {
|
||||||
|
"openWs" -> {
|
||||||
needToWork = intent.getBooleanExtra("switch", false)
|
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("初始化成功")
|
LogUtils.i("初始化成功")
|
||||||
//隐藏软键盘模式
|
//隐藏软键盘模式
|
||||||
softKeyboardController.showMode = SHOW_MODE_HIDDEN
|
softKeyboardController.showMode = SHOW_MODE_HIDDEN
|
||||||
|
// 服务重启后恢复主功能默认运行态,避免被上一次暂停状态卡住
|
||||||
|
FloatWindowHelper.isPause = false
|
||||||
WeworkController.weworkService = this
|
WeworkController.weworkService = this
|
||||||
WeworkController.enableLoopRunning = true
|
WeworkController.enableLoopRunning = true
|
||||||
|
notifyAccessibilityState(true)
|
||||||
//初始化长连接
|
//初始化长连接
|
||||||
initWebSocket()
|
initWebSocket()
|
||||||
//初始化消息处理器
|
//初始化消息处理器
|
||||||
@@ -115,11 +118,21 @@ class WeworkService : AccessibilityService() {
|
|||||||
LogUtils.i("onDestroy")
|
LogUtils.i("onDestroy")
|
||||||
//关闭自动回复
|
//关闭自动回复
|
||||||
WeworkController.enableLoopRunning = false
|
WeworkController.enableLoopRunning = false
|
||||||
|
// 关闭主功能时清理暂停态,确保下次开启可立即进入检测
|
||||||
|
FloatWindowHelper.isPause = false
|
||||||
|
notifyAccessibilityState(false)
|
||||||
//隐藏软键盘模式
|
//隐藏软键盘模式
|
||||||
softKeyboardController.showMode = SHOW_MODE_AUTO
|
softKeyboardController.showMode = SHOW_MODE_AUTO
|
||||||
webSocketManager.close(1000, "service Destroy")
|
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() {
|
inner class EchoWebSocketListener : WebSocketListener() {
|
||||||
private val TAG = "WeworkService.EchoWebSocketListener"
|
private val TAG = "WeworkService.EchoWebSocketListener"
|
||||||
override fun onOpen(webSocket: WebSocket, response: Response) {
|
override fun onOpen(webSocket: WebSocket, response: Response) {
|
||||||
|
|||||||
@@ -144,6 +144,28 @@ object FloatWindowHelper {
|
|||||||
ToastUtils.showShort("请先打开Awin WorkTool主功能~")
|
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 -> {
|
3 -> {
|
||||||
Utils.getApp().packageManager.getLaunchIntentForPackage(Constant.PACKAGE_NAMES)?.apply {
|
Utils.getApp().packageManager.getLaunchIntentForPackage(Constant.PACKAGE_NAMES)?.apply {
|
||||||
this.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
this.flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
|
|||||||
Reference in New Issue
Block a user