xiongzhu 10 months ago
parent
commit
265aaca0e4

+ 5 - 0
app/src/main/java/com/example/modifier/service/ModifierService.kt

@@ -427,6 +427,11 @@ class ModifierService : AccessibilityService() {
                             appStateRepo.resetRequestedNum()
                         }
                     }
+
+                    R.id.group_details -> {
+                        delay(1500)
+                        screenController.groupDetails()
+                    }
                 }
             }
             true

+ 37 - 0
app/src/main/java/com/example/modifier/service/ScreenController.kt

@@ -15,6 +15,9 @@ import com.example.modifier.constants.CMD_BACK
 import com.example.modifier.constants.CMD_RCS_SETTINGS_ACTIVITY
 import com.example.modifier.utils.currentActivity
 import com.example.modifier.utils.findAllScrollable
+import com.example.modifier.utils.findById
+import com.example.modifier.utils.findByText
+import com.example.modifier.utils.findFirstByDesc
 import com.example.modifier.utils.findFirstByIdAndText
 import com.example.modifier.utils.shellRun
 import kotlinx.coroutines.Dispatchers
@@ -214,4 +217,38 @@ class ScreenController(val context: AccessibilityService, private val inspector:
         Log.i(TAG, "found $appName")
         node.parent.performAction(AccessibilityNodeInfo.ACTION_CLICK)
     }
+
+    suspend fun groupDetails(): Boolean {
+        val more = context.rootInActiveWindow.findFirstByDesc("More")
+        if (more == null) {
+            Log.e(TAG, "not found More")
+            return false
+        }
+        more.parent.performAction(AccessibilityNodeInfo.ACTION_CLICK)
+        delay(500)
+        val groupDetails = context.rootInActiveWindow.findByText("Group details")
+        if (groupDetails == null) {
+            inspector.traverseNode(TraverseResult(), true)
+            Log.e(TAG, "not found Group details")
+            return false
+        }
+        groupDetails.performAction(AccessibilityNodeInfo.ACTION_CLICK)
+        groupDetails.parent.performAction(AccessibilityNodeInfo.ACTION_CLICK)
+        delay(500)
+        val leave = context.rootInActiveWindow.findById("Leave group")
+        if (leave == null) {
+            Log.e(TAG, "not found Leave group")
+            return false
+        }
+        leave.performAction(AccessibilityNodeInfo.ACTION_CLICK)
+        delay(500)
+        val ok = context.rootInActiveWindow.findByText("OK")
+        if (ok == null) {
+            Log.e(TAG, "not found OK")
+            return false
+        }
+        Log.i(TAG, "groupDetails: click OK")
+        ok.parent.performAction(AccessibilityNodeInfo.ACTION_CLICK)
+        return true
+    }
 }

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

@@ -36,7 +36,7 @@ class ScreenInspector(val context: AccessibilityService) {
         if (log) {
             Log.d(
                 TAG,
-                "Node: class=$className, text=$text, desc=$desc, name=$name, id=$id, checkable=${node.isCheckable}, checked=${node.isChecked}"
+                "Node: class=$className, text=$text, desc=$desc, name=$name, id=$id, checkable=${node.isCheckable}, checked=${node.isChecked}, clickable=${node.isClickable}"
             )
         }
 

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

@@ -578,7 +578,7 @@ class TaskRunner(
                         }
                     }
 
-                    needRest = needRest || appStateRepo.appState.value.requestedNum >= 5
+                    needRest = needRest || appStateRepo.appState.value.requestedNum >= 3
                             || spoofedInfoRepo.spoofedInfo.value.available
                     needRest = needRest && !appPrefsRepo.appPrefs.value.preventReset
                     if (needRest) {

+ 28 - 0
app/src/main/java/com/example/modifier/utils/AccessibilityNodeInfo.kt

@@ -79,4 +79,32 @@ fun AccessibilityNodeInfo.findFirstCheckable(): AccessibilityNodeInfo? {
         }
     }
     return null
+}
+
+fun AccessibilityNodeInfo.findByText(text: String): AccessibilityNodeInfo? {
+    if (this.text?.toString()?.lowercase()?.contains(text.lowercase()) == true) {
+        return this
+    }
+    for (i in 0 until this.childCount) {
+        val child = this.getChild(i)
+        val result = child.findByText(text)
+        if (result != null) {
+            return result
+        }
+    }
+    return null
+}
+
+fun AccessibilityNodeInfo.findById(id: String): AccessibilityNodeInfo? {
+    if (this.viewIdResourceName?.toString()?.lowercase()?.contains(id.lowercase()) == true) {
+        return this
+    }
+    for (i in 0 until this.childCount) {
+        val child = this.getChild(i)
+        val result = child.findById(id)
+        if (result != null) {
+            return result
+        }
+    }
+    return null
 }

+ 3 - 0
app/src/main/res/menu/more.xml

@@ -34,4 +34,7 @@
     <item
         android:id="@+id/reset_counter"
         android:title="计数清零" />
+    <item
+        android:id="@+id/group_details"
+        android:title="group_details" />
 </menu>