From 52355cf18ef2fc059d2d0ddccaf5070b628ab74e Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Tue, 28 May 2024 20:14:49 +0800 Subject: [PATCH] =?utf8?q?set=5Fdial=20=E6=96=87=E4=BB=B6=E5=A4=B9?= =?utf8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/set_dial/include/SetDialInfo.h | 1 - .../nativeui/set_dial/include/SetDialModel.h | 1 - .../set_dial/include/SetDialPresenter.h | 18 +++-- .../nativeui/set_dial/include/SetDialView.h | 10 +-- .../nativeui/set_dial/src/SetDialModel.cpp | 65 +++++++++++-------- .../set_dial/src/SetDialPresenter.cpp | 52 ++++++++------- .../nativeui/set_dial/src/SetDialView.cpp | 5 +- 7 files changed, 87 insertions(+), 65 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialInfo.h b/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialInfo.h index 7ccb7984d..2de65cf48 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialInfo.h +++ b/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialInfo.h @@ -19,7 +19,6 @@ namespace OHOS { std::string imageFullName; /* 仅预制表盘使用 */ std::string dialName; std::string description; /* 仅离线表盘使用 */ - uint8_t freq; ImageInfo *preImageInfo; } SetDialInfo; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialModel.h b/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialModel.h index 695c5beea..6125415a8 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialModel.h @@ -29,7 +29,6 @@ namespace OHOS { virtual ~SetDialModel(); int32_t ParseDialHeader(const std::string &dialFileName, SetDialInfo &dialInfo); std::vector dialInfoList; - uint8_t pageIndex_{0}; }; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialPresenter.h index 65b4a746d..1af1cc92c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialPresenter.h @@ -12,28 +12,36 @@ #include "Presenter.h" #include "components/ui_view.h" #include "KeyInputListener.h" +#include "ModelListenerSample.h" namespace OHOS { +const uint16_t MISS_DIAL_OPERATION_TIME = 3000; + class SetDialView; class SetDialModel; class SetDialPresenter : public Presenter, - public UIView::OnClickListener, + public UIView::OnClickListener, public ModelListenerSample, public UICoverflowView::OnCoverflowScrollListener { public: SetDialPresenter(); - virtual ~SetDialPresenter(); + ~SetDialPresenter() override; size_t GetDialCount(void); std::vector& GetDialInfo(void); uint8_t GetPageIndex(void); - virtual void OnStart() override; - virtual void OnResume() override; - virtual void OnStop() override; + void OnStart() override; + void OnResume() override; + void OnStop() override; + void OnTickEvent() override; + void Notify() override {} bool OnScroll() override; bool OnClick(UIView &view, const ClickEvent &event) override; + void ResetTickTimer(void); private: + void OnClickAction(void); KeyInputListener *keyActListenr{nullptr}; SetDialModel *model{nullptr}; + uint64_t startTime{0}; }; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialView.h b/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialView.h index 85ee938c9..0a7f564fe 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialView.h @@ -23,7 +23,7 @@ class SetDialPresenter; class SetDialView : public View { public: SetDialView(); - virtual ~SetDialView(); + ~SetDialView() override; static SetDialView *GetInstance() { @@ -31,10 +31,10 @@ public: return &instance; } - virtual void OnStart() override; - virtual void OnSetUpView() override; - virtual void OnTearDownView() override; - virtual void OnStop() override; + void OnStart() override; + void OnSetUpView() override; + void OnTearDownView() override; + void OnStop() override; void CoverflowViewScroll(void); uint8_t GetCoverflowPage(void); private: diff --git a/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp index 122c0adb0..93f3e8355 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp @@ -4,13 +4,13 @@ * Author: * Create: 2021-11-23 */ - +#include #include "MainModel.h" #include "SetDialModel.h" #include "kv_store.h" #include "securec.h" #include "dirent.h" -#include "DialBinTypes.h" +#include "DialBinParser.h" #include "wearable_log.h" namespace OHOS { @@ -27,7 +27,12 @@ namespace OHOS { { dialInfoList.clear(); LoadAllDialFromRam(); + size_t dialSize = dialInfoList.size(); LoadAllDialFromFs(); + /* 只排序离线表盘 */ + std::sort(dialInfoList.begin() + dialSize, dialInfoList.end(), [](const SetDialInfo& f, const SetDialInfo& n) { + return f.dialName < n.dialName; + }); } void SetDialModel::LoadAllDialFromRam() @@ -35,12 +40,11 @@ namespace OHOS { for (uint8_t i = DIAL_CLOCK; i < DIAL_MAX; i++) { const DialInfo *info = MainModel::GetInstance().GetDialInfo((DialId)i); if (info != nullptr) { - SetDialInfo dialInfo; + SetDialInfo dialInfo{0}; dialInfo.dialFlag = 0; dialInfo.id = i; dialInfo.dialName = info->dialName; dialInfo.imageFullName = info->dialImg; - dialInfo.freq = info->freq; ImageInfo* imageInfo = ImageCacheManager::GetInstance().LoadSingleRes(info->dialImg, false); if (info == nullptr) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "LoadAllDialFromRam loadimage %s fail", @@ -61,9 +65,9 @@ namespace OHOS { // 打开目录 DIR *dirp = opendir(APP_DIAL_PATH); // 遍历文件 - if (dirp != NULL) { - while ((direntp = readdir(dirp)) != NULL) { - SetDialInfo dialInfo; + if (dirp != nullptr) { + while ((direntp = readdir(dirp)) != nullptr) { + SetDialInfo dialInfo{0}; int ret = ParseDialHeader(direntp->d_name, dialInfo); if (ret == 0) { dialInfoList.push_back(dialInfo); @@ -77,35 +81,34 @@ namespace OHOS { int32_t SetDialModel::ParseDialHeader(const std::string &dialFileName, SetDialInfo &dialInfo) { - DialHeader dialHeader{0}; std::string dialFullName = APP_DIAL_PATH; dialFullName += "/"; dialFullName += dialFileName; FILE *fp = fopen(dialFullName.c_str(), "rb"); if (fp == nullptr) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader cannot open file: %s", - dialFullName.c_str()); + dialFullName.c_str()); return -1; } - if (fread(&dialHeader, 1, sizeof(dialHeader), fp) != sizeof(dialHeader)) { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader fread %s fail", - dialFullName.c_str()); + DialPreviewInfo preInfo{0}; + bool ret = DialBinParser::GetInstance()->GetDialPreviewInfo(fp, &preInfo); + if (!ret) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetDialPreviewInfo %s fail", + dialFullName.c_str()); return -1; } WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader dialFullName: %s", dialFullName.c_str()); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader dialName: %s", - dialHeader.dialName); + preInfo.dialName); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader description: %s", - dialHeader.description); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader freq: %u", - dialHeader.freq); + preInfo.description); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader previewImgId: %u", - dialHeader.previewImgId); + preInfo.imgId); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader imageOffset: %u", - dialHeader.imageOffset); + preInfo.offset); ImageInfo *info = ImageCacheManager::GetInstance().LoadOneInMultiRes( - dialHeader.previewImgId | (0xfef << 20), dialFullName, fp, false, dialHeader.imageOffset); + preInfo.imgId, dialFullName, fp, false, preInfo.offset); if (info == nullptr) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ParseDialHeader loadimage fail"); return -1; @@ -114,9 +117,8 @@ namespace OHOS { dialInfo.dialFlag = 1; dialInfo.id = 0; dialInfo.dialFullName = dialFullName; - dialInfo.dialName = dialHeader.dialName; - dialInfo.description = dialHeader.description; - dialInfo.freq = dialHeader.freq; + dialInfo.dialName = preInfo.dialName; + dialInfo.description = preInfo.description; dialInfo.preImageInfo = info; fclose(fp); @@ -136,7 +138,6 @@ namespace OHOS { diagSetting.dialId = info.id; diagSetting.dialFullName = info.dialFullName; MainModel::GetInstance().AddDialSetting(diagSetting); - pageIndex_ = pageIndex; } size_t SetDialModel::GetDialCount(void) @@ -151,11 +152,21 @@ namespace OHOS { uint8_t SetDialModel::GetPageIndex(void) { - if (pageIndex_ >= dialInfoList.size()) { - return 0; - } else { - return pageIndex_; + uint8_t index = 0; + DialSetting dialSetting = MainModel::GetInstance().GetDialSetting(); + for (auto iter : dialInfoList) { + if (dialSetting.dialFlag) { + if (strcmp(iter.dialFullName.c_str(), dialSetting.dialFullName.c_str()) == 0) { + return index; + } + } else { + if ((!iter.dialFlag) && (iter.id == dialSetting.dialId)) { + return index; + } + } + index++; } + return 0; } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialPresenter.cpp index 41bb3f48e..2c3ae789d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialPresenter.cpp @@ -9,19 +9,18 @@ #include "SetDialModel.h" #include "SetDialPresenter.h" -namespace OHOS -{ +namespace OHOS { SetDialPresenter::SetDialPresenter() { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetDialPresenter::SetDialPresenter"); model = &SetDialModel::GetInstance(); model->LoadAllDial(); + ResetTickTimer(); } SetDialPresenter::~SetDialPresenter() { - if (keyActListenr != nullptr) - { + if (keyActListenr != nullptr) { delete keyActListenr; keyActListenr = nullptr; } @@ -30,15 +29,11 @@ namespace OHOS void SetDialPresenter::OnStart() { Presenter::OnStart(); - if (keyActListenr == nullptr) - { + if (keyActListenr == nullptr) { keyActListenr = new KeyInputListener(); - if (keyActListenr != nullptr) - { + if (keyActListenr != nullptr) { RootView::GetInstance()->SetOnKeyActListener(keyActListenr); - } - else - { + } else { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ApplistPresenter::OnStart: new KeyInputListener fail"); } } @@ -52,21 +47,17 @@ namespace OHOS { } + void SetDialPresenter::OnClickAction(void) + { + uint8_t pageIndex = view_->GetCoverflowPage(); + model->SaveDialSetting(pageIndex); + NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN_SAMPLE); + } + bool SetDialPresenter::OnClick(UIView &view, const ClickEvent &event) { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetDialPresenter::OnClick"); - uint8_t pageIndex = view_->GetCoverflowPage(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetDialPresenter select pageIndex = %u", pageIndex); - // 目前暂时这样处理 - if (pageIndex == 0) - { - model->SaveDialSetting(0); - } - else - { - model->SaveDialSetting(pageIndex); - } - NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN); + OnClickAction(); return true; } @@ -81,7 +72,7 @@ namespace OHOS return model->GetDialCount(); } - std::vector &SetDialPresenter::GetDialInfo(void) + std::vector& SetDialPresenter::GetDialInfo(void) { return model->GetDialInfo(); } @@ -90,4 +81,17 @@ namespace OHOS { return model->GetPageIndex(); } + + void SetDialPresenter::OnTickEvent() + { + uint64_t current_time = osKernelGetTick2ms(); + if ((startTime != 0) && (current_time - startTime > MISS_DIAL_OPERATION_TIME)) { + OnClickAction(); + } + } + + void SetDialPresenter::ResetTickTimer(void) + { + startTime = osKernelGetTick2ms(); + } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialView.cpp b/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialView.cpp index b683a860f..daa69cd6f 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialView.cpp @@ -77,7 +77,7 @@ void SetDialView::OnStop() } } -void SetDialView::CoverflowViewScroll(void) +void SetDialView::CoverflowViewScroll(void) { int16_t contMidX = static_cast(Screen::GetInstance().GetWidth() / DIVISOR_TWO); int16_t minOffset = contMidX; @@ -107,7 +107,8 @@ void SetDialView::CoverflowViewScroll(void) } else { uint8_t alpha = (uint8_t)((1.0f - ((float)offset / (curViewRect.GetWidth() / DIVISOR_TWO))) * OPA_OPAQUE); label_.SetStyle(STYLE_TEXT_OPA, alpha); - } + } + presenter_->ResetTickTimer(); } uint8_t SetDialView::GetCoverflowPage(void) -- 2.17.1