/*---------------------------------------------------------------------------- * Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved. * * Description: * * Author: huangshuyi * * Create: 2024-4 *--------------------------------------------------------------------------*/ #include "TjdUiWFPageCustom.h" #include "TjdUiAppMainPresenter.h" #include "TjdUiImageIds.h" #include "TjdUiMemManage.h" #include "TjdUiMultiLanguageExt.h" #include "TjdUiWFCustomParse.h" #include "common/image_cache_manager.h" #include "common/key_code.h" #include "rtc_api.h" #include "sql_setting.h" #include "sys_config.h" #include "ui_screennotify.h" #if ENABLE_MEMORY_CHECK #include "gfx_utils/mem_check.h" #endif using namespace OHOS; namespace TJD { #define ENABLE_PRINT_INFO 0 #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_WF_CUNSTOM_BIN_PATH TJD_IMAGE_PATH "img_main_wf.bin" static TjdUiWFPageCustom *g_wfPageCustom = nullptr; static TjdUiWFCustomVideoPage *g_video{nullptr}; static void ScreenStatusNotify(ScreenStatus status) { if (g_video == nullptr) { return; } if (status == SCREEN_STATUS_OFF) { g_video->PausePlay(); } else if (status == SCREEN_STATUS_ON) { if (g_video->IsPaused()) { g_video->ResumePlay(); } else if (!g_video->IsPlayed()) { g_video->StartPlay(); } } } TjdUiWFPageCustom::TjdUiWFPageCustom() : wfParse_(new TjdUiWFCustomParse()) { SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); SetPeriod(500); registerNotifyScreenStatus(ScreenStatusNotify); } TjdUiWFPageCustom::~TjdUiWFPageCustom() { deregisterNotifyScreenStatus(ScreenStatusNotify); if (viewiInitStatus) { OnInactive(); ImageCacheManager::GetInstance().UnloadAllInMultiRes(IMAGE_WF_CUNSTOM_BIN_PATH); TjdUiMemManage::DeleteChildren(mainView_); if (mainView_) { delete mainView_; mainView_ = nullptr; } wfParse_->Unload(); viewiInitStatus = false; } UnLoad(); } void TjdUiWFPageCustom::PreLoad(void) { static_print_debug("TjdUiWFPageCustom::PreLoad"); // MemCheck::GetInstance()->EnableLeakCheck(true); if (!viewiInitStatus) { ImageCacheManager::GetInstance().LoadAllInMultiRes(IMAGE_WF_CUNSTOM_BIN_PATH); InitView(); Update(); viewiInitStatus = true; } } void TjdUiWFPageCustom::UnLoad(void) { static_print_debug("TjdUiWFPageCustom::UnLoad"); // MemCheck::GetInstance()->EnableLeakCheck(false); // Main clock view is commonly used page, so we do not release it's resources inner slice. } void TjdUiWFPageCustom::InitView(void) { ImageCacheManager &images = ImageCacheManager::GetInstance(); static_print_debug("TjdUiWFPageCustom::InitView"); SetCoverable(true); mainView_ = new UIViewGroup(); mainView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); Add(mainView_); if (wfParse_->ParseOnlineWfData(mainView_) == false) { static_print_error("ParseOnlineWfData failed, use default view"); bg_ = new UIImageView(); mainView_->Add(bg_); bg_->SetPosition(0, 0); bg_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_BG, IMAGE_WF_CUNSTOM_BIN_PATH)); } video_ = wfParse_->GetVideoPage(); uint8_t hour = 8; uint8_t min = 0; uint8_t am_pm = 0; hourHigh_ = new UIImageView(); hourHigh_->SetViewId("hourHigh"); mainView_->Add(hourHigh_); hourHigh_->SetPosition(141, 193); hourHigh_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_TIME_NUM_0 + hour / 10 % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); hourLow_ = new UIImageView(); mainView_->Add(hourLow_); hourLow_->SetViewId("hourLow_"); hourLow_->AlignRightToSibling(hourHigh_->GetViewId()); hourLow_->AlignTopToSibling(hourHigh_->GetViewId()); hourLow_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_TIME_NUM_0 + hour % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); colon_ = new UIImageView(); mainView_->Add(colon_); colon_->SetViewId("colon_"); colon_->AlignRightToSibling(hourLow_->GetViewId()); colon_->AlignTopToSibling(hourLow_->GetViewId()); colon_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_TIME_NUM_B, IMAGE_WF_CUNSTOM_BIN_PATH)); colon_->SetVisible(false); minHigh_ = new UIImageView(); mainView_->Add(minHigh_); minHigh_->SetViewId("minHigh_"); minHigh_->AlignRightToSibling(colon_->GetViewId()); minHigh_->AlignTopToSibling(colon_->GetViewId()); minHigh_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_TIME_NUM_0 + min / 10 % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); minLow_ = new UIImageView(); mainView_->Add(minLow_); minLow_->SetViewId("minLow_"); minLow_->AlignRightToSibling(minHigh_->GetViewId()); minLow_->AlignTopToSibling(minHigh_->GetViewId()); minLow_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_TIME_NUM_0 + min % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); uint8_t month = 1; //获得当前的月份 uint8_t day = 1; //获得当前的日期 monthHigh_ = new UIImageView(); mainView_->Add(monthHigh_); monthHigh_->SetViewId("monthHigh_"); monthHigh_->SetPosition(150, 256); monthHigh_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_DATE_NUM_0 + 1 / 10 % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); monthLow_ = new UIImageView(); mainView_->Add(monthLow_); monthLow_->SetViewId("monthLow_"); monthLow_->AlignRightToSibling(monthHigh_->GetViewId()); monthLow_->AlignTopToSibling(monthHigh_->GetViewId()); monthLow_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_DATE_NUM_0 + month % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); date_ = new UIImageView(); mainView_->Add(date_); date_->SetViewId("date_"); date_->AlignRightToSibling(monthLow_->GetViewId()); date_->AlignTopToSibling(monthLow_->GetViewId()); date_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_DATE_NUM_A, IMAGE_WF_CUNSTOM_BIN_PATH)); dayHigh_ = new UIImageView(); mainView_->Add(dayHigh_); dayHigh_->SetViewId("dayHigh_"); dayHigh_->AlignRightToSibling(date_->GetViewId()); dayHigh_->AlignTopToSibling(date_->GetViewId()); dayHigh_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_DATE_NUM_0 + day / 10 % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); dayLow_ = new UIImageView(); mainView_->Add(dayLow_); dayLow_->SetViewId("dayLow_"); dayLow_->AlignRightToSibling(dayHigh_->GetViewId()); dayLow_->AlignTopToSibling(dayHigh_->GetViewId()); dayLow_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_DATE_NUM_0 + day % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); uint8_t lang = LANGUAGE_CHINESE; //获得多语言的值 uint8_t week = 1; //获得当前是星期几 week_ = new UIImageView(); mainView_->Add(week_); week_->SetPosition(238, 253); week_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_WEEK_CH_0 + week % 7, IMAGE_WF_CUNSTOM_BIN_PATH)); amPm_ = new UIImageView(); uint32_t imgList[2][2] = {{IMG_MAIN_WF_AM_EN, IMG_MAIN_WF_PM_EN}, {IMG_MAIN_WF_AM_CH, IMG_MAIN_WF_PM_CH}}; amPm_->SetSrc(images.LoadOneInMultiRes(imgList[lang][am_pm], IMAGE_WF_CUNSTOM_BIN_PATH)); mainView_->Add(amPm_); amPm_->SetPosition(301, 203); } void TjdUiWFPageCustom::Update(void) { ImageCacheManager &images = ImageCacheManager::GetInstance(); if (colon_) { if (colon_->IsVisible()) { colon_->SetVisible(0); } else { colon_->SetVisible(1); } } rtc_class_ops *rtc = tjd_driver_rtc_get_ops(); struct rtc_time localTime; rtc->get_rtc_time(&localTime); uint8_t hour = localTime.tm_hour; //获得当前的小时 uint8_t min = localTime.tm_min; uint8_t am_pm = 0; if (sql_setting_get_time_format() == 1) { if (hour > 12) { hour -= 12; am_pm = 1; } else if (hour == 0) { hour = 12; } else if (hour == 12) { am_pm = 1; } } if (hourHigh_) { hourHigh_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_TIME_NUM_0 + hour / 10 % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); } if (hourLow_) { hourLow_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_TIME_NUM_0 + hour % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); } if (minHigh_) { minHigh_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_TIME_NUM_0 + min / 10 % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); } if (minLow_) { minLow_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_TIME_NUM_0 + min % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); } uint8_t month = localTime.tm_mon; //获得当前的月份 uint8_t day = localTime.tm_mday; //获得当前的日期 uint8_t week = localTime.tm_wday; //获得当前是星期几 if (monthHigh_) { monthHigh_->SetSrc( images.LoadOneInMultiRes(IMG_MAIN_WF_DATE_NUM_0 + month / 10 % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); } if (monthLow_) { monthLow_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_DATE_NUM_0 + month % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); } if (dayHigh_) { dayHigh_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_DATE_NUM_0 + day / 10 % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); } if (dayLow_) { dayLow_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_DATE_NUM_0 + day % 10, IMAGE_WF_CUNSTOM_BIN_PATH)); } uint8_t lang = sql_setting_get_language(); //获得多语言的值 lang = (lang > 1) ? 1 : lang; if (week_) { if (lang == 0) { week_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_WEEK_EN_0 + week % 7, IMAGE_WF_CUNSTOM_BIN_PATH)); } else { week_->SetSrc(images.LoadOneInMultiRes(IMG_MAIN_WF_WEEK_CH_0 + week % 7, IMAGE_WF_CUNSTOM_BIN_PATH)); } } if (amPm_) { uint32_t imgList[2][2] = {{IMG_MAIN_WF_AM_EN, IMG_MAIN_WF_PM_EN}, {IMG_MAIN_WF_AM_CH, IMG_MAIN_WF_PM_CH}}; amPm_->SetSrc(images.LoadOneInMultiRes(imgList[lang][am_pm], IMAGE_WF_CUNSTOM_BIN_PATH)); if (sql_setting_get_time_format() == 0) { amPm_->SetVisible(false); } else { amPm_->SetVisible(true); } } } void TjdUiWFPageCustom::ScrollBegin(bool isActive) { static_print_debug("TjdUiWFPageCustom::ScrollBegin"); TjdUiWfBase::ScrollBegin(isActive); if (isActive) { DoPause(); } } void TjdUiWFPageCustom::ScrollEnd(bool isActive) { static_print_debug("TjdUiWFPageCustom::ScrollEnd"); TjdUiWfBase::ScrollEnd(isActive); TjdUiAppMainPresenter *mainPresenter = TjdUiAppMainPresenter::GetInstance(); if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != TjdUiAppMainPresenter::MainPresenterState::RESUME)) { return; } if (isActive) { DoStart(); } else { if (video_ != nullptr && !video_->IsStopped()) { video_->StopPlay(); } if (video_ != nullptr) { ClearCache(); } } } void TjdUiWFPageCustom::CoverBegin(bool isCovered) { static_print_debug("TjdUiWFPageCustom::CoverBegin"); TjdUiWfBase::CoverBegin(isCovered); if (!isCovered) { DoPause(); } } void TjdUiWFPageCustom::CoverEnd(bool isCovered) { static_print_debug("TjdUiWFPageCustom::CoverEnd"); TjdUiWfBase::CoverEnd(isCovered); TjdUiAppMainPresenter *mainPresenter = TjdUiAppMainPresenter::GetInstance(); if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != TjdUiAppMainPresenter::MainPresenterState::RESUME)) { return; } if (!isCovered) { DoStart(); } } void TjdUiWFPageCustom::OnActive(void) { static_print_debug("TjdUiWFPageCustom::OnActive"); TjdUiWfBase::OnActive(); TjdUiAppMainPresenter *mainPresenter = TjdUiAppMainPresenter::GetInstance(); if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != TjdUiAppMainPresenter::MainPresenterState::RESUME)) { return; } DoStart(); } void TjdUiWFPageCustom::OnInactive() { static_print_debug("TjdUiWFPageCustom::OnInactive"); TjdUiWfBase::OnInactive(); DoStop(); } void TjdUiWFPageCustom::OnCovered(void) { TjdUiAppMainPresenter *mainPresenter = TjdUiAppMainPresenter::GetInstance(); if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != TjdUiAppMainPresenter::MainPresenterState::RESUME)) { return; } DoPause(); } void TjdUiWFPageCustom::OnUncovered(void) { TjdUiAppMainPresenter *mainPresenter = TjdUiAppMainPresenter::GetInstance(); if ((mainPresenter == nullptr) || (mainPresenter->GetMainPresenterState() != TjdUiAppMainPresenter::MainPresenterState::RESUME)) { return; } DoStart(); } void TjdUiWFPageCustom::OnPause(void) { printf("TjdUiWFPageCustom::OnPause\n"); DoPause(); } void TjdUiWFPageCustom::OnResume(void) { DoStart(); } void TjdUiWFPageCustom::DoStop(void) { if (video_ != nullptr && !video_->IsStopped()) { video_->StopPlay(); } } void TjdUiWFPageCustom::DoStart(void) { if (video_ != nullptr) { if (video_->IsPaused()) { video_->ResumePlay(); } else if (!video_->IsPlayed()) { video_->StartPlay(); } } } void TjdUiWFPageCustom::DoPause(void) { if (video_ != nullptr) { video_->PausePlay(); } } } // namespace TJD