From fdfe225b7b1c2e965183c4e22d718210d168a739 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Tue, 30 Jun 2026 03:05:30 +0300 Subject: [PATCH] Update: 2026-06-30 03:05:30 --- .../executionHistory/executionHistory.bin | Bin 905733 -> 905733 bytes .../executionHistory/executionHistory.lock | Bin 17 -> 17 bytes .../.gradle/8.13/fileHashes/fileHashes.bin | Bin 72665 -> 72665 bytes .../.gradle/8.13/fileHashes/fileHashes.lock | Bin 17 -> 17 bytes .../8.13/fileHashes/resourceHashesCache.bin | Bin 21761 -> 21965 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .../service/ScraperAccessibilityService.kt | 53 +++++++++--------- 7 files changed, 27 insertions(+), 26 deletions(-) diff --git a/android_bot/.gradle/8.13/executionHistory/executionHistory.bin b/android_bot/.gradle/8.13/executionHistory/executionHistory.bin index efa50a1fbaba4b6b9361bc47022a32b453d3d0c6..a91e8dbe5ad9e05ace3cad6dfb09301830e08ecc 100644 GIT binary patch delta 2983 zcmb_ec{o&U8=o^~&Y8h^9h#aM)gUU_vM*_&-jd3cN((LaEsUKghH7`o_w0<*-r^fZ;VhzT>CORt zZTB?_pCp%YjCVF%YzJk#$(A7X3rzmMaqmGrm$C(L%czndl|^9y@2~K8QvKwk65Mkf z)|8+p%@#)Y4C!mGpYqf0^IBiiIq|4uOz#yanS{0F2R}zFV%)lfX`TNZzHj-(@-87+ zi$G5c$%0v+jD}X~6g#})oKv7Wl9j226IC%CQUZwGLUV6;ek$L4y-lIER$MoF!(ETmec@l@?0=gm(uA6K!ngu(#6a%vGJYe-r3Int24e&er zjJ`$X&LSh?-qB_j=M+y>Vh z#s%uCECDm7S8ojgaCHWzfg`i94Yp^y%)0#E7UmQ?^`^@zT?f!O3oobbVoa;L<~pZv zbHC-4uTv~-5G*<~3wO{fkNF?{DBESnP21ht`#S zcGD}B5PP94Vh-lX50GM%+m8>Bl^*R2w^%956v+mePrk87iuO=cx5bYmCSN7V16VD%o z)LTThyO%Z!gc>9ykD(${yCbvOV5RkS8td#L6G;IxruVoCyeA=EH11VJ?c0B@tVFq* z_fD05St-=Hlaa@aXtYx|XX`)zR!mtQd*!0G2hclC|i*&ESHwt1OdG5yc$pZ;bJr4WG_63)Q74fgiDx+p7 zq=`0ey32p??5lT9gwtLe&aoih04T|c6XX-<;vb+D=-^1e=5T2fRI{yR!sf3M*QoaW zBIig@imQj0i)J84)5BR5ctk_vZr|HCKygkg<_MRA{Ph1`8yA5ItA@yRut3BD7e@BuODmntpm%=9?SSOwR|S7kKLvR|}bH zDMW!D9dYcyOPQ?r{3|CfagTzm*v3H*vP=7X=e;cw^T;;4R2)N&Lk z^M50Q9lU~E0<;_g3D}vugRW}d$8Kr+^|hC{P56jbZt91ijo{dGOs@IgJD;K@(Nc<*f4LQD6x$K;;C1G+-et=fz z$$XuPkD!Qa#fD!zK>b6?#u+3;7=NnldCbS zm|7iAd*`QDwmA-2v$P-}+d$C-+&gFyZu%90iC99D%aTNwZG|l_mVY?p=jM)EPayY~ z&HD?+t1&6K8k5?{UiXV5vLg459MqIgx2la;>pnWra1s+ofbVH|F)+JLM(`c()a|kh zSl&JhxxKuTAt}&C6Gw0^11%=vbI$0Y1z3a%w_R~qWk*nUS5}8a>;h0` zh|+wj^}_K!K~9{1S&%r@XoMwQQ!6OBYn90E$? z(ssDwxb!p$Uz3CqB{A_~=Vv3xiH|zaeV_xQYXBz;t&tO-ZJ>t&()8#21FRY;mGcH1 zd^L=cAdp;#{=mdX8Qh$LZX?fYF#v^7ZSYYP&6dE2TG2rXx_HT>rUhp5KuIC0MH4Ue zAAAyw7NUmo;?<59%G#8nO2O!6z#qrN>-|Jnr5GiUQiPfTxC2$!5U;%`q$5W#e^Ds@ zxpVK-RqoT}{(PTpBMYX`Iv()|zkCSGj- delta 2938 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 literal 17 VcmZQpDUVz8=j>v01~A~e3jj4j1vdZy diff --git a/android_bot/.gradle/8.13/fileHashes/resourceHashesCache.bin b/android_bot/.gradle/8.13/fileHashes/resourceHashesCache.bin index edff224ee07449b984146de94aed48391a90540a..3ee7fcd48701e549c09d3c7266626db7e2c137e2 100644 GIT binary patch delta 268 zcmZo%#dvl#;|3E6#TdFasEbDsT3cEMOGao4{3n?2S!7RCM*` ztx^Jv8dneJx_I6?v;ivW`X35zPFeUZ;hVf3RJ?QZUg-_Y0v5I96Bh2<`vEGNzByI? z0;5WuaNkP_N7-tqC?m`a7|p=Ixp1T65Alr#6?~f=Jr3|V7z33`0IVD>yQ5 zqnXxT)??8Ylb-zZvX%Q delta 62 zcmX@Rnz3;e;|3E6#)QqL5(Z?5 diff --git a/android_bot/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/android_bot/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 88f2fe72d0f9bcfe90e3d3d76c05d3626bb114b1..6b52f9cca2b4d19c7e751134ab6b3742991725f1 100644 GIT binary patch literal 17 VcmZSn@TkOm3HOb23}C=<3jjW51-JkJ literal 17 VcmZSn@TkOm3HOb23}C=9697IX1$O`d 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? {