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

156 lines
6.9 KiB
C++

#include "TjdUiAppSettingView.h"
#include "TjdUiAppSettingPage.h"
#include "TjdUiImageIds.h"
#include "TjdUiMemManage.h"
#include "TjdUiMultiLanguageExt.h"
#include "TjdUiUtils.h"
#include "common/image_cache_manager.h"
#include "components/ui_label_ext.h"
#include "debug_print.h"
#include "dock/focus_manager.h"
#include "sys_typedef.h"
#include <stdio.h>
namespace TJD {
#define SETTING_IMAGE_BIN_PATH TJD_IMAGE_PATH "img_setting.bin"
static TjdUiAppSettingView *g_settingView = nullptr;
TjdUiAppSettingView::TjdUiAppSettingView() { g_settingView = this; }
TjdUiAppSettingView::~TjdUiAppSettingView() { g_settingView = nullptr; }
TjdUiAppSettingView *TjdUiAppSettingView::GetInstance(void) { return g_settingView; }
void TjdUiAppSettingView::InitSettingList()
{
auto &image = OHOS::ImageCacheManager::GetInstance();
struct SettingInfo
{
SettingItemIndex index;
int resId;
bool isCanSwitch;
uint16_t description;
uint32_t sliceId;
};
// clang-format off
SettingInfo settings[] = {
{SETTING_USER_INDEX, IMG_SETTING_AVATAR, false, STR_ID_431 ,TJD_APP_VIEW_SETTING_USER},
{SETTING_BLUETOOTH_INDEX, IMG_SETTING_BLUETOOTH, true, STR_ID_416 ,TJD_APP_VIEW_INVALID},
{SETTING_NOTIFICATION_INDEX, IMG_SETTING_NOTICE, false, STR_ID_288 ,TJD_APP_VIEW_SETTING_NOTIFICATION},
{SETTING_COMMON_INDEX, IMG_SETTING_CURRENCY, false, STR_ID_417 ,TJD_APP_VIEW_SETTING_COMMON},
{SETTING_LANGUAGE_INDEX, IMG_SETTING_LANGUAGE, false, STR_ID_36 ,TJD_APP_VIEW_SETTING_LANGUAGE},
{SETTING_MOTION_INTENT, IMG_SETTING_MOTION, false, STR_ID_419 ,TJD_APP_VIEW_SETTING_MOTION},
{SETTING_PASSWORD_INDEX, IMG_SETTING_PASSWORD, false, STR_ID_418 ,TJD_APP_VIEW_SETTING_PASSWORD},
{SETTING_DO_NOT_DISTURB_INDEX, IMG_SETTING_DISTURB, false, STR_ID_420 ,TJD_APP_VIEW_SETTING_DO_NOT_DISTURB},
{SETTING_POWER_SAVING_INDEX, IMG_SETTING_POWER, false, STR_ID_421 ,TJD_APP_VIEW_SETTING_POWER_SAVING},
{SETTING_WATCHFACE_MENU_INDEX, IMG_SETTING_STYLE, false, STR_ID_422 ,TJD_APP_VIEW_SETTING_WATCHFACE_MENU},
// {SETTING_PINCH_TO_ANSWER_INDEX, IMG_SETTING_PINCHING, true, STR_ID_423 ,TJD_APP_VIEW_INVALID},
{SETTING_COVER_TO_TURN_OFF_SCREEN_INDEX, IMG_SETTING_OCCLUSION, true, STR_ID_424 ,TJD_APP_VIEW_INVALID},
{SETTING_LEFT_KEY_SETTING_INDEX, IMG_SETTING_LEFT_CLICK_SETTINGS, false, STR_ID_425 ,TJD_APP_VIEW_SETTING_LEFT_KEY_SETTING},
{SETTING_FLOATING_WINDOW_INDEX, IMG_SETTING_FLOATING_WINDOW, false, STR_ID_426 ,TJD_APP_VIEW_SETTING_FLOATING_WINDOW},
{SETTING_ANIMATION_SETTING_INDEX, IMG_SETTING_DYNAMIC_EFFECT, false, STR_ID_427 ,TJD_APP_VIEW_SETTING_ANIMATION_SETTING},
{SETTING_DISPLAY_AND_BRIGHTNESS_INDEX, IMG_SETTING_BRIGHT_SCREEN, false, STR_ID_428 ,TJD_APP_VIEW_SETTING_DISPLAY_AND_BRIGHTNESS},
{SETTING_SOUND_AND_TOUCH_INDEX, IMG_SETTING_SOUND_AND_TOUCH, false, STR_ID_429 ,TJD_APP_VIEW_SETTING_SOUND_AND_TOUCH},
{SETTING_ABOUT_INDEX, IMG_SETTING_ABOUT, false, STR_ID_232 ,TJD_APP_VIEW_SETTING_ABOUT},
};
// clang-format on
settingItemList_.clear();
for (const auto &setting : settings) {
auto res = image.LoadOneInMultiRes(setting.resId, SETTING_IMAGE_BIN_PATH);
settingItemList_.push_back({setting.index, setting.isCanSwitch, res, setting.description, setting.sliceId});
}
}
void TjdUiAppSettingView::OnStart()
{
OHOS::ImageCacheManager::GetInstance().LoadAllInMultiRes(SETTING_IMAGE_BIN_PATH);
InitSettingList();
InitSettingView();
if (OHOS::PageTransitionMgr::GetInstance().GetTopSlideBackImage() == nullptr) {
settingList_->SetOnDragListener(presenter_);
}
settingList_->RequestFocus();
AddViewToRootContainer(settingList_);
}
void TjdUiAppSettingView::OnStop()
{
if (presenter_->IsEnterSettingItem()) {
SaveListStatus();
} else {
presenter_->SetHeadItemY(0);
presenter_->SetStartIndex(0);
}
OHOS::FocusManager::GetInstance()->ClearFocus();
if (settingList_ != nullptr) {
delete settingList_;
settingList_ = nullptr;
}
if (settingAdapter_) {
delete settingAdapter_;
settingAdapter_ = nullptr;
}
for (int i = 0; i < SETTING_MAX_INDEX; ++i) {
if (settingItems_[i] != nullptr) {
delete settingItems_[i];
settingItems_[i] = nullptr;
}
if (itemView_[i] != nullptr) {
delete itemView_[i];
itemView_[i] = nullptr;
}
}
OHOS::ImageCacheManager::GetInstance().UnloadAllInMultiRes(SETTING_IMAGE_BIN_PATH);
}
void TjdUiAppSettingView::SaveListStatus()
{
int16_t listHeadY = settingList_->GetTransformList()->GetChildrenHead()->GetY();
int16_t listHeadIndex = settingList_->GetTransformList()->GetChildrenHead()->GetViewIndex();
presenter_->SetHeadItemY(listHeadY);
presenter_->SetStartIndex(listHeadIndex);
}
void TjdUiAppSettingView::InitSettingView()
{
settingAdapter_ =
new TjdUITransformListGroupAdapter<SettingCaseInfo, SettingListItemView, std::list<SettingCaseInfo>>(
settingItemList_);
settingList_ = new TjdUITransformListGroup(settingAdapter_);
titleLabel_.SetTextId(STR_ID_28);
titleLabel_.SetFont(TJD_VECTOR_FONT_FILENAME, 32);
titleLabel_.Resize(200, 100);
titleLabel_.SetX((settingList_->GetWidth() >> 1) - (titleLabel_.GetWidth() >> 1));
titleLabel_.SetAlign(OHOS::TEXT_ALIGNMENT_CENTER, OHOS::TEXT_ALIGNMENT_CENTER);
auto titleOffset_ = ((OHOS::Screen::GetInstance().GetHeight() >> 1) - (128 >> 1) - 17 - titleLabel_.GetHeight());
settingList_->AddCustomView(&titleLabel_, TjdUITransformListGroup::CustomViewPos::TITLE);
settingList_->SetTitleOffset(titleOffset_);
uint16_t startIndex = 0;
int16_t headY = 0;
if (presenter_->GetStartIndex() >= settingAdapter_->GetCount()) {
startIndex = settingAdapter_->GetCount() - 1;
headY = settingList_->GetTransformList()->GetHeight() / 2;
} else {
startIndex = presenter_->GetStartIndex();
headY = presenter_->GetHeadItemY();
if (startIndex == 0 && headY == 0) {
headY = 169;
}
}
settingList_->GetTransformList()->ScrollTo(startIndex);
settingList_->GetTransformList()->ScrollBy(headY);
settingList_->GetTransformList()->RefreshList();
}
} // namespace TJD