set_dial 文件夹更新
authorluozheng <1732036298@qq.com>
Tue, 28 May 2024 12:14:49 +0000 (20:14 +0800)
committerluozheng <1732036298@qq.com>
Tue, 28 May 2024 12:14:49 +0000 (20:14 +0800)
code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialInfo.h
code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialModel.h
code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialPresenter.h
code/sdk/application/wearable/fd230app/nativeui/set_dial/include/SetDialView.h
code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialModel.cpp
code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/set_dial/src/SetDialView.cpp

index 7ccb798..2de65cf 100644 (file)
@@ -19,7 +19,6 @@ namespace OHOS {
         std::string imageFullName; /* 仅预制表盘使用 */\r
         std::string dialName;\r
         std::string description;   /* 仅离线表盘使用 */\r
-        uint8_t freq;\r
         ImageInfo *preImageInfo;\r
     } SetDialInfo;\r
 }\r
index 695c5be..6125415 100644 (file)
@@ -29,7 +29,6 @@ namespace OHOS {
         virtual ~SetDialModel();
         int32_t ParseDialHeader(const std::string &dialFileName, SetDialInfo &dialInfo);
         std::vector<SetDialInfo> dialInfoList;
-        uint8_t pageIndex_{0};
     };
 }
 
index 65b4a74..1af1cc9 100644 (file)
 #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<SetDialView>,
-                         public UIView::OnClickListener,
+                         public UIView::OnClickListener, public ModelListenerSample,
                          public UICoverflowView::OnCoverflowScrollListener {
 public:
     SetDialPresenter();
-    virtual ~SetDialPresenter();
+    ~SetDialPresenter() override;
     size_t GetDialCount(void);
     std::vector<SetDialInfo>& 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};
 };
 }
 
index 85ee938..0a7f564 100644 (file)
@@ -23,7 +23,7 @@ class SetDialPresenter;
 class SetDialView : public View<SetDialPresenter> {
 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:
index 122c0ad..93f3e83 100644 (file)
@@ -4,13 +4,13 @@
  * Author:
  * Create: 2021-11-23
  */
-
+#include <algorithm>
 #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;
     }
 
 }
index 41bb3f4..2c3ae78 100644 (file)
@@ -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<SetDialView>::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<SetDialInfo> &SetDialPresenter::GetDialInfo(void)
+    std::vector<SetDialInfo>& 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();
+    }
 }
index b683a86..daa69cd 100644 (file)
@@ -77,7 +77,7 @@ void SetDialView::OnStop()
     }
 }
 
-void SetDialView::CoverflowViewScroll(void) 
+void SetDialView::CoverflowViewScroll(void)
 {
     int16_t contMidX = static_cast<int16_t>(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)