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); }