/*---------------------------------------------------------------------------- * Copyright (c) TJD Technologies Co., Ltd. 2025. All rights reserved. * * Description: TjdUiAppShutdownView.cpp * * Author: luziquan@ss-tjd.com * * Create: 2024-06-13 *--------------------------------------------------------------------------*/ #include "TjdUiAppShutdownView.h" #include "TjdUiImageIds.h" #include "TjdUiMemManage.h" #include "TjdUiMultiLanguageExt.h" #include "animator/animator_manager.h" #include "common/image_cache_manager.h" #include "sys_config.h" 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 ShutdownViewIndex TjdUiAppShutdownView::currentViewIndex_ = ShutdownViewIndex::SHUTDOWN_UNKNOWN; #define IMAGE_SHUTDOWN_BIN_PATH TJD_IMAGE_PATH "img_shutdown.bin" static inline int16_t HorizontalCenter(int16_t width, int16_t parentWidth) { return (parentWidth - width) / 2; } // clang-format off static inline void InitLabelHorCenter(OHOS::UILabel &label, uint8_t size, int16_t y, int16_t target, const char *text) { label.SetFont(TJD_VECTOR_FONT_FILENAME, size); label.SetText(text); label.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_ADAPT); label.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); label.SetPosition(HorizontalCenter(label.GetWidth(), target), y); } // clang-format on static TjdUiAppShutdownView *g_shutdownView = nullptr; TjdUiAppShutdownView::TjdUiAppShutdownView() { g_shutdownView = this; } TjdUiAppShutdownView::~TjdUiAppShutdownView() { g_shutdownView = nullptr; if (mainView_ != nullptr) { mainView_->RemoveAll(); delete mainView_; mainView_ = nullptr; } for (int i = 0; i < ShutdownViewIndex::SHUTDOWN_UNKNOWN; i++) { if (viewManager_[i] != nullptr) { delete viewManager_[i]; viewManager_[i] = nullptr; } } OHOS::ImageCacheManager::GetInstance().UnloadAllInMultiRes(IMAGE_SHUTDOWN_BIN_PATH); } TjdUiAppShutdownView *TjdUiAppShutdownView::GetInstance(void) { return g_shutdownView; } OHOS::UIScrollView *TjdUiAppShutdownView::InitView() { OHOS::ImageCacheManager::GetInstance().LoadAllInMultiRes(IMAGE_SHUTDOWN_BIN_PATH); if (mainView_ == nullptr) { mainView_ = new OHOS::UIScrollView(); } mainView_->SetPosition(0, 0, OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); mainView_->SetOnDragListener(TjdUiAppShutdownPresenter::GetInstance()); ShowView(ShutdownViewIndex::CHOOSE_SHUTDOWN_VIEW); return mainView_; } void TjdUiAppShutdownView::InitTargetView(ShutdownViewIndex index) { if (viewManager_[index] != nullptr) { return; } // clang-format off switch (index) { case CHOOSE_SHUTDOWN_VIEW: viewManager_[index] = new ChooseShutdownView(); break; case RESTART_VIEW: viewManager_[index] = new RestartView(); break; case SHUTDOWN_VIEW: viewManager_[index] = new ShutdownView(); break; default: break; } // clang-format on if (viewManager_[index] == nullptr) { return; } viewManager_[index]->SetPosition(0, 0); viewManager_[index]->SetVisible(false); mainView_->Add(viewManager_[index]); } void TjdUiAppShutdownView::ShowView(ShutdownViewIndex showIndex) { if (showIndex < 0 || showIndex >= ShutdownViewIndex::SHUTDOWN_UNKNOWN) { return; } InitTargetView(showIndex); if (currentViewIndex_ >= 0 && currentViewIndex_ < ShutdownViewIndex::SHUTDOWN_UNKNOWN && viewManager_[currentViewIndex_] != nullptr) { viewManager_[currentViewIndex_]->HideView(); } if (viewManager_[showIndex] != nullptr) { viewManager_[showIndex]->ShowView(); } currentViewIndex_ = showIndex; } #pragma region 关机主页面 ChooseShutdownView::ChooseShutdownView() { OHOS::ImageCacheManager &imgManager = OHOS::ImageCacheManager::GetInstance(); Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); const float iconSize = 117.0; OHOS::Vector2 scale = {}; restart_.SetPosition(89, 161, 117, 117); restart_.SetViewId(BTN_RESTART_VIEW_ID); restart_.SetTouchable(true); restart_.SetOnClickListener(TjdUiAppShutdownPresenter::GetInstance()); auto restartRes = imgManager.LoadOneInMultiRes(IMG_SHUTDOWN_RESTART, IMAGE_SHUTDOWN_BIN_PATH); if (restartRes != nullptr) { restart_.SetSrc(restartRes); } scale.x_ = iconSize / restartRes->header.width; scale.y_ = iconSize / restartRes->header.height; restart_.Scale(scale, {0, 0}); restartDesc_.SetFont(TJD_VECTOR_FONT_FILENAME, 34); restartDesc_.SetPosition(80, 300, 134, 34); restartDesc_.SetText("重启"); restartDesc_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); restartDesc_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); restartDesc_.SetStyle(OHOS::STYLE_TEXT_OPA, OHOS::OPA_OPAQUE * 0.6); restartDesc_.AlignHorCenterToSibling(restart_.GetViewId()); shutdown_.SetPosition(260, 161, 117, 117); shutdown_.SetViewId(BTN_SHUTDOWN_VIEW_ID); shutdown_.SetTouchable(true); shutdown_.SetOnClickListener(TjdUiAppShutdownPresenter::GetInstance()); auto shutdownRes = imgManager.LoadOneInMultiRes(IMG_SHUTDOWN_SHUTDOWN, IMAGE_SHUTDOWN_BIN_PATH); if (shutdownRes != nullptr) { shutdown_.SetSrc(shutdownRes); } scale.x_ = iconSize / shutdownRes->header.width; scale.y_ = iconSize / shutdownRes->header.height; shutdown_.Scale(scale, {0, 0}); shutdownDesc_.SetFont(TJD_VECTOR_FONT_FILENAME, 34); shutdownDesc_.SetPosition(256, 300, 134, 34); shutdownDesc_.SetText("关机"); shutdownDesc_.SetLineBreakMode(OHOS::UILabel::LINE_BREAK_WRAP); shutdownDesc_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER); shutdownDesc_.SetStyle(OHOS::STYLE_TEXT_OPA, OHOS::OPA_OPAQUE * 0.6); shutdownDesc_.AlignHorCenterToSibling(shutdown_.GetViewId()); Add(&restart_); Add(&restartDesc_); Add(&shutdown_); Add(&shutdownDesc_); } #pragma endregion #pragma region 重启页面 RestartView::RestartView() { OHOS::ImageCacheManager &imgManager = OHOS::ImageCacheManager::GetInstance(); Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); restart_.SetPosition(HorizontalCenter(201, 466), 95, 201, 201); restart_.SetTouchable(true); restart_.SetViewId(BTN_RESTART_ENTER_VIEW_ID); restart_.SetOnClickListener(TjdUiAppShutdownPresenter::GetInstance()); auto restartRes = imgManager.LoadOneInMultiRes(IMG_SHUTDOWN_RESTART, IMAGE_SHUTDOWN_BIN_PATH); if (restartRes != nullptr) { restart_.SetSrc(restartRes); } InitLabelHorCenter(restartDesc_, 36, 317, 466, "再次点击确认重启"); Add(&restart_); Add(&restartDesc_); } #pragma endregion #pragma region 关机页面 ShutdownView::ShutdownView() { OHOS::ImageCacheManager &imgManager = OHOS::ImageCacheManager::GetInstance(); Resize(OHOS::HORIZONTAL_RESOLUTION, OHOS::VERTICAL_RESOLUTION); shutdown.SetPosition(HorizontalCenter(201, 466), 95, 201, 201); shutdown.SetTouchable(true); shutdown.SetViewId(BTN_SHUTDOWN_ENTER_VIEW_ID); shutdown.SetOnClickListener(TjdUiAppShutdownPresenter::GetInstance()); auto restartRes = imgManager.LoadOneInMultiRes(IMG_SHUTDOWN_SHUTDOWN, IMAGE_SHUTDOWN_BIN_PATH); if (restartRes != nullptr) { shutdown.SetSrc(restartRes); } InitLabelHorCenter(shutdownDesc_, 36, 317, 466, "再次点击确认关机"); Add(&shutdown); Add(&shutdownDesc_); } #pragma endregion } // namespace TJD