增加疲劳度界面
authorxue <2144439972@qq.com>
Sat, 21 Jun 2025 07:26:21 +0000 (15:26 +0800)
committerxue <2144439972@qq.com>
Sat, 21 Jun 2025 07:26:21 +0000 (15:26 +0800)
25 files changed:
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.h
code/sdk/application/wearable/fd230app/nativelauncher/include/UiConfig.h
code/sdk/application/wearable/fd230app/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230app/nativeui/applist/src/ApplistModel.cpp
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueAnalysisView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueFailView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueMainView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueMeasureView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatiguePresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueResultView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueUnderMeasureView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueWearView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueAnalysisView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueFailView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueMainView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueMeasureView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatiguePresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueResultView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueUnderMeasureView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueWearView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/stress/include/StressPresenter.h
code/sdk/application/wearable/fd230app/nativeui/stress/src/StressPresenter.cpp

index ca973e3..5305f06 100644 (file)
@@ -283,6 +283,17 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressFailView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressPresenter.cpp
 
+    #疲劳度
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/fatiguelevel/src/FatigueMainView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/fatiguelevel/src/FatigueMeasureView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/fatiguelevel/src/FatigueUnderMeasureView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/fatiguelevel/src/FatigueAnalysisView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/fatiguelevel/src/FatigueModel.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/fatiguelevel/src/FatigueResultView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/fatiguelevel/src/FatigueWearView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/fatiguelevel/src/FatigueFailView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/fatiguelevel/src/FatiguePresenter.cpp
+
 
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothDeviceCaseListAdapter.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothDeviceListView.cpp
index 390c0cd..e3d7e86 100644 (file)
@@ -76,6 +76,7 @@ namespace OHOS
         void InitBloodSlice(void);
         void InitBloodPressureSlice(void);
         void InitStressSlice(void);
+        void InitFatigueLevelSlice(void);
         void InitCheckAbnormalSlice(void);
         void InitCheckInvalidSlice(void);
         void InitHeartResultSlice(void);
index 01f16ca..c90c8be 100644 (file)
@@ -604,6 +604,8 @@ namespace OHOS
     static constexpr const char *PNG_APPLIST_SPO2_IMAGE = APP_LIST_PATH "/booldoxygen.bin";         // 血氧
     static constexpr const char *PNG_APPLIST_BP_MESSURE_IMAGE = APP_LIST_PATH "/blood_pressure.bin";         // 血压测量
     static constexpr const char *PNG_APPLIST_ECG_IMAGE = APP_LIST_PATH "/ecg.bin";                   // 心电(ECG)测量
+    static constexpr const char *PNG_APPLIST_STRESS_IMAGE = APP_LIST_PATH "/stress.bin";                   // 压力测量
+    static constexpr const char *PNG_APPLIST_FATIGUE_IMAGE = APP_LIST_PATH "/Fatigue_level.bin";                   // 疲劳度测量
     static constexpr const char *PNG_APPLIST_EMOTION_IMAGE = APP_LIST_PATH "/emotion.bin";           // 情绪测量
     static constexpr const char *PNG_APPLIST_BP_IMAGE = APP_LIST_PATH "/bp_calibration.bin";         // 血压校准
     static constexpr const char *PNG_APPLIST_HEART_IMAGE = APP_LIST_PATH "/heart.bin";              // 心率
@@ -646,6 +648,8 @@ namespace OHOS
     static constexpr const char *PNG_APPLIST_BP_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/bp_calibration.bin";         // 血压校准
     static constexpr const char *PNG_APPLIST_EMOTION_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/emotion.bin";           // 情绪测量
     static constexpr const char *PNG_APPLIST_ECG_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/ecg.bin";                   // 心电(ECG)测量
+    static constexpr const char *PNG_APPLIST_STRESS_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/stress.bin";                   // 压力测量
+    static constexpr const char *PNG_APPLIST_FATIGUE_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/fatigue_level.bin";                   // 疲劳度测量
     static constexpr const char *PNG_APPLIST_HEART_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/heart.bin";              // 心率
     static constexpr const char *PNG_APPLIST_SETTING_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/setting.bin";          // 设置
     static constexpr const char *PNG_APPLIST_CALLER_IMAGE_BIG = APP_LIST_PATH "/applist_big_icon/phone.bin";             // 打电话
index ed266bd..f409a9a 100644 (file)
 /*压力检测*/
 #include "stress/include/StressPresenter.h"
 #include "stress/include/StressMainView.h"
+/*疲劳度检测*/
+#include "fatiguelevel/include/FatiguePresenter.h"
+#include "fatiguelevel/include/FatigueMainView.h"
 /*心率监测*/
 #include "heartrate/include/HeartDetectionView.h"
 #include "heartrate/include/HeartDetectionPresenter.h"
@@ -471,6 +474,8 @@ namespace OHOS
         {VIEW_EMOTION, &NativeLauncher::InitEmotionSlice},
         /*压力监测*/
         {VIEW_PRESSURE, &NativeLauncher::InitStressSlice},
+        /*疲劳度监测*/
+        {VIEW_FATIGUE, &NativeLauncher::InitFatigueLevelSlice},
         /*心率检测*/
         {VIEW_HEART_CHECK, &NativeLauncher::InitHeartCheckSlice},
         {VIEW_HEART_RESULT, &NativeLauncher::InitHeartResultSlice},
@@ -1398,7 +1403,7 @@ namespace OHOS
       // 压力监测界面
     void NativeLauncher::InitStressSlice(void)
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitBloodPressureSlice");
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitStressSlice");
         SliceProxy *stressView = new AbilitySliceProxy<StressMainView, StressPresenter>;
         if (stressView == nullptr)
         {
@@ -1406,6 +1411,18 @@ namespace OHOS
             return;
         }
         NativeAbility::GetInstance().AddSliceProxy(VIEW_PRESSURE, stressView);
+    }
+     // 疲劳度监测界面
+    void NativeLauncher::InitFatigueLevelSlice(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitFatigueLevelSlice");
+        SliceProxy *fatigueView = new AbilitySliceProxy<FatigueMainView, FatiguePresenter>;
+        if (fatigueView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fatigueView is nullptr");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_FATIGUE, fatigueView);
     }
     // 心率监测界面
     void NativeLauncher::InitHeartCheckSlice(void)
index c6a403e..0ca5b0a 100644 (file)
@@ -69,13 +69,13 @@ namespace OHOS
 // #endif
 #if defined(BOARD_W9) || defined(BOARD_N9)
         //ECG
-        {VIEW_ECG, PNG_APPLIST_ECG_IMAGE_BIG, PNG_APPLIST_ECG_IMAGE, PNG_APPLIST_DEFAULT_IMG, "ECG", STR_BP_CHECK, nullptr},
+        //{VIEW_ECG, PNG_APPLIST_ECG_IMAGE_BIG, PNG_APPLIST_ECG_IMAGE, PNG_APPLIST_DEFAULT_IMG, "ECG", STR_BP_CHECK, nullptr},
         //情绪
         //{VIEW_EMOTION, PNG_APPLIST_EMOTION_IMAGE_BIG, PNG_APPLIST_EMOTION_IMAGE, PNG_APPLIST_DEFAULT_IMG, "情绪", STR_EMOTION, nullptr},
         //压力
         //{VIEW_PRESSURE, PNG_APPLIST_STRESS_IMAGE_BIG, PNG_APPLIST_STRESS_IMAGE, PNG_APPLIST_DEFAULT_IMG, "压力", STR_STRESS, nullptr},
         //疲劳度
-        //{VIEW_FATIGUE, PNG_APPLIST_FATIGUE_IMAGE_BIG, PNG_APPLIST_FATIGUE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "疲劳度", STR_FATIGUE, nullptr},
+        {VIEW_FATIGUE, PNG_APPLIST_FATIGUE_IMAGE_BIG, PNG_APPLIST_FATIGUE_IMAGE, PNG_APPLIST_DEFAULT_IMG, "疲劳度", STR_BP_CHECK, nullptr},
 #endif
         {VIEW_SLEEP, PNG_APPLIST_SLEEP_IMAGE_BIG, PNG_APPLIST_SLEEP_IMAGE, PNG_APPLIST_DEFAULT_IMG, "睡眠", STR_SLEEP, nullptr},
         {VIEW_TRAINING, PNG_APPLIST_TRAINING_IMAGE_BIG, PNG_APPLIST_TRAINING_IMAGE, PNG_APPLIST_DEFAULT_IMG, "运动", STR_TRAINING, nullptr},
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueAnalysisView.h b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueAnalysisView.h
new file mode 100644 (file)
index 0000000..8307af7
--- /dev/null
@@ -0,0 +1,27 @@
+#ifndef FATIGUE_ANALYSIS_VIEW_H
+#define FATIGUE_ANALYSIS_VIEW_H
+
+#include "components/ui_view_group.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_image_animator.h"
+namespace OHOS
+{
+    class FatigueAnalysisView
+    {
+    public:
+        FatigueAnalysisView();
+        ~FatigueAnalysisView();
+        static FatigueAnalysisView *GetInstance(void);
+        UIViewGroup *FatigueAnalysisInit();
+        void startorstopAnalysisAni(bool state);
+
+    private:
+        void ClearAll(void);
+        UIViewGroup *group{nullptr};
+        UILabelExt *titleLabel{nullptr};
+        UILabelExt *remindLabel{nullptr};
+        UIImageAnimatorView *FatigueAnaAni{nullptr};
+        ImageAnimatorInfo FatigueAnaAniImageInfo[30];
+    };
+}
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueFailView.h b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueFailView.h
new file mode 100644 (file)
index 0000000..16ce8ab
--- /dev/null
@@ -0,0 +1,36 @@
+#ifndef BP_FATIGUEFAIL_VIEW_H
+#define BP_FATIGUEFAIL_VIEW_H
+
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+#include "components/ui_label_button.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_button_ext.h"
+namespace OHOS
+{
+    static constexpr const char *FAILBUTTON_FATIGUE = "FailButton"; 
+
+    class FatigueFailView
+    {
+    public:
+        FatigueFailView();
+        ~FatigueFailView();
+        static FatigueFailView *GetInstance();
+        UIViewGroup * FatigueFailInit();
+        void DeInit();
+        bool AddButton();
+        bool InitLable();
+        bool Initbackground();
+
+
+    private:
+        UIImageView *error = nullptr;  
+        UILabelExt *titleLable = nullptr;
+        UILabelButton *checkButton{nullptr};
+        UIViewGroup *group{nullptr};
+    };
+}
+
+#endif // 校准失败界面
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueMainView.h b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueMainView.h
new file mode 100644 (file)
index 0000000..81f0b80
--- /dev/null
@@ -0,0 +1,66 @@
+
+
+#ifndef Fatigue_MAIN_VIEW_H
+#define Fatigue_MAIN_VIEW_H
+
+#include "View.h"
+#include "BaseView.h"
+#include "components/ui_view_group.h"
+#include "fatiguelevel/include/FatigueMeasureView.h"
+#include "fatiguelevel/include/FatigueUnderMeasureView.h"
+#include "fatiguelevel/include/FatigueResultView.h"
+#include "fatiguelevel/include/FatigueWearView.h"
+#include "fatiguelevel/include/FatigueFailView.h"
+#include "fatiguelevel/include/FatigueResultView.h"
+#include "fatiguelevel/include/FatigueAnalysisView.h"
+
+namespace OHOS
+{
+    typedef enum : uint8_t
+    {
+        FATIGUEMEASUREVIEW = 0,   // 疲劳度测量界面
+        FATIGUEUNDERMEASUREVIEW,  // 测量中界面
+        FATIGUEANALYSISEVIEW,     // 分析界面
+        FATIGUERESULTVIEW,        // 测量结果界面
+        FATIGUEWEARVIEW,          // 佩戴错误界面
+        FATIGUEFAILVIEW,          // 测量失败界面
+        MAX_FATIGUEVIEW,
+    } FatigueVIEWID;
+
+    class FatiguePresenter;
+    class FatigueMainView : public View<FatiguePresenter>
+    {
+    public:
+        FatigueMainView();
+        virtual ~FatigueMainView();
+        static FatigueMainView *GetInstance(void);
+        void OnStop() override;
+        void OnSetUpView() override;
+        void OnTearDownView() override;
+        void OnStart() override;
+
+        bool ChangeFatigueMeasureView(int16_t);
+        bool ChangeFatigueUnderMeasureView(int16_t);
+        bool ChangeFatigueResultView(int16_t);
+        bool ChangeFatigueWearView(int16_t);
+        bool ChangeFatigueFailView(int16_t);
+        bool ChangeFatigueAnalysisView(int16_t);
+
+        bool ClickFunc(int16_t interface);
+        void ChangeView(int16_t hideView, int16_t showView);
+
+    private:
+        FatigueMeasureView *g_pFatigueMeasureView{nullptr};
+        FatigueUnderMeasureView *g_pFatigueUnderMeasureView{nullptr};
+        FatigueResultView *g_pFatigueResultView{nullptr};
+        FatigueFailView *g_pFatigueFailView{nullptr};
+        FatigueWearView *g_pFatigueWearView{nullptr};
+        FatigueAnalysisView *g_pFatigueAnalysisView{nullptr};
+
+    private:
+        void DeInit();
+        UIViewGroup *group[MAX_FATIGUEVIEW]{nullptr};
+    };
+}
+
+#endif // 血压主界面
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueMeasureView.h b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueMeasureView.h
new file mode 100644 (file)
index 0000000..7c85f96
--- /dev/null
@@ -0,0 +1,38 @@
+
+#ifndef BP_FATIGUEMEASURE_VIEW_H
+#define BP_FATIGUEMEASURE_VIEW_H
+
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+#include "components/ui_label_button.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_button_ext.h"
+namespace OHOS
+{
+    static constexpr const char *STARTBUTTON_FATIGUE = "startkButton"; // 开始测量按钮
+
+    class FatigueMeasureView
+    {
+    public:
+        FatigueMeasureView();
+        ~FatigueMeasureView();
+        static FatigueMeasureView *GetInstance();
+        UIViewGroup * FatigueMeasureInit();
+        void DeInit();
+        bool AddButton();
+        bool InitLable();
+        bool Initbackground();
+
+
+    private:
+        UIImageView *error = nullptr;  
+        UILabelExt *titleLable = nullptr;
+        UILabelExt *resultremindLable = nullptr;
+        UILabelButton *checkButton{nullptr};
+        UIViewGroup *group{nullptr};
+    };
+}
+
+#endif // 校准失败界面
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueModel.h b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueModel.h
new file mode 100644 (file)
index 0000000..9a8ef78
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef FATIGUE_MODEL_H
+#define FATIGUE_MODEL_H
+
+#include <stdint.h>
+#include <string>
+
+
+namespace OHOS {
+// 血压检测状态
+enum class FatigueState {
+  //结束
+  FATIGUE_End = 0,
+  //疲劳度检测中
+  FATIGUE_MEASURE,
+  //结果分析中 
+  FATIGUE_ANALYSIS,
+  //普通状态
+  FATIGUE_NORMAL,
+  //暂停
+  FATIGUE_PAUSE,
+
+  FATIGUE_STATE_MAX,
+};
+// 疲劳度检测结果
+enum class FatigueRESULT {
+  NOT_TESTED = 0, // 未检测
+  SUCCESS,        // 检测成功
+  NOT_WORN,       // 未佩戴检测
+  TIMEOUT,        // 检测超时
+  HIGH_RESULT,    // 检测结果过高
+  LOW_RESULT,     // 检测结果过低
+  INVALID_DATA    // 无效数据
+};
+
+#define Fatigue_ANLYSISI_TIME_MAX 5
+
+class FatigueModel {
+public:
+  FatigueModel();
+  ~FatigueModel();
+  static FatigueModel *GetInstance();
+
+  //当前状态管理
+  void Fatigue_SetState(FatigueState state);
+  FatigueState GetCurrentState();
+  //控制血压检测
+  void Fatigue_Control(FatigueState state);
+
+  ///////////////////////////////////////////////
+  void Fatigue_StartTimer(uint32_t interval = 1*1000);// 1s定时器
+  void Fatigue_StopTimer(void);
+
+
+private:
+  FatigueState current_state = FatigueState::FATIGUE_NORMAL;
+};
+} // namespace OHOS
+
+#endif
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatiguePresenter.h b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatiguePresenter.h
new file mode 100644 (file)
index 0000000..246bd02
--- /dev/null
@@ -0,0 +1,41 @@
+
+
+#ifndef Fatigue_RESULT_PRESENTER_H
+#define Fatigue_RESULT_PRESENTER_H
+
+#include "Presenter.h"
+#include "ModelListenerSample.h"
+#include "components/ui_circle_progress.h"
+#include "ohos_types.h"
+#include "KeyInputListener.h"
+#include "common/key_code.h"
+#include "fatiguelevel/include/FatigueMainView.h"
+#include "fatiguelevel/include/FatigueModel.h"
+
+namespace OHOS
+{
+    class FatigueMainView;
+    class FatiguePresenter : public Presenter<FatigueMainView>,
+                                 public UIView::OnClickListener,
+                                 public RootView::OnKeyActListener,
+                                 public UIView::OnDragListener
+    {
+    public:
+        FatiguePresenter();
+        virtual ~FatiguePresenter();
+        static FatiguePresenter *GetInstance(void);
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+        bool OnDragEnd(UIView &view, const DragEvent &event) override;
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
+
+    };
+}
+
+#endif
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueResultView.h b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueResultView.h
new file mode 100644 (file)
index 0000000..c63391b
--- /dev/null
@@ -0,0 +1,37 @@
+
+#ifndef BP_FATIGUERESULT_VIEW_H
+#define BP_FATIGUERESULT_VIEW_H
+
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+#include "components/ui_label_button.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_button_ext.h"
+namespace OHOS
+{
+
+    class FatigueResultView
+    {
+    public:
+        FatigueResultView();
+        ~FatigueResultView();
+        static FatigueResultView *GetInstance();
+        UIViewGroup * FatigueResultInit();
+        void DeInit();
+        bool AddButton();
+        bool InitLable();
+        bool Initbackground();
+
+
+    private:
+        UIImageView *error = nullptr;  
+        UILabelExt *titleLable = nullptr;
+        UILabelExt *resultremindLable = nullptr;
+        UILabelExt *resultLable = nullptr;
+        UIViewGroup *group{nullptr};
+    };
+}
+
+#endif // 校准失败界面
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueUnderMeasureView.h b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueUnderMeasureView.h
new file mode 100644 (file)
index 0000000..83e25dc
--- /dev/null
@@ -0,0 +1,38 @@
+
+#ifndef BP_FatigueUnderMeasureView_VIEW_H
+#define BP_FatigueUnderMeasureView_VIEW_H
+
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+#include "components/ui_label_button.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_button_ext.h"
+namespace OHOS
+{
+    static constexpr const char *UNDERBUTTON_FATIGUE = "undermeasureButton"; // 开始测量按钮
+
+    class FatigueUnderMeasureView
+    {
+    public:
+        FatigueUnderMeasureView();
+        ~FatigueUnderMeasureView();
+        static FatigueUnderMeasureView *GetInstance();
+        UIViewGroup * FatigueUnderMeasureInit();
+        void DeInit();
+        bool AddButton();
+        bool InitLable();
+        bool Initbackground();
+
+
+    private:
+        UIImageView *error = nullptr;  
+        UILabelExt *titleLable = nullptr;
+        UILabelExt *resultremindLable = nullptr;
+        UILabelButton *checkButton{nullptr};
+        UIViewGroup *group{nullptr};
+    };
+}
+
+#endif // 校准失败界面
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueWearView.h b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/include/FatigueWearView.h
new file mode 100644 (file)
index 0000000..28bbdd5
--- /dev/null
@@ -0,0 +1,37 @@
+
+#ifndef BP_FATIGUEWEAR_VIEW_H
+#define BP_FATIGUEWEAR_VIEW_H
+
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+#include "components/ui_label_button.h"
+#include "components/ui_view_group.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_button_ext.h"
+namespace OHOS
+{
+    static constexpr const char *WEARBUTTON_FITIGUE = "WearButton"; // 开始测量按钮
+
+    class FatigueWearView
+    {
+    public:
+        FatigueWearView();
+        ~FatigueWearView();
+        static FatigueWearView *GetInstance();
+        UIViewGroup * FatigueWearInit();
+        void DeInit();
+        bool AddButton();
+        bool InitLable();
+        bool Initbackground();
+
+
+    private:
+        UIImageView *error = nullptr;  
+        UILabelExt *titleLable = nullptr;
+        UILabelButton *checkButton{nullptr};
+        UIViewGroup *group{nullptr};
+    };
+}
+
+#endif // 校准失败界面
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueAnalysisView.cpp b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueAnalysisView.cpp
new file mode 100644 (file)
index 0000000..e92f22d
--- /dev/null
@@ -0,0 +1,175 @@
+#include "fatiguelevel/include/FatigueAnalysisView.h"
+#include "fatiguelevel/include/FatiguePresenter.h"
+#include "wearable_log.h"
+#include "UiConfig.h"
+#include "common/image_cache_manager.h"
+namespace OHOS
+{
+
+    const char *FatigueAnaAniImagePath[] = {
+        PNG_STRESS_IMAGE_00,
+        PNG_STRESS_IMAGE_01,
+        PNG_STRESS_IMAGE_02,
+        PNG_STRESS_IMAGE_03,
+        PNG_STRESS_IMAGE_04,
+        PNG_STRESS_IMAGE_05,
+        PNG_STRESS_IMAGE_06,
+        PNG_STRESS_IMAGE_07,
+        PNG_STRESS_IMAGE_08,
+        PNG_STRESS_IMAGE_09,
+        PNG_STRESS_IMAGE_10,
+        PNG_STRESS_IMAGE_11,
+        PNG_STRESS_IMAGE_12,
+        PNG_STRESS_IMAGE_13,
+        PNG_STRESS_IMAGE_14,
+        PNG_STRESS_IMAGE_15,
+        PNG_STRESS_IMAGE_16,
+        PNG_STRESS_IMAGE_17,
+        PNG_STRESS_IMAGE_18,
+        PNG_STRESS_IMAGE_19,
+        PNG_STRESS_IMAGE_20,
+        PNG_STRESS_IMAGE_21,
+        PNG_STRESS_IMAGE_22,
+        PNG_STRESS_IMAGE_23,
+        PNG_STRESS_IMAGE_24,
+        PNG_STRESS_IMAGE_25,
+        PNG_STRESS_IMAGE_26,
+        PNG_STRESS_IMAGE_27,
+        PNG_STRESS_IMAGE_28,
+        PNG_STRESS_IMAGE_29,
+    };
+
+    static FatigueAnalysisView *g_pFatigueAnalysisView = nullptr;
+    FatigueAnalysisView::FatigueAnalysisView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FatigueAnalysisView::FatigueAnalysisView");
+        g_pFatigueAnalysisView = this;
+    }
+
+    FatigueAnalysisView::~FatigueAnalysisView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FatigueAnalysisView::~FatigueAnalysisView");
+        ClearAll();
+        g_pFatigueAnalysisView = nullptr;
+    }
+
+    FatigueAnalysisView *FatigueAnalysisView::GetInstance(void)
+    {
+        return g_pFatigueAnalysisView;
+    }
+
+    void FatigueAnalysisView::ClearAll(void)
+    {
+        if (group)
+        {
+            group->RemoveAll();
+            delete group;
+            group = nullptr;
+            delete titleLabel;
+            titleLabel = nullptr;
+            delete remindLabel;
+            remindLabel = nullptr;
+            if (FatigueAnaAni)
+            {
+                FatigueAnaAni->Stop();
+                delete FatigueAnaAni;
+                FatigueAnaAni = nullptr;
+            }
+        }
+    }
+
+    void FatigueAnalysisView::startorstopAnalysisAni(bool state)
+    {
+        if (FatigueAnaAni)
+        {
+            if (state)
+            {
+                FatigueAnaAni->Start();
+            }
+            else
+            {
+                FatigueAnaAni->Stop();
+            }
+        }
+    }
+
+    UIViewGroup *FatigueAnalysisView::FatigueAnalysisInit()
+    {
+        if (group == nullptr)
+        {
+            group = new UIViewGroup();
+            if (group == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group null!");
+                return nullptr;
+            }
+        }
+        group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+        group->SetTouchable(true);
+        group->SetDraggable(true);
+        // UIView::OnDragListener *dragListener = (UIView::OnDragListener *)OHOS::FatiguePresenter::GetInstance();
+        // group->SetOnDragListener(dragListener);
+        /* -------------------------------------------------------------------------- */
+        FatigueAnaAni = new UIImageAnimatorView();
+        if (FatigueAnaAni == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlipayBindAni::AlipayInitImageAni new FatigueAnaAni fail");
+            return nullptr;
+        }
+        for (uint8_t i = 0; i < (sizeof(FatigueAnaAniImagePath) / sizeof(FatigueAnaAniImagePath[0])); i++)
+        {
+            FatigueAnaAniImageInfo[i].imageInfo = ImageCacheManager::GetInstance().LoadSingleRes(FatigueAnaAniImagePath[i]);
+            FatigueAnaAniImageInfo[i].imageType = IMG_SRC_IMAGE_INFO;
+            FatigueAnaAniImageInfo[i].pos.x = 0;
+            FatigueAnaAniImageInfo[i].pos.y = 0;
+            FatigueAnaAniImageInfo[i].width = 466;
+            FatigueAnaAniImageInfo[i].height = 466;
+        }
+        FatigueAnaAni->SetPosition(0, 0, 466, 466);
+        FatigueAnaAni->SetImageAnimatorSrc(FatigueAnaAniImageInfo, (sizeof(FatigueAnaAniImagePath) / sizeof(FatigueAnaAniImagePath[0])), 100);
+        FatigueAnaAni->SetRepeat(true);
+        FatigueAnaAni->SetAutoEnable(false);
+        FatigueAnaAni->SetResizeMode(UIImageView::FILL);
+        group->Add(FatigueAnaAni);
+        /* -------------------------------------------------------------------------- */
+        if (titleLabel == nullptr)
+        {
+            titleLabel = new UILabelExt();
+            if (titleLabel == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "titleLabel null!");
+                return nullptr;
+            }
+        }
+        titleLabel->SetPosition((HORIZONTAL_RESOLUTION - 300) / 2, 50, 300, 35);
+        titleLabel->SetStyle(STYLE_TEXT_FONT, 30);
+        titleLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+        titleLabel->SetText("疲劳度");
+        titleLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+        titleLabel->SetRollSpeed(23);
+        titleLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        titleLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        group->Add(titleLabel);
+        /* -------------------------------------------------------------------------- */
+        if (remindLabel == nullptr)
+        {
+            remindLabel = new UILabelExt();
+            if (remindLabel == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "remindLabel null!");
+                return nullptr;
+            }
+        }
+        remindLabel->SetPosition((HORIZONTAL_RESOLUTION - 300) / 2, 360, 300, 35);
+        remindLabel->SetStyle(STYLE_TEXT_FONT, 30);
+        remindLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+        remindLabel->SetText("数据分析中,请耐心等待结果");
+        remindLabel->SetTextColor(Color::White());
+        remindLabel->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+        remindLabel->SetRollSpeed(23);
+        remindLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        remindLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        group->Add(remindLabel);
+        return group;
+    }
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueFailView.cpp b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueFailView.cpp
new file mode 100644 (file)
index 0000000..72ad321
--- /dev/null
@@ -0,0 +1,134 @@
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-31 14:36:25
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/fatigue/src/FatigueFailView.cpp
+ */
+
+#include "ui_resource_image.h"
+#include "UiConfig.h"
+#include "wearable_log.h"
+#include "uicomponents/UIComponents.h"
+#include "fatiguelevel/include/FatiguePresenter.h"
+#include "fatiguelevel/include/FatigueFailView.h"
+namespace OHOS
+{
+    static FatigueFailView *g_pFatigueFailView{nullptr};
+    static const char *BPBACKPATH = "/user/res/BPCalibration/error.bin";
+
+    FatigueFailView::FatigueFailView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueFailView::FatigueFailView");
+        g_pFatigueFailView = this;
+    }
+    FatigueFailView::~FatigueFailView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueFailView::~FatigueFailView");
+        DeInit();
+        g_pFatigueFailView = nullptr;
+    }
+    FatigueFailView *FatigueFailView::GetInstance()
+    {
+        return g_pFatigueFailView;
+    }
+    void FatigueFailView::DeInit()
+    {
+        if (group)
+        {
+            group->RemoveAll();
+            delete group;
+            group = nullptr;
+        }
+        if (error != nullptr)
+        {
+            delete error;
+            error = nullptr;
+        }
+        if (titleLable != nullptr)
+        {
+            delete titleLable;
+            titleLable = nullptr;
+        }
+      
+        if (checkButton != nullptr)
+        {
+            delete checkButton;
+            checkButton = nullptr;
+        }
+    }
+    /* -------------------------------------------------------------------------- */
+    /***
+     * @description:
+     * @return 添加按键是否成功
+     */
+    bool FatigueFailView::AddButton()
+    {
+        InitLabelButton(checkButton, 124, 352, 217, 63, "errorcheckButton", "重新测量", 35);
+        checkButton->SetViewId(FAILBUTTON_FATIGUE);
+        checkButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); // 设置按键颜色
+        checkButton->SetTextColor(Color::White());
+        // 设置按键监听
+        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::FatiguePresenter::GetInstance();
+        checkButton->SetOnClickListener(clickListener);
+
+        group->Add(checkButton);
+        return true;
+    }
+    /***
+     * @description:
+     * @return 初始化标签是否成功
+     */
+    bool FatigueFailView::InitLable()
+    {
+
+        InitLabel(titleLable, 87, 85, 272, 45, "titleLable", "测量失败", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        /*初始化检测时间*/
+        group->Add(titleLable);
+
+        return true;
+    }
+    /***
+     * @description:
+     * @return 初始化背景是否成功
+     */
+    bool FatigueFailView::Initbackground()
+    {
+        error = new UIImageView();
+        error->SetPosition(163, 170, 140, 140);
+        error->SetSrc(BPBACKPATH);
+        group->Add(error);
+        return true;
+    }
+    /***
+     * @description:
+     * @return 是否初始化成功
+     */
+    UIViewGroup *FatigueFailView::FatigueFailInit()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bool FatigueFailView::InitView()");
+        group = new UIViewGroup();
+        if (group == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmPopUpView::group null!");
+            return nullptr;
+        }
+        group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+        if (!Initbackground())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Initbackground error!");
+            return nullptr;
+        };
+        if (!InitLable())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLable error!");
+            return nullptr;
+        };
+        if (!AddButton())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AddButton error!");
+            return nullptr;
+        };
+        return group;
+    }
+
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueMainView.cpp b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueMainView.cpp
new file mode 100644 (file)
index 0000000..bc9290f
--- /dev/null
@@ -0,0 +1,280 @@
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-31 14:36:25
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/fatigue/src/FatigueMainView.cpp
+ */
+
+#include "common/image_cache_manager.h"
+#include "ui_resource_image.h"
+#include <ui_scroll_view.h>
+#include "components/ui_button.h"
+#include "MainViewSample.h"
+#include "components/ui_view_group.h"
+#include "DialModelSPO2.h"
+#include "DialModelHeartRate.h"
+
+#include "UiConfig.h"
+#include "uicomponents/UIComponents.h"
+#include "MainPresenterSample.h"
+
+#include "fatiguelevel/include/FatiguePresenter.h"
+#include "fatiguelevel/include/FatigueMainView.h"
+#include "wearable_log.h"
+namespace OHOS
+{
+    static FatigueMainView *g_pFatigueMainView{nullptr};
+
+    FatigueMainView::FatigueMainView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FatigueMainView::FatigueMainView");
+        g_pFatigueMainView = this;
+    }
+
+    FatigueMainView::~FatigueMainView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FatigueMainView::~FatigueMainView");
+        DeInit();
+        g_pFatigueMainView = nullptr;
+    }
+
+    FatigueMainView *FatigueMainView::GetInstance()
+    {
+        return g_pFatigueMainView;
+    }
+
+    void FatigueMainView::DeInit()
+    {
+
+        if (g_pFatigueMeasureView)
+        {
+            delete g_pFatigueMeasureView;
+            g_pFatigueMeasureView = nullptr;
+        }
+        if (g_pFatigueUnderMeasureView)
+        {
+            delete g_pFatigueUnderMeasureView;
+            g_pFatigueUnderMeasureView = nullptr;
+        }
+        if (g_pFatigueResultView)
+        {
+            delete g_pFatigueResultView;
+            g_pFatigueResultView = nullptr;
+        }
+    }
+
+    void FatigueMainView::OnStart()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FatigueMainView::OnStart");
+        View<FatiguePresenter>::OnStart();
+        SetContainerView(new UIViewGroup());
+        if (GetContainer() == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "container_ new fail!!");
+            return;
+        }
+        container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+        container_->SetDraggable(true);
+        container_->SetTouchable(true);
+        container_->SetOnDragListener(presenter_);
+
+        ChangeView(MAX_FATIGUEVIEW, FATIGUEMEASUREVIEW); // 切换到第一个界面
+
+        // 增加按键监听
+        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::FatiguePresenter::GetInstance();
+        RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+    }
+    void FatigueMainView::OnSetUpView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueMainView::OnSetUpView");
+        View<FatiguePresenter>::OnSetUpView();
+        Draw();
+    }
+    void FatigueMainView::OnTearDownView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueMainView::OnTearDownView");
+        View<FatiguePresenter>::OnTearDownView();
+        return;
+    }
+
+    void FatigueMainView::OnStop()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueMainView::OnStop");
+        View<FatiguePresenter>::OnStop();
+        if (container_ != nullptr)
+        {
+            container_->RemoveAll();
+            delete container_;
+            container_ = nullptr;
+        }
+        return;
+    }
+
+    bool FatigueMainView::ChangeFatigueMeasureView(int16_t thisView)
+    {
+        // 检查视图是否已初始化
+        if (group[thisView] == nullptr)
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "fatigueView::ChangeFatigueMeasureView");
+            g_pFatigueMeasureView = new FatigueMeasureView();
+            if (g_pFatigueMeasureView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fatigueView:: new scrollView[%d] fail", thisView);
+                return false;
+            }
+            // 初始化视图并添加到视图组
+            group[thisView] = g_pFatigueMeasureView->FatigueMeasureInit();
+            container_->Add(group[thisView]);
+        }
+        return true;
+    }
+    bool FatigueMainView::ChangeFatigueUnderMeasureView(int16_t thisView)
+    {
+        // 检查视图是否已初始化
+        if (group[thisView] == nullptr)
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "fatigueView::ChangeFatigueUnderMeasureView");
+            g_pFatigueUnderMeasureView = new FatigueUnderMeasureView();
+            if (g_pFatigueUnderMeasureView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fatigueView:: new scrollView[%d] fail", thisView);
+                return false;
+            }
+            // 初始化视图并添加到视图组
+            group[thisView] = g_pFatigueUnderMeasureView->FatigueUnderMeasureInit();
+            container_->Add(group[thisView]);
+        }
+        return true;
+    }
+    bool FatigueMainView::ChangeFatigueResultView(int16_t thisView)
+    {
+        // 检查视图是否已初始化
+        if (group[thisView] == nullptr)
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "fatigueView::ChangeFatigueResultView");
+            g_pFatigueResultView = new FatigueResultView();
+            if (g_pFatigueResultView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fatigueView:: new scrollView[%d] fail", thisView);
+                return false;
+            }
+            // 初始化视图并添加到视图组
+            group[thisView] = g_pFatigueResultView->FatigueResultInit();
+            container_->Add(group[thisView]);
+        }
+        return true;
+    }
+    bool FatigueMainView::ChangeFatigueWearView(int16_t thisView)
+    {
+        // 检查视图是否已初始化
+        if (group[thisView] == nullptr)
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "fatigueView::ChangeFatigueWearView");
+            g_pFatigueWearView = new FatigueWearView();
+            if (g_pFatigueWearView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fatigueView:: new scrollView[%d] fail", thisView);
+                return false;
+            }
+            // 初始化视图并添加到视图组
+            group[thisView] = g_pFatigueWearView->FatigueWearInit();
+            container_->Add(group[thisView]);
+        }
+        return true;
+    }
+    bool FatigueMainView::ChangeFatigueFailView(int16_t thisView)
+    {
+        // 检查视图是否已初始化
+        if (group[thisView] == nullptr)
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "fatigueView::ChangeFatigueResultView");
+            g_pFatigueFailView = new FatigueFailView();
+            if (g_pFatigueFailView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fatigueView:: new scrollView[%d] fail", thisView);
+                return false;
+            }
+            // 初始化视图并添加到视图组
+            group[thisView] = g_pFatigueFailView->FatigueFailInit();
+            container_->Add(group[thisView]);
+        }
+        return true;
+    }
+    bool FatigueMainView::ChangeFatigueAnalysisView(int16_t thisView)
+    {
+        // 检查视图是否已初始化
+        if (group[thisView] == nullptr)
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "fatigueView::ChangeFatigueResultView");
+            g_pFatigueAnalysisView = new FatigueAnalysisView();
+            if (g_pFatigueAnalysisView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fatigueView:: new scrollView[%d] fail", thisView);
+                return false;
+            }
+            // 初始化视图并添加到视图组
+            group[thisView] = g_pFatigueAnalysisView->FatigueAnalysisInit();
+            container_->Add(group[thisView]);
+        }
+        return true;
+    }
+
+    /**
+     * 视图映射结构体 - 将视图ID映射到对应的视图切换函数
+     */
+    struct FatigueViewMapper
+    {
+        const int16_t viewId;                  // 视图ID
+        bool (FatigueMainView::*func)(int16_t); // 对应的视图切换函数指针
+    };
+
+    static const FatigueViewMapper ViewMapper[] = {
+        {FATIGUEMEASUREVIEW, &FatigueMainView::ChangeFatigueMeasureView},
+        {FATIGUEUNDERMEASUREVIEW, &FatigueMainView::ChangeFatigueUnderMeasureView},
+        {FATIGUEANALYSISEVIEW, &FatigueMainView::ChangeFatigueAnalysisView},
+        {FATIGUERESULTVIEW, &FatigueMainView::ChangeFatigueResultView},
+        {FATIGUEWEARVIEW, &FatigueMainView::ChangeFatigueWearView},
+        {FATIGUEFAILVIEW, &FatigueMainView::ChangeFatigueFailView},
+    };
+
+    bool FatigueMainView::ClickFunc(int16_t interface)
+    {
+        int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[0]);
+
+        for (int i = 0; i < funcSize; i++)
+        {
+            if (interface == ViewMapper[i].viewId)
+            {
+                bool jug = (this->*(ViewMapper[i].func))(interface);
+                if (jug == false)
+                {
+                    return false;
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
+    void FatigueMainView::ChangeView(int16_t hideView, int16_t showView)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueMainView::ChangeView");
+        if (hideView > MAX_FATIGUEVIEW)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FatigueMainView:: SystemViewId Overstep ones bounds");
+            return;
+        }
+        if (hideView != MAX_FATIGUEVIEW)
+        {
+            if (group[hideView] == nullptr)
+            {
+                return;
+            }
+            group[hideView]->SetVisible(false);
+        }
+        ClickFunc(showView);
+        group[showView]->SetVisible(true);
+        container_->Invalidate();
+    }
+
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueMeasureView.cpp b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueMeasureView.cpp
new file mode 100644 (file)
index 0000000..4e4363f
--- /dev/null
@@ -0,0 +1,142 @@
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-31 14:36:25
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/fatiguelevel/src/FatigueMeasureView.cpp
+ */
+
+#include "ui_resource_image.h"
+#include "UiConfig.h"
+#include "wearable_log.h"
+#include "uicomponents/UIComponents.h"
+#include "fatiguelevel/include/FatiguePresenter.h"
+#include "fatiguelevel/include/FatigueMeasureView.h"
+namespace OHOS
+{
+    static FatigueMeasureView *g_pFatigueMeasureView{nullptr};
+    static const char *BPBACKPATH = "/user/res/BPCalibration/J1.bin";
+
+    FatigueMeasureView::FatigueMeasureView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueMeasureView::FatigueMeasureView");
+        g_pFatigueMeasureView = this;
+    }
+    FatigueMeasureView::~FatigueMeasureView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueMeasureView::~FatigueMeasureView");
+        DeInit();
+        g_pFatigueMeasureView = nullptr;
+    }
+    FatigueMeasureView *FatigueMeasureView::GetInstance()
+    {
+        return g_pFatigueMeasureView;
+    }
+    void FatigueMeasureView::DeInit()
+    {
+        if (group)
+        {
+            group->RemoveAll();
+            delete group;
+            group = nullptr;
+        }
+        if (error != nullptr)
+        {
+            delete error;
+            error = nullptr;
+        }
+        if (titleLable != nullptr)
+        {
+            delete titleLable;
+            titleLable = nullptr;
+        }
+        if (resultremindLable != nullptr)
+        {
+            delete resultremindLable;
+            resultremindLable = nullptr;
+        }
+        if (checkButton != nullptr)
+        {
+            delete checkButton;
+            checkButton = nullptr;
+        }
+    }
+    /* -------------------------------------------------------------------------- */
+    /***
+     * @description:
+     * @return 添加按键是否成功
+     */
+    bool FatigueMeasureView::AddButton()
+    {
+        InitLabelButton(checkButton, 124, 352, 217, 63, "errorcheckButton", "测量", 35);
+        checkButton->SetViewId(STARTBUTTON_FATIGUE);
+        checkButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff00cbf0); // 设置按键颜色
+        checkButton->SetTextColor(Color::White());
+        // 设置按键监听
+        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::FatiguePresenter::GetInstance();
+        checkButton->SetOnClickListener(clickListener);
+
+        group->Add(checkButton);
+        return true;
+    }
+    /***
+     * @description:
+     * @return 初始化标签是否成功
+     */
+    bool FatigueMeasureView::InitLable()
+    {
+
+        InitLabel(titleLable, 188, 30, 95, 45, "titleLable", "疲劳度", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        InitLabel(resultremindLable, 68, 239, 337, 100, "resultremindLable", "---", DEFAULT_VECTOR_FONT_FILENAME, 100);
+        resultremindLable->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+        resultremindLable->SetTextColor(Color::White());
+        /*初始化检测时间*/
+        group->Add(titleLable);
+        group->Add(resultremindLable);
+
+        return true;
+    }
+    /***
+     * @description:
+     * @return 初始化背景是否成功
+     */
+    bool FatigueMeasureView::Initbackground()
+    {
+        error = new UIImageView();
+        error->SetPosition(140, 65, 111, 118);
+        error->SetSrc(BPBACKPATH);
+        group->Add(error);
+        return true;
+    }
+    /***
+     * @description:
+     * @return 是否初始化成功
+     */
+    UIViewGroup *FatigueMeasureView::FatigueMeasureInit()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bool FatigueMeasureView::InitView()");
+        group = new UIViewGroup();
+        if (group == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmPopUpView::group null!");
+            return nullptr;
+        }
+        group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+        if (!Initbackground())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Initbackground error!");
+            return nullptr;
+        };
+        if (!InitLable())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLable error!");
+            return nullptr;
+        };
+        if (!AddButton())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AddButton error!");
+            return nullptr;
+        };
+        return group;
+    }
+
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueModel.cpp
new file mode 100644 (file)
index 0000000..3ce8c97
--- /dev/null
@@ -0,0 +1,251 @@
+#include "fatiguelevel/include/FatigueModel.h"
+#include "fatiguelevel/include/FatiguePresenter.h"
+#include "fatiguelevel/include/FatigueMainView.h"
+#include "fatiguelevel/include/FatigueAnalysisView.h"
+
+
+
+
+#include "wearable_log.h"
+#include <cmsis_os.h>
+#include <cmsis_os2.h>
+#include <service/graphic_service.h>
+
+#include "AppViewIDs.h"
+#include "ConfigModel.h"
+#include "NativeAbility.h"
+
+#include "battery_hal.h"
+#include "custom_utils.h"
+#include "ppg_service.h"
+
+namespace OHOS
+{
+/**
+ * @brief Constructor for the FatigueModel class.
+ */
+
+#define FATIGUE_MEASURE_TIME_MAX 30
+#define FATIGUE_ANALYSIS_TIME_MAX 5
+
+  // 声明定时器变量
+  static osTimerId_t g_timer = nullptr;
+  static int Time = 30;
+  static FatigueState statefalg = FatigueState::FATIGUE_MEASURE;
+
+  FatigueModel::FatigueModel() {}
+  FatigueModel::~FatigueModel() {}
+  FatigueModel *FatigueModel::GetInstance(void)
+  {
+    static FatigueModel instance;
+    return &instance;
+  }
+
+
+  // 管理当前状态
+  void FatigueModel::Fatigue_SetState(FatigueState state) { current_state = state; }
+  FatigueState FatigueModel::GetCurrentState() { return current_state; }
+
+  // 进行传感器、定时器等控制
+  void FatigueModel::Fatigue_Control(FatigueState state)
+  {
+    if (state == current_state)
+    {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Fatigue_Control: Already in current state");
+      return;
+    }
+    switch (state)
+    {
+    case FatigueState::FATIGUE_NORMAL:
+    {
+      /*
+       关闭定时器
+       关闭传感器
+       关闭常亮
+     */
+      Fatigue_StopTimer();
+      ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
+      Time = FATIGUE_MEASURE_TIME_MAX;
+      break;
+    }
+    case FatigueState::FATIGUE_MEASURE:
+      {
+      /*
+        开启定时器
+        开启传感器
+        开启常亮
+      */
+      Fatigue_StartTimer();
+      ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
+
+      if (Time != FATIGUE_MEASURE_TIME_MAX)
+        Time = FATIGUE_MEASURE_TIME_MAX; // 重置时间
+
+      break;
+    }
+    case FatigueState::FATIGUE_ANALYSIS:
+    {
+      /*
+        开启定时器
+        开启传感器
+        开启常亮
+      */
+      Fatigue_StartTimer();
+      ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
+
+      if (Time != FATIGUE_ANALYSIS_TIME_MAX)
+        Time = FATIGUE_ANALYSIS_TIME_MAX; // 重置时间
+
+      break;
+    }
+
+    default:
+      /*未知状态,全部状态重置*/
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Fatigue_Control: Invalid state");
+      Fatigue_SetState(FatigueState::FATIGUE_NORMAL);
+      Fatigue_StopTimer();
+      Time = FATIGUE_MEASURE_TIME_MAX;
+      return;
+    }
+    // 更新状态
+    Fatigue_SetState(state);
+  }
+  ///////////////////////////////////////////////////////////////////////////////////////
+
+  /*定时器到期时的处理*/
+  static void Fatigue_TimerCallbackProc(int data)
+  {
+
+    // 倒计时
+    Time--;
+    // 提前检查无效时间
+    if (Time < 0)
+    {
+      FatigueModel::GetInstance()->Fatigue_StopTimer();
+      FatigueModel::GetInstance()->Fatigue_SetState(FatigueState::FATIGUE_NORMAL);
+      if (statefalg == FatigueState::FATIGUE_ANALYSIS) //在分析中
+      {
+        FatigueMainView::GetInstance()->ChangeView(FATIGUEANALYSISEVIEW,FATIGUERESULTVIEW);
+        FatigueAnalysisView::GetInstance()->startorstopAnalysisAni(false);
+        statefalg = FatigueState::FATIGUE_MEASURE;
+      }
+      else if(statefalg == FatigueState::FATIGUE_MEASURE)//在检测中
+      {
+        // 测量成功
+        FatigueModel::GetInstance()->Fatigue_Control(FatigueState::FATIGUE_ANALYSIS);
+        FatigueMainView::GetInstance()->ChangeView(FATIGUEUNDERMEASUREVIEW, FATIGUEANALYSISEVIEW);
+        FatigueAnalysisView::GetInstance()->startorstopAnalysisAni(true);
+        statefalg = FatigueState::FATIGUE_ANALYSIS;
+       
+
+        // 测量失败
+
+      }
+      return;
+    }
+
+    FatigueState current_state_time = FatigueModel::GetInstance()->GetCurrentState();
+    // 根据状态处理
+    switch (current_state_time)
+    {
+    case FatigueState::FATIGUE_NORMAL:
+      FatigueModel::GetInstance()->Fatigue_StopTimer();
+      FatigueModel::GetInstance()->Fatigue_SetState(FatigueState::FATIGUE_NORMAL);
+      return;
+
+    case FatigueState::FATIGUE_MEASURE:
+    {
+      break;
+    }
+    case FatigueState::FATIGUE_ANALYSIS:
+    {
+      break;
+    }
+
+    default:
+      FatigueModel::GetInstance()->Fatigue_StopTimer();
+      // 显示错误界面提示
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_state is error!!");
+      return;
+    }
+  }
+
+  /*
+   * @brief 回调函数
+   */
+  static void Fatigue_TimerCallback(int data)
+  {
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Fatigue_TimerCallback %d", data);
+    GraphicService::GetInstance()->PostGraphicEvent(
+        std::bind(Fatigue_TimerCallbackProc, data));
+  }
+
+  /*
+   *  @brief 开启定时器函数
+   *  @param interval 时间间隔,单位ms
+   */
+  void FatigueModel::Fatigue_StartTimer(uint32_t interval)
+  {
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueModel::Fatigue_StartTimer");
+    /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回
+     * ------------------------- */
+    if (g_timer != nullptr)
+    {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer already exists!!");
+      return;
+    }
+
+    /* --------------------------------- 2.创建定时器
+     * -------------------------------- */
+    g_timer = osTimerNew((osTimerFunc_t)Fatigue_TimerCallback, osTimerPeriodic,
+                         nullptr, nullptr);
+    // 检查定时器创建是否成功
+    if (g_timer == nullptr)
+    {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer create failed!!");
+      return;
+    }
+
+    /* ----------------------------- 3.将毫秒转换为系统时钟节拍数
+     * ---------------------------- */
+    int tick = osMs2Tick(interval);
+
+    /* --------------------------------- 4.启动定时器
+     * -------------------------------- */
+    osStatus_t ret = osTimerStart(g_timer, tick);
+    /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为
+     * nullptr -------------------- */
+    if (ret != osOK)
+    {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!",
+                    ret);
+      if (g_timer != nullptr)
+      {
+        ret = osTimerDelete(g_timer);
+      }
+      g_timer = nullptr;
+      return;
+    }
+  }
+  /*
+   * @brief 停止定时器
+   */
+  void FatigueModel::Fatigue_StopTimer(void)
+  {
+    // 检查定时器是否存在
+    if (g_timer != nullptr)
+    {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "FatigueModel::Fatigue_StopTimer");
+      osTimerStop(g_timer);
+      // 删除定时器并置为 nullptr
+      osStatus_t ret = osTimerDelete(g_timer);
+      if (ret != osOK)
+      {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                      "osTimerDelete failed, ret = %lx!!", ret);
+      }
+      g_timer = nullptr;
+    }
+  }
+
+} // namespace OHOS
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatiguePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatiguePresenter.cpp
new file mode 100644 (file)
index 0000000..d9565c8
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
+ * Description: bloodOxygen view
+ * Author:
+ * Create: 2021-08-01
+ */
+
+#include "fatiguelevel/include/FatiguePresenter.h"
+#include "common/task_manager.h"
+
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+
+#include "ChangeSliceListener.h"
+#include "broadcast_service.h"
+#include <fstream>
+#include "iostream"
+#include <sstream>
+#include <string>
+#include <cstdlib>
+#include <ctime>
+#include "wearable_log.h"
+#include "cmsis_os.h"
+#include "securec.h"
+#include "broadcast_service.h"
+#include "graphic_service.h"
+#include <chrono>
+#include <thread>
+#include <sys/time.h>
+
+#include "ppg_service.h"
+#include "displaybrightness/include/DisplayBrightnessModel.h"
+#include "power_display_service.h"
+#include "custom_utils.h"
+#include "cywee_service.h"
+#include "battery_hal.h"
+
+#include "gfx_utils/mem_check.h"
+#include "map"
+
+#define FatigueKEYABLE 1
+namespace OHOS
+{
+    static constexpr uint16_t PROGRESS_VALUE_MIN = 0;
+    static constexpr uint16_t PROGRESS_VALUE_MAX = 10;
+    static int16_t passflag = 0; // 第几次校准成功标志位
+
+    static FatiguePresenter *g_pFatiguePresenter;
+    /* -------------------------------------------------------------------------- */
+    FatiguePresenter::FatiguePresenter()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatiguePresenter::new FatiguePresenter");
+        g_pFatiguePresenter = this;
+#ifdef MEM_CHECK
+        MemCheck::GetInstance()->EnableLeakCheck(true);
+#endif
+    }
+    FatiguePresenter::~FatiguePresenter()
+    {
+        g_pFatiguePresenter = nullptr;
+#ifdef MEM_CHECK
+        MemCheck::GetInstance()->EnableLeakCheck(false);
+#endif
+    }
+    FatiguePresenter *FatiguePresenter::GetInstance()
+    {
+        return g_pFatiguePresenter;
+    }
+    void FatiguePresenter::OnStart()
+    {
+        Presenter<FatigueMainView>::OnStart();
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatiguePresenter::On Start ");
+    }
+    void FatiguePresenter::OnPause(void) {}
+
+    void FatiguePresenter::OnResume(void) {}
+
+    void FatiguePresenter::OnStop(void)
+    {
+    }
+
+    bool FatiguePresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+        return true;
+    }
+    bool FatiguePresenter::OnDragEnd(UIView &view, const DragEvent &event)
+    {
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT)
+        {
+            // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+            NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+            return true;
+        }
+        return false;
+    }
+    bool FatiguePresenter::OnKeyAct(UIView &view, const KeyEvent &event)
+    {
+        unsigned short keyID = event.GetKeyId();
+        unsigned short keyState = event.GetState();
+        // 如果是power键,且是亮屏状态,按键释放就返回上一级
+        if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) &&
+            keyState == 1 && uapi_get_screen_state() == 0)
+        {
+            // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
+            NativeAbility::GetInstance().Back(TransitionType::TRANSITION_BACK_TO_HEXAGONS);
+        }
+        return true;
+    }
+
+    bool FatiguePresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+
+        if (strcmp(view.GetViewId(), STARTBUTTON_FATIGUE) == 0)
+        {
+            FatigueModel::GetInstance()->Fatigue_Control(FatigueState::FATIGUE_MEASURE);
+            FatigueMainView::GetInstance()->ChangeView(FATIGUEMEASUREVIEW, FATIGUEUNDERMEASUREVIEW);
+        }
+
+        return true;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatiguePresenter::OnClick");
+    }
+
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueResultView.cpp b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueResultView.cpp
new file mode 100644 (file)
index 0000000..9ed8f3b
--- /dev/null
@@ -0,0 +1,124 @@
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-31 14:36:25
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/fatigue/src/FatigueResultView.cpp
+ */
+
+#include "ui_resource_image.h"
+#include "UiConfig.h"
+#include "wearable_log.h"
+#include "uicomponents/UIComponents.h"
+#include "fatiguelevel/include/FatiguePresenter.h"
+#include "fatiguelevel/include/FatigueResultView.h"
+namespace OHOS
+{
+    static FatigueResultView *g_pFatigueResultView{nullptr};
+    static const char *BPBACKPATH = "/user/res/BPCalibration/J1.bin";
+
+    FatigueResultView::FatigueResultView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueResultView::FatigueResultView");
+        g_pFatigueResultView = this;
+    }
+    FatigueResultView::~FatigueResultView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueResultView::~FatigueResultView");
+        DeInit();
+        g_pFatigueResultView = nullptr;
+    }
+    FatigueResultView *FatigueResultView::GetInstance()
+    {
+        return g_pFatigueResultView;
+    }
+    void FatigueResultView::DeInit()
+    {
+        if (group)
+        {
+            group->RemoveAll();
+            delete group;
+            group = nullptr;
+        }
+        if (error != nullptr)
+        {
+            delete error;
+            error = nullptr;
+        }
+        if (titleLable != nullptr)
+        {
+            delete titleLable;
+            titleLable = nullptr;
+        }
+        if (resultremindLable != nullptr)
+        {
+            delete resultremindLable;
+            resultremindLable = nullptr;
+        }
+        if (resultLable != nullptr)
+        {
+            delete resultLable;
+            resultLable = nullptr;
+        }
+
+    }
+    /* -------------------------------------------------------------------------- */
+    /***
+     * @description:
+     * @return 初始化标签是否成功
+     */
+    bool FatigueResultView::InitLable()
+    {
+
+        InitLabel(titleLable, 200, 30, 70, 45, "titleLable", "疲劳度", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        InitLabel(resultremindLable, 68, 239, 337, 100, "resultremindLable", "30", DEFAULT_VECTOR_FONT_FILENAME, 100);
+        resultremindLable->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+        resultremindLable->SetTextColor(Color::White());
+        InitLabel(resultLable, 200, 362, 70, 45, "resultremindLable", "正常", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        /*初始化检测时间*/
+        group->Add(titleLable);
+        group->Add(resultremindLable);
+        group->Add(resultLable);
+    
+
+        return true;
+    }
+    /***
+     * @description:
+     * @return 初始化背景是否成功
+     */
+    bool FatigueResultView::Initbackground()
+    {
+        error = new UIImageView();
+        error->SetPosition(140, 65, 111, 118);
+        error->SetSrc(BPBACKPATH);
+        group->Add(error);
+        return true;
+    }
+    /***
+     * @description:
+     * @return 是否初始化成功
+     */
+    UIViewGroup *FatigueResultView::FatigueResultInit()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bool FatigueResultView::InitView()");
+        group = new UIViewGroup();
+        if (group == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmPopUpView::group null!");
+            return nullptr;
+        }
+        group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+        if (!Initbackground())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Initbackground error!");
+            return nullptr;
+        };
+        if (!InitLable())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLable error!");
+            return nullptr;
+        };
+        return group;
+    }
+
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueUnderMeasureView.cpp b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueUnderMeasureView.cpp
new file mode 100644 (file)
index 0000000..1679b53
--- /dev/null
@@ -0,0 +1,142 @@
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-31 14:36:25
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/fatigue/src/FatigueUnderMeasureView.cpp
+ */
+
+#include "ui_resource_image.h"
+#include "UiConfig.h"
+#include "wearable_log.h"
+#include "uicomponents/UIComponents.h"
+#include "fatiguelevel/include/FatiguePresenter.h"
+#include "fatiguelevel/include/FatigueUnderMeasureView.h"
+namespace OHOS
+{
+    static FatigueUnderMeasureView *g_pFatigueUnderMeasureView{nullptr};
+    static const char *BPBACKPATH = "/user/res/BPCalibration/J1.bin";
+
+    FatigueUnderMeasureView::FatigueUnderMeasureView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueUnderMeasureView::FatigueUnderMeasureView");
+        g_pFatigueUnderMeasureView = this;
+    }
+    FatigueUnderMeasureView::~FatigueUnderMeasureView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueUnderMeasureView::~FatigueUnderMeasureView");
+        DeInit();
+        g_pFatigueUnderMeasureView = nullptr;
+    }
+    FatigueUnderMeasureView *FatigueUnderMeasureView::GetInstance()
+    {
+        return g_pFatigueUnderMeasureView;
+    }
+    void FatigueUnderMeasureView::DeInit()
+    {
+        if (group)
+        {
+            group->RemoveAll();
+            delete group;
+            group = nullptr;
+        }
+        if (error != nullptr)
+        {
+            delete error;
+            error = nullptr;
+        }
+        if (titleLable != nullptr)
+        {
+            delete titleLable;
+            titleLable = nullptr;
+        }
+        if (resultremindLable != nullptr)
+        {
+            delete resultremindLable;
+            resultremindLable = nullptr;
+        }
+        if (checkButton != nullptr)
+        {
+            delete checkButton;
+            checkButton = nullptr;
+        }
+    }
+    /* -------------------------------------------------------------------------- */
+    /***
+     * @description:
+     * @return 添加按键是否成功
+     */
+    bool FatigueUnderMeasureView::AddButton()
+    {
+        InitLabelButton(checkButton, 124, 352, 217, 63, "errorcheckButton", "测量中", 35);
+        checkButton->SetViewId(UNDERBUTTON_FATIGUE);
+        checkButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff00cbf0); // 设置按键颜色
+        checkButton->SetTextColor(Color::White());
+        // 设置按键监听
+        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::FatiguePresenter::GetInstance();
+        checkButton->SetOnClickListener(clickListener);
+
+        group->Add(checkButton);
+        return true;
+    }
+    /***
+     * @description:
+     * @return 初始化标签是否成功
+     */
+    bool FatigueUnderMeasureView::InitLable()
+    {
+
+        InitLabel(titleLable, 188, 30, 95, 45, "titleLable", "疲劳度", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        InitLabel(resultremindLable, 68, 239, 337, 100, "resultremindLable", "---", DEFAULT_VECTOR_FONT_FILENAME, 100);
+        resultremindLable->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+        resultremindLable->SetTextColor(Color::White());
+        /*初始化检测时间*/
+        group->Add(titleLable);
+        group->Add(resultremindLable);
+
+        return true;
+    }
+    /***
+     * @description:
+     * @return 初始化背景是否成功
+     */
+    bool FatigueUnderMeasureView::Initbackground()
+    {
+        error = new UIImageView();
+        error->SetPosition(140, 65, 111, 118);
+        error->SetSrc(BPBACKPATH);
+        group->Add(error);
+        return true;
+    }
+    /***
+     * @description:
+     * @return 是否初始化成功
+     */
+    UIViewGroup *FatigueUnderMeasureView::FatigueUnderMeasureInit()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bool FatigueUnderMeasureView::InitView()");
+        group = new UIViewGroup();
+        if (group == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmPopUpView::group null!");
+            return nullptr;
+        }
+        group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+        if (!Initbackground())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Initbackground error!");
+            return nullptr;
+        };
+        if (!InitLable())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLable error!");
+            return nullptr;
+        };
+        if (!AddButton())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AddButton error!");
+            return nullptr;
+        };
+        return group;
+    }
+
+}
diff --git a/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueWearView.cpp b/code/sdk/application/wearable/fd230app/nativeui/fatiguelevel/src/FatigueWearView.cpp
new file mode 100644 (file)
index 0000000..6c6dd37
--- /dev/null
@@ -0,0 +1,133 @@
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-07-31 14:36:25
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230/nativeapp/nativeui/fatigue/src/FatigueWearView.cpp
+ */
+
+#include "ui_resource_image.h"
+#include "UiConfig.h"
+#include "wearable_log.h"
+#include "uicomponents/UIComponents.h"
+#include "fatiguelevel/include/FatiguePresenter.h"
+#include "fatiguelevel/include/FatigueWearView.h"
+namespace OHOS
+{
+    static FatigueWearView *g_pFatigueWearView{nullptr};
+    static const char *BPBACKPATH = "/user/res/BPCalibration/error.bin";
+
+    FatigueWearView::FatigueWearView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueWearView::FatigueWearView");
+        g_pFatigueWearView = this;
+    }
+    FatigueWearView::~FatigueWearView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "FatigueWearView::~FatigueWearView");
+        DeInit();
+        g_pFatigueWearView = nullptr;
+    }
+    FatigueWearView *FatigueWearView::GetInstance()
+    {
+        return g_pFatigueWearView;
+    }
+    void FatigueWearView::DeInit()
+    {
+        if (group)
+        {
+            group->RemoveAll();
+            delete group;
+            group = nullptr;
+        }
+        if (error != nullptr)
+        {
+            delete error;
+            error = nullptr;
+        }
+        if (titleLable != nullptr)
+        {
+            delete titleLable;
+            titleLable = nullptr;
+        }
+        if (checkButton != nullptr)
+        {
+            delete checkButton;
+            checkButton = nullptr;
+        }
+    }
+    /* -------------------------------------------------------------------------- */
+    /***
+     * @description:
+     * @return 添加按键是否成功
+     */
+    bool FatigueWearView::AddButton()
+    {
+        InitLabelButton(checkButton, 124, 352, 217, 63, "errorcheckButton", "重新测量", 35);
+        checkButton->SetViewId(WEARBUTTON_FITIGUE);
+        checkButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919); // 设置按键颜色
+        checkButton->SetTextColor(Color::White());
+        // 设置按键监听
+        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::FatiguePresenter::GetInstance();
+        checkButton->SetOnClickListener(clickListener);
+
+        group->Add(checkButton);
+        return true;
+    }
+    /***
+     * @description:
+     * @return 初始化标签是否成功
+     */
+    bool FatigueWearView::InitLable()
+    {
+
+        InitLabel(titleLable, 87, 85, 272, 45, "titleLable", "请正确佩戴手表检测", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        /*初始化检测时间*/
+        group->Add(titleLable);
+
+        return true;
+    }
+    /***
+     * @description:
+     * @return 初始化背景是否成功
+     */
+    bool FatigueWearView::Initbackground()
+    {
+        error = new UIImageView();
+        error->SetPosition(163, 170, 140, 140);
+        error->SetSrc(BPBACKPATH);
+        group->Add(error);
+        return true;
+    }
+    /***
+     * @description:
+     * @return 是否初始化成功
+     */
+    UIViewGroup *FatigueWearView::FatigueWearInit()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bool FatigueWearView::InitView()");
+        group = new UIViewGroup();
+        if (group == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmPopUpView::group null!");
+            return nullptr;
+        }
+        group->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+        if (!Initbackground())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Initbackground error!");
+            return nullptr;
+        };
+        if (!InitLable())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLable error!");
+            return nullptr;
+        };
+        if (!AddButton())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AddButton error!");
+            return nullptr;
+        };
+        return group;
+    }
+
+}
index 1f3cb31..f49c5a8 100644 (file)
@@ -14,8 +14,8 @@
 
 namespace OHOS
 {
-    class StressView;
-    class StressPresenter : public Presenter<StressView>,
+    class StressMainView;
+    class StressPresenter : public Presenter<StressMainView>,
                                  public UIView::OnClickListener,
                                  public RootView::OnKeyActListener,
                                  public UIView::OnDragListener
index 4094b69..dfeaa20 100644 (file)
@@ -68,7 +68,7 @@ namespace OHOS
     }
     void StressPresenter::OnStart()
     {
-        Presenter<StressView>::OnStart();
+        Presenter<StressMainView>::OnStart();
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StressPresenter::On Start ");
     }
     void StressPresenter::OnPause(void) {}