/*---------------------------------------------------------------------------- * Copyright (c) TJD Technologies Co., Ltd. 2024. All rights reserved. * * Description: * * Author: huangshuyi * * Create: 2024-4 *--------------------------------------------------------------------------*/ #include "TjdUiAppMainView.h" #include "TjdUiAppMainPresenter.h" #include "TjdUiEditShortcutPresenter.h" #include "TjdUiMemManage.h" #include "TjdUiScreenEvent.h" #include "TjdUiScreenManage.h" #include "TjdUiWatchFaceCtrl.h" #include "components/root_view.h" #include "service_ancillary.h" #include "sql_bt.h" #include "sql_setting.h" #include "sys_config.h" #include "sys_typedef.h" #if ENABLE_MEMORY_CHECK #include "gfx_utils/mem_check.h" #endif #include "TjdUiAppMainPageFavorite.h" #include "TjdUiAppMainPageFourLeafClover.h" #include "TjdUiAppMainPageHealth.h" #include "TjdUiAppMainPageMakeFriend.h" #include "TjdUiAppMainPageMap.h" #include "TjdUiAppMainPageMessage.h" #include "TjdUiAppMainPageMusic.h" #include "TjdUiAppMainPageShortCut.h" #include "TjdUiAppMainPageTool.h" #include "TjdUiAppMainPageWeather.h" 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 static TjdUiAppMainView *g_pMainClockView = nullptr; uint8_t TjdUiAppMainView::lastPageId = TJD_MAIN_PAGE_WATCH_FACE; uint8_t TjdUiAppMainView::messageReaded = 0; struct MainViewMapper { TjdCardId id; UICardPage *(TjdUiAppMainView::*func)(void); }; static const MainViewMapper CardMapper[] = { {TjdCardId::TJD_CARD_FAVORITE, &TjdUiAppMainView::InitFavoritePage}, {TjdCardId::TJD_CARD_WATCH_FACE, &TjdUiAppMainView::InitWatchFacePage}, {TjdCardId::TJD_CARD_HEALTH, &TjdUiAppMainView::InitHealthPage}, {TjdCardId::TJD_CARD_TOOL, &TjdUiAppMainView::InitToolPage}, {TjdCardId::TJD_CARD_WEATHER, &TjdUiAppMainView::InitWeatherPage}, {TjdCardId::TJD_CARD_MUSIC, &TjdUiAppMainView::InitMusicPage}, {TjdCardId::TJD_CARD_MAKE_FRIEND, &TjdUiAppMainView::InitMakeFriendPage}, {TjdCardId::TJD_CARD_MAP, &TjdUiAppMainView::InitMapPage}, {TjdCardId::TJD_CARD_FOUR_LEAF_CLOVER, &TjdUiAppMainView::InitFourLeafCloverPage}, }; void TjdUiAppMainView::CustomCrossView::OnMoveChild(OHOS::UISwipeView &view, int16_t xOffset, int16_t yOffset) { TjdUiAppMainView *mainView = TjdUiAppMainView::GetInstance(); if (mainView == nullptr) { return; } if (mainView->GetHorCurrentCard() != TjdCardId::TJD_CARD_WATCH_FACE) { return OHOS::UICrossView::OnSwipe(view); } TjdUiAppMainPageShortcut *shortcutPage = TjdUiAppMainPageShortcut::GetInstance(); TjdUiAppMainPageMessage *messagePage = TjdUiAppMainPageMessage::GetInstance(); if (shortcutPage == nullptr || messagePage == nullptr) { return; } int16_t buttom = shortcutPage->GetScrollView()->GetChildrenHead()->GetRect().GetBottom(); if (buttom < 0) { buttom = 0; } int16_t messageTop = messagePage->GetRect().GetTop(); if (messageTop >= 466) { int16_t blur = OHOS::EasingEquation::LinearEaseNone(0, 32, buttom, 466); OHOS::RootView::GetInstance()->ClearBlurView(OHOS::RootView::GetInstance()->GetBlurView()); GetChildrenTail()->SetBackgroundBlur(blur); } else if (buttom <= 0) { int16_t blur = OHOS::EasingEquation::LinearEaseNone(32, 0, messageTop, 466); OHOS::RootView::GetInstance()->ClearBlurView(OHOS::RootView::GetInstance()->GetBlurView()); GetChildrenTail()->SetBackgroundBlur(blur); } } void TjdUiAppMainView::CustomCrossView::OnSwipe(OHOS::UISwipeView &view) { TjdUiAppMainView *mainView = TjdUiAppMainView::GetInstance(); if (mainView == nullptr) { return OHOS::UICrossView::OnSwipe(view); } if (!mainView->IsMainClockPage()) { return OHOS::UICrossView::OnSwipe(view); } OHOS::RootView::GetInstance()->ClearBlurView(OHOS::RootView::GetInstance()->GetBlurView()); return OHOS::UICrossView::OnSwipe(view); } TjdUiAppMainView::TjdUiAppMainView() : wfCommon_(new TjdUiWatchFaceCommonView()) { g_pMainClockView = this; } TjdUiAppMainView::~TjdUiAppMainView() { g_pMainClockView = nullptr; if (shortcutPage) { shortcutPage->ClearBackgroundBlur(); } if (messagePage) { messagePage->ClearBackgroundBlur(); } for (int32_t i = 0; i < TjdCardId::TJD_CARD_MAX_CARD; i++) { recordCard[i] = nullptr; } if (cardSwipe) { delete cardSwipe; cardSwipe = nullptr; } if (mainSwipeGroup) { mainSwipeGroup->RemoveAll(); delete mainSwipeGroup; mainSwipeGroup = nullptr; } if (mainClockView) { delete mainClockView; mainClockView = nullptr; } if (shortcutPage) { delete shortcutPage; shortcutPage = nullptr; } if (messagePage) { delete messagePage; messagePage = nullptr; } if (favoritePage) { delete favoritePage; favoritePage = nullptr; } if (healthPage) { delete healthPage; healthPage = nullptr; } if (toolPage) { delete toolPage; toolPage = nullptr; } if (weatherPage) { delete weatherPage; weatherPage = nullptr; } if (musicPage) { delete musicPage; musicPage = nullptr; } if (makeFriendPage) { delete makeFriendPage; makeFriendPage = nullptr; } if (mapPage) { delete mapPage; mapPage = nullptr; } if (fourLeafCloverPage) { delete fourLeafCloverPage; fourLeafCloverPage = nullptr; } } void TjdUiAppMainView::ResetView(void) { wfCommon_->HideFloatWindow(); if (TjdUiAppMainView::IsMainClockPage() == false) { VertViewRemove(); VertViewLoad(); SetPage(1); } OHOS::RootView::GetInstance()->ClearBlurView(OHOS::RootView::GetInstance()->GetBlurView()); } TjdUiAppMainView *TjdUiAppMainView::GetInstance(void) { return g_pMainClockView; } void TjdUiAppMainView::OnStart() { static_print_debug("TjdUiAppMainView::OnStart"); mainSwipeGroup = new CustomCrossView(); mainSwipeGroup->SetBlurRadius(0); MainCardEffect effect = sql_setting_get_animation(); // clang-format off switch (effect) { case MainCardEffect::TJD_MAIN_PAGE_EFFECT_NONE: break; case MainCardEffect::TJD_MAIN_PAGE_EFFECT_CURTAIN: cardSwipe = new TjdUiAppCurtainEffect();break; case MainCardEffect::TJD_MAIN_PAGE_EFFECT_CURTAIN_FADE_IN_OUT: cardSwipe = new TjdUiAppCurtainFadeInFadeOutEffect(); break; case MainCardEffect::TJD_MAIN_PAGE_EFFECT_CURTAIN_GAOSI: cardSwipe = new TjdUiAppCurtainGaosiEffect(); break; case MainCardEffect::TJD_MAIN_PAGE_EFFECT_TURN_PAGE: cardSwipe = new TurnPageEffect(); break; case MainCardEffect::TJD_MAIN_PAGE_EFFECT_ROTATE_TURN: cardSwipe = new CardFlipEffect(); break; case MainCardEffect::TJD_MAIN_PAGE_EFFECT_CENTER_ZOOM: cardSwipe = new TjdUiAppCenterZoomEffect(); break; case MainCardEffect::TJD_MAIN_PAGE_EFFECT_3D: cardSwipe = new TjdUiApp3dEffect(); break; case MainCardEffect::TJD_MAIN_PAGE_EFFECT_ZOOM: cardSwipe = new ZoomEffect(); break; case MainCardEffect::TJD_MAIN_PAGE_EFFECT_CURTAIN_FADE_IN: cardSwipe = new TjdUiAppCurtainFadeInEffect(); break; } // clang-format on if (cardSwipe != nullptr) { cardSwipe->SetContainer(mainSwipeGroup); } HorizontalViewInit(); HorViewLoad(); VerticalViewInit(); VertViewLoad(); mainSwipeGroup->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); mainSwipeGroup->SetAnimatorTime(50); // 50: animator drag time(ms); mainSwipeGroup->SetLoopState(false); mainSwipeGroup->EnableScreenCap(true); mainSwipeGroup->RegisterSwipeCallback(cardSwipe); if (presenter_->IsFromSetCardView()) { presenter_->SetFromSetCardView(false); SwitchToCard(presenter_->GetFromCardId(), false); } else { SwitchToClockPage(false); } AddViewToRootContainer(mainSwipeGroup); if (RET_PROCESS == sql_bt_set_start_complete_flag(true)) { tjd_service_ancillary_data_save(0xffffffff); } } void TjdUiAppMainView::OnStop() {} OHOS::UICardPage *TjdUiAppMainView::InitFavoritePage(void) { favoritePage = new TjdUiAppMainPageFavorite(); if (favoritePage == nullptr) { static_print_error("MainClockView new fail"); return nullptr; } return favoritePage; } UICardPage *TjdUiAppMainView::InitWatchFacePage(void) { mainClockView = TjdUiWfCtrlInit(); if (mainClockView == nullptr) { static_print_error("MainClockView new fail"); return nullptr; } return mainClockView; } UICardPage *TjdUiAppMainView::InitHealthPage(void) { healthPage = new TjdUiAppMainPageHealth(); if (healthPage == nullptr) { static_print_error("healthPage new fail"); return nullptr; } return healthPage; } UICardPage *TjdUiAppMainView::InitToolPage(void) { toolPage = new TjdUiAppMainPageTool(); if (toolPage == nullptr) { static_print_error("toolPage new fail"); return nullptr; } return toolPage; } UICardPage *TjdUiAppMainView::InitWeatherPage(void) { weatherPage = new TjdUiAppMainPageWeather(); if (weatherPage == nullptr) { static_print_error("weatherPage new fail"); return nullptr; } return weatherPage; } OHOS::UICardPage *TjdUiAppMainView::InitMusicPage(void) { musicPage = new TjdUiAppMainPageMusic(); if (musicPage == nullptr) { static_print_error("musicPage new fail"); return nullptr; } return musicPage; } OHOS::UICardPage *TjdUiAppMainView::InitMakeFriendPage(void) { makeFriendPage = new TjdUiAppMainPageMakeFriend(); if (makeFriendPage == nullptr) { static_print_error("makeFriendPage new fail"); return nullptr; } return makeFriendPage; } OHOS::UICardPage *TjdUiAppMainView::InitMapPage(void) { mapPage = new TjdUiAppMainPageMap(); if (mapPage == nullptr) { static_print_error("mapPage new fail"); return nullptr; } return mapPage; } OHOS::UICardPage *TjdUiAppMainView::InitFourLeafCloverPage(void) { fourLeafCloverPage = new TjdUiAppMainPageFourLeafClover(); if (fourLeafCloverPage == nullptr) { static_print_error("fourLeafCloverPage new fail"); return nullptr; } return fourLeafCloverPage; } bool TjdUiAppMainView::HorizontalViewInit(void) { auto cardSettings = presenter_->GetCardSettings(); uint8_t cardMapNumber = sizeof(CardMapper) / sizeof(CardMapper[0]); for (uint32_t i = 0; i < cardSettings.size(); i++) { for (uint8_t j = 0; j < cardMapNumber; j++) { if (cardSettings[i] == CardMapper[j].id) { recordCard[j] = (this->*(CardMapper[j].func))(); if (recordCard[j] == nullptr) { static_print_error("TjdUiAppMainView:: recordCard %d error", j); return false; } break; } } } mainSwipeGroup->SetOnSwipeListener(presenter_); mainSwipeGroup->SetOnLongPressListener(presenter_); return true; } void TjdUiAppMainView::HorViewLoad(void) { auto cardSettings = presenter_->GetCardSettings(); for (uint32_t i = 0; i < cardSettings.size(); i++) { TjdCardId cardId = cardSettings[i]; if (recordCard[cardId] != nullptr) { mainSwipeGroup->HorAdd(recordCard[cardId]); } } } void TjdUiAppMainView::VerticalViewInit(void) { shortcutPage = new TjdUiAppMainPageShortcut(); if (shortcutPage == nullptr) { static_print_error("dropDownView new fail"); return; } shortcutPage->PreLoad(); shortcutPage->SetViewId("shortcutPage"); shortcutPage->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); shortcutPage->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT); messagePage = new TjdUiAppMainPageMessage(); messagePage->PreLoad(); messagePage->SetViewId("messagePage"); messagePage->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight()); messagePage->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT); } void TjdUiAppMainView::VertViewLoad(void) { mainSwipeGroup->VerAdd(shortcutPage, UICrossView::VPage::UP_PAGE); mainSwipeGroup->VerAdd(messagePage, UICrossView::VPage::DOWN_PAGE); } void TjdUiAppMainView::VertViewRemove(void) { if (TjdUiAppMainPageShortcut::currentViewIndex_ == SHORTCUT_EDIT) { TjdUiAppMainPageShortcut::GetInstance()->ReturnToTop(); DeleteShortcutEditView(); } mainSwipeGroup->Remove(shortcutPage, 1); mainSwipeGroup->Remove(messagePage, 1); } TjdCardId TjdUiAppMainView::GetHorCurrentCard() const { auto cardSettings = presenter_->GetCardSettings(); int pageId = mainSwipeGroup->GetCurrentPageId(OHOS::UISwipeView::HORIZONTAL); // 0: horizontal; 1: vertical /* pageId 与CardId 没有对应关系,需要一次转换 */ for (auto it : cardSettings) { if (it < TjdCardId::TJD_CARD_MAX_CARD && recordCard[it] != nullptr && recordCard[it]->GetViewIndex() == pageId) { return it; } } return TjdCardId::TJD_CARD_MAX_CARD; } TjdVerCardId TjdUiAppMainView::GetVerCurrentCard() const { return static_cast(mainSwipeGroup->GetCurrentPageId(OHOS::UISwipeView::VERTICAL)); } void TjdUiAppMainView::SwitchToCard(uint8_t cardId, bool loadAdjacent) { if ((cardId < TjdCardId::TJD_CARD_MAX_CARD) && (recordCard[cardId] != nullptr)) { SetPage(recordCard[cardId]->GetViewIndex(), loadAdjacent); } else { SwitchToClockPage(loadAdjacent); } } bool TjdUiAppMainView::IsMainClockPage(void) { if (mainSwipeGroup->GetCurrentPageId(0) == mainClockView->GetViewIndex() && mainSwipeGroup->GetCurrentPageId(1) == 1) { // 0: horizontal; 1: vertical return true; } else { return false; } } void TjdUiAppMainView::SetPage(int16_t page, bool loadAdjacent) { if (mainSwipeGroup != nullptr) { mainSwipeGroup->SetHorCurrentPage(page, loadAdjacent); } if (presenter_ != nullptr) { auto cardSettings = presenter_->GetCardSettings(); /* page 与CardId 没有对应关系,需要一次转换 */ TjdCardId id = TjdCardId::TJD_CARD_MAX_CARD; for (auto it : cardSettings) { if (it < TjdCardId::TJD_CARD_MAX_CARD && recordCard[it] != nullptr && recordCard[it]->GetViewIndex() == page) { id = it; } } presenter_->SetTaskPeroid(id); } } void TjdUiAppMainView::ReloadWatchFace() { if (mainSwipeGroup == nullptr) { return; } mainSwipeGroup->Remove(mainClockView, UISwipeView::HORIZONTAL); delete mainClockView; mainClockView = nullptr; recordCard[TjdCardId::TJD_CARD_WATCH_FACE] = InitWatchFacePage(); if (recordCard[TjdCardId::TJD_CARD_WATCH_FACE] == nullptr) { GRAPHIC_LOGE("failed to reload main clock"); return; } mainSwipeGroup->HorInsert(nullptr, mainClockView); SwitchToCard(TjdCardId::TJD_CARD_WATCH_FACE); Draw(); } } // namespace TJD