/*---------------------------------------------------------------------------- * Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved. * * Description: TjdUiAppMainPageMakeFriend.cpp * * Author: luziquan@ss-tjd.com * * Create: 2024-12-27 *--------------------------------------------------------------------------*/ #include "TjdUiAppMainPageMakeFriend.h" #include "NativeAbility.h" #include "TjdUiImageIds.h" #include "TjdUiMultiLanguageExt.h" #include "common/image_cache_manager.h" #include "common/screen.h" #include "gfx_utils/mem_check.h" #include "hal_tick.h" #include "rtc_api.h" #include "sql_weather.h" #include "sys_config.h" #include #include #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 namespace TJD { constexpr const char *ALIPAY_VIEW_ID = "alipay"; constexpr const char *WECHAT_VIEW_ID = "wechat"; constexpr const char *QQ_VIEW_ID = "qq"; constexpr const char *DINGDING_VIEW_ID = "dingding"; #define MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH TJD_IMAGE_PATH "img_main_make_friend.bin" class TjdUiAppMainPageMakeFriend::MakeFriendOnClickListener : public OHOS::UIView::OnClickListener { public: virtual bool OnClick(OHOS::UIView &view, const OHOS::ClickEvent &event) { std::string viewId = view.GetViewId(); if (viewId == ALIPAY_VIEW_ID) { OHOS::NativeAbility::GetInstance().ChangeSlice(TjdUiAppViewId::TJD_APP_VIEW_ALIPAY); return true; } else if (viewId == WECHAT_VIEW_ID) { return true; } else if (viewId == QQ_VIEW_ID) { return true; } else if (viewId == DINGDING_VIEW_ID) { return true; } return false; } }; static TjdUiAppMainPageMakeFriend *g_paymentDatingPage = nullptr; TjdUiAppMainPageMakeFriend::TjdUiAppMainPageMakeFriend() { SetPosition(0, 0, OHOS::Screen::GetInstance().GetWidth(), OHOS::Screen::GetInstance().GetHeight()); g_paymentDatingPage = this; } TjdUiAppMainPageMakeFriend::~TjdUiAppMainPageMakeFriend() { UnLoad(); g_paymentDatingPage = nullptr; } TjdUiAppMainPageMakeFriend *TjdUiAppMainPageMakeFriend::GetInstance(void) { return g_paymentDatingPage; } void TjdUiAppMainPageMakeFriend::PreLoad(void) { static_print_debug("TjdUiAppMainPageMakeFriend::PreLoad"); // OHOS::MemCheck::GetInstance()->EnableLeakCheck(true); if (!viewiInitStatus) { OHOS::ImageCacheManager::GetInstance().LoadAllInMultiRes(MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); InitView(); UpdateValue(); viewiInitStatus = true; } } void TjdUiAppMainPageMakeFriend::UnLoad(void) { static_print_debug("TjdUiAppMainPageMakeFriend::UnLoad"); if (viewiInitStatus) { OHOS::ImageCacheManager::GetInstance().UnloadAllInMultiRes(MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); RemoveAll(); if (container_) { container_->RemoveAll(); delete container_; container_ = nullptr; } if (titleTime_) { delete titleTime_; titleTime_ = nullptr; } if (alipayIcon_) { delete alipayIcon_; alipayIcon_ = nullptr; } if (wechatIcon_) { delete wechatIcon_; wechatIcon_ = nullptr; } if (qqIcon_) { delete qqIcon_; qqIcon_ = nullptr; } if (dingdingIcon_) { delete dingdingIcon_; dingdingIcon_ = nullptr; } if (temperature_) { delete temperature_; temperature_ = nullptr; } if (makeFriendOnClickListener_) { delete makeFriendOnClickListener_; makeFriendOnClickListener_ = nullptr; } if (leftTime_) { delete leftTime_; leftTime_ = nullptr; } if (rightTime_) { delete rightTime_; rightTime_ = nullptr; } if (leftTemper_) { delete leftTemper_; leftTemper_ = nullptr; } if (rightTemper_) { delete rightTemper_; rightTemper_ = nullptr; } if (weatherProgress_) { delete weatherProgress_; weatherProgress_ = nullptr; } if (timeProgress_) { delete timeProgress_; timeProgress_ = nullptr; } if (weatherProgressBg_) { delete weatherProgressBg_; weatherProgressBg_ = nullptr; } if (timeProgressBg_) { delete timeProgressBg_; timeProgressBg_ = nullptr; } viewiInitStatus = false; } } void TjdUiAppMainPageMakeFriend::NotifyTick(void) { static uint32_t lastUpdateTime = 0; uint32_t curTime = OHOS::HALTick::GetInstance().GetTime(); if (lastUpdateTime == 0) { lastUpdateTime = curTime; } if (curTime - lastUpdateTime >= 1 * 1000) { lastUpdateTime = curTime; UpdateValue(); } } void TjdUiAppMainPageMakeFriend::InitView(void) { auto &image = OHOS::ImageCacheManager::GetInstance(); auto screenWidth = OHOS::Screen::GetInstance().GetWidth(); auto screenHeight = OHOS::Screen::GetInstance().GetHeight(); container_ = new OHOS::UIViewGroup(); container_->SetPosition(0, 0, OHOS::Screen::GetInstance().GetWidth(), OHOS::Screen::GetInstance().GetHeight()); makeFriendOnClickListener_ = new MakeFriendOnClickListener(); titleTime_ = new OHOS::UILabel(); titleTime_->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 40); titleTime_->SetText("10:08"); titleTime_->SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); titleTime_->SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); titleTime_->SetPosition(185, 31, 96, 31); container_->Add(titleTime_); alipayIcon_ = new OHOS::UIImageView(); alipayIcon_->SetViewId(ALIPAY_VIEW_ID); alipayIcon_->SetTouchable(true); alipayIcon_->SetOnClickListener(makeFriendOnClickListener_); alipayIcon_->SetPosition(103, 104, 110, 110); auto imageInfo = image.LoadOneInMultiRes(IMG_MAIN_MAKE_FRIEND_ALIPAY, MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); alipayIcon_->SetSrc(imageInfo); container_->Add(alipayIcon_); wechatIcon_ = new OHOS::UIImageView(); wechatIcon_->SetViewId(WECHAT_VIEW_ID); wechatIcon_->SetTouchable(true); wechatIcon_->SetOnClickListener(makeFriendOnClickListener_); wechatIcon_->SetPosition(252, 103, 110, 110); imageInfo = image.LoadOneInMultiRes(IMG_MAIN_MAKE_FRIEND_WECHAT, MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); wechatIcon_->SetSrc(imageInfo); container_->Add(wechatIcon_); qqIcon_ = new OHOS::UIImageView(); qqIcon_->SetViewId(QQ_VIEW_ID); qqIcon_->SetTouchable(true); qqIcon_->SetOnClickListener(makeFriendOnClickListener_); qqIcon_->SetPosition(103, 253, 110, 110); imageInfo = image.LoadOneInMultiRes(IMG_MAIN_MAKE_FRIEND_QQ, MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); qqIcon_->SetSrc(imageInfo); container_->Add(qqIcon_); dingdingIcon_ = new OHOS::UIImageView(); dingdingIcon_->SetViewId(DINGDING_VIEW_ID); dingdingIcon_->SetTouchable(true); dingdingIcon_->SetOnClickListener(makeFriendOnClickListener_); dingdingIcon_->SetPosition(252, 253, 110, 110); imageInfo = image.LoadOneInMultiRes(IMG_MAIN_MAKE_FRIEND_DINGTALK, MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); dingdingIcon_->SetSrc(imageInfo); container_->Add(dingdingIcon_); temperature_ = new OHOS::UILabel(); temperature_->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 26); temperature_->SetText("-20°C"); temperature_->SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); temperature_->SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); temperature_->SetPosition(202, 391, 65, 27); container_->Add(temperature_); leftTime_ = new OHOS::UILabel(); leftTime_->SetStyle(OHOS::STYLE_TEXT_OPA, OHOS::OPA_OPAQUE * 0.3); leftTime_->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 20); leftTime_->SetText("00:00"); leftTime_->SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); leftTime_->SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); leftTime_->SetPosition(12, 193, 60, 27); container_->Add(leftTime_); rightTime_ = new OHOS::UILabel(); rightTime_->SetStyle(OHOS::STYLE_TEXT_OPA, OHOS::OPA_OPAQUE * 0.3); rightTime_->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 20); rightTime_->SetText("23:59"); rightTime_->SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); rightTime_->SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); rightTime_->SetPosition(406, 193, 60, 27); container_->Add(rightTime_); leftTemper_ = new OHOS::UILabel(); leftTemper_->SetStyle(OHOS::STYLE_TEXT_OPA, OHOS::OPA_OPAQUE * 0.3); leftTemper_->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 20); leftTemper_->SetText("-20°C"); leftTemper_->SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); leftTemper_->SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); leftTemper_->SetPosition(12, 254, 60, 27); container_->Add(leftTemper_); rightTemper_ = new OHOS::UILabel(); rightTemper_->SetStyle(OHOS::STYLE_TEXT_OPA, OHOS::OPA_OPAQUE * 0.3); rightTemper_->SetFont(TJD_DIN_MEDIUM_FONT_FILENAME, 20); rightTemper_->SetText("36°C"); rightTemper_->SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); rightTemper_->SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); rightTemper_->SetPosition(406, 254, 60, 27); container_->Add(rightTemper_); weatherProgressBg_ = new OHOS::UIImageView(); weatherProgressBg_->SetPosition(15, 290, 436, 169); imageInfo = image.LoadOneInMultiRes(IMG_MAIN_MAKE_FRIEND_WEATHER_PROGRESS, MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); weatherProgressBg_->SetSrc(imageInfo); container_->Add(weatherProgressBg_); timeProgressBg_ = new OHOS::UIImageView(); timeProgressBg_->SetPosition(11, 7, 444, 198); imageInfo = image.LoadOneInMultiRes(IMG_MAIN_MAKE_FRIEND_TIME_PROGRESS, MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); timeProgressBg_->SetSrc(imageInfo); container_->Add(timeProgressBg_); // auto weatherForeImage = // image.LoadOneInMultiRes(IMG_MAIN_MAKE_FRIEND_WEATHER_PROGRESS, MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); // auto weatherBackImage = // image.LoadOneInMultiRes(IMG_MAIN_MAKE_FRIEND_WEATHER_BJ, MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); // if (weatherForeImage && weatherBackImage) { // weatherProgress_ = new OHOS::UICircleProgress(); // weatherProgress_->SetPosition(0, 0, screenWidth, screenHeight); // weatherProgress_->SetCenterPosition(screenWidth / 2, screenHeight / 2); // weatherProgress_->SetRadius(233); // weatherProgress_->SetBackgroundStyle(OHOS::STYLE_LINE_WIDTH, 300); // weatherProgress_->SetForegroundStyle(OHOS::STYLE_LINE_WIDTH, 300); // weatherProgress_->SetStartAngle(260); // weatherProgress_->SetEndAngle(100); // weatherProgress_->SetImage(weatherForeImage, weatherBackImage); // weatherProgress_->SetLineColor(OHOS::Color::Red()); // weatherProgress_->SetProgressImagePosition(17, screenHeight / 2 + 58); // weatherProgress_->SetBackgroundImagePosition(17, screenHeight / 2 + 58); // container_->Add(weatherProgress_); // } // auto timeForeImage = // image.LoadOneInMultiRes(IMG_MAIN_MAKE_FRIEND_TIME_PROGRESS, MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); // auto timeBackImage = image.LoadOneInMultiRes(IMG_MAIN_MAKE_FRIEND_TIME_BJ, MAIN_PAGEMAKE_FRIEND_IMAGE_BIN_PATH); // if (timeForeImage && timeBackImage) { // timeProgress_ = new OHOS::UICircleProgress(); // timeProgress_->SetPosition(0, 0, screenWidth, screenHeight); // timeProgress_->SetCenterPosition(screenWidth / 2, screenHeight / 2); // timeProgress_->SetRadius(233); // timeProgress_->SetBackgroundStyle(OHOS::STYLE_LINE_WIDTH, 80); // timeProgress_->SetForegroundStyle(OHOS::STYLE_LINE_WIDTH, 80); // timeProgress_->SetStartAngle(-80); // timeProgress_->SetEndAngle(80); // timeProgress_->SetImage(timeForeImage, timeBackImage); // timeProgress_->SetLineColor(OHOS::Color::Red()); // timeProgress_->SetProgressImagePosition(17, 17); // timeProgress_->SetBackgroundImagePosition(17, 17); // container_->Add(timeProgress_); // } Add(container_); } void TjdUiAppMainPageMakeFriend::UpdateValue(void) { std::stringstream ss; struct rtc_time localTime = {}; tjd_driver_rtc_get_ops()->get_rtc_time(&localTime); ss << std::setw(2) << std::setfill('0') << localTime.tm_hour << ":" << std::setw(2) << std::setfill('0') << localTime.tm_min; if (titleTime_) { titleTime_->SetText(ss.str().c_str()); } if (timeProgress_) { timeProgress_->SetValue(static_cast((localTime.tm_hour / 24.0) * 100)); } int now_temperature = sql_weather_get_now_temperature(); if (temperature_) { ss.str(""); ss << now_temperature << "°C"; temperature_->SetText(ss.str().c_str()); } if (weatherProgress_) { weatherProgress_->SetValue(static_cast(((now_temperature + 20) / 56.0) * 100)); } } } // namespace TJD