#include "TjdUiAppLefunAiView.h" #include "TjdUiAppLefunAiModel.h" #include "TjdUiImageIds.h" #include "TjdUiMemManage.h" #include "TjdUiMultiLanguageExt.h" #include "animator/animator_manager.h" #include "common/image_cache_manager.h" #include "graphic_service.h" #include "sys_config.h" namespace TJD { #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 using namespace OHOS; osThreadId_t resend_audio_data_id = nullptr; static OHOS::GraphicTimer *waitTimer_ = nullptr; #define IMAGE_BIN_PATH TJD_IMAGE_PATH "img_lefun_ai.bin" #define LOADING_IMAGE_BIN_PATH TJD_IMAGE_PATH "img_loading.bin" TjdUiAppLefunAiView *g_pv_LefunAiView = nullptr; LefunAiAnswerView *g_pv_LefunAiAnswerView = nullptr; static LefunAiRecordingView *g_LefunAiRecordingView = nullptr; LefunAiView TjdUiAppLefunAiView::currentViewIndex_ = LEFUN_AI_VIEW_COUNT; static LefunAiAnalysisView *g_LefunAiAnalysisView = nullptr; // clang-format off 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; } static inline void InitLabel(OHOS::UILabel &label, uint8_t size, int16_t x, int16_t y, 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); label.SetPosition(x, y); } static 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); label.SetPosition(HorizontalCenter(label.GetWidth(), target), y); } static inline void InitLabelVerCenter(OHOS::UILabel &label, uint8_t size, int16_t x, 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); label.SetPosition(x, VerticalCenter(label.GetHeight(), target)); } static inline void InitLabelCenter(OHOS::UILabel &label, uint8_t size, int16_t parentWidth, int16_t parentHeight, 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); label.SetPosition(HorizontalCenter(label.GetWidth(), parentWidth), VerticalCenter(label.GetHeight(), parentHeight)); } // clang-format on bool LefunAiUIScrollView::OnDragStartEvent(const OHOS::DragEvent &event) { if (TjdUiAppLefunAiView::currentViewIndex_ != LefunAiView::LEFUN_AI_VIEW_MAIN) { return true; } isOnStart_ = true; return OHOS::UIScrollViewNested::OnDragStartEvent(event); } bool LefunAiUIScrollView::OnDragEvent(const OHOS::DragEvent &event) { if (!isOnStart_) { return true; } if (TjdUiAppLefunAiView::currentViewIndex_ != LefunAiView::LEFUN_AI_VIEW_MAIN) { return true; } return OHOS::UIScrollViewNested::OnDragEvent(event); } bool LefunAiUIScrollView::OnDragEndEvent(const OHOS::DragEvent &event) { if (!isOnStart_) { return true; } isOnStart_ = false; if (TjdUiAppLefunAiView::currentViewIndex_ != LefunAiView::LEFUN_AI_VIEW_MAIN) { return true; } return OHOS::UIScrollViewNested::OnDragEndEvent(event); } TjdUiAppLefunAiView::TjdUiAppLefunAiView() { g_pv_LefunAiView = this; } TjdUiAppLefunAiView::~TjdUiAppLefunAiView() { g_pv_LefunAiView = nullptr; } TjdUiAppLefunAiView *TjdUiAppLefunAiView::GetInstance(void) { return g_pv_LefunAiView; } void TjdUiAppLefunAiView::OnStart() { static_print_info("TjdUiAppLefunAiView::OnStart"); View::OnStart(); TjdUiAppLefunAiModel::GetInstance().AudioInit(); OHOS::ImageCacheManager::GetInstance().LoadAllInMultiRes(IMAGE_BIN_PATH); InitHistoryListResource(); if (mainView_ == nullptr) { mainView_ = new LefunAiUIScrollView(); } mainView_->SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); // mainView_->SetOnDragListener(TjdUiAppLefunAiPresenter::GetInstance()); AddViewToRootContainer(mainView_); ShowView(LEFUN_AI_VIEW_MAIN); } void TjdUiAppLefunAiView::OnStop() { TjdUiAppLefunAiModel::GetInstance().LefunAiRequestExitLefunAi(); OHOS::RootView::GetInstance()->Remove(mainView_); // if(historyItemList_ != nullptr){ // mainView_->Remove(historyItemList_); // delete mainView_; // historyItemList_ = nullptr; // } if (mainView_ != nullptr) { mainView_->RemoveAll(); delete mainView_; mainView_ = nullptr; } OHOS::ImageCacheManager::GetInstance().UnloadAllInMultiRes(IMAGE_BIN_PATH); } void TjdUiAppLefunAiView::InitTargetView(LefunAiView index) { if (viewManager_[index] != nullptr) { return; } // clang-format off switch (index) { case LEFUN_AI_VIEW_MAIN: viewManager_[index] = new TjdUiAppLefunAiMainView(); break; case LEFUN_AI_VIEW_NO_CONNECT_VIEW: viewManager_[index] = new LefunAiNoConnectView(); break; case LEFUN_AI_VIEW_RECORDING_VIEW: viewManager_[index] = new LefunAiRecordingView(); break; case LEFUN_AI_VIEW_ANALYSIS_VIEW: viewManager_[index] = new LefunAiAnalysisView(); break; case LEFUN_AI_VIEW_TIME_OUT_VIEW: viewManager_[index] = new LefunAiTiemOutView(); break; case LEFUN_AI_VIEW_ANSWER_VIEW: viewManager_[index] = new LefunAiAnswerView(); break; case LEFUN_AI_VIEW_NO_CONTENT_VIEW: viewManager_[index] = new LefunAiNoContentInputView(); break; case LEFUN_AI_VIEW_HISTORY_VIEW: viewManager_[index] = new LefunAiHistoryRecordView(); break; default: break; } // clang-format on if (viewManager_[index] == nullptr) { return; } viewManager_[index]->SetPosition(0, 0); viewManager_[index]->SetVisible(false); mainView_->Add(viewManager_[index]); } void TjdUiAppLefunAiView::ShowView(LefunAiView showIndex) { if (showIndex < 0 || showIndex >= LEFUN_AI_VIEW_COUNT) { return; } InitTargetView(showIndex); if (currentViewIndex_ >= 0 && currentViewIndex_ < LEFUN_AI_VIEW_COUNT && viewManager_[currentViewIndex_] != nullptr) { viewManager_[currentViewIndex_]->HideView(); } if (viewManager_[showIndex] != nullptr) { viewManager_[showIndex]->ShowView(); } currentViewIndex_ = showIndex; } void TjdUiAppLefunAiView::InitHistoryListResource() { History lefunAiHistory; TjdUiAppLefunAiModel::GetInstance().loadFromJson(&lefunAiHistory); if (historyItemList_ == nullptr) { historyItemList_ = new std::list(); } historyItemList_->clear(); for (int i = 0; i < lefunAiHistory.total_records; ++i) { historyItemList_->push_back({lefunAiHistory.records[i].question, lefunAiHistory.records[i].answer}); } } #pragma endregion #pragma region TjdUiAppLefunAiMainView TjdUiAppLefunAiMainView::TjdUiAppLefunAiMainView() { SetPosition(0, 0, 466, 466); if (OHOS::PageTransitionMgr::GetInstance().GetTopSlideBackImage() == nullptr) { SetOnDragListener(TjdUiAppLefunAiPresenter::GetInstance()); } auto imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_BJ, IMAGE_BIN_PATH); imgBg_.SetPosition(0, 0); if (imgInfo != nullptr) { imgBg_.SetSrc(imgInfo); } imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_HISTORY, IMAGE_BIN_PATH); imgHistory_.SetPosition(191, 20); if (imgInfo != nullptr) { imgHistory_.SetSrc(imgInfo); } imgHistory_.SetViewId(MAIN_VIEW_HISTORY_BTN_ID); imgHistory_.SetTouchable(true); imgHistory_.SetOnClickListener(TjdUiAppLefunAiPresenter::GetInstance()); InitLabelHorCenter(lefunAi_, 34, 126, 466, "Lefun AI"); // InitLabelHorCenter(brief_, 28, 172, 466, "全职全解的AI百科"); brief_.SetFont(TJD_VECTOR_FONT_FILENAME, 34); brief_.SetTextId(STR_ID_578); brief_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_MARQUEE); brief_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); brief_.SetPosition(0, 172, 466, 47); // InitLabelHorCenter(guideLabel_, 32, 249, 466, "戳下方体验"); guideLabel_.SetFont(TJD_VECTOR_FONT_FILENAME, 34); guideLabel_.SetTextId(STR_ID_369); guideLabel_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_MARQUEE); guideLabel_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); guideLabel_.SetPosition(0, 249, 466, 47); imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_PULL_UP, IMAGE_BIN_PATH); guideImg_.SetPosition(218, 305); if (imgInfo != nullptr) { guideImg_.SetSrc(imgInfo); } imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_FORWARD, IMAGE_BIN_PATH); imgConfirm_.SetPosition(187, 352); if (imgInfo != nullptr) { imgConfirm_.SetSrc(imgInfo); } imgConfirm_.SetViewId(MAIN_VIEW_ID); imgConfirm_.SetTouchable(true); imgConfirm_.SetOnClickListener(TjdUiAppLefunAiPresenter::GetInstance()); Add(&imgBg_); Add(&imgHistory_); Add(&lefunAi_); Add(&brief_); Add(&guideLabel_); Add(&guideImg_); Add(&imgConfirm_); } void TjdUiAppLefunAiMainView::ShowView() { TjdUiAppLefunAiModel::GetInstance().RequestIntoLefunAi(); SetVisible(true); } void TjdUiAppLefunAiMainView::HideView() { SetVisible(false); } #pragma endregion #pragma region TjdUiAppLefunAiRecordingView LefunAiNoConnectView::LefunAiNoConnectView() { SetPosition(0, 0, 466, 466); if (OHOS::PageTransitionMgr::GetInstance().GetTopSlideBackImage() == nullptr) { SetOnDragListener(TjdUiAppLefunAiPresenter::GetInstance()); } auto imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_NO_CONNECT, IMAGE_BIN_PATH); imgNoConnect_.SetPosition(67, 155); if (imgInfo != nullptr) { imgNoConnect_.SetSrc(imgInfo); } // InitLabelHorCenter(lbNoConnect_, 28, 305, 466, "请连接APP"); lbNoConnect_.SetPosition(80, 308, 291, 47); lbNoConnect_.SetFont(TJD_VECTOR_FONT_FILENAME, 36); lbNoConnect_.SetTextId(STR_ID_557); lbNoConnect_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); lbNoConnect_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); Add(&imgNoConnect_); Add(&lbNoConnect_); } #pragma endregion #pragma region LefunAiRecordingView static void RecordingTimerCallBack(void *arg) { GraphicService::GetInstance()->PostGraphicEvent( std::bind([](void *arg) { LefunAiRecordingView::GetInstance()->UpdateRecordingTime(); }, arg)); } LefunAiRecordingView::LefunAiRecordingView() { g_LefunAiRecordingView = this; const int recordingAnimatorId[] = {IMG_LEFUN_AI_LEFUNAI_DT_01_03, IMG_LEFUN_AI_LEFUNAI_DT_02_03, IMG_LEFUN_AI_LEFUNAI_DT_03_03, IMG_LEFUN_AI_LEFUNAI_DT_04_03, IMG_LEFUN_AI_LEFUNAI_DT_05_03, IMG_LEFUN_AI_LEFUNAI_DT_06_03}; SetPosition(0, 0, 466, 466); SetOnDragListener(TjdUiAppLefunAiPresenter::GetInstance()); auto imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_BJ, IMAGE_BIN_PATH); imgBg_.SetPosition(0, 0); if (imgInfo != nullptr) { imgBg_.SetSrc(imgInfo); } imgBg_.SetStyle(STYLE_IMAGE_OPA, 127); InitLabel(recordingGoal_, 40, 125, 60, "00:00"); InitLabel(targetGoal_, 40, 233, 60, "/00:30"); imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_CONFIRM, IMAGE_BIN_PATH); imgConfirm_.SetPosition(187, 352); if (imgInfo != nullptr) { imgConfirm_.SetSrc(imgInfo); } imgConfirm_.SetViewId(RECORDING_VIEW_ID); imgConfirm_.SetTouchable(true); imgConfirm_.SetOnClickListener(TjdUiAppLefunAiPresenter::GetInstance()); auto &imgManager = OHOS::ImageCacheManager::GetInstance(); for (int i = 0; i < 6; i++) { animatorRecordingInfo_[i].imageInfo = imgManager.LoadOneInMultiRes(recordingAnimatorId[i], IMAGE_BIN_PATH); animatorRecordingInfo_[i].pos = {76, 139}; animatorRecordingInfo_[i].width = 316; animatorRecordingInfo_[i].height = 95; animatorRecordingInfo_[i].imageType = OHOS::IMG_SRC_IMAGE_INFO; } // /* 动画页面不允许滑动 */ // SetIntercept(true); // SetTouchable(false); animator_.SetPosition(76, 139, 316, 95); animator_.SetImageAnimatorSrc(animatorRecordingInfo_, 6, 100); // InitLabel(guideLabel_, 28, 104, 271, "试试对我说\n“中国有多少个省份”"); guideLabel_.SetPosition(0, 271, 466, 47); guideLabel_.SetFont(TJD_VECTOR_FONT_FILENAME, 28); guideLabel_.SetTextId(STR_ID_371); guideLabel_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); guideLabel_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); if (recordingTimer_ == nullptr) { recordingTimer_ = new OHOS::GraphicTimer(1000, RecordingTimerCallBack, nullptr, true); } Add(&imgBg_); Add(&recordingGoal_); Add(&targetGoal_); Add(&imgConfirm_); Add(&guideLabel_); Add(&animator_); } LefunAiRecordingView::~LefunAiRecordingView() { g_LefunAiRecordingView = nullptr; if (recordingTimer_ != nullptr) { delete recordingTimer_; recordingTimer_ = nullptr; } RemoveAll(); }; void LefunAiRecordingView::UpdateRecordingTime() { char timeStr[10] = {0}; recordingTime++; memset(timeStr, 0, sizeof(timeStr)); sprintf(timeStr, "%02d:%02d", 0, recordingTime); InitLabel(recordingGoal_, 40, 125, 60, timeStr); if (recordingTime > 30) { recordingTime = 0; recordingTimer_->Stop(); TjdUiAppLefunAiView::GetInstance()->ShowView(LEFUN_AI_VIEW_ANALYSIS_VIEW); } } LefunAiRecordingView *LefunAiRecordingView::GetInstance(void) { return g_LefunAiRecordingView; } void LefunAiRecordingView::ShowView() { recordingGoal_.SetText("00:00"); TjdUiAppLefunAiModel::GetInstance().CloseAutoScreenOff(); recordingTime = 0; animator_.Start(); recordingTimer_->Start(); TjdUiAppLefunAiModel::GetInstance().RecordStart(); SetVisible(true); } void LefunAiRecordingView::HideView() { TjdUiAppLefunAiModel::GetInstance().OpenAutoScreenOff(); TjdUiAppLefunAiModel::GetInstance().RecordStop(); animator_.Stop(); recordingTimer_->Stop(); SetVisible(false); } #pragma endregion #pragma region LefunAiAnalysisView static uint8_t analysisCount = 0; static uint8_t delayCount = 0; static void AnalysisTimerCallBack(void *arg) { analysisCount++; delayCount++; GraphicService::GetInstance()->PostGraphicEvent(std::bind( [](void *arg) { if (delayCount >= 10) { delayCount = 0; if (!TjdUiAppLefunAiModel::GetInstance().GetAiAudioTransFlag()) { TjdUiAppLefunAiView::GetInstance()->ShowView(LEFUN_AI_VIEW_NO_CONTENT_VIEW); } else { if (analysisCount >= 30) { TjdUiAppLefunAiView::GetInstance()->ShowView(LEFUN_AI_VIEW_TIME_OUT_VIEW); } } } }, arg)); } LefunAiAnalysisView::LefunAiAnalysisView() { g_LefunAiAnalysisView = this; SetPosition(0, 0, 466, 466); SetOnDragListener(TjdUiAppLefunAiPresenter::GetInstance()); const int analysisAnimatorId[] = { IMG_LOADING_LOADING_01_06, IMG_LOADING_LOADING_02_06, IMG_LOADING_LOADING_03_06, IMG_LOADING_LOADING_04_06, IMG_LOADING_LOADING_05_06, IMG_LOADING_LOADING_06_06, IMG_LOADING_LOADING_07_06, IMG_LOADING_LOADING_08_06, IMG_LOADING_LOADING_09_06, IMG_LOADING_LOADING_10_06, IMG_LOADING_LOADING_11_06, }; auto &imgManager = OHOS::ImageCacheManager::GetInstance(); for (int i = 0; i < 11; i++) { animatorAnalysisInfo_[i].imageInfo = imgManager.LoadOneInMultiRes(analysisAnimatorId[i], LOADING_IMAGE_BIN_PATH); animatorAnalysisInfo_[i].pos = {172, 131}; animatorAnalysisInfo_[i].width = 121; animatorAnalysisInfo_[i].height = 121; animatorAnalysisInfo_[i].imageType = OHOS::IMG_SRC_IMAGE_INFO; } /* 动画页面不允许滑动 */ SetIntercept(true); SetTouchable(false); animator_.SetPosition(172, 131, 121, 121); animator_.SetImageAnimatorSrc(animatorAnalysisInfo_, 11, 100); lbAnalysis_.SetPosition(0, 327, 466, 47); lbAnalysis_.SetFont(TJD_VECTOR_FONT_FILENAME, 28); lbAnalysis_.SetTextId(STR_ID_372); lbAnalysis_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); lbAnalysis_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); if (analysisTimer_ == nullptr) { analysisTimer_ = new OHOS::GraphicTimer(1000, AnalysisTimerCallBack, nullptr, true); } Add(&animator_); Add(&lbAnalysis_); } LefunAiAnalysisView::~LefunAiAnalysisView() { g_LefunAiAnalysisView = nullptr; if (analysisTimer_ != nullptr) { analysisTimer_->Stop(); delete analysisTimer_; analysisTimer_ = nullptr; } RemoveAll(); }; void LefunAiAnalysisView::ShowView() { TjdUiAppLefunAiModel::GetInstance().CloseAutoScreenOff(); analysisCount = 0; analysisTimer_->Start(); animator_.Start(); SetVisible(true); } void LefunAiAnalysisView::HideView() { TjdUiAppLefunAiModel::GetInstance().OpenAutoScreenOff(); analysisTimer_->Stop(); animator_.Stop(); SetVisible(false); } void LefunAiAnalysisView::ViewExitEvent() { TjdUiAppLefunAiModel::GetInstance().OpenAutoScreenOff(); analysisTimer_->Stop(); animator_.Stop(); } LefunAiAnalysisView *LefunAiAnalysisView::GetInstance(void) { return g_LefunAiAnalysisView; } #pragma endregion #pragma region LefunAiTiemOutView LefunAiTiemOutView::LefunAiTiemOutView() { SetPosition(0, 0, 466, 466); SetOnDragListener(TjdUiAppLefunAiPresenter::GetInstance()); auto imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_PROMPT_FAIL, IMAGE_BIN_PATH); imgTimeOutBg_.SetPosition(134, 92); if (imgInfo != nullptr) { imgTimeOutBg_.SetSrc(imgInfo); } // InitLabelHorCenter(lbfail_, 36, 257, 466, "分析失败,请重试"); lbfail_.SetPosition(0, 257, 466, 47); lbfail_.SetFont(TJD_VECTOR_FONT_FILENAME, 36); lbfail_.SetTextId(STR_ID_374); lbfail_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); lbfail_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_CANCEL, IMAGE_BIN_PATH); imgCancel_.SetPosition(103, 326); if (imgInfo != nullptr) { imgCancel_.SetSrc(imgInfo); } imgCancel_.SetViewId(TIMEOUT_VIEW_CANCEL_ID); imgCancel_.SetTouchable(true); imgCancel_.SetOnClickListener(TjdUiAppLefunAiPresenter::GetInstance()); imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_PLAY, IMAGE_BIN_PATH); imgRetry_.SetPosition(271, 326); if (imgInfo != nullptr) { imgRetry_.SetSrc(imgInfo); } imgRetry_.SetViewId(TIMEOUT_VIEW_RETRY_ID); imgRetry_.SetTouchable(true); imgRetry_.SetOnClickListener(TjdUiAppLefunAiPresenter::GetInstance()); Add(&imgTimeOutBg_); Add(&lbfail_); Add(&imgCancel_); Add(&imgRetry_); } #pragma endregion #pragma region LefunAiAnswerView static void waitTimerCallBack(void *arg) { GraphicService::GetInstance()->PostGraphicEvent( std::bind([](void *arg) { LefunAiAnswerView::GetInstance()->SetDraggable(true); }, arg)); } AnswerView::AnswerView() { Resize(400, 157); // SetStyle(OHOS::STYLE_BACKGROUND_COLOR, 0xff262626); lbAnswer_.SetFont(TJD_VECTOR_FONT_FILENAME, 24); lbAnswer_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); lbAnswer_.SetText("此处为AI模板反馈信息内容"); lbAnswer_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); lbAnswer_.SetPosition(94, 30, 306, 150); Add(&lbAnswer_); } static uint16_t last_height = 0; LefunAiAnswerView::LefunAiAnswerView() { g_pv_LefunAiAnswerView = this; SetPosition(0, 0, 466, 466); SetOnDragListener(TjdUiAppLefunAiPresenter::GetInstance()); lbQuestionBg_.SetPosition(58, 58, 350, 100); lbQuestionBg_.SetStyle(STYLE_BACKGROUND_COLOR, 0xff262626); lbQuestionBg_.SetStyle(STYLE_BORDER_RADIUS, 50); auto imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_ASKING_QUESTIONS, IMAGE_BIN_PATH); imgQuestion_.SetPosition(78, 78); if (imgInfo != nullptr) { imgQuestion_.SetSrc(imgInfo); } lbQuestion_.SetFont(TJD_VECTOR_FONT_FILENAME, 30); lbQuestion_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_OSCILLATION); lbQuestion_.SetText("此处为用户询问内容、此处为用户询问内容"); lbQuestion_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); lbQuestion_.SetPosition(152, 80, 215, 55); answerView_.SetPosition(33, 157); imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_AI, IMAGE_BIN_PATH); imgAnswer_.SetPosition(18, 167); if (imgInfo != nullptr) { imgAnswer_.SetSrc(imgInfo); } imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_FORWARD, IMAGE_BIN_PATH); imgConfirm_.SetPosition(187, 352); if (imgInfo != nullptr) { imgConfirm_.SetSrc(imgInfo); } imgConfirm_.SetViewId(ANSWER_VIEW_ID); imgConfirm_.SetTouchable(true); imgConfirm_.SetOnClickListener(TjdUiAppLefunAiPresenter::GetInstance()); if (waitTimer_ == nullptr) { waitTimer_ = new OHOS::GraphicTimer(500, waitTimerCallBack, nullptr, false); } Add(&answerView_); Add(&lbQuestionBg_); Add(&imgQuestion_); Add(&lbQuestion_); Add(&imgAnswer_); Add(&imgConfirm_); } void LefunAiAnswerView::RefreshAnswerView() { extern std::string question; extern std::string answer; lbQuestionBg_.SetY(58); imgQuestion_.SetY(78); // imgAnswer_.SetY(173); lbQuestion_.SetY(81); // lbAnswer_.SetY(175); // InitLabel(lbQuestion_, 24, 156, 81, question.c_str()); lbQuestion_.SetText(question.c_str()); answerView_.SetAnswer(answer); } void LefunAiAnswerView::ShowView() { // SetDraggable(false); ScrollBy(0, 966); // answerView_.ScrollBy(0,answerView_.GetRect().GetBottom()); RefreshAnswerView(); // waitTimer_->Start(); SetVisible(true); } void LefunAiAnswerView::HideView() { if (waitTimer_ != nullptr) { waitTimer_->Stop(); } SetVisible(false); } LefunAiAnswerView *LefunAiAnswerView::GetInstance(void) { return g_pv_LefunAiAnswerView; } LefunAiAnswerView::~LefunAiAnswerView() { g_pv_LefunAiAnswerView = nullptr; if (waitTimer_ != nullptr) { waitTimer_->Stop(); delete waitTimer_; waitTimer_ = nullptr; } RemoveAll(); }; #pragma endregion #pragma region LefunAiNoContentInputView LefunAiNoContentInputView::LefunAiNoContentInputView() { SetPosition(0, 0, 466, 466); SetOnDragListener(TjdUiAppLefunAiPresenter::GetInstance()); auto imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_FAIL, IMAGE_BIN_PATH); imgNoContent_.SetPosition(129, 76); if (imgInfo != nullptr) { imgNoContent_.SetSrc(imgInfo); } // InitLabelHorCenter(lbNoContent_, 36, 274, 466, "无内容输入,请重试"); lbNoContent_.SetPosition(0, 274, 466, 47); lbNoContent_.SetFont(TJD_VECTOR_FONT_FILENAME, 36); lbNoContent_.SetTextId(STR_ID_375); lbNoContent_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); lbNoContent_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_RETURN, IMAGE_BIN_PATH); imgReturn_.SetPosition(187, 352); if (imgInfo != nullptr) { imgReturn_.SetSrc(imgInfo); } imgReturn_.SetViewId(NO_CONTENT_VIEW_ID); imgReturn_.SetTouchable(true); imgReturn_.SetOnClickListener(TjdUiAppLefunAiPresenter::GetInstance()); Add(&imgNoContent_); Add(&lbNoContent_); Add(&imgReturn_); } #pragma endregion #pragma region LefunAiHistoryRecordView LefunAiHistoryRecordView::LefunAiHistoryRecordView() { SetPosition(0, 0, 466, 466); SetOnDragListener(TjdUiAppLefunAiPresenter::GetInstance()); // InitLabelHorCenter(lbTitle_, 28, 17, 466, "历史记录"); lbTitle_.SetFont(TJD_VECTOR_FONT_FILENAME, 28); lbTitle_.SetTextId(STR_ID_370); lbTitle_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_ADAPT); lbTitle_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); lbTitle_.SetPosition(HorizontalCenter(lbTitle_.GetWidth(), 466), 17); auto imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_NO_DATA, IMAGE_BIN_PATH); imgNoRecord_.SetPosition(170, 106); if (imgInfo != nullptr) { imgNoRecord_.SetSrc(imgInfo); } imgNoRecord_.SetVisible(false); // InitLabelHorCenter(lbNoRecord_, 28, 294, 466, "暂无记录!"); lbNoRecord_.SetFont(TJD_VECTOR_FONT_FILENAME, 28); lbNoRecord_.SetTextId(STR_ID_579); lbNoRecord_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_ADAPT); lbNoRecord_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); lbNoRecord_.SetPosition(HorizontalCenter(lbNoRecord_.GetWidth(), 466), 294); lbNoRecord_.SetVisible(false); imgInfo = OHOS::ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_LEFUN_AI_RETURN, IMAGE_BIN_PATH); imgReturn_.SetPosition(187, 352); if (imgInfo != nullptr) { imgReturn_.SetSrc(imgInfo); } imgReturn_.SetViewId(HISTORT_VIEW_ID); imgReturn_.SetTouchable(true); imgReturn_.SetOnClickListener(TjdUiAppLefunAiPresenter::GetInstance()); listAdapter_ = new TjdUiAppLefunAiAdapter(); historyList_ = new UIList(UIList::VERTICAL); historyList_->SetPosition(0, 68); historyList_->Resize(HORIZONTAL_RESOLUTION, 312); historyList_->SetThrowDrag(true); historyList_->EnableAutoAlign(true); historyList_->SetElastic(true); historyList_->SetAdapter(listAdapter_); historyList_->SetYScrollBarVisible(true); Add(&lbTitle_); Add(&lbNoRecord_); Add(&imgNoRecord_); Add(historyList_); Add(&imgReturn_); } LefunAiHistoryRecordView::~LefunAiHistoryRecordView() { if (historyList_ != nullptr) { delete historyList_; historyList_ = nullptr; } if (listAdapter_ != nullptr) { delete listAdapter_; listAdapter_ = nullptr; } RemoveAll(); } void LefunAiHistoryRecordView::ShowView() { printf("656 total_records = %d\n", TjdUiAppLefunAiModel::GetInstance().get_total_records_from_json()); if (TjdUiAppLefunAiModel::GetInstance().get_total_records_from_json()) { TjdUiAppLefunAiView::GetInstance()->InitHistoryListResource(); historyList_->SetVisible(true); historyList_->RefreshList(); imgNoRecord_.SetVisible(false); lbNoRecord_.SetVisible(false); } else { historyList_->SetVisible(false); imgNoRecord_.SetVisible(true); lbNoRecord_.SetVisible(true); } SetVisible(true); } void LefunAiHistoryRecordView::HideView() { SetVisible(false); } #pragma endregion } // namespace TJD