| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package com.example.modifier.service
- import android.accessibilityservice.AccessibilityService
- import android.graphics.Rect
- import android.view.accessibility.AccessibilityNodeInfo
- import com.example.modifier.TraverseResult
- 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.shellRun
- import kotlinx.coroutines.delay
- class ScreenController(val context: AccessibilityService, private val inspector: ScreenInspector) {
- suspend fun toggleRcsSwitch(state: Boolean, retry: Int = 3): Boolean {
- val res = TraverseResult()
- shellRun(CMD_RCS_SETTINGS_ACTIVITY, "sleep 2")
- val success = run repeatBlock@{
- repeat(retry) {
- res.rcsSwitch = null
- inspector.traverseNode(res)
- if (res.rcsSwitch == null) {
- shellRun(CMD_BACK, "sleep 0.5", CMD_RCS_SETTINGS_ACTIVITY, "sleep 1")
- } else {
- if (res.rcsSwitch!!.isChecked == state) {
- return@repeatBlock true
- }
- val rect = Rect()
- res.rcsSwitch!!.getBoundsInScreen(rect)
- if (state) {
- shellRun(
- "input tap ${rect.centerX()} ${rect.centerY()}", "sleep 1",
- )
- val btn =
- context.rootInActiveWindow.findAccessibilityNodeInfosByViewId("android:id/button1")
- .firstOrNull()
- if (btn != null) {
- btn.performAction(AccessibilityNodeInfo.ACTION_CLICK)
- delay(1000)
- }
- while (currentActivity()?.contains("RcsSettingsActivity") == true ||
- currentActivity()?.contains("TurnOffRcsActivity") == true
- ) {
- shellRun(CMD_BACK)
- delay(500)
- }
- shellRun(CMD_RCS_SETTINGS_ACTIVITY, "sleep 1")
- } else {
- shellRun(
- "input tap ${rect.centerX()} ${rect.centerY()}", "sleep 1",
- )
- if (currentActivity()?.contains("TurnOffRcsActivity") == true) {
- inspector.traverseNode(res)
- if (res.closeBtn != null) {
- val rect1 = Rect()
- res.closeBtn!!.getBoundsInScreen(rect1)
- shellRun(
- "input tap ${rect1.centerX()} ${rect1.centerY()}", "sleep 1",
- )
- }
- } else {
- context.rootInActiveWindow.findAccessibilityNodeInfosByViewId("android:id/button1")
- .firstOrNull()?.performAction(AccessibilityNodeInfo.ACTION_CLICK)
- }
- delay(1000)
- while (currentActivity()?.contains("RcsSettingsActivity") == true ||
- currentActivity()?.contains("TurnOffRcsActivity") == true
- ) {
- shellRun(CMD_BACK)
- delay(500)
- }
- shellRun(CMD_RCS_SETTINGS_ACTIVITY, "sleep 1")
- }
- res.rcsSwitch = null
- inspector.traverseNode(res)
- if (res.rcsSwitch?.isChecked == state) {
- return@repeatBlock true
- }
- }
- }
- false
- }
- while (currentActivity()?.contains("RcsSettingsActivity") == true) {
- shellRun(CMD_BACK)
- delay(500)
- }
- return success
- }
- }
|