793 lines
31 KiB
C++
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
|