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

835 lines
28 KiB
C++

#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<TjdUiAppLefunAiPresenter>::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<HistoryItemInfo>();
}
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