Update: 2026-07-06 00:44:01
This commit is contained in:
+61
@@ -256,4 +256,65 @@ class FacebookNavigator(private val service: AccessibilityService) {
|
|||||||
findNodesByText(node.getChild(i), text, list)
|
findNodesByText(node.getChild(i), text, list)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
suspend fun createPost(text: String): Boolean {
|
||||||
|
val root = service.rootInActiveWindow ?: return false
|
||||||
|
|
||||||
|
// 1. Find "What's on your mind?" or "Write something..."
|
||||||
|
val inputBoxNodes = mutableListOf<android.view.accessibility.AccessibilityNodeInfo>()
|
||||||
|
findNodesByText(root, "بم تفكر؟", inputBoxNodes)
|
||||||
|
findNodesByText(root, "What's on your mind", inputBoxNodes)
|
||||||
|
findNodesByText(root, "اكتب شيئًا", inputBoxNodes)
|
||||||
|
findNodesByText(root, "Write something", inputBoxNodes)
|
||||||
|
|
||||||
|
if (inputBoxNodes.isEmpty()) {
|
||||||
|
android.util.Log.d("FacebookNavigator", "Create post box not found")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
val inputBox = inputBoxNodes.first()
|
||||||
|
inputBox.performAction(android.view.accessibility.AccessibilityNodeInfo.ACTION_CLICK)
|
||||||
|
kotlinx.coroutines.delay(3000) // Wait for Create Post screen to open
|
||||||
|
|
||||||
|
// 2. Find the EditText field
|
||||||
|
val newRoot = service.rootInActiveWindow ?: return false
|
||||||
|
val editTexts = mutableListOf<android.view.accessibility.AccessibilityNodeInfo>()
|
||||||
|
findEditTexts(newRoot, editTexts)
|
||||||
|
|
||||||
|
if (editTexts.isEmpty()) {
|
||||||
|
android.util.Log.d("FacebookNavigator", "EditText not found in Create Post screen")
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Paste the text
|
||||||
|
val editText = editTexts.first()
|
||||||
|
val arguments = android.os.Bundle()
|
||||||
|
arguments.putCharSequence(android.view.accessibility.AccessibilityNodeInfo.ACTION_ARGUMENT_SET_TEXT_CHARSEQUENCE, text)
|
||||||
|
editText.performAction(android.view.accessibility.AccessibilityNodeInfo.ACTION_SET_TEXT, arguments)
|
||||||
|
kotlinx.coroutines.delay(1000)
|
||||||
|
|
||||||
|
// 3. Click "Post" (نشر)
|
||||||
|
val postRoot = service.rootInActiveWindow ?: return false
|
||||||
|
val postBtns = mutableListOf<android.view.accessibility.AccessibilityNodeInfo>()
|
||||||
|
findNodesByText(postRoot, "نشر", postBtns)
|
||||||
|
findNodesByText(postRoot, "Post", postBtns)
|
||||||
|
|
||||||
|
if (postBtns.isNotEmpty()) {
|
||||||
|
postBtns.first().performAction(android.view.accessibility.AccessibilityNodeInfo.ACTION_CLICK)
|
||||||
|
kotlinx.coroutines.delay(4000) // Wait for upload
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun findEditTexts(node: android.view.accessibility.AccessibilityNodeInfo?, list: MutableList<android.view.accessibility.AccessibilityNodeInfo>) {
|
||||||
|
if (node == null) return
|
||||||
|
if (node.className?.toString()?.contains("EditText") == true) {
|
||||||
|
list.add(node)
|
||||||
|
}
|
||||||
|
for (i in 0 until node.childCount) {
|
||||||
|
findEditTexts(node.getChild(i), list)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user