From f65840f28b1efa8ac4168685aec3f850b01949b0 Mon Sep 17 00:00:00 2001 From: slava Date: Tue, 19 May 2026 18:13:25 +0500 Subject: [PATCH] =?UTF-8?q?Fix=20card=20balance=20retrieval=20from=20incor?= =?UTF-8?q?rect=20placeholder=20in=20`GetCardInfoScript`.=20Add=20retry=20?= =?UTF-8?q?logic=20for=20"=D0=9E=D0=BF=D0=BB=D0=B0=D1=82=D0=B8=D1=82=D1=8C?= =?UTF-8?q?"=20button=20tap=20in=20`PayByPhoneScript`=20and=20`PayByCardSc?= =?UTF-8?q?ript`=20to=20handle=20bottom=20sheet=20dismissal.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/dushanbe/GetCardInfoScript.cpp | 6 +++++- android/dushanbe/PayByCardScript.cpp | 16 ++++++++++++++++ android/dushanbe/PayByPhoneScript.cpp | 16 ++++++++++++++++ 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/android/dushanbe/GetCardInfoScript.cpp b/android/dushanbe/GetCardInfoScript.cpp index c7b0d6b..44d39c9 100644 --- a/android/dushanbe/GetCardInfoScript.cpp +++ b/android/dushanbe/GetCardInfoScript.cpp @@ -149,7 +149,11 @@ void GetCardInfoScript::doStart() { closeGooglePlayBannerIfVisible(m_deviceId, device.screenWidth, device.screenHeight); QString fullNumber = xmlScreenParser.parseFullCardNumber(); - const double cardBalance = xmlScreenParser.parseCardDetailBalance(); + // Баланс берём с домашнего экрана (parseBalanceFromHomeScreen выше): + // в Душанбе все карты привязаны к одному счёту, и на экране детали + // карты баланс часто отображается как placeholder "0,00 TJS" пока + // данные подгружаются с сервера. + const double cardBalance = balance; const QString holder = xmlScreenParser.parseCardDetailHolder(); const QString fullNumberClean = QString(fullNumber).remove(' '); diff --git a/android/dushanbe/PayByCardScript.cpp b/android/dushanbe/PayByCardScript.cpp index a0df50d..0d85b12 100644 --- a/android/dushanbe/PayByCardScript.cpp +++ b/android/dushanbe/PayByCardScript.cpp @@ -450,6 +450,22 @@ void PayByCardScript::makePayment( continue; } + // Sheet "Подтверждение платежа" пропал, но снова виден input-экран + // (кнопка "Оплатить" вернулась) — значит тап по "Подтверждаю" промахнулся + // и Compose дисмиснул bottom sheet (clip на scrim/Закрыть/X). Перезапускаем + // цикл: тапаем "Оплатить" → следующая итерация увидит sheet и retryConfirm + // выше повторно тапнет "Подтверждаю". + Node retryOplatit = xmlScreenParser.findNodeByContentDesc(QString::fromUtf8("Оплатить")); + if (retryOplatit.isEmpty()) { + retryOplatit = xmlScreenParser.findButtonNode(QString::fromUtf8("Оплатить"), false); + } + if (!retryOplatit.isEmpty() && retryOplatit.clickable) { + qDebug() << "[Dushanbe::PayByCard] Sheet dismissed, re-tapping 'Оплатить' to restart confirm flow"; + AdbUtils::makeTap(deviceId, retryOplatit.x(), retryOplatit.y()); + QThread::msleep(3000); + continue; + } + qDebug() << "[Dushanbe::PayByCard] Waiting for result, attempt" << attempt + 1; QThread::msleep(2000); } diff --git a/android/dushanbe/PayByPhoneScript.cpp b/android/dushanbe/PayByPhoneScript.cpp index 165ef2d..85f06af 100644 --- a/android/dushanbe/PayByPhoneScript.cpp +++ b/android/dushanbe/PayByPhoneScript.cpp @@ -442,6 +442,22 @@ void PayByPhoneScript::makePayment( continue; } + // Sheet "Подтверждение платежа" пропал, но снова виден input-экран + // (кнопка "Оплатить" вернулась) — значит тап по "Подтверждаю" промахнулся + // и Compose дисмиснул bottom sheet (clip на scrim/Закрыть/X). Перезапускаем + // цикл: тапаем "Оплатить" → следующая итерация увидит sheet и retryConfirm + // выше повторно тапнет "Подтверждаю". + Node retryOplatit = xmlScreenParser.findNodeByContentDesc(QString::fromUtf8("Оплатить")); + if (retryOplatit.isEmpty()) { + retryOplatit = xmlScreenParser.findButtonNode(QString::fromUtf8("Оплатить"), false); + } + if (!retryOplatit.isEmpty() && retryOplatit.clickable) { + qDebug() << "[Dushanbe::PayByPhone] Sheet dismissed, re-tapping 'Оплатить' to restart confirm flow"; + AdbUtils::makeTap(deviceId, retryOplatit.x(), retryOplatit.y()); + QThread::msleep(3000); + continue; + } + qDebug() << "[Dushanbe::PayByPhone] Waiting for result, attempt" << attempt + 1; QThread::msleep(2000); }