/*---------------------------------------------------------------------------- * 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 #include #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; } }