Update: 2026-07-06 00:44:01

This commit is contained in:
Hamza-Ayed
2026-07-06 00:44:01 +03:00
parent 03a74fa106
commit 0c19486a24
@@ -256,4 +256,65 @@ class FacebookNavigator(private val service: AccessibilityService) {
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)
}
}
}