mcu_hi3321_watch/tjd/ui/app/main/TjdUiAppMainPageMakeFriend.cpp
2025-05-26 20:15:20 +08:00

366 lines
14 KiB
C++

/*----------------------------------------------------------------------------
* 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 <iomanip>
#include <sstream>
#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<int32_t>((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<int32_t>(((now_temperature + 20) / 56.0) * 100));
}
}
} // namespace TJD