/*---------------------------------------------------------------------------- * Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved. * * Description: * * Author: huangshuyi * * Create: 2024-7 *--------------------------------------------------------------------------*/ #include "TjdUiMessageDetailsPage.h" #include "TjdUiImageIds.h" #include "TjdUiLauncher.h" #include "TjdUiMemManage.h" #include "TjdUiMessageCommon.h" #include "TjdUiMessageDetailsView.h" #include "TjdUiMessageTotalView.h" #include "TjdUiMultiLanguageExt.h" #include "common/image_cache_manager.h" #include "components/ui_label.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 "sql_message.h" #include "sys_config.h" #include "ui_label.h" #include "ui_label_ext.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" static TjdUiMessageDetailsPage *g_pMessageDetailsPage = nullptr; TjdUiMessageDetailsPage::TjdUiMessageDetailsPage() { // SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); g_pMessageDetailsPage = this; } TjdUiMessageDetailsPage::~TjdUiMessageDetailsPage() { static_print_debug("delete TjdUiMessageDetailsPage......\n"); if (delClickListener) { delete delClickListener; delClickListener = nullptr; } container_->Remove(pageGroup); TjdUiMemManage::DeleteChildren(pageGroup); // if (screenDragListener) { // delete screenDragListener; // screenDragListener = nullptr; // } g_pMessageDetailsPage = nullptr; } TjdUiMessageDetailsPage *TjdUiMessageDetailsPage::GetInstance(void) { return g_pMessageDetailsPage; } bool TjdUiMessageDetailsPage::OnClick(UIView &view, const ClickEvent &event) { return true; } void TjdUiMessageDetailsPage::show(void) { static_print_debug("TjdUiMessageDetailsPage::show\n"); if (scrollCont) { scrollCont->SetVisible(true); } } void TjdUiMessageDetailsPage::hide(void) { static_print_debug("TjdUiMessageDetailsPage::hide\n"); if (scrollCont) { scrollCont->SetVisible(false); } } void TjdUiMessageDetailsPage::DeleteMessage(uint8_t index) { static_print_debug("TjdUiMessageDetailsPage::DeleteMessage\n"); NativeAbility::GetInstance().ChangeSlice(TJD_APP_VIEW_MESSAGE_PARTICULAR); } int16_t TjdUiMessageDetailsPage::CreateMessageItem(UIViewGroup *&cont, const uint8_t &index, const int16_t &x, const int16_t &y) { static_print_debug("CreateMessageItem\n"); // textGroup->SetPosition(60, 80,Screen::GetInstance().GetWidth() - 120, 200); 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(); cont->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->SetX(scrollCont->GetWidth() / 2 - labelTime->GetWidth() / 2); labelTime->SetY(y); labelTime->SetViewId("labelTime"); // std::string strText = // "nnoodsfofdjojglfdjlgjfdslkjlkgjfdlkjnnodsfljglkjelkrjglkkndsnvsalkfkjaljlgkjrkejlkglkalkgj"; char *strText; sql_message_get_detail_info(index, &strText); UILabel *labelText = new UILabel(); cont->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(scrollCont->GetWidth() - 80); labelText->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); labelText->SetX((scrollCont->GetWidth() - labelText->GetWidth()) / 2); labelText->LayoutBottomToSibling(labelTime->GetViewId(), 3); int16_t labelTextH = labelText->GetHeight(); int16_t labelTextY = labelText->GetY(); // printf("text width:%d,height:%d,y:%d,cont width:%d,height:%d,y:%d\n", labelText->GetWidth(), // labelText->GetHeight(), labelTextY, cont->GetWidth(), cont->GetHeight(), cont->GetY()); return labelTextH + labelTextY; } void TjdUiMessageDetailsPage::CreateMessagePageGroup(void) { uint8_t msgIndex = TjdUiMessageParticularPage::msgIndex; if (TJD::TjdUiLauncher::GetInstance().GetExtraData() != nullptr) { msgIndex = *(uint8_t *)(TJD::TjdUiLauncher::GetInstance().GetExtraData()); } messagePageGroup = new UIViewGroup(); scrollCont->Add(messagePageGroup); messagePageGroup->SetAutoSize(true); messagePageGroup->SetPosition(0, 0); // pageGroup->SetWidth(Screen::GetInstance().GetWidth()); // pageGroup->SetHeight(Screen::GetInstance().GetHeight()); UIImageView *imageType = new UIImageView(); messagePageGroup->Add(imageType); int16_t scrollW = scrollCont->GetWidth(); TjdUiMessage *messageRes = TjdUiMessageResGet(sql_message_get_type(msgIndex)); ImageInfo *imgInfo = ImageCacheManager::GetInstance().LoadOneInMultiRes(messageRes->imageId, IMAGE_BIN_PATH); imageType->SetSrc(imgInfo); imageType->SetAutoEnable(false); imageType->Resize(60, 60); imageType->SetResizeMode(UIImageView::ImageResizeMode::FILL); int16_t imageWidth = imageType->GetRect().GetWidth(); imageType->LayoutLeftOfParent(scrollW / 2 - imageWidth / 2); imageType->LayoutTopOfParent(20); imageType->SetViewId("imageType"); UILabelExt *labelName = new UILabelExt(); messagePageGroup->Add(labelName); labelName->SetTextId(messageRes->nameId); //需要换成多语言 labelName->SetFont(TJD_VECTOR_FONT_FILENAME, TJD_FONT_SIZE_30); labelName->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT); labelName->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER); labelName->LayoutTopOfParent(20); scrollW = scrollCont->GetWidth(); int16_t labelNameW = labelName->GetWidth(); labelName->LayoutLeftOfParent((scrollW - labelNameW) / 2); labelName->SetStyle(STYLE_BACKGROUND_COLOR, Color::Gray().full); labelName->LayoutBottomToSibling(imageType->GetViewId(), 4); int16_t y = labelName->GetY() + labelName->GetHeight() + 20; y = CreateMessageItem(messagePageGroup, msgIndex, 60, y); UIImageView *imageDel = new UIImageView(); messagePageGroup->Add(imageDel); 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 + 10); imageDel->SetSrc(imgInfo); imageDel->SetTouchable(true); delClickListener = new DelClickListener(); imageDel->SetOnClickListener(delClickListener); messagePageGroup->Remove(imageDel); messagePageGroup->Add(imageDel); } UIViewGroup *TjdUiMessageDetailsPage::PageInit(UIViewGroup *cont) { static_print_debug("TjdUiMessageDetailsPage::PageInit\n"); container_ = cont; pageGroup = new UIViewGroup(); container_->Add(pageGroup); pageGroup->SetPosition(0, 0); pageGroup->SetWidth(Screen::GetInstance().GetWidth()); pageGroup->SetHeight(Screen::GetInstance().GetHeight()); pageGroup->SetOnDragListener(this); pageGroup->SetTouchable(true); pageGroup->SetDraggable(true); if (scrollCont != nullptr) { return scrollCont; } // UIViewGroup *container = (UIViewGroup *)TjdUiMessageTotalView::GetInstance()->GetContainer(); scrollCont = new UIScrollView(); pageGroup->Add(scrollCont); // container->Add(scrollCont); scrollCont->SetScrollBlankSize(20); scrollCont->SetHorizontalScrollState(false); scrollCont->SetThrowDrag(true); //设置结束拖动时,是否产生惯性滑动动效 scrollCont->SetMaxScrollDistance(1000); 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(); return pageGroup; } } // namespace TJD