diff --git a/android/ozon/PayByCardScript.cpp b/android/ozon/PayByCardScript.cpp index 2509f0f..a19db03 100644 --- a/android/ozon/PayByCardScript.cpp +++ b/android/ozon/PayByCardScript.cpp @@ -287,30 +287,17 @@ void PayByCardScript::makePayment( if (!sumInput.isEmpty()) break; // Fallback для устройств, где Ozon WebView не отдаёт hint (TECNO). - // На экране "Перевод по номеру карты" всегда 2 EditText: карта (сверху) - // и сумма (снизу). Стратегии по приоритету: - // 1) Svelte генерирует resource-id="input___xxxx" ТОЛЬКО для суммы — - // берём этот EditText. - // 2) Если rid нет (старая версия Ozon UI) — берём второй EditText - // по y-порядку (карта y1=меньше, сумма y1=больше). - QList candidateInputs; + // На экране "Перевод по номеру карты" всегда 2 EditText в DOM-порядке: + // карта (сверху), сумма (снизу). Оба имеют resource-id="input___xxxx", + // поэтому отличать по rid нельзя — берём второй по порядку обхода XML. + QList editTexts; for (const Node &n : xmlScreenParser.findAllNodes()) { if (n.className != "android.widget.EditText") continue; if (n.height() <= 0 || n.height() > height * 4 / 5) continue; - candidateInputs.append(n); + editTexts.append(n); } - // Strategy 1: rid="input___" - for (const Node &n : candidateInputs) { - if (n.resourceId.startsWith("input___")) { - sumInput = n; - break; - } - } - // Strategy 2: bottom-most по y1 (если их 2 — берём второй) - if (sumInput.isEmpty() && candidateInputs.size() >= 2) { - std::sort(candidateInputs.begin(), candidateInputs.end(), - [](const Node &a, const Node &b) { return a.y1() < b.y1(); }); - sumInput = candidateInputs.last(); + if (editTexts.size() >= 2) { + sumInput = editTexts[1]; } if (!sumInput.isEmpty()) break;