11package li.songe.gkd
22
33import android.app.Activity
4- import android.app.ActivityManager
5- import android.content.Context
64import android.content.Intent
75import android.os.Bundle
86import androidx.activity.ComponentActivity
@@ -69,12 +67,10 @@ import li.songe.gkd.a11y.updateTopActivity
6967import li.songe.gkd.permission.AuthDialog
7068import li.songe.gkd.permission.updatePermissionState
7169import li.songe.gkd.service.A11yService
72- import li.songe.gkd.service.ButtonService
73- import li.songe.gkd.service.HttpService
74- import li.songe.gkd.service.ScreenshotService
7570import li.songe.gkd.service.StatusService
76- import li.songe.gkd.service.fixRestartService
77- import li.songe.gkd.service.updateTopAppId
71+ import li.songe.gkd.service.fixRestartAutomatorService
72+ import li.songe.gkd.service.updateTopTaskAppId
73+ import li.songe.gkd.shizuku.automationRegisteredExceptionFlow
7874import li.songe.gkd.shizuku.shizukuContextFlow
7975import li.songe.gkd.store.storeFlow
8076import li.songe.gkd.ui.component.BuildDialog
@@ -105,7 +101,6 @@ import li.songe.gkd.util.shizukuAppId
105101import li.songe.gkd.util.throttle
106102import li.songe.gkd.util.toast
107103import kotlin.concurrent.Volatile
108- import kotlin.reflect.KClass
109104import kotlin.reflect.jvm.jvmName
110105
111106class MainActivity : ComponentActivity () {
@@ -197,7 +192,7 @@ class MainActivity : ComponentActivity() {
197192 watchKeyboardVisible()
198193 StatusService .autoStart()
199194 if (storeFlow.value.enableBlockA11yAppList) {
200- updateTopAppId (META .appId)
195+ updateTopTaskAppId (META .appId)
201196 }
202197 setContent {
203198 val latestInsets = TopAppBarDefaults .windowInsets
@@ -219,6 +214,7 @@ class MainActivity : ComponentActivity() {
219214 if (! mainVm.termsAcceptedFlow.collectAsState().value) {
220215 TermsAcceptDialog ()
221216 } else {
217+ UiAutomationAlreadyRegisteredDlg ()
222218 AccessRestrictedSettingsDlg ()
223219 ShizukuErrorDialog (mainVm.shizukuErrorFlow)
224220 AuthDialog (mainVm.authReasonFlow)
@@ -290,7 +286,7 @@ class MainActivity : ComponentActivity() {
290286
291287@Volatile
292288private var activityVisibleState = 0
293- fun isActivityVisible () = activityVisibleState > 0
289+ val isActivityVisible get () = activityVisibleState > 0
294290
295291val activityNavSourceName by lazy { META .appId + " .activity.nav.source" }
296292
@@ -305,25 +301,6 @@ fun Activity.navToMainActivity() {
305301 finish()
306302}
307303
308- @Suppress(" DEPRECATION" )
309- private fun updateServiceRunning () {
310- A11yService .isRunning.value = A11yService .instance != null
311- val list = try {
312- val manager = app.getSystemService(Context .ACTIVITY_SERVICE ) as ActivityManager
313- manager.getRunningServices(Int .MAX_VALUE ) ? : emptyList()
314- } catch (_: Exception ) {
315- emptyList()
316- }
317-
318- fun checkRunning (cls : KClass <* >): Boolean {
319- return list.any { it.service.className == cls.jvmName }
320- }
321- StatusService .isRunning.value = checkRunning(StatusService ::class )
322- ButtonService .isRunning.value = checkRunning(ButtonService ::class )
323- ScreenshotService .isRunning.value = checkRunning(ScreenshotService ::class )
324- HttpService .isRunning.value = checkRunning(HttpService ::class )
325- }
326-
327304private val syncStateMutex = Mutex ()
328305fun syncFixState () {
329306 appScope.launchTry(Dispatchers .IO ) {
@@ -332,10 +309,9 @@ fun syncFixState() {
332309 }
333310 syncStateMutex.withLock {
334311 updateSystemDefaultAppId()
335- updateServiceRunning()
336312 shizukuContextFlow.value.grantSelf()
337313 updatePermissionState()
338- fixRestartService ()
314+ fixRestartAutomatorService ()
339315 }
340316 }
341317}
@@ -455,7 +431,7 @@ fun AccessRestrictedSettingsDlg() {
455431 confirmButton = {
456432 TextButton ({
457433 accessRestrictedSettingsShowFlow.value = false
458- mainVm.navigatePage( AuthA11YPageDestination )
434+ mainVm.navigateWebPage( ShortUrlSet . URL2 )
459435 }) {
460436 Text (text = " 解除" )
461437 }
@@ -470,3 +446,25 @@ fun AccessRestrictedSettingsDlg() {
470446 )
471447 }
472448}
449+
450+ @Composable
451+ fun UiAutomationAlreadyRegisteredDlg () {
452+ if (automationRegisteredExceptionFlow.collectAsState().value != null ) {
453+ AlertDialog (
454+ onDismissRequest = {
455+ automationRegisteredExceptionFlow.value = null
456+ },
457+ title = { Text (text = " 启动失败" ) },
458+ text = {
459+ Text (text = " 自动化服务启动失败,检测到自动化服务已被其他应用占用,请先关闭已有服务后重试\n\n 注:自动化服务只能同时运行一个,请确保没有其他应用或测试框架占用后再启动" )
460+ },
461+ confirmButton = {
462+ TextButton (onClick = {
463+ automationRegisteredExceptionFlow.value = null
464+ }) {
465+ Text (text = " 我知道了" )
466+ }
467+ }
468+ )
469+ }
470+ }
0 commit comments