diff --git a/android_bot/.gradle/8.13/executionHistory/executionHistory.bin b/android_bot/.gradle/8.13/executionHistory/executionHistory.bin index efa50a1f..a91e8dbe 100644 Binary files a/android_bot/.gradle/8.13/executionHistory/executionHistory.bin and b/android_bot/.gradle/8.13/executionHistory/executionHistory.bin differ diff --git a/android_bot/.gradle/8.13/executionHistory/executionHistory.lock b/android_bot/.gradle/8.13/executionHistory/executionHistory.lock index 7250058c..2a675dd8 100644 Binary files a/android_bot/.gradle/8.13/executionHistory/executionHistory.lock and b/android_bot/.gradle/8.13/executionHistory/executionHistory.lock differ diff --git a/android_bot/.gradle/8.13/fileHashes/fileHashes.bin b/android_bot/.gradle/8.13/fileHashes/fileHashes.bin index 72850b98..bd198982 100644 Binary files a/android_bot/.gradle/8.13/fileHashes/fileHashes.bin and b/android_bot/.gradle/8.13/fileHashes/fileHashes.bin differ diff --git a/android_bot/.gradle/8.13/fileHashes/fileHashes.lock b/android_bot/.gradle/8.13/fileHashes/fileHashes.lock index e1bbf82d..7c18cc16 100644 Binary files a/android_bot/.gradle/8.13/fileHashes/fileHashes.lock and b/android_bot/.gradle/8.13/fileHashes/fileHashes.lock differ diff --git a/android_bot/.gradle/8.13/fileHashes/resourceHashesCache.bin b/android_bot/.gradle/8.13/fileHashes/resourceHashesCache.bin index edff224e..3ee7fcd4 100644 Binary files a/android_bot/.gradle/8.13/fileHashes/resourceHashesCache.bin and b/android_bot/.gradle/8.13/fileHashes/resourceHashesCache.bin differ diff --git a/android_bot/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/android_bot/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 88f2fe72..6b52f9cc 100644 Binary files a/android_bot/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/android_bot/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/android_bot/app/src/main/java/com/siro/android_bot/service/ScraperAccessibilityService.kt b/android_bot/app/src/main/java/com/siro/android_bot/service/ScraperAccessibilityService.kt index dc737ae1..3f4ad6c9 100644 --- a/android_bot/app/src/main/java/com/siro/android_bot/service/ScraperAccessibilityService.kt +++ b/android_bot/app/src/main/java/com/siro/android_bot/service/ScraperAccessibilityService.kt @@ -19,8 +19,7 @@ enum class BotState { SEARCHING_START, SEARCHING_END, READING_PRICE, - SUBMITTING, - BETWEEN_TRIPS + SUBMITTING } class ScraperAccessibilityService : AccessibilityService() { @@ -65,7 +64,7 @@ class ScraperAccessibilityService : AccessibilityService() { private fun startPolling() { pollingJob = serviceScope.launch { while (isActive) { - if (currentState == BotState.IDLE || currentState == BotState.BETWEEN_TRIPS) { + if (currentState == BotState.IDLE) { Log.d(TAG, "Polling for tasks as ${workerClient.deviceId}...") val result = workerClient.fetchTask() @@ -74,13 +73,10 @@ class ScraperAccessibilityService : AccessibilityService() { handleTask(task) } else { Log.d(TAG, "No tasks available.") - if (currentState == BotState.BETWEEN_TRIPS) { - currentState = BotState.IDLE - currentTask = null - } } } - delay(3000) + // Poll every 15 seconds + delay(15000) } } } @@ -94,14 +90,6 @@ class ScraperAccessibilityService : AccessibilityService() { taxiFPickupDone = false taxiFDestinationDone = false - - // Between trips: app already open, skip launch & nav → directly SEARCHING_START - if (currentState == BotState.BETWEEN_TRIPS) { - currentState = BotState.SEARCHING_START - Log.i(TAG, "Between trips: State -> SEARCHING_START (skip launch)") - return - } - currentState = BotState.LAUNCHING_APP // Launch the App @@ -390,10 +378,6 @@ class ScraperAccessibilityService : AccessibilityService() { // Extract numeric digits from price val numericPrice = rawPrice.replace(Regex("[^0-9.]"), "").toDoubleOrNull() ?: 0.0 - // Go to between-trips mode immediately (synchronous) - // This prevents collectAndScrollPrices from overriding with IDLE - currentState = BotState.BETWEEN_TRIPS - serviceScope.launch { Log.i(TAG, "Submitting price $numericPrice for task $taskId...") val success = workerClient.submitPrice( @@ -412,6 +396,25 @@ class ScraperAccessibilityService : AccessibilityService() { } else { Log.e(TAG, "Failed to submit price.") } + + // Wait 3 seconds, then fetch next trip directly (no relaunch) + delay(3000) + val nextResult = workerClient.fetchTask() + if (nextResult != null && nextResult.optBoolean("has_task", false)) { + val nextTask = nextResult.getJSONObject("task") + val nextApp = nextTask.optString("app") + Log.i(TAG, "Multi-trip: Fetched next task for $nextApp, going directly to SEARCHING_START") + + currentTask = nextTask + currentAppName = nextApp + taxiFPickupDone = false + taxiFDestinationDone = false + currentState = BotState.SEARCHING_START + } else { + Log.d(TAG, "Multi-trip: No more tasks, going IDLE.") + currentState = BotState.IDLE + currentTask = null + } } } @@ -739,13 +742,11 @@ class ScraperAccessibilityService : AccessibilityService() { val cheapest = prices.minByOrNull { it.first } ?: prices.first() Log.i(TAG, "TaxiF: Submitting cheapest price: ${cheapest.second.take(50)} = ${cheapest.first} JOD") submitPriceToServer("${cheapest.first} JOD") - return - } - Log.w(TAG, "TaxiF: No JOD prices found, falling back to generic search") - searchPriceByCurrency(rootNode) - if (currentState != BotState.BETWEEN_TRIPS) { - currentState = BotState.IDLE + } else { + Log.w(TAG, "TaxiF: No JOD prices found, falling back to generic search") + searchPriceByCurrency(rootNode) } + currentState = BotState.IDLE } private fun findHorizontalRecyclerView(node: android.view.accessibility.AccessibilityNodeInfo?): android.view.accessibility.AccessibilityNodeInfo? {