xiongzhu 10 hónapja
szülő
commit
aa01b7354a

+ 3 - 1
app/src/main/java/com/example/modifier/service/ScreenController.kt

@@ -17,7 +17,9 @@ import com.example.modifier.utils.currentActivity
 import com.example.modifier.utils.findAllScrollable
 import com.example.modifier.utils.findFirstByIdAndText
 import com.example.modifier.utils.shellRun
+import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.delay
+import kotlinx.coroutines.withContext
 import kotlinx.coroutines.withTimeoutOrNull
 
 class ScreenController(val context: AccessibilityService, private val inspector: ScreenInspector) {
@@ -35,7 +37,7 @@ class ScreenController(val context: AccessibilityService, private val inspector:
                 res.rcsSwitch = null
                 inspector.traverseNode(res)
                 if (res.rcsSwitch == null) {
-                    shellRun(CMD_BACK, "sleep 0.5", CMD_RCS_SETTINGS_ACTIVITY, "sleep 1")
+                    shellRun(CMD_BACK, "sleep 0.5", CMD_RCS_SETTINGS_ACTIVITY, "sleep 2")
                 } else {
                     if (res.rcsSwitch!!.isChecked == state) {
                         return@repeatBlock true

+ 16 - 0
app/src/main/java/com/example/modifier/service/ScreenInspector.kt

@@ -6,6 +6,8 @@ import android.view.accessibility.AccessibilityNodeInfo
 import com.example.modifier.TraverseResult
 import com.example.modifier.baseTag
 import com.example.modifier.enums.RcsConnectionStatus
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.runBlocking
 import java.util.Optional
 
 class ScreenInspector(val context: AccessibilityService) {
@@ -127,6 +129,20 @@ class ScreenInspector(val context: AccessibilityService) {
     }
 
     fun traverseNode(result: TraverseResult, log: Boolean = false) {
+        runBlocking a@{
+            repeat(10) {
+                if (context.rootInActiveWindow == null) {
+                    Log.i(TAG, "traverseNode: rootInActiveWindow is null")
+                    delay(1000)
+                } else {
+                    return@a
+                }
+            }
+        }
+        if (context.rootInActiveWindow == null) {
+            Log.e(TAG, "traverseNode: rootInActiveWindow is still null")
+            return
+        }
         traverse(context.rootInActiveWindow, result, log)
     }
 }

+ 1 - 1
app/src/main/java/com/example/modifier/utils/System.kt

@@ -261,7 +261,7 @@ suspend fun killPhoneProcess(force: Boolean = false): Boolean {
 
 suspend fun currentActivity(): String? {
     val out = shellRun("dumpsys activity activities | grep topResumedActivity").first
-    val activity = Regex("topResumedActivity=ActivityRecord\\{.*/\\.(\\S*)\\}")
+    val activity = Regex("topResumedActivity=ActivityRecord\\{.*/\\.(.*)\\}")
         .find(out)?.groups?.get(1)?.value
     return activity
 }

+ 2 - 2
app/src/main/res/xml/accessibility_service_config.xml

@@ -2,8 +2,8 @@
 <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
     android:accessibilityEventTypes="typeWindowStateChanged|typeWindowContentChanged|typeWindowsChanged"
     android:accessibilityFeedbackType="feedbackSpoken"
-    android:accessibilityFlags="flagDefault|flagReportViewIds|flagIncludeNotImportantViews|flagRequestFingerprintGestures|flagRequestTouchExplorationMode"
+    android:accessibilityFlags="flagDefault|flagRetrieveInteractiveWindows|flagReportViewIds|flagIncludeNotImportantViews|flagRequestFingerprintGestures|flagRequestTouchExplorationMode"
     android:canPerformGestures="true"
     android:canRetrieveWindowContent="true"
     android:description="@string/accessibility_service_description"
-    android:notificationTimeout="100" />
+    android:notificationTimeout="0" />