/*---------------------------------------------------------------------------- * Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved. * * Description: TjdUiAppPlayDialAiView.cpp * * Author: liuguanwu * * Create: 2024-10 *--------------------------------------------------------------------------*/ #include "TjdUiImageIds.h" #include "TjdUiMemManage.h" #include "TjdUiMultiLanguageExt.h" #include "common/image_cache_manager.h" #include "dock/focus_manager.h" #include "graphic_service.h" #include "sys_config.h" #include "TjdUiAppPlayDialAdapter.h" #include "TjdUiAppPlayDialAiView.h" #include "TjdUiAppPlayDialModel.h" #include "TjdUiAppPlayDialPresenter.h" #include "TjdUiAppPlayDialView.h" #include "TjdUiScreenManage.h" #include "fstream" #include using namespace std; using namespace OHOS; #define ENABLE_PRINT_INFO 0 #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 #define PLAY_DIAL_BIN_PATH TJD_IMAGE_PATH "img_play_dial.bin" #define LEFUN_AI_SCREEN_AUTO_OFF_TIME (1000 * 60 * 60) namespace TJD { static inline int16_t HorizontalCenter(int16_t width, int16_t parentWidth) { return (parentWidth - width) / 2; } static inline int16_t VerticalCenter(int16_t height, int16_t parentHeight) { return (parentHeight - height) / 2; } inline void InitLabelHorCenter(OHOS::UILabel &label, uint8_t size, int16_t y, int16_t target, const char *text) { label.SetFont(TJD_VECTOR_FONT_FILENAME, size); label.SetText(text); label.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_ADAPT); label.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); static_print_debug("InitLabelHorCenter[%s] x=%d-%d-%d-%d", text, label.GetX(), label.GetWidth(), target, HorizontalCenter(label.GetWidth(), target)); label.SetPosition(label.GetX() + HorizontalCenter(label.GetWidth(), target), y); } PlayDialAIStyleView *g_PlayDialAIStyleView{nullptr}; TjdPlayDialAdapter *g_TjdPlayDialAdapter{nullptr}; PlayDialAIStyleView::PlayDialAIStyleView(void) { g_PlayDialAIStyleView = this; PageInit(); } PlayDialAIStyleView::~PlayDialAIStyleView(void) { RemoveAll(); if (styleList_) { styleList_->ClearFocus(); delete styleList_; styleList_ = nullptr; } if (g_TjdPlayDialAdapter) { delete g_TjdPlayDialAdapter; g_TjdPlayDialAdapter = nullptr; } g_PlayDialAIStyleView = nullptr; } PlayDialAIStyleView *PlayDialAIStyleView::GetInstance(void) { return g_PlayDialAIStyleView; } void PlayDialAIStyleView::ShowView() { if (styleList_) { styleList_->RequestFocus(); styleList_->SetRotateFactor(1.0); } SetVisible(true); } void PlayDialAIStyleView::HideView() { if (styleList_) { styleList_->ClearFocus(); } SetVisible(false); } void PlayDialAIStyleView::PageInit(void) { SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); SetStyle(OHOS::STYLE_BACKGROUND_COLOR, 0x00000000); SetOnDragListener(&TjdUiAppPlayDialPresenter::GetInstance()); // dragListener_ = new ScreenDragListener(); // SetOnDragListener(dragListener_); // SetTouchable(true); // SetDraggable(true); styleList_ = new TjdPlayDialAdapter::StyleList(); Add(styleList_); g_TjdPlayDialAdapter = new TjdPlayDialAdapter(); // styleList_->SetRotateFactor(-10); // styleList_->SetRotateThreshold(8); styleList_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); // styleList_->SetStartIndex(lastIndex);//这个设置必须位于SetAdapter之前 styleList_->SetAdapter(g_TjdPlayDialAdapter); styleList_->SetThrowDrag(true); styleList_->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT); // styleList_->SetMaxScrollDistance(500); // 1000: max scroll distance styleList_->SetSwipeACCLevel(15); // 800: compensation distance styleList_->SetDragACCLevel(10); // 5: drag acceleration styleList_->SetYScrollBarVisible(true); styleList_->SetScrollBlankSize(styleList_->GetHeight() >> 1); styleList_->SetReboundSize(styleList_->GetHeight() >> 1); // 100: rebound size styleList_->SetSelectPosition(styleList_->GetHeight() >> 1); styleList_->EnableAutoAlign(true); styleList_->SetAutoAlignTime(200); styleList_->EnableCrossDragBack(false); styleList_->SetElastic(true); // styleList_->ScrollBy(headY);//用法不是很明确 // styleList_->SetDragFunc(EasingEquation::QuintEaseOut); if (TjdUiMultiLanguageExt::IsSpecialLanguage() == true) { styleList_->SetScrollBarSide(SCROLL_BAR_LEFT_SIDE); } else { styleList_->SetScrollBarSide(SCROLL_BAR_RIGHT_SIDE); } // styleList_->RequestFocus(); } // class PlayDialAIListenView start PlayDialAIListenView *g_PlayDialAIListenView{nullptr}; PlayDialAIListenView::PlayDialAIListenView() { g_PlayDialAIListenView = this; static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); SetStyle(OHOS::STYLE_BACKGROUND_COLOR, 0x00000000); SetOnDragListener(&TjdUiAppPlayDialPresenter::GetInstance()); backGround_.SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); auto &image = OHOS::ImageCacheManager::GetInstance(); auto img_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_BJ, PLAY_DIAL_BIN_PATH); backGround_.SetSrc(img_Res); // InitLabelHorCenter(titleTop_, 28, 16, 466, "AI表盘"); titleTop_.SetFont(TJD_VECTOR_FONT_FILENAME, 28); titleTop_.SetTextId(STR_ID_386); titleTop_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_ADAPT); titleTop_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); titleTop_.SetPosition(titleTop_.GetX() + HorizontalCenter(titleTop_.GetWidth(), 466), 16); InitLabelHorCenter(titleTime_, 28, 86, 466, "00:00/00:15"); // InitLabelHorCenter(titleHint_, 28, 286, 466, "请说出表盘特征\n如: 飞翔的小鸟"); titleTop_.SetFont(TJD_VECTOR_FONT_FILENAME, 28); titleTop_.SetTextId(STR_ID_406); titleTop_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); titleTop_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); titleTop_.SetPosition(0, 286); titleTop_.Resize(466, 95); const uint32_t resId[] = {IMG_PLAY_DIAL_DT_01_03, IMG_PLAY_DIAL_DT_02_03, IMG_PLAY_DIAL_DT_03_03, IMG_PLAY_DIAL_DT_04_03, IMG_PLAY_DIAL_DT_05_03, IMG_PLAY_DIAL_DT_06_03}; // 拨动动效: OHOS::ImageAnimatorInfo logoWaveInfo = {nullptr, {75, 156}, 316, 95, OHOS::IMG_SRC_IMAGE_INFO}; for (int i = 0; i < 6; i++) { logoWaveInfo_[i] = logoWaveInfo; logoWaveInfo_[i].imageInfo = image.LoadOneInMultiRes(resId[i], PLAY_DIAL_BIN_PATH); } logoWave_.SetPosition(75, 156, 316, 95); logoWave_.SetImageAnimatorSrc(logoWaveInfo_, 6, 100); clickDown_.SetPosition(77, 378, 312, 88); img_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_ICON_YES, PLAY_DIAL_BIN_PATH); if (img_Res != nullptr) { clickDown_.SetSrc(img_Res); clickDown_.SetViewId(PLAYDIAL_AI_LISTEN_VIEW_BTN_ID); clickDown_.SetOnClickListener(&TjdUiAppPlayDialPresenter::GetInstance()); clickDown_.SetTouchable(true); } tick_ = 0; if (logoTimer_ == nullptr) { logoTimer_ = new OHOS::GraphicTimer(100, TimerCallBack, this, true); } Add(&backGround_); Add(&titleTop_); Add(&titleTime_); Add(&logoWave_); Add(&titleHint_); Add(&clickDown_); } PlayDialAIListenView::~PlayDialAIListenView() { logoWave_.Stop(); if (logoTimer_ != nullptr) { logoTimer_->Stop(); delete logoTimer_; logoTimer_ = nullptr; } RemoveAll(); g_PlayDialAIListenView = nullptr; } PlayDialAIListenView *PlayDialAIListenView::GetInstance() { return g_PlayDialAIListenView; } void PlayDialAIListenView::TimerCallBackRun(void *arg) { PlayDialAIListenView *p_inst = (PlayDialAIListenView *)arg; static_print_info("[%s][%d]: %s,Result_:%d\n", __FILE__, __LINE__, __func__, TjdUiAppPlayDialView::GetInstance().Result_); if (TjdUiAppPlayDialView::GetInstance().Result_ == AI_RESULT_LISTEN) { if (p_inst->logoWave_.GetState() != OHOS::Animator::START) p_inst->logoWave_.Start(); if (p_inst->tick_ <= 15 * 10) { p_inst->tick_++; } else { // 超时了,跳转到表盘制作页 if (p_inst->logoTimer_ != nullptr) { p_inst->logoTimer_->Stop(); } TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_LOADING_TXT; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_MAKING_TXT); } char str[30] = {0}; snprintf(str, 30, "00:%02d/00:15", p_inst->tick_ / 10); // static_print_info("[%s][%d]: %s %s", __FILE__, __LINE__, __func__, str); p_inst->titleTime_.SetText(str); } else { p_inst->logoWave_.Stop(); p_inst->tick_ = 0; char str[30] = {0}; snprintf(str, 30, "00:%02d/00:15", 0); p_inst->titleTime_.SetText(str); } } void PlayDialAIListenView::TimerCallBack(void *arg) { GraphicService::GetInstance()->PostGraphicEvent( std::bind([](void *arg) { PlayDialAIListenView::GetInstance()->TimerCallBackRun(arg); }, arg)); } void PlayDialAIListenView::ShowView() { extern std::string g_PlayDialQuestion; TjdUiScreenManage::SetScreenKeepOnTimeout(LEFUN_AI_SCREEN_AUTO_OFF_TIME); g_PlayDialQuestion.clear(); SetVisible(true); if (logoTimer_ != nullptr) { logoTimer_->Start(); tick_ = 0; } TjdUiAppPlayDialView::GetInstance().TipsIndex_ = PLAYDIAL_TIPS_INVALID; TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_LISTEN; TjdUiAppPlayDialModel::GetInstance().RequestIntoLefunAi(); //进入模块,传入风格。 TjdUiAppPlayDialModel::GetInstance().LefunAiRequestIntoAudioTransmit(); TjdUiAppPlayDialModel::GetInstance().LefunAiRequestStartAudioTransmit(); TjdUiAppPlayDialModel::GetInstance().RecordStart(); } void PlayDialAIListenView::HideView() { TjdUiScreenManage::ResetScreenKeepOnTimeout(); TjdUiAppPlayDialModel::GetInstance().RecordStop(); SetVisible(false); if (logoTimer_ != nullptr) { logoTimer_->Stop(); tick_ = 0; } } // class PlayDialAIListenView end // class PlayDialAIMakingView start static PlayDialAIMakingView *g_PlayDialAIMakingView{nullptr}; PlayDialAIMakingView::PlayDialAIMakingView() { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); g_PlayDialAIMakingView = this; Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); SetStyle(OHOS::STYLE_BACKGROUND_COLOR, 0x00000000); SetOnDragListener(&TjdUiAppPlayDialPresenter::GetInstance()); logoBg_.SetPosition(0, 0, 466, 466); auto logoBg_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_BJ, PLAY_DIAL_BIN_PATH); if (logoBg_Res != nullptr) { logoBg_.SetSrc(logoBg_Res); } // InitLabelHorCenter(titleTop_, 28, 16, 466, "AI表盘"); // InitLabelHorCenter(titleTip_, 28, 306, 466, "请确认内容是否正确"); titleTip_.SetFont(TJD_VECTOR_FONT_FILENAME, 28); titleTip_.SetTextId(STR_ID_407); titleTip_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_MARQUEE); titleTip_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); titleTip_.SetPosition(0, 306,466,37); // 结果相关的图片一开始要隐藏,出结果后才显示 logoResult_.SetPosition(49, 101, 362, 176); #if 0 auto logoResult_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_QJ, PLAY_DIAL_BIN_PATH); if (logoResult_Res != nullptr) { logoResult_.SetSrc(logoResult_Res); } #else logoResult_.SetStyle(OHOS::STYLE_BACKGROUND_COLOR, OHOS::Color::Black().full); logoResult_.SetStyle(OHOS::STYLE_BORDER_RADIUS, 12); logoResult_.SetStyle(OHOS::STYLE_BORDER_WIDTH, 8); // logoResult_.SetStyle(OHOS::STYLE_BORDER_COLOR, 8); #endif // InitLabelHorCenter(titleResult_, 28, 101, 362, "正在回复……"); titleResult_.SetFont(TJD_VECTOR_FONT_FILENAME, 28); // titleResult_.SetText("语音识别中……"); titleResult_.SetTextId(STR_ID_581); titleResult_.SetPosition(0, 0, 362, 200); titleResult_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_ELLIPSIS); titleResult_.SetVisible(false); // 拨动动效: const uint32_t resId[] = { IMG_PLAY_DIAL_LOADING_01_06, IMG_PLAY_DIAL_LOADING_02_06, IMG_PLAY_DIAL_LOADING_03_06, IMG_PLAY_DIAL_LOADING_04_06, IMG_PLAY_DIAL_LOADING_05_06, IMG_PLAY_DIAL_LOADING_06_06, IMG_PLAY_DIAL_LOADING_07_06, IMG_PLAY_DIAL_LOADING_08_06, IMG_PLAY_DIAL_LOADING_09_06, IMG_PLAY_DIAL_LOADING_10_06, IMG_PLAY_DIAL_LOADING_11_06, }; auto &image = OHOS::ImageCacheManager::GetInstance(); OHOS::ImageAnimatorInfo logoMakingInfo = {nullptr, {65, 115}, 78, 78, OHOS::IMG_SRC_IMAGE_INFO}; for (int i = 0; i < 11; i++) { logoMakingInfo_[i] = logoMakingInfo; logoMakingInfo_[i].imageInfo = image.LoadOneInMultiRes(resId[i], PLAY_DIAL_BIN_PATH); } logoMaking_.SetPosition(65, 115, 78, 78); logoMaking_.SetImageAnimatorSrc(logoMakingInfo_, 11, 100); logoMaking_.SetAutoEnable(false); logoMaking_.SetResizeMode(UIImageView::ImageResizeMode::FILL); if (TjdUiAppPlayDialView::GetInstance().Result_ == AI_RESULT_LOADING_TXT) { logoMaking_.SetVisible(true); } else { logoMaking_.SetVisible(false); } clickLeft_.SetPosition(110, 352, 92, 92); auto clickLeftRes = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_ICON_RETRY, PLAY_DIAL_BIN_PATH); if (clickLeftRes != nullptr) { clickLeft_.SetSrc(clickLeftRes); clickLeft_.SetViewId(PLAYDIAL_AI_MAKING_VIEW_BTN_LEFT_ID); clickLeft_.SetOnClickListener(&TjdUiAppPlayDialPresenter::GetInstance()); clickLeft_.SetTouchable(true); } clickRight_.SetPosition(262, 352, 92, 92); auto clickRightRes = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_ICON_CONFIRM, PLAY_DIAL_BIN_PATH); if (clickRightRes != nullptr) { clickRight_.SetSrc(clickRightRes); clickRight_.SetViewId(PLAYDIAL_AI_MAKING_VIEW_BTN_RIGHT_ID); clickRight_.SetOnClickListener(&TjdUiAppPlayDialPresenter::GetInstance()); clickRight_.SetTouchable(true); } tick_ = 0; if (logoTimer_ == nullptr) { logoTimer_ = new OHOS::GraphicTimer(200, TimerCallBack, this, true); } Add(&logoBg_); // Add(&titleTop_); Add(&titleTip_); Add(&logoResult_); logoResult_.Add(&titleResult_); Add(&logoMaking_); Add(&clickLeft_); Add(&clickRight_); } PlayDialAIMakingView::~PlayDialAIMakingView(void) { logoMaking_.Stop(); if (logoTimer_ != nullptr) { logoTimer_->Stop(); delete logoTimer_; logoTimer_ = nullptr; } RemoveAll(); g_PlayDialAIMakingView = nullptr; } PlayDialAIMakingView *PlayDialAIMakingView::GetInstance(void) { return g_PlayDialAIMakingView; } void PlayDialAIMakingView::TimerCallBackRun(void *arg) { PlayDialAIMakingView *p_inst = (PlayDialAIMakingView *)arg; // static_print_info("[%s][%d]: %s,Result_:%d-%d\n", __FILE__, __LINE__, __func__, // TjdUiAppPlayDialView::GetInstance().Result_, p_inst->tick_); if (TjdUiAppPlayDialView::GetInstance().Result_ == AI_RESULT_LOADING_TXT) { if (p_inst->logoMaking_.GetState() != OHOS::Animator::START) p_inst->logoMaking_.Start(); p_inst->logoMaking_.SetVisible(true); p_inst->logoResult_.SetVisible(true); } else if (TjdUiAppPlayDialView::GetInstance().Result_ == AI_RESULT_SELECT_TXT) { p_inst->logoMaking_.Stop(); p_inst->logoMaking_.SetVisible(false); p_inst->logoResult_.SetVisible(true); } extern std::string g_PlayDialQuestion; if (g_PlayDialQuestion.size()) { static_print_info("PlayDialAIMakingView::TimerCallBackRun:[%s]\n", g_PlayDialQuestion.c_str()); p_inst->titleResult_.SetText(g_PlayDialQuestion.c_str()); p_inst->titleResult_.SetVisible(true); } if (p_inst->tick_ <= 30 * 10) { p_inst->tick_++; } else { // 超时了,跳转到表盘制作页 if (p_inst->logoTimer_ != nullptr) { p_inst->logoTimer_->Stop(); p_inst->tick_ = 0; } TjdUiAppPlayDialView::GetInstance().TipsIndex_ = PLAYDIAL_TIPS_FAIL; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_PREVIEW); } } void PlayDialAIMakingView::TimerCallBack(void *arg) { GraphicService::GetInstance()->PostGraphicEvent( std::bind([](void *arg) { PlayDialAIMakingView::GetInstance()->TimerCallBackRun(arg); }, arg)); } void PlayDialAIMakingView::ShowView() { TjdUiScreenManage::SetScreenKeepOnTimeout(LEFUN_AI_SCREEN_AUTO_OFF_TIME); SetVisible(true); if (logoTimer_ != nullptr) { logoTimer_->Start(); } titleResult_.SetTextId(STR_ID_581); } void PlayDialAIMakingView::HideView() { TjdUiScreenManage::ResetScreenKeepOnTimeout(); SetVisible(false); titleResult_.SetVisible(false); logoMaking_.Stop(); if (logoTimer_ != nullptr) { logoTimer_->Stop(); } } // class PlayDialAIMakingView end // class PlayDialAIMakingIMGView start static PlayDialAIMakingIMGView *g_PlayDialAIMakingIMGView{nullptr}; PlayDialAIMakingIMGView::PlayDialAIMakingIMGView() { static_print_info("[%s][%d]: %s", __FILE__, __LINE__, __func__); g_PlayDialAIMakingIMGView = this; Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); SetStyle(OHOS::STYLE_BACKGROUND_COLOR, 0x00000000); SetOnDragListener(&TjdUiAppPlayDialPresenter::GetInstance()); logoBg_.SetPosition(0, 0, 466, 466); auto logoBg_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_BJ, PLAY_DIAL_BIN_PATH); if (logoBg_Res != nullptr) { logoBg_.SetSrc(logoBg_Res); } // InitLabelHorCenter(titleTip_, 28, 307, 466, "加速计算中,请稍等..."); titleTip_.SetFont(TJD_VECTOR_FONT_FILENAME, 28); titleTip_.SetTextId(STR_ID_408); titleTip_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); titleTip_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); titleTip_.SetPosition(0, 307, 466, 47); // 拨动动效: const uint32_t resId[] = { IMG_PLAY_DIAL_LOADING_01_06, IMG_PLAY_DIAL_LOADING_02_06, IMG_PLAY_DIAL_LOADING_03_06, IMG_PLAY_DIAL_LOADING_04_06, IMG_PLAY_DIAL_LOADING_05_06, IMG_PLAY_DIAL_LOADING_06_06, IMG_PLAY_DIAL_LOADING_07_06, IMG_PLAY_DIAL_LOADING_08_06, IMG_PLAY_DIAL_LOADING_09_06, IMG_PLAY_DIAL_LOADING_10_06, IMG_PLAY_DIAL_LOADING_11_06, }; auto &image = OHOS::ImageCacheManager::GetInstance(); OHOS::ImageAnimatorInfo logoMakingInfo = {nullptr, {174, 135}, 121, 121, OHOS::IMG_SRC_IMAGE_INFO}; for (int i = 0; i < 11; i++) { logoMakingInfo_[i] = logoMakingInfo; logoMakingInfo_[i].imageInfo = image.LoadOneInMultiRes(resId[i], PLAY_DIAL_BIN_PATH); } logoMaking_.SetPosition(174, 135, 121, 121); logoMaking_.SetImageAnimatorSrc(logoMakingInfo_, 11, 100); logoMaking_.SetAutoEnable(false); logoMaking_.SetResizeMode(UIImageView::ImageResizeMode::FILL); tick_ = 0; if (logoTimer_ == nullptr) { logoTimer_ = new OHOS::GraphicTimer(200, TimerCallBack, this, true); } Add(&logoBg_); Add(&titleTip_); Add(&logoMaking_); Add(&clickLeft_); Add(&clickRight_); Add(&clickLeftIcon_); Add(&clickRightIcon_); } PlayDialAIMakingIMGView::~PlayDialAIMakingIMGView(void) { logoMaking_.Stop(); if (logoTimer_ != nullptr) { logoTimer_->Stop(); delete logoTimer_; logoTimer_ = nullptr; } RemoveAll(); g_PlayDialAIMakingIMGView = nullptr; } PlayDialAIMakingIMGView *PlayDialAIMakingIMGView::GetInstance(void) { return g_PlayDialAIMakingIMGView; } void PlayDialAIMakingIMGView::TimerCallBackRun(void *arg) { PlayDialAIMakingIMGView *p_inst = (PlayDialAIMakingIMGView *)arg; static_print_info("[%s][%d]: %s,Result_:%d-%d\n", __FILE__, __LINE__, __func__, TjdUiAppPlayDialView::GetInstance().Result_, p_inst->tick_); if (TjdUiAppPlayDialView::GetInstance().Result_ == AI_RESULT_APP_MAKING) { if (p_inst->logoMaking_.GetState() != OHOS::Animator::START) p_inst->logoMaking_.Start(); p_inst->logoMaking_.SetVisible(true); } else if (TjdUiAppPlayDialView::GetInstance().Result_ == AI_RESULT_APP_DONE) { TjdUiAppPlayDialView::GetInstance().Result_ = AI_RESULT_LOADING_IMG; TjdUiAppPlayDialModel::GetInstance().LefunAiRequestTransmitImageData(); p_inst->tick_ = 0; } else if (TjdUiAppPlayDialView::GetInstance().Result_ == AI_RESULT_SELECT_IMG) { TjdUiAppPlayDialView::GetInstance().TipsIndex_ = PLAYDIAL_TIPS_SUCCESS; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_PREVIEW); } if (p_inst->tick_ <= 30 * 10) { p_inst->tick_++; } else { // 超时了,跳转到表盘制作页 if (p_inst->logoTimer_ != nullptr) { p_inst->logoTimer_->Stop(); p_inst->tick_ = 0; } TjdUiAppPlayDialView::GetInstance().TipsIndex_ = PLAYDIAL_TIPS_FAIL; TjdUiAppPlayDialView::GetInstance().ShowView(PlayDialViewIndex::PLAYDIAL_AI_PREVIEW); } } void PlayDialAIMakingIMGView::TimerCallBack(void *arg) { GraphicService::GetInstance()->PostGraphicEvent( std::bind([](void *arg) { PlayDialAIMakingIMGView::GetInstance()->TimerCallBackRun(arg); }, arg)); } void PlayDialAIMakingIMGView::ShowView() { extern std::string g_PlayDialPath; g_PlayDialPath.clear(); TjdUiAppPlayDialModel::GetInstance().LefunAiRequestImageData(); TjdUiScreenManage::SetScreenKeepOnTimeout(LEFUN_AI_SCREEN_AUTO_OFF_TIME); SetVisible(true); if (logoTimer_ != nullptr) { logoTimer_->Start(); } } void PlayDialAIMakingIMGView::HideView() { TjdUiScreenManage::ResetScreenKeepOnTimeout(); SetVisible(false); logoMaking_.Stop(); if (logoTimer_ != nullptr) { logoTimer_->Stop(); } } // class PlayDialAIMakingIMGView start // class PlayDialAIPreviewView start PlayDialAIPreviewView *g_PlayDialAIPreviewView{nullptr}; PlayDialAIPreviewView::PlayDialAIPreviewView() { g_PlayDialAIPreviewView = this; static_print_info("[%s][%d]: %s:%d", __FILE__, __LINE__, __func__, TjdUiAppPlayDialView::GetInstance().TipsIndex_); Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); SetStyle(OHOS::STYLE_BACKGROUND_COLOR, 0x00000000); SetOnDragListener(&TjdUiAppPlayDialPresenter::GetInstance()); logoBg_.SetPosition(0, 0, 466, 466); auto logoBg_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_BJ, PLAY_DIAL_BIN_PATH); if (logoBg_Res != nullptr) { logoBg_.SetSrc(logoBg_Res); } } PlayDialAIPreviewView::~PlayDialAIPreviewView() { RemoveAll(); g_PlayDialAIPreviewView = nullptr; } PlayDialAIPreviewView *PlayDialAIPreviewView::GetInstance(void) { return g_PlayDialAIPreviewView; } void PlayDialAIPreviewView::PageInit() { static_print_info("[%s][%d]: %s:%d", __FILE__, __LINE__, __func__, TjdUiAppPlayDialView::GetInstance().TipsIndex_); if (TjdUiAppPlayDialView::GetInstance().TipsIndex_ == PLAYDIAL_TIPS_FAIL) { // InitLabelHorCenter(titleTop_, 28, 16, 466, "AI表盘"); int16_t title_y = 260; // InitLabelHorCenter(titleTip_, 34, title_y, 466, "计算失败,请重试"); titleTip_.SetFont(TJD_VECTOR_FONT_FILENAME, 28); titleTip_.SetTextId(STR_ID_410); titleTip_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_MARQUEE); titleTip_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); titleTip_.SetPosition(0, title_y, 466, 37); logoBgPreview_.SetPosition(126, 80, 218, 166); auto img_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_PROMPT_FAIL, PLAY_DIAL_BIN_PATH); if (img_Res != nullptr) { logoBgPreview_.SetSrc(img_Res); } clickLeft_.SetPosition(103, 326, 92, 92); auto clickLeft_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_ICON_NO, PLAY_DIAL_BIN_PATH); if (clickLeft_Res != nullptr) { clickLeft_.SetSrc(clickLeft_Res); clickLeft_.SetViewId(PLAYDIAL_AI_PREVIEW_VIEW_BTN_LEFT_ID); clickLeft_.SetOnClickListener(&TjdUiAppPlayDialPresenter::GetInstance()); clickLeft_.SetTouchable(true); } clickRight_.SetPosition(271, 326, 92, 92); auto clickRight_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_ICON_CONFIRM, PLAY_DIAL_BIN_PATH); if (clickRight_Res != nullptr) { clickRight_.SetSrc(clickRight_Res); clickRight_.SetViewId(PLAYDIAL_AI_PREVIEW_VIEW_BTN_RIGHT_ID); clickRight_.SetOnClickListener(&TjdUiAppPlayDialPresenter::GetInstance()); clickRight_.SetTouchable(true); } Add(&logoBg_); Add(&titleTop_); Add(&titleTip_); Add(&logoBgPreview_); Add(&clickLeft_); Add(&clickRight_); } else { // InitLabelHorCenter(titleTop_, 28, 16, 466, "AI表盘"); // InitLabelHorCenter(titleTip_, 28, 288, 466, "是否设为表盘?"); titleTip_.SetFont(TJD_VECTOR_FONT_FILENAME, 28); titleTip_.SetTextId(STR_ID_410); titleTip_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_MARQUEE); titleTip_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); titleTip_.SetPosition(0, 288, 466, 37); logoBgPreview_.SetAutoEnable(false); logoBgPreview_.SetResizeMode(UIImageView::FILL); ImageInfo *logoBgPreviewRes{nullptr}; extern std::string g_PlayDialPreviewPath; extern std::string g_PlayDialPath; if (TjdUiAppPlayDialView::GetInstance().previousViewIndex_ == PLAYDIAL_AI_MAKING_IMG) { g_PlayDialPreviewPath = g_PlayDialPath; } else if (TjdUiAppPlayDialView::GetInstance().previousViewIndex_ == PLAYDIAL_DRAW_MAIN) { } else if (TjdUiAppPlayDialView::GetInstance().previousViewIndex_ == PLAYDIAL_LOG_SINGLE) { } if (g_PlayDialPreviewPath.size()) { if (TjdUiAppPlayDialModel::GetInstance().FileExists(g_PlayDialPreviewPath.c_str())) { logoBgPreviewRes = OHOS::ImageCacheManager::GetInstance().LoadSingleRes(g_PlayDialPreviewPath); } } if (logoBgPreviewRes == nullptr) { logoBgPreviewRes = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes( IMG_PLAY_DIAL_STYLE_3D_RENDERING, PLAY_DIAL_BIN_PATH); } if (logoBgPreviewRes != nullptr) { logoBgPreview_.SetSrc(logoBgPreviewRes); // logoBgPreview_.SetResizeMode(UIImageView::FILL); } static_print_info("PlayDialAIPreviewView::PageInit():%d-[%s][%s]", TjdUiAppPlayDialView::GetInstance().previousViewIndex_, g_PlayDialPath.c_str(), g_PlayDialPreviewPath.c_str()); clickLeft_.SetPosition(103, 326, 92, 92); auto clickLeft_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_ICON_NO, PLAY_DIAL_BIN_PATH); if (clickLeft_Res != nullptr) { clickLeft_.SetSrc(clickLeft_Res); clickLeft_.SetViewId(PLAYDIAL_AI_PREVIEW_VIEW_BTN_LEFT_ID); clickLeft_.SetOnClickListener(&TjdUiAppPlayDialPresenter::GetInstance()); clickLeft_.SetTouchable(true); } clickRight_.SetPosition(271, 326, 92, 92); auto clickRight_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_ICON_CONFIRM, PLAY_DIAL_BIN_PATH); if (clickRight_Res != nullptr) { clickRight_.SetSrc(clickRight_Res); clickRight_.SetViewId(PLAYDIAL_AI_PREVIEW_VIEW_BTN_RIGHT_ID); clickRight_.SetOnClickListener(&TjdUiAppPlayDialPresenter::GetInstance()); clickRight_.SetTouchable(true); } clickConfirm_.SetPosition(77, 378, 312, 88); clickRight_Res = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_PLAY_DIAL_ICON_SETTING, PLAY_DIAL_BIN_PATH); if (clickRight_Res != nullptr) { clickConfirm_.SetSrc(clickRight_Res); clickConfirm_.SetViewId(PLAYDIAL_AI_PREVIEW_VIEW_BTN_RIGHT_ID); clickConfirm_.SetOnClickListener(&TjdUiAppPlayDialPresenter::GetInstance()); clickConfirm_.SetTouchable(true); } if (TjdUiAppPlayDialView::GetInstance().selectType_ == DialSelectType::SELECT_TYPE_DRAW) { logoBgPreview_.SetPosition(0, 0, 466, 466); clickLeft_.SetVisible(false); clickRight_.SetVisible(false); clickConfirm_.SetVisible(true); titleTip_.SetVisible(false); } else { logoBgPreview_.SetPosition(113, 32, 240, 240); clickLeft_.SetVisible(true); clickRight_.SetVisible(true); clickConfirm_.SetVisible(false); titleTip_.SetVisible(true); } Add(&logoBg_); Add(&titleTop_); Add(&titleTip_); Add(&logoBgPreview_); Add(&clickLeft_); Add(&clickRight_); Add(&clickConfirm_); } } void PlayDialAIPreviewView::ShowView() { PageInit(); SetVisible(true); } void PlayDialAIPreviewView::HideView() { extern std::string g_PlayDialPreviewPath; OHOS::ImageCacheManager::GetInstance().UnloadSingleRes(g_PlayDialPreviewPath); SetVisible(false); } // class PlayDialAIPreviewView end } // namespace TJD