#pragma once #include #include #include "android/xml/Node.h" #include "db/AccountInfo.h" #include "db/TransactionInfo.h" namespace Black { class ScreenXmlParser final : public QObject { Q_OBJECT public: explicit ScreenXmlParser(QObject *parent = nullptr); ~ScreenXmlParser() override; void parseAndSaveXml(const QString &xml); const QList &findAllNodes() const; Node findTextNode(const QString &text); Node findNodeByContentDesc(const QString &contentDesc); Node findNodeByContentDesc(const QString &contentDesc, bool contains); Node findButtonNode(const QString &text, bool contains); Node findFirstEditText(); // Определяет экран ввода PIN-кода по content-desc "¿Olvidaste tu PIN?" bool isPinCodeScreen(); // Находит EditText с password=true для ввода PIN Node findPinCodeEditText(); bool isHomeScreen(); // Определяет боковое меню по content-desc "Tu Información" + "Cerrar sesión" bool isSideMenu(); // Находит кнопку "¡Hola!" (аватар с именем) на домашнем экране Node findHolaButton(); // Парсит имя пользователя из content-desc "¡Hola!\nимя\nинициалы" QString parseUserNameFromHomeScreen(); // Парсит баланс с домашнего экрана (content-desc "$0,00" после "Saldo disponible") double parseBalanceFromHomeScreen(); // Определяет страницу профиля "Tu información" bool isProfilePage(); // Парсит данные профиля по hint полей QString parseProfileNombre(); // hint="Nombre" QString parseProfileApellido(); // hint="Apellido" QString parseProfileEmail(); // hint="E-mail" QString parseProfilePhone(); // hint="Teléfono celular" // Определяет экран CVU (окно поверх домашнего экрана) bool isCVUScreen(); // Парсит номер CVU (22-значный номер после content-desc="CVU") QString parseCVUNumber(); // Находит кнопку "Ver más" рядом с "Tu actividad" (для перехода на экран транзакций) Node findVerMasAfterTuActividad(); // Определяет экран загрузки транзакций (заголовок "Tu Actividad", но транзакций ещё нет) bool isTransactionLoadingScreen(); // Определяет экран списка транзакций (заголовок "Tu Actividad" + есть транзакции) bool isTransactionListScreen(); // Парсит все транзакции из content-desc ImageView элементов // Формат: "Transferencia\nDD de MES de YYYY - HH:MM\n$-1.857,\n00" QList parseTransactionItems(); // Парсит дату на испанском: "21 de febrero de 2026 - 09:39" → QDateTime static QDateTime parseSpanishDate(const QString &dateStr); // --- Экраны оплаты --- // Экран ввода CBU/CVU/Alias (hint="Ingresar CBU, CVU o Alias") bool isPayInputCardNumberScreen(); // Экран подтверждения получателя (кнопка "Transferir" + имя получателя) bool isPayTransferConfirmScreen(); // Экран ввода суммы ("¿Cuánto vas a transferír" + EditText + "Continuar") bool isPayInputSumScreen(); // Экран финального подтверждения ("Vas a transferir" + "Transferir") bool isPayConfirmScreen(); // Экран успешного перевода ("Dinero enviado!") bool isPaySuccessScreen(); // Парсит имя получателя из "Vas a transferir \na ИМЯ" QString parseRecipientNameFromConfirm(); // Парсит дату/время с экрана успеха: "12/03/26 04:01" QString parsePaySuccessDateTime(); // Парсит Id Coelsa с экрана успеха QString parsePaySuccessCoelsaId(); // Находит EditText по hint Node findEditTextByHint(const QString &hint); private: QList m_nodes; QDomElement m_xml; }; } // namespace Black