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

793 lines
31 KiB
C++

/*----------------------------------------------------------------------------
* 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 <stdio.h>
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