/*---------------------------------------------------------------------------- * Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved. * * Description: * * Author: huangshuyi * * Create: 2024-7 *--------------------------------------------------------------------------*/ #include "TjdUiMessageTotalPage.h" #include "TjdUiImageIds.h" #include "TjdUiMemManage.h" #include "TjdUiMessageCommon.h" #include "TjdUiMessageTotalView.h" #include "TjdUiMultiLanguageExt.h" #include "common/image_cache_manager.h" #include "components/ui_label_ext.h" #include "components/ui_view.h" #include "gfx_utils/heap_base.h" #include "gfx_utils/image_info.h" #include "sys_config.h" #include "wearable_log.h" #include #include #include 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" message_enum TjdUiMessageTotalPage::messageType; TjdUiAppViewId TjdUiMessageTotalPage::sliceId; static TjdUiMessageTotalPage *g_pMessageTotalPage = nullptr; TjdUiMessageTotalPage::TjdUiMessageTotalPage() { // SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); g_pMessageTotalPage = this; } TjdUiMessageTotalPage::~TjdUiMessageTotalPage() { static_print_debug("delete TjdUiMessageTotalPage......"); ImageCacheManager::GetInstance().UnloadAllInMultiRes(IMAGE_BIN_PATH); if (itemClickListener) { delete itemClickListener; itemClickListener = nullptr; } if (delClickListener) { delete delClickListener; delClickListener = nullptr; } scrollCont->ClearFocus(); if (container_ != nullptr) { //从slice来的 container_->Remove(pageGroup); TjdUiMemManage::DeleteChildren(pageGroup); } else { //从主页面来的 TjdUiMemManage::DeleteChildren(pageGroup); } // if (screenDragListener) { // delete screenDragListener; // screenDragListener = nullptr; // } g_pMessageTotalPage = nullptr; } TjdUiMessageTotalPage *TjdUiMessageTotalPage::GetInstance(void) { return g_pMessageTotalPage; } bool TjdUiMessageTotalPage::OnClick(UIView &view, const ClickEvent &event) { return true; } void TjdUiMessageTotalPage::FocusManage(bool flag) { if (flag) { scrollCont->RequestFocus(); } else { scrollCont->ClearFocus(); } } void TjdUiMessageTotalPage::show(void) { if (scrollCont) { scrollCont->SetVisible(true); } } void TjdUiMessageTotalPage::hide(void) { if (scrollCont) { scrollCont->SetVisible(false); } } void TjdUiMessageTotalPage::DeleteMessage(uint8_t index) { if (TjdUiMessageNoMessagePage::GetInstance()) { TjdUiMessageNoMessagePage::GetInstance()->show(); } sql_message_del_all_messages(); } int16_t TjdUiMessageTotalPage::CreateMessageItem(UIViewGroup *&cont, const uint8_t &index, const int16_t &x, const int16_t &y, UIView::OnClickListener *itemClickListener) { message_enum messageType = (message_enum)sql_message_get_type(index); //找到类型 UIViewGroup *textGroup = new UIViewGroup(); textGroup->SetTouchable(true); textGroup->SetOnClickListener(itemClickListener); textGroup->SetViewIndex((uint8_t)messageType); cont->Add(textGroup); textGroup->SetStyle(OHOS::STYLE_BORDER_RADIUS, 25); textGroup->SetStyle(STYLE_BACKGROUND_COLOR, 0xff262626); textGroup->SetAutoSize(false); textGroup->SetPosition(x, y); textGroup->SetWidth(Screen::GetInstance().GetWidth() - 120); // textGroup->SetPosition(60, 80,Screen::GetInstance().GetWidth() - 120, 200); UIViewGroup *line1Group = new UIViewGroup(); line1Group->SetViewId("line1Group"); textGroup->Add(line1Group); line1Group->LayoutTopOfParent(11); line1Group->SetStyle(STYLE_BACKGROUND_COLOR, 0xff262626); line1Group->SetAutoSize(true); UIImageView *imageType = new UIImageView(); line1Group->Add(imageType); TjdUiMessage *messageRes = TjdUiMessageResGet(messageType); if (messageRes == nullptr) { static_print_error("messageRes is null......"); return 0; } ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(messageRes->imageId, IMAGE_BIN_PATH); imageType->SetSrc(imgInfo); Vector2 itemScaleCenter = {0, 0}; float imgFac = (float)30 / imgInfo->header.width; Vector2 itemScaleFactor = {imgFac, imgFac}; // imageType->Scale(itemScaleFactor, itemScaleCenter); imageType->SetAutoEnable(false); imageType->Resize(40, 40); imageType->SetResizeMode(UIImageView::ImageResizeMode::FILL); imageType->SetViewId("messageIcon"); imageType->SetPosition(0, 0); line1Group->Remove(imageType); line1Group->Add(imageType); UILabelExt *labelType = new UILabelExt(); line1Group->Add(labelType); labelType->SetTextId(messageRes->nameId); //需要换成多语言 labelType->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_28); labelType->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); labelType->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); labelType->AlignVerCenterToSibling(imageType->GetViewId(), 0); labelType->LayoutRightToSibling(imageType->GetViewId(), 8); labelType->SetViewId("labelType"); line1Group->Remove(labelType); line1Group->Add(labelType); UILabel *labelMessageNum = new UILabel(); line1Group->Add(labelMessageNum); char messageNum[10]; uint8_t messageNumCount = sql_message_get_message_type_cnt(messageType); // printf("messageNumCount=%d\n", messageNumCount); snprintf(messageNum, sizeof(messageNum), "[%d]", messageNumCount); labelMessageNum->SetText(messageNum); //需要换成多语言 labelMessageNum->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_28); labelMessageNum->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); labelMessageNum->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); labelMessageNum->AlignVerCenterToSibling(labelType->GetViewId(), 0); labelMessageNum->LayoutRightToSibling(labelType->GetViewId(), 8); labelMessageNum->SetViewId("labelMessageNum"); line1Group->Remove(labelMessageNum); line1Group->Add(labelMessageNum); if (sql_message_get_read_flag(index)) { UIImageView *imageUnread = new UIImageView(); line1Group->Add(imageUnread); imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_MAIN_MESSAGE_UNREAD_DOT, IMAGE_BIN_PATH); imageUnread->SetSrc(imgInfo); imageUnread->AlignVerCenterToSibling(labelMessageNum->GetViewId(), 0); imageUnread->LayoutRightToSibling(labelMessageNum->GetViewId(), 8); line1Group->Remove(imageUnread); line1Group->Add(imageUnread); } line1Group->LayoutLeftOfParent((textGroup->GetWidth() - line1Group->GetWidth()) / 2); time_t timesample = sql_message_get_timestamp(index); struct tm *timeinfo = std::localtime(×ample); uint16_t year = timeinfo->tm_year + 1900; uint8_t month = timeinfo->tm_mon + 1; uint8_t day = timeinfo->tm_mday; uint8_t hour = timeinfo->tm_hour; uint8_t minute = timeinfo->tm_min; char strTime[30]; snprintf(strTime, sizeof(strTime), "%d-%d-%d %d:%d", year, month, day, hour, minute); // std::string strTime = "2024-5-21"; UILabel *labelTime = new UILabel(); textGroup->Add(labelTime); // labelTime->SetText(strTime.c_str()); labelTime->SetText(strTime); labelTime->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_28); labelTime->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); labelTime->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); labelTime->AlignHorCenterToSibling(line1Group->GetViewId(), 0); labelTime->LayoutBottomToSibling(line1Group->GetViewId(), 3); labelTime->SetViewId("labelTime"); // std::string strText = // "nnoodsfofdjojglfdjlgjfdslkjlkgjfdlkjnnodsfljglkjelkrjglkkndsnvsalkfkjaljlgkjrkejlkglkalkgj"; char *strText; sql_message_get_detail_info(index, &strText); UILabel *labelText = new UILabel(); textGroup->Add(labelText); // labelText->SetText(strText.c_str()); labelText->SetText(strText); labelText->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_28); labelText->SetLineBreakMode(UILabel::LINE_BREAK_WRAP); labelText->SetWidth(textGroup->GetWidth() - 40); labelText->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); labelText->AlignHorCenterToSibling(labelTime->GetViewId(), 0); labelText->LayoutBottomToSibling(labelTime->GetViewId(), 3); int16_t labelTextH = labelText->GetHeight(); int16_t labelTextY = labelText->GetY(); textGroup->SetHeight(labelTextY + labelTextH + 11); cont->Remove(textGroup); cont->Add(textGroup); return textGroup->GetRelativeRect().GetBottom(); } void TjdUiMessageTotalPage::UpdateMessagePageGroup(void) { TjdUiMemManage::DeleteChildren(messagePageGroup); if (itemClickListener) { delete itemClickListener; itemClickListener = nullptr; } if (delClickListener) { delete delClickListener; delClickListener = nullptr; } CreateMessagePageGroup(); show(); } void TjdUiMessageTotalPage::CreateMessagePageGroup(void) { messagePageGroup = new UIViewGroup(); messagePageGroup->SetViewId("messagePageGroup"); scrollCont->Add(messagePageGroup); messagePageGroup->SetAutoSize(true); messagePageGroup->SetPosition(0, 0); // pageGroup->SetWidth(Screen::GetInstance().GetWidth()); // pageGroup->SetHeight(Screen::GetInstance().GetHeight()); UILabelExt *labelNotify = new UILabelExt(); messagePageGroup->Add(labelNotify); // labelNotify->SetText("通知"); //需要换成多语言 labelNotify->SetTextId(STR_ID_288); labelNotify->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_30); labelNotify->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); labelNotify->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); labelNotify->LayoutTopOfParent(20); int16_t scrollW = scrollCont->GetWidth(); int16_t labelNotifyW = labelNotify->GetWidth(); labelNotify->LayoutLeftOfParent((scrollW - labelNotifyW) / 2); labelNotify->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full); itemClickListener = new ItemClickListener(); // sql_message_test(); uint8_t *type_list = new uint8_t[sql_message_get_max_number()]; uint8_t type_cnt = sql_message_get_message_type_list(type_list); #define ITEM_GAP_DISTANCE 20 int16_t y = 80; for (uint8_t i = 0; i < type_cnt; i++) { uint8_t index = sql_message_get_message_type_newest_index(type_list[i]); // sprintf("index=%d, type=%d\n", index, type_list[i]); y = CreateMessageItem(messagePageGroup, index, 60, y, itemClickListener); y += ITEM_GAP_DISTANCE; } delete[] type_list; UIImageView *imageDel = new UIImageView(); messagePageGroup->Add(imageDel); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(IMG_MAIN_MESSAGE_DELETE, IMAGE_BIN_PATH); if (y + imgInfo->header.height < Screen::GetInstance().GetHeight()) { y = Screen::GetInstance().GetHeight() - imgInfo->header.height; } imageDel->SetPosition(186, y); imageDel->SetSrc(imgInfo); imageDel->SetTouchable(true); delClickListener = new DelClickListener(); imageDel->SetOnClickListener(delClickListener); messagePageGroup->Remove(imageDel); messagePageGroup->Add(imageDel); uint16_t slice = NativeAbility::GetInstance().GetCurSliceId(); if (TJD_APP_VIEW_MAIN == slice) { scrollCont->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT); messagePageGroup->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT); pageGroup->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT); // screenDragListener = new TjdUiMessageScreenDragListener(); } // printf("messagePageGroup height:%d\n", messagePageGroup->GetHeight()); } UIViewGroup *TjdUiMessageTotalPage::PageInit(UIViewGroup *cont) { static_print_debug("TjdUiMessageTotalPage::PageInit:%p", cont); container_ = cont; pageGroup = new UIViewGroup(); if (container_ != nullptr) { //从slice来的 container_->Add(pageGroup); pageGroup->SetTouchable(true); pageGroup->SetDraggable(true); if (OHOS::PageTransitionMgr::GetInstance().GetTopSlideBackImage() == nullptr) { pageGroup->SetOnDragListener(this); } } pageGroup->SetViewId("TjdUiMessageTotalPage pageGroup"); pageGroup->SetPosition(0, 0); pageGroup->SetWidth(Screen::GetInstance().GetWidth()); pageGroup->SetHeight(Screen::GetInstance().GetHeight()); // if (sql_message_get_message_num() == 0) { // uint16_t slice = NativeAbility::GetInstance().GetCurSliceId(); // if (TJD_APP_VIEW_MAIN == slice) { // pageGroup->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT); // } // return pageGroup; // } if (scrollCont != nullptr) { return scrollCont; } // UIViewGroup *container = (UIViewGroup *)TjdUiMessageTotalView::GetInstance()->GetContainer(); if (container_ != nullptr) { //从slice来的 scrollCont = new UIScrollViewNested(); } else { //从主页面来的 scrollCont = new TjdUiMessageScroll(); } pageGroup->Add(scrollCont); scrollCont->SetViewId("TjdUiMessageTotalPage scrollCont"); scrollCont->SetScrollBlankSize(0); scrollCont->SetHorizontalScrollState(false); scrollCont->SetThrowDrag(true); //设置结束拖动时,是否产生惯性滑动动效 scrollCont->SetMaxScrollDistance(0); scrollCont->SetSwipeACCLevel(5); // 越大距离越长 scrollCont->SetDragACCLevel(10); //越大时间越短 scrollCont->SetReboundSize(Screen::GetInstance().GetHeight() >> 1); scrollCont->SetElastic(true); scrollCont->SetPosition(0, 0); scrollCont->SetWidth(Screen::GetInstance().GetWidth()); scrollCont->SetHeight(Screen::GetInstance().GetHeight()); CreateMessagePageGroup(); pageGroup->SetViewId("messagepage"); return pageGroup; } } // namespace TJD