From 0c19486a24a0d61ea0caeebfa1819fb48a1ac9b5 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Mon, 6 Jul 2026 00:44:01 +0300 Subject: [PATCH] Update: 2026-07-06 00:44:01 --- .../social/facebook/FacebookNavigator.kt | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/socialBot/app/src/main/java/com/siro/socialmedia_bot/social/facebook/FacebookNavigator.kt b/socialBot/app/src/main/java/com/siro/socialmedia_bot/social/facebook/FacebookNavigator.kt index 72927286..1d8ee664 100644 --- a/socialBot/app/src/main/java/com/siro/socialmedia_bot/social/facebook/FacebookNavigator.kt +++ b/socialBot/app/src/main/java/com/siro/socialmedia_bot/social/facebook/FacebookNavigator.kt @@ -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() + 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() + 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() + 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) { + 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) + } + } }