mcu_hi3321_watch/tjd/ui/app/alipay/TjdUiAppAlipayPresenter.cpp
2025-05-26 20:15:20 +08:00

705 lines
28 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include "TjdUiAppAlipayPresenter.h"
#include "NativeAbility.h"
#include "TjdUiAppAlipayModel.h"
#include "TjdUiAppAlipayView.h"
#include "TjdUiRegisterManager.h"
#include "TjdUiSettingCenter.h"
#include "common/key_code.h"
#include "dock/input_device.h"
#include "graphic_service.h"
#include "power_display_service.h"
#include "sys_config.h"
#include "ui_screennotify.h"
namespace TJD {
TJD_REGIST_NATIVE_MENU(TJD_APP_VIEW_ALIPAY, TjdUiAppAlipayView, TjdUiAppAlipayPresenter, IMG_MENU_LIST_MENU_ALIPAY, STR_ID_32);
#define ALIPAY_GET_PAY_STR_MAX_LENGTH 20
#define ENABLE_PRINT_INFO 1
#if ENABLE_PRINT_INFO
#define static_print_info(...) sys_ui_log_i(__VA_ARGS__) // 一般信息打印宏控制
#define static_print_warn(...) sys_ui_log_w(__VA_ARGS__) // 警告信息打印一般常开
#define static_print_error(...) sys_ui_log_e(__VA_ARGS__) // 错误信息打印一般常开
#define static_print_debug(...) sys_ui_log_d(__VA_ARGS__) // 调试信息打印一般常开
#else
#define static_print_info(...)
#define static_print_warn(...)
#define static_print_error(...)
#define static_print_debug(...)
#endif
static TjdUiAppAlipayPresenter *g_alipayPresenter = nullptr;
TjdUiAppAlipayPresenter::TjdUiAppAlipayPresenter() { g_alipayPresenter = this; }
TjdUiAppAlipayPresenter::~TjdUiAppAlipayPresenter() { g_alipayPresenter = nullptr; }
/* 付款码刷新时间 */
static constexpr uint16_t SWITCH_PAY_CODE_TIME = 60000;
TjdUiAppAlipayPresenter *TjdUiAppAlipayPresenter::GetInstance(void) { return g_alipayPresenter; }
static void AlipayStatusNotifyCallback(ScreenStatus status)
{
static bool isScreenOff = false;
TjdUiAppAlipayPresenter *presenter = TjdUiAppAlipayPresenter::GetInstance();
if (presenter == nullptr) {
return;
}
if (status == ScreenStatus::SCREEN_STATUS_ON) {
if (isScreenOff) {
isScreenOff = false;
presenter->RefreshPayCodeEvent();
}
} else if (status == ScreenStatus::SCREEN_STATUS_OFF) {
isScreenOff = true;
}
}
void TjdUiAppAlipayPresenter::OnStart()
{
TjdUiCommonOnKeyListener::GetInstance()->SetOnKeyActListener(this, KeyModelType::APP_KEY_TYPE);
TjdUiAppAlipayView *alipayView = TjdUiAppAlipayView::GetInstance();
if (alipayView == nullptr) {
return;
}
TjdUiAppAlipayModel &model = TjdUiAppAlipayModel::GetInstance();
alipayView->ShowView(AlipayViewIndex::ALIPAY_LOGO);
uint32_t ret = model.AlipayDriverInit();
if (ret != 0) {
alipayView->ShowErrorMsg("支付宝初始化失败", AlipayViewIndex::ALIPAY_UNKNOWN);
return;
}
model.AlipayExitLpm();
if (!model.AlipayInitModel()) {
alipayView->ShowErrorMsg("支付宝初始化失败", AlipayViewIndex::ALIPAY_UNKNOWN);
return;
}
if (!StartLogoTimer()) {
alipayView->ShowErrorMsg("支付宝初始化失败", AlipayViewIndex::ALIPAY_UNKNOWN);
return;
}
registerNotifyScreenStatus(AlipayStatusNotifyCallback);
}
void TjdUiAppAlipayPresenter::OnStop()
{
TjdUiCommonOnKeyListener::GetInstance()->ClearOnKeyActListener(KeyModelType::APP_KEY_TYPE);
deregisterNotifyScreenStatus(AlipayStatusNotifyCallback);
TjdUiAppAlipayModel &model = TjdUiAppAlipayModel::GetInstance();
AlipayStopBindTimer();
AlipayStopSwitchTimer();
AlipayTransStopGetListsTimer();
model.AlipayDeinitModel();
model.AlipayEnterLpm();
model.SetQuickEnterFlag(false);
TjdUiAppAlipayPresenter::GetInstance()->ResetScreenBrightness();
}
bool TjdUiAppAlipayPresenter::OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event)
{
std::string viewId = view.GetViewId();
if (viewId.empty()) {
return false;
}
TjdUiAppAlipayView *alipayView = TjdUiAppAlipayView::GetInstance();
if (alipayView == nullptr) {
return false;
}
TjdUiAppAlipayModel &model = TjdUiAppAlipayModel::GetInstance();
if (viewId == ALIPAY_PAYCODE_VIEWID) { // List页面按下支付二维码按钮
alipayView->ShowView(AlipayViewIndex::ALIPAY_PAY_QRCODE);
AlipayStartSwitchTimer(SWITCH_PAY_CODE_TIME);
} else if (viewId == ALIPAY_RIDECODE_VIEWID) { // List页面按下乘车码按钮
OnClickTrans(view);
} else if (viewId == ALIPAY_SWITCH_QRCODE_VIEWID) { // 乘车码页面按下切换交通卡文本
alipayView->ShowView(AlipayViewIndex::ALIPAY_RIDE_CODE_LIST);
} else if (viewId == ALIPAY_SETTING_VIEWID) { // List页面按下设置按钮
alipayView->ShowView(AlipayViewIndex::ALIPAY_SETTING);
} else if (viewId == ALIPAY_HELP_VIEWID) { // List页面按下帮助按钮
alipayView->ShowView(AlipayViewIndex::ALIPAY_HELP);
} else if (viewId == ALIPAY_REMOVE_BIND_VIEWID) { // 设置页面按下解绑按钮
alipayView->ShowView(AlipayViewIndex::ALIPAY_UNBIND);
} else if (viewId == ALIPAY_UNBIND_ENTER_VIEWID) { // 解绑页面按下确定按钮
model.AlipayUnbind();
alipayView->ShowView(AlipayViewIndex::ALIPAY_UNBIND_SUC);
} else if (viewId == ALIPAY_UNBIND_CANCEL_VIEWID) { // 解绑页面按下取消按钮
alipayView->ShowView(AlipayViewIndex::ALIPAY_SETTING);
} else if (viewId == ALIPAY_UNBIND_KNOWN_VIEWID) { // 解绑成功页面按下已知按钮
model.AlipayStartBind();
AlipayStartBindTimer();
alipayView->ShowView(AlipayViewIndex::ALIPAY_BIND);
} else if (viewId == ALIPAY_HELP_KNOWN_VIEWID) { // 帮助页面按下已知按钮
alipayView->ShowView(AlipayViewIndex::ALIPAY_LIST);
} else if (viewId == ALIPAY_EXIT_VIEWID) { // 二维码页面按下退出
alipayView->ShowView(AlipayViewIndex::ALIPAY_LIST);
} else if (viewId == ALIPAY_CONSENT_PROTOCOL_VIEWID) { // 同意绑定协议
alipayView->JumpToConsentBindView();
} else if (viewId == ALIPAY_CONSENT_BIND_VIEWID) { // 同意绑定
model.AlipayStartBind();
AlipayStartBindTimer();
alipayView->ShowView(AlipayViewIndex::ALIPAY_BIND);
}
return false;
}
void TjdUiAppAlipayPresenter::ViewExitEvent(bool isSwipe)
{
TjdUiAppAlipayView *alipayView = TjdUiAppAlipayView::GetInstance();
if (alipayView == nullptr) {
return;
}
TjdUiAppAlipayModel &model = TjdUiAppAlipayModel::GetInstance();
switch (TjdUiAppAlipayView::currentViewIndex_) {
case AlipayViewIndex::ALIPAY_PROTOCOL:
if (!isSwipe) {
OHOS::NativeAbility::GetInstance().ChangePreSlice();
}
break;
case AlipayViewIndex::ALIPAY_UNKNOWN:
case AlipayViewIndex::ALIPAY_LIST:
case AlipayViewIndex::ALIPAY_BIND:
OHOS::NativeAbility::GetInstance().ChangePreSlice();
break;
case AlipayViewIndex::ALIPAY_PAY_QRCODE:
if (!isSwipe) {
if (model.GetQuickEnterFlag()) {
OHOS::NativeAbility::GetInstance().ChangePreSlice();
} else {
alipayView->ShowView(AlipayViewIndex::ALIPAY_LIST);
}
}
break;
case AlipayViewIndex::ALIPAY_SETTING:
alipayView->ShowView(AlipayViewIndex::ALIPAY_LIST);
break;
case AlipayViewIndex::ALIPAY_HELP:
alipayView->ShowView(AlipayViewIndex::ALIPAY_LIST);
break;
case AlipayViewIndex::ALIPAY_UNBIND:
alipayView->ShowView(AlipayViewIndex::ALIPAY_SETTING);
break;
case AlipayViewIndex::ALIPAY_RIDE_CODE_LIST:
alipayView->ShowView(AlipayViewIndex::ALIPAY_LIST);
break;
case AlipayViewIndex::ALIPAY_RIDE_QRCODE:
alipayView->ShowView(AlipayViewIndex::ALIPAY_RIDE_CODE_LIST);
break;
default:
break;
}
}
/* Logo显示2秒后调用回调 */
void TjdUiAppAlipayPresenter::CompleteLogoEvent(void)
{
if (osTimerDelete(logoTimerId_) != osOK) {
static_print_error("TjdUiAppAlipayPresenter::StartLogoTimer Delete timer fail.");
}
logoTimerId_ = nullptr;
TjdUiAppAlipayView *alipayView = TjdUiAppAlipayView::GetInstance();
TjdUiAppAlipayPresenter *presenter = TjdUiAppAlipayPresenter::GetInstance();
if (alipayView == nullptr || presenter == nullptr) {
return;
}
TjdUiAppAlipayModel &model = TjdUiAppAlipayModel::GetInstance();
// 判断是否已经绑定支付宝
if (presenter->IsAlipayBinded()) {
AlipayViewIndex showIndex = AlipayViewIndex::ALIPAY_LIST;
if (model.GetQuickEnterFlag()) {
showIndex = AlipayViewIndex::ALIPAY_PAY_QRCODE;
presenter->AlipayStartSwitchTimer(SWITCH_PAY_CODE_TIME);
}
presenter->RefreshPayCodeEvent();
alipayView->ShowView(showIndex);
} else {
alipayView->ShowView(AlipayViewIndex::ALIPAY_BIND);
}
}
bool TjdUiAppAlipayPresenter::StartLogoTimer()
{
if (logoTimerId_ == nullptr) {
logoTimerId_ = osTimerNew(
[](void *arg) {
/* 转发到UI线程 */
GraphicService::GetInstance()->PostGraphicEvent([]() {
TjdUiAppAlipayPresenter *presenter = TjdUiAppAlipayPresenter::GetInstance();
if (presenter == nullptr) {
return;
}
presenter->CompleteLogoEvent();
});
},
osTimerOnce, nullptr, nullptr);
if (logoTimerId_ == nullptr) {
static_print_error("TjdUiAppAlipayPresenter::StartJumpTimer Create timer fail.");
return false;
}
}
int32_t ret = osTimerStart(logoTimerId_, 2000);
if (ret != 0) {
static_print_error("TjdUiAppAlipayPresenter::StartJumpTimer Start timer fail");
return false;
}
return true;
}
void TjdUiAppAlipayPresenter::StartJumpTimer(AlipayViewIndex jumpView)
{
if (jumpTimerId_ == nullptr) {
jumpTimerId_ = osTimerNew(
[](void *arg) {
AlipayViewIndex jumpView = static_cast<AlipayViewIndex>(reinterpret_cast<intptr_t>(arg));
GraphicService::GetInstance()->PostGraphicEvent([jumpView]() {
TjdUiAppAlipayView *view = TjdUiAppAlipayView::GetInstance();
TjdUiAppAlipayPresenter *presenter = TjdUiAppAlipayPresenter::GetInstance();
if (view == nullptr) {
return;
}
view->ShowView(jumpView);
presenter->DeleteJumpTimer();
});
},
osTimerOnce, reinterpret_cast<void *>(static_cast<intptr_t>(jumpView)), nullptr);
if (jumpTimerId_ == nullptr) {
static_print_error("TjdUiAppAlipayPresenter::StartJumpTimer Create timer fail.");
return;
}
}
int32_t ret = osTimerStart(jumpTimerId_, 2000);
if (ret != 0) {
static_print_error("TjdUiAppAlipayPresenter::StartJumpTimer Start timer fail");
return;
}
}
void TjdUiAppAlipayPresenter::RefreshPayCodeEvent()
{
TjdUiAppAlipayModel &model = TjdUiAppAlipayModel::GetInstance();
TjdUiAppAlipayView *alipayView = TjdUiAppAlipayView::GetInstance();
if (alipayView == nullptr) {
return;
}
if (IsAlipayBinded() == false) {
return;
}
uint8_t str[ALIPAY_GET_PAY_STR_MAX_LENGTH] = {0};
int32_t ret = model.AlipayGetPayCode(str);
if (ret != 0) {
static_print_error("AlipayPresenter::RefreshPayCodeEvent AlipayGetPayCode fail. %d", ret);
}
alipayView->RefreshPayCode((const char *)str);
}
void TjdUiAppAlipayPresenter::BindSuccessEvent()
{
/* 绑定成功后根据进入类型2秒后进入付款码页面或者菜单页面 */
TjdUiAppAlipayModel &model = TjdUiAppAlipayModel::GetInstance();
RefreshPayCodeEvent();
if (model.GetQuickEnterFlag()) {
StartJumpTimer(AlipayViewIndex::ALIPAY_PAY_QRCODE);
AlipayStartSwitchTimer(SWITCH_PAY_CODE_TIME);
} else {
StartJumpTimer(AlipayViewIndex::ALIPAY_LIST);
}
}
/* 显示付款码和绑定码的时候最大亮度 */
void TjdUiAppAlipayPresenter::SetScreenBrightnessMax() { TjdUiSettingCenter::GetInstance().KeepScreenMaxOn(); }
void TjdUiAppAlipayPresenter::ResetScreenBrightness() { TjdUiSettingCenter::GetInstance().KeepScreenMaxOff(); }
void TjdUiAppAlipayPresenter::DeleteJumpTimer()
{
if (jumpTimerId_ != nullptr) {
osTimerDelete(jumpTimerId_);
jumpTimerId_ = nullptr;
}
}
bool TjdUiAppAlipayPresenter::OnKeyAct(OHOS::UIView &view, const OHOS::KeyEvent &event)
{
if (!TjdUiCommonOnKeyListener::CheckIsExitEvent(event)) {
return true;
}
ViewExitEvent(false);
return true;
}
// void TjdUiAppAlipayPresenter::ClickRetryTransCode(OHOS::UIView &view)
// {
// WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AlipayPresenter::ClickRetryTransCode start");
// uint32_t index = AlipayGetCardNum();
// int32_t ret = alipayMode_->AlipayGetTransCode(index);
// if (ret == 0) {
// view_->ChangeView(ALIPAY_GET_TRANS_LIST_VIEW, ALIPAY_TRANS_VIEW);
// } else if (ret == ALIPAY_TRANS_CODE_NET_ERROR) {
// AlipaySetSwitchIndex(ALIPAY_TRANS_RES_CODE);
// view_->ChangeView(ALIPAY_GET_TRANS_LIST_VIEW, ALIPAY_TRANS_RES_VIEW);
// } else {
// if (ret == ALIPAY_TRANS_CODE_DATA_LIMIT) {
// AlipaySetSwitchIndex(ALIPAY_TRANS_TIPS_SECURE);
// } else if (ret == ALIPAY_TRANS_CODE_NOT_SUPPORT) {
// AlipaySetSwitchIndex(ALIPAY_TRANS_TIPS_NOT_SUPPORT);
// } else {
// AlipaySetSwitchIndex(ALIPAY_TRANS_TIPS_LIST_UNKNOW);
// }
// view_->ChangeView(ALIPAY_GET_TRANS_LIST_VIEW, ALIPAY_TRANS_TIPS_VIEW);
// }
// return;
// }
void TjdUiAppAlipayPresenter::OnClickTrans(OHOS::UIView &view)
{
int32_t ret = TjdUiAppAlipayModel::GetInstance().AlipayGetLocalTranslist();
if (ret != 0) {
static_print_error("AlipayPresenter::ClickTransCode AlipayGetLocalTranslist fail. %d", ret);
// TjdUiAppAlipayView::GetInstance()->ShowErrorMsg("获取城市列表失败请打开手机app更新数据后再尝试",
// AlipayViewIndex::ALIPAY_LIST);
TjdUiAppAlipayView::GetInstance()->ShowView(AlipayViewIndex::ALIPAY_WAITING);
AlipayTransStartGetListsTimer();
} else {
int32_t get_res = TjdUiAppAlipayModel::GetInstance().AlipayGetLastTranscode();
if (get_res == 0) {
uint8_t *qrcode = TjdUiAppAlipayModel::GetInstance().AlipayGetTransCode();
uint32_t qrcodeLen = TjdUiAppAlipayModel::GetInstance().AlipayGetTransCodeLen();
char *name = TjdUiAppAlipayModel::GetInstance().AlipayGetCardTitle();
AlipayRideCodeView::GetInstance()->ShowQrcode(name, (const char *)qrcode, qrcodeLen);
TjdUiAppAlipayView::GetInstance()->ShowView(AlipayViewIndex::ALIPAY_RIDE_QRCODE);
} else {
static_print_error("AlipayPresenter::ClickTransCode AlipayGetLastTranscode fail.");
TjdUiAppAlipayView::GetInstance()->ShowView(AlipayViewIndex::ALIPAY_RIDE_CODE_LIST);
}
}
}
bool TjdUiAppAlipayPresenter::IsChinese() { return TjdUiAppAlipayModel::GetInstance().IsChinese(); }
bool TjdUiAppAlipayPresenter::IsAlipayBinded() { return TjdUiAppAlipayModel::GetInstance().AlipayGetBindState(); }
int32_t TjdUiAppAlipayPresenter::AlipayGetBindCode(uint8_t *bindStr)
{
return TjdUiAppAlipayModel::GetInstance().AlipayGetBindCode(bindStr);
}
void TjdUiAppAlipayPresenter::AlipayMsgTransListCallBackProcFunc(uint32_t actionRes)
{
GraphicService::GetInstance()->PostGraphicEvent([actionRes]() {
static_print_info("AlipayMsgTransListCallBackProcFunc in.");
if (actionRes == 0) {
uint32_t cardSum = TjdUiAppAlipayModel::GetInstance().AlipayTransGetCardNum();
TjdUiAppAlipayModel::GetInstance().AlipaySetCardSum(cardSum);
if (cardSum == 0) {
// AlipayMainView::GetInstance()->ChangeView(ALIPAY_TRANS_ANI_VIEW, ALIPAY_TRANS_ENABLE_VIEW);
} else {
// AlipayMainView::GetInstance()->ChangeView(ALIPAY_TRANS_ANI_VIEW, ALIPAY_TRANS_LIST_VIEW);
}
} else if (actionRes == ALIPAY_TRANS_CARD_LIST_NET_ERROR) {
// TjdUiAppAlipayModel::GetInstance().AlipaySetSwitchIndex(ALIPAY_TRANS_RES_LIST);
// AlipayMainView::GetInstance()->ChangeView(ALIPAY_TRANS_ANI_VIEW, ALIPAY_TRANS_RES_VIEW);
} else {
if (actionRes == ALIPAY_TRANS_CARD_LIST_OWN_TOO_MANY_CARD) {
// TjdUiAppAlipayModel::GetInstance().AlipaySetSwitchIndex(ALIPAY_TRANS_TIPS_TO_MUCH);
} else {
// TjdUiAppAlipayModel::GetInstance().AlipaySetSwitchIndex(ALIPAY_TRANS_TIPS_UNKNOW);
}
// AlipayMainView::GetInstance()->ChangeView(ALIPAY_TRANS_ANI_VIEW, ALIPAY_TRANS_TIPS_VIEW);
}
});
}
void TjdUiAppAlipayPresenter::AlipayMsgTransSpeCardCallBackProcFunc(uint32_t actionRes)
{
GraphicService::GetInstance()->PostGraphicEvent([actionRes]() {
static_print_info("AlipayMsgTransSpeCardCallBackProcFunc in.");
uint32_t index = TjdUiAppAlipayModel::GetInstance().AlipayGetCardNum();
if (actionRes == 0) {
int32_t ret = TjdUiAppAlipayModel::GetInstance().AlipayGetTransCode(index);
if (ret != 0) {
// AlipayMainView::GetInstance()->ChangeView(ALIPAY_TRANS_ANI_VIEW, ALIPAY_TRANS_LIST_VIEW);
} else {
// AlipayMainView::GetInstance()->ChangeView(ALIPAY_TRANS_ANI_VIEW, ALIPAY_TRANS_VIEW);
}
} else if (actionRes == ALIPAY_TRANS_CODE_NET_ERROR) {
// TjdUiAppAlipayModel::GetInstance().AlipaySetSwitchIndex(ALIPAY_TRANS_RES_CODE);
// AlipayMainView::GetInstance()->ChangeView(ALIPAY_TRANS_ANI_VIEW, ALIPAY_TRANS_RES_VIEW);
} else {
if (actionRes == ALIPAY_TRANS_CODE_DATA_LIMIT) {
// TjdUiAppAlipayModel::GetInstance().AlipaySetSwitchIndex(ALIPAY_TRANS_TIPS_SECURE);
} else if (actionRes == ALIPAY_TRANS_CODE_NOT_SUPPORT) {
// TjdUiAppAlipayModel::GetInstance().AlipaySetSwitchIndex(ALIPAY_TRANS_TIPS_NOT_SUPPORT);
} else {
// TjdUiAppAlipayModel::GetInstance().AlipaySetSwitchIndex(ALIPAY_TRANS_TIPS_LIST_UNKNOW);
}
// AlipayMainView::GetInstance()->ChangeView(ALIPAY_TRANS_ANI_VIEW, ALIPAY_TRANS_TIPS_VIEW);
}
});
}
void AlipaySwitchTimerCallBack(void *argument)
{
GraphicService::GetInstance()->PostGraphicEvent([]() {
AlipayViewIndex currentView = TjdUiAppAlipayPresenter::GetInstance()->GetCurrentViewIndex();
if (currentView == AlipayViewIndex::ALIPAY_PAY_QRCODE) { // 支付二维码页面每隔60s刷新一次
static_print_debug("AlipaySwitchTimerCallBack in.");
uint8_t payStr[ALIPAY_GET_PAY_STR_MAX_LENGTH] = {0};
TjdUiAppAlipayModel::GetInstance().AlipayGetPayCode(payStr);
TjdUiAppAlipayView *view = TjdUiAppAlipayView::GetInstance();
TjdUiAppAlipayPresenter *presenter = TjdUiAppAlipayPresenter::GetInstance();
if (view == nullptr || presenter == nullptr) {
return;
}
view->RefreshPayCode((const char *)payStr);
presenter->AlipayStartSwitchTimer(SWITCH_PAY_CODE_TIME);
}
});
}
bool TjdUiAppAlipayPresenter::AlipayStartSwitchTimer(uint16_t time)
{
if (switchTimerId == nullptr) {
switchTimerId = osTimerNew(AlipaySwitchTimerCallBack, osTimerOnce, (void *)0, nullptr);
if (switchTimerId == nullptr) {
return false;
}
}
int32_t retcode = osTimerStart(switchTimerId, time);
if (retcode != 0) {
return false;
}
return true;
}
void TjdUiAppAlipayPresenter::AlipayStopSwitchTimer()
{
if (switchTimerId != nullptr) {
osTimerStop(switchTimerId);
}
}
int32_t TjdUiAppAlipayPresenter::AlipayGetPayCode(uint8_t *payStr)
{
return TjdUiAppAlipayModel::GetInstance().AlipayGetPayCode(payStr);
}
uint32_t TjdUiAppAlipayPresenter::AlipayGetCardSum(void)
{
return TjdUiAppAlipayModel::GetInstance().AlipayGetCardSum();
}
char *TjdUiAppAlipayPresenter::AlipayGetCardTitle(uint32_t index)
{
return TjdUiAppAlipayModel::GetInstance().AlipayGetCardTitle(index);
}
char *TjdUiAppAlipayPresenter::AlipayGetCardTitle(void)
{
return TjdUiAppAlipayModel::GetInstance().AlipayGetCardTitle();
}
int32_t TjdUiAppAlipayPresenter::AlipayGetNickName(uint8_t *nickName)
{
return TjdUiAppAlipayModel::GetInstance().AlipayGetNickName(nickName);
}
int32_t TjdUiAppAlipayPresenter::AlipayGetIdName(uint8_t *idStr)
{
return TjdUiAppAlipayModel::GetInstance().AlipayGetIdName(idStr);
}
void AlipayTransGetListsTimerCallBack(void *arg)
{
GraphicService::GetInstance()->PostGraphicEvent([]() {
static_print_info("AlipayTransGetListsTimerCallBack in.");
static uint8_t count = 0;
if (count++ > 3) {
count = 0;
TjdUiAppAlipayPresenter::GetInstance()->AlipayTransStopGetListsTimer();
TjdUiAppAlipayView::GetInstance()->ShowErrorMsg("获取城市列表失败请打开手机app更新数据后再尝试",
AlipayViewIndex::ALIPAY_LIST);
return;
}
int32_t ret = TjdUiAppAlipayModel::GetInstance().AlipayGetOnlineTranslist();
if (ret != 0) {
static_print_error("AlipayModel::AlipayTransGetListsTimerCallBack AlipayGetOnlineTranslist fail. %x", ret);
TjdUiAppAlipayPresenter::GetInstance()->AlipayTransStartGetListsTimer();
return;
}
AlipayViewIndex currentView = TjdUiAppAlipayPresenter::GetInstance()->GetCurrentViewIndex();
// if (currentView != ALIPAY_TRANS_ENABLE_VIEW) {
// return;
// }
auto sum = TjdUiAppAlipayModel::GetInstance().AlipayGetCardSum();
if (sum == 0) {
static_print_info("AlipayTransGetListsTimerCallBack card sum is 0.");
TjdUiAppAlipayPresenter::GetInstance()->AlipayTransStartGetListsTimer();
return;
}
static_print_info("AlipayTransGetListsTimerCallBack card sum is %d.", sum);
TjdUiAppAlipayPresenter::GetInstance()->AlipayTransStopGetListsTimer();
count = 0;
// AlipayMainView::GetInstance()->ChangeView(ALIPAY_TRANS_ENABLE_VIEW, ALIPAY_TRANS_LIST_VIEW);
});
}
bool TjdUiAppAlipayPresenter::AlipayTransStartGetListsTimer(void)
{
if (transTimerId == nullptr) {
transTimerId = osTimerNew(AlipayTransGetListsTimerCallBack, osTimerOnce, (void *)0, nullptr);
if (transTimerId == nullptr) {
static_print_error("AlipayModel::AlipayTransStartGetLists Create timer fail.");
return false;
}
}
int32_t retcode = osTimerStart(transTimerId, 10000);
if (retcode != 0) {
static_print_error("AlipayModel::AlipayTransStartGetLists Start timer fail");
return false;
}
return true;
}
void TjdUiAppAlipayPresenter::AlipayTransStopGetListsTimer(void)
{
if (transTimerId == nullptr) {
return;
}
int32_t ret = osTimerStop(transTimerId);
}
/* 绑定状态查询回调函数 */
static void AlipayBindTimerCallBack(void *arg)
{
// 绑定状态查询
GraphicService::GetInstance()->PostGraphicEvent([]() {
static bool isStartBind = false;
TjdUiAppAlipayModel &model = TjdUiAppAlipayModel::GetInstance();
TjdUiAppAlipayPresenter *presenter = TjdUiAppAlipayPresenter::GetInstance();
TjdUiAppAlipayView *alipayView = TjdUiAppAlipayView::GetInstance();
if (presenter == nullptr || alipayView == nullptr) {
return;
}
int32_t status = -1;
int32_t ret = model.AlipayGetBindStatus(status);
if (ret != 0) {
static_print_error("AlipayBindCallBackProc AlipayGetBindStatus fail. %x", ret);
return;
}
/* 检测到已经绑定成功则直接跳页面 */
static_print_info("get_bind_status:%d", status);
if (model.AlipayGetBindState()) {
model.AlipaySetBindFlag(true);
model.AlipayBindFinish();
alipayView->ShowBindMsg(AlipayBindStatus::ALIPAY_BIND_SUCCESS);
presenter->BindSuccessEvent();
return;
}
if (status == ALIPAY_INTER_STATUS_START_BINDING) {
alipayView->ShowView(AlipayViewIndex::ALIPAY_WAITING);
isStartBind = true;
} else if (status == ALIPAY_INTER_STATUS_BINDING_OK) {
if (isStartBind) {
model.AlipaySetBindFlag(true);
model.AlipayBindFinish();
alipayView->ShowBindMsg(AlipayBindStatus::ALIPAY_BIND_SUCCESS);
presenter->BindSuccessEvent();
isStartBind = false;
}
return;
} else if (status == ALIPAY_INTER_STATUS_BINDING_FAIL) {
if (isStartBind) {
model.AlipaySetBindFlag(false);
alipayView->ShowBindMsg(AlipayBindStatus::ALIPAY_BIND_FAIL);
isStartBind = false;
}
presenter->AlipayDelayStartBindTimer();
return;
}
presenter->AlipayStartBindTimer();
});
}
bool TjdUiAppAlipayPresenter::AlipayStartBindTimer()
{
if (bindTimerId == nullptr) {
bindTimerId = osTimerNew(AlipayBindTimerCallBack, osTimerOnce, (void *)0, nullptr);
if (bindTimerId == nullptr) {
static_print_error("%s Create timer fail.", __func__);
return false;
}
}
int32_t ret = osTimerStart(bindTimerId, 2000);
if (ret != 0) {
static_print_error("%s Start timer fail", __func__);
return false;
}
return true;
}
/* 绑定失败后延时重新开始绑定 */
bool TjdUiAppAlipayPresenter::AlipayDelayStartBindTimer()
{
if (delayStartBindTimerId == nullptr) {
delayStartBindTimerId = osTimerNew(
[](void *arg) {
GraphicService::GetInstance()->PostGraphicEvent([]() {
TjdUiAppAlipayView *alipayView = TjdUiAppAlipayView::GetInstance();
TjdUiAppAlipayPresenter *presenter = TjdUiAppAlipayPresenter::GetInstance();
if (presenter == nullptr || alipayView == nullptr) {
return;
}
alipayView->ShowView(AlipayViewIndex::ALIPAY_BIND);
presenter->AlipayStartBindTimer();
});
},
osTimerOnce, (void *)0, nullptr);
if (delayStartBindTimerId == nullptr) {
static_print_error("%s Create timer fail.", __func__);
return false;
}
}
int32_t ret = osTimerStart(delayStartBindTimerId, 2000);
if (ret != 0) {
static_print_error("%s Start timer fail", __func__);
return false;
}
return true;
}
void TjdUiAppAlipayPresenter::AlipayStopBindTimer(void)
{
if (bindTimerId == nullptr) {
return;
}
int32_t ret = osTimerStop(bindTimerId);
}
AlipayViewIndex TjdUiAppAlipayPresenter::GetCurrentViewIndex() { return TjdUiAppAlipayView::currentViewIndex_; }
uint8_t *TjdUiAppAlipayPresenter::AlipayGetTransCode(void)
{
return TjdUiAppAlipayModel::GetInstance().AlipayGetTransCode();
}
uint32_t TjdUiAppAlipayPresenter::AlipayGetTransCodeLen(void)
{
return TjdUiAppAlipayModel::GetInstance().AlipayGetTransCodeLen();
}
} // namespace TJD