mcu_hi3321_watch/tjd/ui/app/main/TjdUiAppMainPageMessage.cpp
2025-05-31 10:45:15 +08:00

228 lines
7.5 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*----------------------------------------------------------------------------
* Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved.
*
* Description:
*
* Author: huangshuyi
*
* Create: 2024-4
*--------------------------------------------------------------------------*/
#include "TjdUiAppMainPageMessage.h"
#include "components/ui_label.h"
#include "components/ui_scroll_view.h"
#include "wearable_log.h"
#include "ui_resource_image.h"
#include "common/image_cache_manager.h"
#include <time.h>
#include <unordered_map>
#include "gfx_utils/image_info.h"
#include "gfx_utils/heap_base.h"
#include "TjdUiImageIds.h"
#include "ui_label.h"
#include "TjdUiMemManage.h"
#include "sys_config.h"
#include "TjdUiMultiLanguageExt.h"
#include "sql_message.h"
using namespace OHOS;
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
#define IMAGE_BIN_PATH TJD_IMAGE_PATH"img_main_message.bin"
#define MESSAGE_CONTAINER_WIDTH 300
#define MESSAGE_CONTAINER_HEIGHT 100
#define MESSAGE_CONTAINER_GAP 30
static uint16_t msg_container_y;
struct ItemNode {
int resId;
char* title;
char* context;
char *timesample;
//ImageInfo* imgInfo;
};
static ItemNode message_list[] = {
{IMG_MAIN_MESSAGE_DINGDING, "张三", "今晚有会", "2024-5-21"},
{IMG_MAIN_MESSAGE_FACEBOOK, "张三", "今晚有会", "2024-5-21"},
{IMG_MAIN_MESSAGE_INSTAGRAM, "张三", "今晚有会", "2024-5-21"},
{IMG_MAIN_MESSAGE_FACEBOOKMESSENGER, "张三", "今晚有会", "2024-5-21"},
{IMG_MAIN_MESSAGE_KAKAOTALK, "张三", "今晚有会", "2024-5-21"},
};
static TjdUiAppMainPageMessage *g_pMainMessagePage = nullptr;
static void tjdui_create_message_item(UIViewGroup *cont, ItemNode *item)
{
UIViewGroup *container = new UIViewGroup();
container->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full);
container->SetStyle(STYLE_BORDER_RADIUS, 15);
container->SetPosition((Screen::GetInstance().GetWidth() - MESSAGE_CONTAINER_WIDTH) / 2, msg_container_y + 50, MESSAGE_CONTAINER_WIDTH, MESSAGE_CONTAINER_HEIGHT);
ImageInfo* imgInfo;
UIImageView *messageIcon = new UIImageView();
container->Add(messageIcon);
uint32_t icon_id = item->resId;
char *title = item->title;
char *context = item->context;
char *timesample = item->timesample;
imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(icon_id, IMAGE_BIN_PATH);
if (imgInfo == nullptr) {
static_print_warn("open img failed");
return;
}
messageIcon->SetPosition(10,10);
messageIcon->SetSrc(imgInfo);
messageIcon->SetViewId("messageIcon");
UILabel *labelTitle = new UILabel();
container->Add(labelTitle);
labelTitle->SetText(title);//需要换成多语言
labelTitle->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_20);
labelTitle->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
labelTitle->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
labelTitle->LayoutRightToSibling(messageIcon->GetViewId(), 0);
labelTitle->AlignTopToSibling(messageIcon->GetViewId(), 0);
labelTitle->SetViewId("labelTitle");
UILabel *labelContext = new UILabel();
container->Add(labelContext);
labelContext->SetText(context);//需要换成多语言
labelContext->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_20);
labelContext->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
labelContext->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
labelContext->LayoutBottomToSibling(labelTitle->GetViewId(), 10);
labelContext->AlignLeftToSibling(labelTitle->GetViewId(), 0);
msg_container_y += MESSAGE_CONTAINER_HEIGHT + MESSAGE_CONTAINER_GAP;
cont->Add(container);
}
TjdUiAppMainPageMessage::TjdUiAppMainPageMessage()
{
SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
g_pMainMessagePage = this;
}
TjdUiAppMainPageMessage::~TjdUiAppMainPageMessage()
{
UnLoad();
g_pMainMessagePage = nullptr;
}
TjdUiAppMainPageMessage *TjdUiAppMainPageMessage::GetInstance(void)
{
return g_pMainMessagePage;
}
void TjdUiAppMainPageMessage::PreLoad(void)
{
static_print_debug("TjdUiAppMainPageMessage::PreLoad..............");
if (!viewiInitStatus) {
InitView();
viewiInitStatus = true;
}
}
void TjdUiAppMainPageMessage::ScrollBegin(bool isActive)
{
//为1时是正处于消息页面为0时是没有处于消息页面
if (isActive == 0) {
UpdateView();
} else {
MessageTotalPage->FocusManage(false);
}
}
void TjdUiAppMainPageMessage::ScrollEnd(bool isActive)
{
//为0的时候是该界面已经完全移出为1的时候是该界面已经完全移入
if (isActive == 1) {
MessageTotalPage->FocusManage(true);
}
}
void TjdUiAppMainPageMessage::CoverBegin(bool isCovered)
{
//isCovered:当前屏幕没有被覆盖为0 1则为已被覆盖 覆盖开始时上抛
}
void TjdUiAppMainPageMessage::CoverEnd(bool isCovered)
{
//isCovered:当前屏幕没有被覆盖为0 1则为已被覆盖 覆盖结束后上抛
}
void TjdUiAppMainPageMessage::UnLoad(void)
{
if (viewiInitStatus) {
ImageCacheManager::GetInstance().UnloadAllInMultiRes(IMAGE_BIN_PATH);
viewiInitStatus = false;
//TjdUiMemManage::DeleteChildren(container);
}
if (MessageConfirmDelPage) {
delete MessageConfirmDelPage;
MessageConfirmDelPage = nullptr;
}
if (MessageNoMessagePage) {
delete MessageNoMessagePage;
MessageNoMessagePage = nullptr;
}
if (MessageTotalPage) {
delete MessageTotalPage;
MessageTotalPage = nullptr;
}
//printf("TjdUiAppMainPageMessage::UnLoad:%d..............\n");
// Main clock view is commonly used page, so we do not release it's resources inner slice.
}
void TjdUiAppMainPageMessage::UpdateView(void)
{
if (sql_message_get_message_num() == 0) {
MessageNoMessagePage->show();
MessageTotalPage->hide();
} else {
MessageTotalPage->UpdateMessagePageGroup();
MessageNoMessagePage->hide();
}
}
bool TjdUiAppMainPageMessage::InitView(void)
{
// sql_message_test();
//这里不能无消息和有消息单独申请,因为主页面再没有销毁的情况下有可能有消息,有可能没有消息
TjdUiMessageTotalPage::sliceId = (TjdUiAppViewId)NativeAbility::GetInstance().GetCurSliceId();
MessageNoMessagePage = new TjdUiMessageNoMessagePage();
MessageTotalPage = new TjdUiMessageTotalPage();
MessageConfirmDelPage = new TjdUiMessageConfirmDelPage();
container = MessageTotalPage->PageInit(nullptr);
MessageConfirmDelPage->PageInit(container);
MessageConfirmDelPage->SetParentPage(MessageTotalPage);
MessageNoMessagePage->PageInit(container);
if (sql_message_get_message_num() == 0) {
MessageConfirmDelPage->hide();
MessageTotalPage->hide();
MessageNoMessagePage->show();
} else {
MessageConfirmDelPage->hide();
MessageNoMessagePage->hide();
MessageTotalPage->show();
}
Add(container);
return true;
}
}