增加逻辑 1877/1
authorxue <2144439972@qq.com>
Fri, 20 Jun 2025 10:30:50 +0000 (18:30 +0800)
committerxue <2144439972@qq.com>
Fri, 20 Jun 2025 10:30:50 +0000 (18:30 +0800)
15 files changed:
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativelauncher/include/NativeLauncher.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/stress/include/StressAnalysisView.h
code/sdk/application/wearable/fd230app/nativeui/stress/include/StressMainView.h
code/sdk/application/wearable/fd230app/nativeui/stress/include/StressModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/stress/include/StressPresenter.h
code/sdk/application/wearable/fd230app/nativeui/stress/src/StressAnalysisView.cpp
code/sdk/application/wearable/fd230app/nativeui/stress/src/StressMainView.cpp
code/sdk/application/wearable/fd230app/nativeui/stress/src/StressMeasureView.cpp
code/sdk/application/wearable/fd230app/nativeui/stress/src/StressModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/stress/src/StressPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/stress/src/StressResultView.cpp
code/sdk/application/wearable/fd230app/nativeui/stress/src/StressUnderMeasureView.cpp

index 95a35e9..ca973e3 100644 (file)
@@ -272,6 +272,18 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/emotion/src/EmoTestFailedNoWearingView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/emotion/src/EmoTestFailedNoValueView.cpp
 
+     #压力
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressMainView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressMeasureView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressUnderMeasureView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressAnalysisView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressModel.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressResultView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressWearView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressFailView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/stress/src/StressPresenter.cpp
+
+
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothDeviceCaseListAdapter.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothDeviceListView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/bluetooth/src/BluetoothPresenter.cpp
index 0527c37..390c0cd 100644 (file)
@@ -75,6 +75,7 @@ namespace OHOS
         void InitRotateSlice(void);
         void InitBloodSlice(void);
         void InitBloodPressureSlice(void);
+        void InitStressSlice(void);
         void InitCheckAbnormalSlice(void);
         void InitCheckInvalidSlice(void);
         void InitHeartResultSlice(void);
@@ -130,7 +131,7 @@ namespace OHOS
         /* -------------------------------------------------------------------------- */
         void InitCalculatorSlice(void);
         void InintCalendarSlice(void);
-        
+
         void InitScheduleSlice(void);
         void InitSleepModeSlice(void);
         void InittestSlice(void);
index e7e4304..ed266bd 100644 (file)
 #include "calculator/include/CalculatorPresenter.h"
 #include "calculator/include/CalculatorView.h"
 
-
 #include "calendar/include/CalendarPresenter.h"
 #include "calendar/include/CalendarView.h"
 
-
 #include "system/include/SystemPresenter.h"
 #include "system/include/SystemView.h"
 
 /*情绪测量*/
 #include "emotion/include/EmoPresenter.h"
 #include "emotion/include/EmoView.h"
+/*压力检测*/
+#include "stress/include/StressPresenter.h"
+#include "stress/include/StressMainView.h"
 /*心率监测*/
 #include "heartrate/include/HeartDetectionView.h"
 #include "heartrate/include/HeartDetectionPresenter.h"
 
 #include "system/include/SystemLogModel.h"
 
-#include "ui_service.h"  
-extern "C" void uapi_dev_runtime_set_lock_status(uint8_t status);  
-extern "C" uint8_t uapi_dev_runtime_get_lock_status(void);  
+#include "ui_service.h"
+extern "C" void uapi_dev_runtime_set_lock_status(uint8_t status);
+extern "C" uint8_t uapi_dev_runtime_get_lock_status(void);
 
 #ifdef SUPPORT_ALIPAY_SEC
 #include "AlipayMainView.h"
@@ -350,11 +351,11 @@ namespace OHOS
         {VIEW_INDOORWALK, &NativeLauncher::InitIndoorWalkSlice},
         {VIEW_WEATHER, &NativeLauncher::InitWeatherSlice}, // 天气
         {VIEW_GOAL, &NativeLauncher::InitGoalSlice},       // 每日目标
-        {VIEW_SYSTEM, &NativeLauncher::InitSystemSlice}, // 系统实例化地址
+        {VIEW_SYSTEM, &NativeLauncher::InitSystemSlice},   // 系统实例化地址
         {VIEW_SOUND_VIBRATION,
          &NativeLauncher::InitSoundAndVibrationSlice}, // 声音与震动实例化地址
         {VIEW_SYSTEM_VOLUME,
-         &NativeLauncher::InitSystemVolumeSlice}, // 系统音量
+         &NativeLauncher::InitSystemVolumeSlice},                 // 系统音量
         {VIEW_CALL_VOLUME, &NativeLauncher::InitCallVolumeSlice}, // 系统音量
         {VIEW_CLASSIC_BLUETOOTH,
          &NativeLauncher::InitClassicBluetoothSlice}, // 经典蓝牙slice
@@ -427,22 +428,22 @@ namespace OHOS
         {VIEW_TRAININGNOMAL,
          &NativeLauncher::InitTraingNomalSlice}, // 正常训练初始界面
         {VIEW_TRAININGSET,
-         &NativeLauncher::InitTraingSetSlice}, // 训练目标设置界面
+         &NativeLauncher::InitTraingSetSlice},                     // 训练目标设置界面
         {VIEW_TRAININGCRAD, &NativeLauncher::InitTraingCardSlice}, // 训练卡片
         {VIEW_TRAININGENDDATA,
          &NativeLauncher::InitTraingEnddataSlice}, // 训练结束详细数据
         {VIEW_TRAINING_RECORD,
-         &NativeLauncher::InitTraingRecordSlice}, // 训练记录
-        {VIEW_TRAININGMORE, &NativeLauncher::InitTraingMoreSlice}, // 更多训练
+         &NativeLauncher::InitTraingRecordSlice},                    // 训练记录
+        {VIEW_TRAININGMORE, &NativeLauncher::InitTraingMoreSlice},   // 更多训练
         {VIEW_TRAININGLIMIT, &NativeLauncher::InitTraingLimitSlice}, // 极限训练
-        {VIEW_TRAININGICE, &NativeLauncher::InitTraingIceSlice}, // 冰上训练
+        {VIEW_TRAININGICE, &NativeLauncher::InitTraingIceSlice},     // 冰上训练
         {VIEW_TRAININGFITNESS,
-         &NativeLauncher::InitTraingFitnessSlice}, // 健身训练
+         &NativeLauncher::InitTraingFitnessSlice},                   // 健身训练
         {VIEW_TRAININGDANCE, &NativeLauncher::InitTraingDanceSlice}, // 舞蹈训练
-        {VIEW_TRAININGREST, &NativeLauncher::InitTraingRestSlice}, // 休闲训练
-        {VIEW_TRAININGBALL, &NativeLauncher::InitTraingBallSlice}, // 球类训练
+        {VIEW_TRAININGREST, &NativeLauncher::InitTraingRestSlice},   // 休闲训练
+        {VIEW_TRAININGBALL, &NativeLauncher::InitTraingBallSlice},   // 球类训练
         {VIEW_TRAININGAQUATIC,
-         &NativeLauncher::InitTraingAquaticSlice}, // 水上训练
+         &NativeLauncher::InitTraingAquaticSlice},                   // 水上训练
         {VIEW_TRAININGOTHER, &NativeLauncher::InitTraingOtherSlice}, // 水上训练
         /* --------------------------------------------------------------------------
          */
@@ -468,6 +469,8 @@ namespace OHOS
         {VIEW_ECG, &NativeLauncher::InitECGSlice},
         /*情绪测量*/
         {VIEW_EMOTION, &NativeLauncher::InitEmotionSlice},
+        /*压力监测*/
+        {VIEW_PRESSURE, &NativeLauncher::InitStressSlice},
         /*心率检测*/
         {VIEW_HEART_CHECK, &NativeLauncher::InitHeartCheckSlice},
         {VIEW_HEART_RESULT, &NativeLauncher::InitHeartResultSlice},
@@ -574,10 +577,10 @@ namespace OHOS
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "InitLangues error");
             }
             // 初始化所有预加载slice
-          
+
             InitAllNativeSlices();
             CallerLogModel::GetInstance()->InitPhoneService();
-            GoalModel::GetInstance().GoalModelInitdata();//活动数据初始化
+            GoalModel::GetInstance().GoalModelInitdata(); // 活动数据初始化
             // PresenterTask::GetInstance()->Init();
             PlayersModel::GetInstance()->AudioInit();
             ActivityModel::GetInstance()->Init();
@@ -589,7 +592,7 @@ namespace OHOS
             TakephotosModel::GetInstance()->Init(); // 拍照消息订阅
             MessageModel::GetInstance().Init();     // 消息订阅监听
             AssistantModel::GetInstance()->Init();  // 语音助手消息订阅
-            //音乐列表初始化,放在nativelauncher 初始化,防止手表连接耳机时,操控耳机控制手表音乐造成死机
+            // 音乐列表初始化,放在nativelauncher 初始化,防止手表连接耳机时,操控耳机控制手表音乐造成死机
             do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_MUSICNAME_READ, nullptr, 0);
 
             // 初始化默认首页
@@ -611,7 +614,7 @@ namespace OHOS
             mmi_sleep_mode_switch_read();
 
             /*开机读取消息历史数据*/
-            if(!MessageModel::GetInstance().LoadMessagesFromStorage())
+            if (!MessageModel::GetInstance().LoadMessagesFromStorage())
             {
                 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadMessagesFromStorage failed!");
             }
@@ -619,7 +622,7 @@ namespace OHOS
             /*开机读取睡眠数据*/
             SleepModel::GetInstance().read_sleep_file_data();
 
-            //更新主表盘配置
+            // 更新主表盘配置
             MainModel::GetInstance().InitDialState();
 
             // 初始化屏幕亮度
@@ -631,10 +634,10 @@ namespace OHOS
             // 开机增加震动 页面启动震动一次
             // ui_api_vibrate_once_func();
         }
-        // 注册开机时间  
-        SystemLogData systemlog;  
-        systemlog.timestamp = SystemLogModel::GetInstance()->GetCurrentTime();  
-        systemlog.type = SystemLogType::POWER_ON;   
+        // 注册开机时间
+        SystemLogData systemlog;
+        systemlog.timestamp = SystemLogModel::GetInstance()->GetCurrentTime();
+        systemlog.type = SystemLogType::POWER_ON;
         // 先读取日志
         SystemLogModel::GetInstance()->loadLog();
         // 再存储日志
@@ -1120,7 +1123,7 @@ namespace OHOS
         NativeAbility::GetInstance().AddSliceProxy(VIEW_CALCULATOR, Calculatorview_);
     }
 
-     void NativeLauncher::InintCalendarSlice(void)
+    void NativeLauncher::InintCalendarSlice(void)
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitCalculatorSlice");
         SliceProxy *Calendarview_ = new AbilitySliceProxy<CalendarView, CalendarPresenter>;
@@ -1391,6 +1394,18 @@ namespace OHOS
             return;
         }
         NativeAbility::GetInstance().AddSliceProxy(VIEW_EMOTION, EmotionView);
+    }
+      // 压力监测界面
+    void NativeLauncher::InitStressSlice(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitBloodPressureSlice");
+        SliceProxy *stressView = new AbilitySliceProxy<StressMainView, StressPresenter>;
+        if (stressView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "stressView is nullptr");
+            return;
+        }
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_PRESSURE, stressView);
     }
     // 心率监测界面
     void NativeLauncher::InitHeartCheckSlice(void)
@@ -1452,7 +1467,7 @@ namespace OHOS
         }
         NativeAbility::GetInstance().AddSliceProxy(VIEW_SAFE_MODE, safemodeView);
     }
-    //语音助手
+    // 语音助手
     void NativeLauncher::InitAssistantSlice(void)
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitAssistantSlice");
@@ -1463,7 +1478,7 @@ namespace OHOS
         }
         NativeAbility::GetInstance().AddSliceProxy(VIEW_ASSISTANT, assistantView);
     }
-    //时间格式
+    // 时间格式
     void NativeLauncher::InitSetTimeFormatSlice()
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "NativeLauncher::InitSetTimeFormatSlice");
@@ -1472,7 +1487,7 @@ namespace OHOS
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "setTimeFormatView is nullptr");
         }
-        NativeAbility::GetInstance().AddSliceProxy(VIEW_SET_TIME_FORMAT,setTimeFormatView);
+        NativeAbility::GetInstance().AddSliceProxy(VIEW_SET_TIME_FORMAT, setTimeFormatView);
     }
     /* -------------------------------------------------------------------------- */
     // 查找手机
index 802b640..c6a403e 100644 (file)
@@ -73,7 +73,7 @@ namespace OHOS
         //情绪
         //{VIEW_EMOTION, PNG_APPLIST_EMOTION_IMAGE_BIG, PNG_APPLIST_EMOTION_IMAGE, PNG_APPLIST_DEFAULT_IMG, "情绪", STR_EMOTION, nullptr},
         //压力
-        //{VIEW_STRESS, PNG_APPLIST_STRESS_IMAGE_BIG, PNG_APPLIST_STRESS_IMAGE, PNG_APPLIST_DEFAULT_IMG, "压力", STR_STRESS, 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},
 #endif
index c91dcca..94812fc 100644 (file)
@@ -1,44 +1,27 @@
-/***
- * @Date: 2024-07-29 15:38:56
- * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-07-29 15:42:12
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/bloodoxygen/include/StressAnalysisViewView.cpp
- */
-/*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: StressAnalysisView view
- * Author:
- * Create: 2021-08-01
- */
-
 #ifndef STRESS_ANALYSIS_VIEW_H
 #define STRESS_ANALYSIS_VIEW_H
 
-#include "View.h"
-#include "BaseView.h"
-#include "wearable_log.h"
-#include "UiConfig.h"
-
+#include "components/ui_view_group.h"
+#include "components/ui_label_ext.h"
 #include "components/ui_image_animator.h"
-
-#define STOP_SOS "stop_sos"
-
 namespace OHOS
 {
-    class StressAnalysisViewView
+    class StressAnalysisView
     {
     public:
-        StressAnalysisViewView();
-        virtual ~StressAnalysisViewView();
-        static StressAnalysisViewView *GetInstance(void);
-
-        UIViewGroup *StressAnalysisViewInit();
-        UIImageAnimatorView *GetImageAnimator();
+        StressAnalysisView();
+        ~StressAnalysisView();
+        static StressAnalysisView *GetInstance(void);
+        UIViewGroup *StressAnalysisInit();
+        void startorstopAnalysisAni(bool state);
 
     private:
-        UIImageAnimatorView *imageAnimator{nullptr};
+        void ClearAll(void);
         UIViewGroup *group{nullptr};
+        UILabelExt *titleLabel{nullptr};
+        UILabelExt *remindLabel{nullptr};
+        UIImageAnimatorView *StressAnaAni{nullptr};
+        ImageAnimatorInfo StressAnaAniImageInfo[30];
     };
 }
-
-#endif // 血氧主界面
\ No newline at end of file
+#endif
\ No newline at end of file
index 8b3d164..0e61f2a 100644 (file)
@@ -12,6 +12,7 @@
 #include "stress/include/StressWearView.h"
 #include "stress/include/StressFailView.h"
 #include "stress/include/StressResultView.h"
+#include "stress/include/StressAnalysisView.h"
 
 namespace OHOS
 {
@@ -19,7 +20,10 @@ namespace OHOS
     {
         STRESSMEASUREVIEW = 0,   // 压力测量界面
         STRESSUNDERMEASUREVIEW,  // 测量中界面
+        STRESSANALYSISEVIEW,     // 分析界面
         STRESSRESULTVIEW,        // 测量结果界面
+        STRESSWEARVIEW,          // 佩戴错误界面
+        STRESSFAILVIEW,          // 测量失败界面
         MAX_STRESSVIEW,
     } StressVIEWID;
 
@@ -40,6 +44,7 @@ namespace OHOS
         bool ChangeStressResultView(int16_t);
         bool ChangeStressWearView(int16_t);
         bool ChangeStressFailView(int16_t);
+        bool ChangeStressAnalysisView(int16_t);
 
         bool ClickFunc(int16_t interface);
         void ChangeView(int16_t hideView, int16_t showView);
@@ -50,6 +55,7 @@ namespace OHOS
         StressResultView *g_pStressResultView{nullptr};
         StressFailView *g_pStressFailView{nullptr};
         StressWearView *g_pStressWearView{nullptr};
+        StressAnalysisView *g_pStressAnalysisView{nullptr};
 
     private:
         void DeInit();
diff --git a/code/sdk/application/wearable/fd230app/nativeui/stress/include/StressModel.h b/code/sdk/application/wearable/fd230app/nativeui/stress/include/StressModel.h
new file mode 100644 (file)
index 0000000..c7b13fd
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef STRESS_MODEL_H
+#define STRESS_MODEL_H
+
+#include <stdint.h>
+#include <string>
+
+
+namespace OHOS {
+// 血压检测状态
+enum class StressState {
+  //结束
+  STRESS_End = 0,
+  //压力检测中
+  STRESS_MEASURE,
+  //结果分析中 
+  STRESS_ANALYSIS,
+  //普通状态
+  STRESS_NORMAL,
+  //暂停
+  STRESS_PAUSE,
+
+  STRESS_STATE_MAX,
+};
+// 压力检测结果
+enum class StressRESULT {
+  NOT_TESTED = 0, // 未检测
+  SUCCESS,        // 检测成功
+  NOT_WORN,       // 未佩戴检测
+  TIMEOUT,        // 检测超时
+  HIGH_RESULT,    // 检测结果过高
+  LOW_RESULT,     // 检测结果过低
+  INVALID_DATA    // 无效数据
+};
+
+#define Stress_ANLYSISI_TIME_MAX 5
+
+class StressModel {
+public:
+  StressModel();
+  ~StressModel();
+  static StressModel *GetInstance();
+
+  //当前状态管理
+  void Stress_SetState(StressState state);
+  StressState GetCurrentState();
+  //控制血压检测
+  void Stress_Control(StressState state);
+
+  ///////////////////////////////////////////////
+  void Stress_StartTimer(uint32_t interval = 1*1000);// 1s定时器
+  void Stress_StopTimer(void);
+
+
+private:
+  StressState current_state = StressState::STRESS_NORMAL;
+};
+} // namespace OHOS
+
+#endif
index 1d996c0..1f3cb31 100644 (file)
@@ -10,6 +10,7 @@
 #include "KeyInputListener.h"
 #include "common/key_code.h"
 #include "stress/include/StressMainView.h"
+#include "stress/include/StressModel.h"
 
 namespace OHOS
 {
index 3fcbed1..2280ed5 100644 (file)
-/***
- * @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/bloodpressure/src/StressAnalysisViewView.cpp
- */
-
-#include "ui_resource_image.h"
-#include "UiConfig.h"
+#include "stress/include/StressAnalysisView.h"
+#include "stress/include/StressPresenter.h"
 #include "wearable_log.h"
-#include "uicomponents/UIComponents.h"
-#include "bloodpressure/include/detection/StressPresenter.h"
-#include "bloodpressure/include/detection/StressAnalysisViewView.h"
-#include "bloodpressure/include/BPModel.h"
+#include "UiConfig.h"
+#include "common/image_cache_manager.h"
 namespace OHOS
 {
-    // 动态刷新设置
-    static constexpr uint16_t IMAGE_SIZE = 466;
-    static constexpr uint16_t IMAGE_POSITION_Y = 0;
-    static constexpr uint16_t IMAGE_POSITION_X = 0;
-    static constexpr uint16_t BP_SOS_IMAGE_SIZE = 30;
-    static constexpr uint16_t BP_SOS_IMAGE_SPEED = 40;
 
-    static ImageAnimatorInfo g_imageAnimatorInfo_blood[30] = {
-    {PNG_BP_SOS_IMAGE_01, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_02, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_03, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_04, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_05, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_06, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_07, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_08, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_09, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_10, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_11, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_12, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_13, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_14, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_15, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_16, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_17, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_18, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_19, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_20, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_21, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_22, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_23, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_24, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_25, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_26, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_27, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_28, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_29, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
-    {PNG_BP_SOS_IMAGE_30, {IMAGE_POSITION_X, IMAGE_POSITION_Y}, IMAGE_SIZE, IMAGE_SIZE, IMG_SRC_FILE_PATH},
+    const char *StressAnaAniImagePath[] = {
+        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 StressAnalysisViewView *g_pStressAnalysisViewView{nullptr};
+    static StressAnalysisView *g_pStressAnalysisView = nullptr;
+    StressAnalysisView::StressAnalysisView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StressAnalysisView::StressAnalysisView");
+        g_pStressAnalysisView = this;
+    }
+
+    StressAnalysisView::~StressAnalysisView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StressAnalysisView::~StressAnalysisView");
+        ClearAll();
+        g_pStressAnalysisView = nullptr;
+    }
 
-    StressAnalysisViewView::StressAnalysisViewView()
+    StressAnalysisView *StressAnalysisView::GetInstance(void)
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StressAnalysisViewView::StressAnalysisViewView");
-        g_pStressAnalysisViewView = this;
+        return g_pStressAnalysisView;
     }
-    StressAnalysisViewView::~StressAnalysisViewView()
+
+    void StressAnalysisView::ClearAll(void)
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StressAnalysisViewView::~StressAnalysisViewView");
-        if(group)
+        if (group)
         {
-            group->RemoveAll(); 
-            if(imageAnimator)
+            group->RemoveAll();
+            delete group;
+            group = nullptr;
+            delete titleLabel;
+            titleLabel = nullptr;
+            delete remindLabel;
+            remindLabel = nullptr;
+            if (StressAnaAni)
             {
-                imageAnimator->Stop();
-                delete imageAnimator;
-                imageAnimator = nullptr;   
+                StressAnaAni->Stop();
+                delete StressAnaAni;
+                StressAnaAni = nullptr;
             }
         }
-        delete group;
-        group = nullptr;
-        g_pStressAnalysisViewView = nullptr;
     }
 
-    StressAnalysisViewView *StressAnalysisViewView::GetInstance()
+    void StressAnalysisView::startorstopAnalysisAni(bool state)
     {
-        return g_pStressAnalysisViewView;
+        if (StressAnaAni)
+        {
+            if (state)
+            {
+                StressAnaAni->Start();
+            }
+            else
+            {
+                StressAnaAni->Stop();
+            }
+        }
     }
 
-    /***
-     * @description:
-     * @return 是否初始化成功
-     */
-    UIViewGroup *StressAnalysisViewView::StressAnalysisViewInit()
+    UIViewGroup *StressAnalysisView::StressAnalysisInit()
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "bool StressAnalysisViewView::InitView()");
-        group = new UIViewGroup();
-        group->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
-
-        imageAnimator = new UIImageAnimatorView();
-        imageAnimator->SetImageAnimatorSrc(g_imageAnimatorInfo_blood, BP_SOS_IMAGE_SIZE, BP_SOS_IMAGE_SPEED);
-        imageAnimator->SetRepeat(true);
-        group->Add(imageAnimator);
-
-       
-        
+        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::StressPresenter::GetInstance();
+        // group->SetOnDragListener(dragListener);
+        /* -------------------------------------------------------------------------- */
+        StressAnaAni = new UIImageAnimatorView();
+        if (StressAnaAni == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlipayBindAni::AlipayInitImageAni new StressAnaAni fail");
+            return nullptr;
+        }
+        for (uint8_t i = 0; i < (sizeof(StressAnaAniImagePath) / sizeof(StressAnaAniImagePath[0])); i++)
+        {
+            StressAnaAniImageInfo[i].imageInfo = ImageCacheManager::GetInstance().LoadSingleRes(StressAnaAniImagePath[i]);
+            StressAnaAniImageInfo[i].imageType = IMG_SRC_IMAGE_INFO;
+            StressAnaAniImageInfo[i].pos.x = 0;
+            StressAnaAniImageInfo[i].pos.y = 0;
+            StressAnaAniImageInfo[i].width = 466;
+            StressAnaAniImageInfo[i].height = 466;
+        }
+        StressAnaAni->SetPosition(0, 0, 466, 466);
+        StressAnaAni->SetImageAnimatorSrc(StressAnaAniImageInfo, (sizeof(StressAnaAniImagePath) / sizeof(StressAnaAniImagePath[0])), 100);
+        StressAnaAni->SetRepeat(true);
+        StressAnaAni->SetAutoEnable(false);
+        StressAnaAni->SetResizeMode(UIImageView::FILL);
+        group->Add(StressAnaAni);
+        /* -------------------------------------------------------------------------- */
+        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::GetColorFromRGBA(0xff, 0x3a, 0x3a, 0xff));
+        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;
     }
-
-    UIImageAnimatorView *StressAnalysisViewView::GetImageAnimator()
-    {
-        return imageAnimator;
-    }
-
-    
-}
+}
\ No newline at end of file
index edc4a4e..a92e8b8 100644 (file)
@@ -56,7 +56,7 @@ namespace OHOS
             delete g_pStressUnderMeasureView;
             g_pStressUnderMeasureView = nullptr;
         }
-         if (g_pStressResultView)
+        if (g_pStressResultView)
         {
             delete g_pStressResultView;
             g_pStressResultView = nullptr;
@@ -128,7 +128,7 @@ namespace OHOS
         }
         return true;
     }
-     bool StressMainView::ChangeStressUnderMeasureView(int16_t thisView)
+    bool StressMainView::ChangeStressUnderMeasureView(int16_t thisView)
     {
         // 检查视图是否已初始化
         if (group[thisView] == nullptr)
@@ -200,6 +200,24 @@ namespace OHOS
         }
         return true;
     }
+    bool StressMainView::ChangeStressAnalysisView(int16_t thisView)
+    {
+        // 检查视图是否已初始化
+        if (group[thisView] == nullptr)
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "stressView::ChangeStressResultView");
+            g_pStressAnalysisView = new StressAnalysisView();
+            if (g_pStressAnalysisView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "stressView:: new scrollView[%d] fail", thisView);
+                return false;
+            }
+            // 初始化视图并添加到视图组
+            group[thisView] = g_pStressAnalysisView->StressAnalysisInit();
+            container_->Add(group[thisView]);
+        }
+        return true;
+    }
 
     /**
      * 视图映射结构体 - 将视图ID映射到对应的视图切换函数
@@ -213,7 +231,10 @@ namespace OHOS
     static const StressViewMapper ViewMapper[] = {
         {STRESSMEASUREVIEW, &StressMainView::ChangeStressMeasureView},
         {STRESSUNDERMEASUREVIEW, &StressMainView::ChangeStressUnderMeasureView},
-
+        {STRESSANALYSISEVIEW, &StressMainView::ChangeStressAnalysisView},
+        {STRESSRESULTVIEW, &StressMainView::ChangeStressResultView},
+        {STRESSWEARVIEW, &StressMainView::ChangeStressWearView},
+        {STRESSFAILVIEW, &StressMainView::ChangeStressFailView},
     };
 
     bool StressMainView::ClickFunc(int16_t interface)
index 514794f..c180995 100644 (file)
@@ -86,7 +86,7 @@ namespace OHOS
     {
 
         InitLabel(titleLable, 200, 30, 70, 45, "titleLable", "压力", DEFAULT_VECTOR_FONT_FILENAME, 35);
-        InitLabel(resultremindLable, 68, 211, 337, 100, "resultremindLable", "---", DEFAULT_VECTOR_FONT_FILENAME, 100);
+        InitLabel(resultremindLable, 68, 239, 337, 100, "resultremindLable", "---", DEFAULT_VECTOR_FONT_FILENAME, 100);
         resultremindLable->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
         resultremindLable->SetTextColor(Color::White());
         /*初始化检测时间*/
@@ -102,7 +102,7 @@ namespace OHOS
     bool StressMeasureView::Initbackground()
     {
         error = new UIImageView();
-        error->SetPosition(145, 75, 200, 200);
+        error->SetPosition(140, 65, 111, 118);
         error->SetSrc(BPBACKPATH);
         group->Add(error);
         return true;
diff --git a/code/sdk/application/wearable/fd230app/nativeui/stress/src/StressModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/stress/src/StressModel.cpp
new file mode 100644 (file)
index 0000000..bef9513
--- /dev/null
@@ -0,0 +1,251 @@
+#include "stress/include/StressModel.h"
+#include "stress/include/StressPresenter.h"
+#include "stress/include/StressMainView.h"
+#include "stress/include/StressAnalysisView.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 StressModel class.
+ */
+
+#define STRESS_MEASURE_TIME_MAX 30
+#define STRESS_ANALYSIS_TIME_MAX 5
+
+  // 声明定时器变量
+  static osTimerId_t g_timer = nullptr;
+  static int Time = 30;
+  static StressState statefalg = StressState::STRESS_MEASURE;
+
+  StressModel::StressModel() {}
+  StressModel::~StressModel() {}
+  StressModel *StressModel::GetInstance(void)
+  {
+    static StressModel instance;
+    return &instance;
+  }
+
+
+  // 管理当前状态
+  void StressModel::Stress_SetState(StressState state) { current_state = state; }
+  StressState StressModel::GetCurrentState() { return current_state; }
+
+  // 进行传感器、定时器等控制
+  void StressModel::Stress_Control(StressState state)
+  {
+    if (state == current_state)
+    {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"Stress_Control: Already in current state");
+      return;
+    }
+    switch (state)
+    {
+    case StressState::STRESS_NORMAL:
+    {
+      /*
+       关闭定时器
+       关闭传感器
+       关闭常亮
+     */
+      Stress_StopTimer();
+      ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
+      Time = STRESS_MEASURE_TIME_MAX;
+      break;
+    }
+    case StressState::STRESS_MEASURE:
+      {
+      /*
+        开启定时器
+        开启传感器
+        开启常亮
+      */
+      Stress_StartTimer();
+      ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
+
+      if (Time != STRESS_MEASURE_TIME_MAX)
+        Time = STRESS_MEASURE_TIME_MAX; // 重置时间
+
+      break;
+    }
+    case StressState::STRESS_ANALYSIS:
+    {
+      /*
+        开启定时器
+        开启传感器
+        开启常亮
+      */
+      Stress_StartTimer();
+      ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 后期 周期被动状态 需要做区别
+
+      if (Time != STRESS_ANALYSIS_TIME_MAX)
+        Time = STRESS_ANALYSIS_TIME_MAX; // 重置时间
+
+      break;
+    }
+
+    default:
+      /*未知状态,全部状态重置*/
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Stress_Control: Invalid state");
+      Stress_SetState(StressState::STRESS_NORMAL);
+      Stress_StopTimer();
+      Time = STRESS_MEASURE_TIME_MAX;
+      return;
+    }
+    // 更新状态
+    Stress_SetState(state);
+  }
+  ///////////////////////////////////////////////////////////////////////////////////////
+
+  /*定时器到期时的处理*/
+  static void Stress_TimerCallbackProc(int data)
+  {
+
+    // 倒计时
+    Time--;
+    // 提前检查无效时间
+    if (Time < 0)
+    {
+      StressModel::GetInstance()->Stress_StopTimer();
+      StressModel::GetInstance()->Stress_SetState(StressState::STRESS_NORMAL);
+      if (statefalg == StressState::STRESS_ANALYSIS) //在分析中
+      {
+        StressMainView::GetInstance()->ChangeView(STRESSANALYSISEVIEW,STRESSRESULTVIEW);
+        StressAnalysisView::GetInstance()->startorstopAnalysisAni(false);
+        statefalg = StressState::STRESS_MEASURE;
+      }
+      else if(statefalg == StressState::STRESS_MEASURE)//在检测中
+      {
+        // 测量成功
+        StressModel::GetInstance()->Stress_Control(StressState::STRESS_ANALYSIS);
+        StressMainView::GetInstance()->ChangeView(STRESSUNDERMEASUREVIEW, STRESSANALYSISEVIEW);
+        StressAnalysisView::GetInstance()->startorstopAnalysisAni(true);
+        statefalg = StressState::STRESS_ANALYSIS;
+       
+
+        // 测量失败
+
+      }
+      return;
+    }
+
+    StressState current_state_time = StressModel::GetInstance()->GetCurrentState();
+    // 根据状态处理
+    switch (current_state_time)
+    {
+    case StressState::STRESS_NORMAL:
+      StressModel::GetInstance()->Stress_StopTimer();
+      StressModel::GetInstance()->Stress_SetState(StressState::STRESS_NORMAL);
+      return;
+
+    case StressState::STRESS_MEASURE:
+    {
+      break;
+    }
+    case StressState::STRESS_ANALYSIS:
+    {
+      break;
+    }
+
+    default:
+      StressModel::GetInstance()->Stress_StopTimer();
+      // 显示错误界面提示
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "current_state is error!!");
+      return;
+    }
+  }
+
+  /*
+   * @brief 回调函数
+   */
+  static void Stress_TimerCallback(int data)
+  {
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stress_TimerCallback %d", data);
+    GraphicService::GetInstance()->PostGraphicEvent(
+        std::bind(Stress_TimerCallbackProc, data));
+  }
+
+  /*
+   *  @brief 开启定时器函数
+   *  @param interval 时间间隔,单位ms
+   */
+  void StressModel::Stress_StartTimer(uint32_t interval)
+  {
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StressModel::Stress_StartTimer");
+    /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回
+     * ------------------------- */
+    if (g_timer != nullptr)
+    {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Timer already exists!!");
+      return;
+    }
+
+    /* --------------------------------- 2.创建定时器
+     * -------------------------------- */
+    g_timer = osTimerNew((osTimerFunc_t)Stress_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 StressModel::Stress_StopTimer(void)
+  {
+    // 检查定时器是否存在
+    if (g_timer != nullptr)
+    {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "StressModel::Stress_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
index d4027e8..4094b69 100644 (file)
@@ -77,7 +77,6 @@ namespace OHOS
 
     void StressPresenter::OnStop(void)
     {
-
     }
 
     bool StressPresenter::OnDrag(UIView &view, const DragEvent &event)
@@ -111,19 +110,12 @@ namespace OHOS
     bool StressPresenter::OnClick(UIView &view, const ClickEvent &event)
     {
 
-        std::string viewId = view.GetViewId();
-
-        std::map<std::string, std::pair<int16_t, int16_t>> viewIdMap = {
-            {STARTBUTTON, {STRESSMEASUREVIEW, STRESSUNDERMEASUREVIEW}},   
-            {UNDERBUTTON, {STRESSMEASUREVIEW, STRESSUNDERMEASUREVIEW}},          
-
-        };
-        auto it = viewIdMap.find(viewId);
-        if (it != viewIdMap.end())
+        if (strcmp(view.GetViewId(), STARTBUTTON) == 0)
         {
-            StressMainView::GetInstance()->ChangeView(it->second.first, it->second.second);
-            return true;
+            StressModel::GetInstance()->Stress_Control(StressState::STRESS_MEASURE);
+            StressMainView::GetInstance()->ChangeView(STRESSMEASUREVIEW, STRESSUNDERMEASUREVIEW);
         }
+
         return true;
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StressPresenter::OnClick");
     }
index 7b243e1..84deb04 100644 (file)
@@ -70,10 +70,10 @@ namespace OHOS
     {
 
         InitLabel(titleLable, 200, 30, 70, 45, "titleLable", "压力", DEFAULT_VECTOR_FONT_FILENAME, 35);
-        InitLabel(resultremindLable, 68, 211, 337, 100, "resultremindLable", "30", DEFAULT_VECTOR_FONT_FILENAME, 100);
+        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, 352, 337, 45, "resultremindLable", "正常", DEFAULT_VECTOR_FONT_FILENAME, 35);
+        InitLabel(resultLable, 200, 362, 70, 45, "resultremindLable", "正常", DEFAULT_VECTOR_FONT_FILENAME, 35);
         /*初始化检测时间*/
         group->Add(titleLable);
         group->Add(resultremindLable);
@@ -89,7 +89,7 @@ namespace OHOS
     bool StressResultView::Initbackground()
     {
         error = new UIImageView();
-        error->SetPosition(145, 75, 200, 200);
+        error->SetPosition(140, 65, 111, 118);
         error->SetSrc(BPBACKPATH);
         group->Add(error);
         return true;
index bb4bf6b..b2c25c9 100644 (file)
@@ -86,7 +86,7 @@ namespace OHOS
     {
 
         InitLabel(titleLable, 200, 30, 70, 45, "titleLable", "压力", DEFAULT_VECTOR_FONT_FILENAME, 35);
-        InitLabel(resultremindLable, 68, 211, 337, 100, "resultremindLable", "---", DEFAULT_VECTOR_FONT_FILENAME, 100);
+        InitLabel(resultremindLable, 68, 239, 337, 100, "resultremindLable", "---", DEFAULT_VECTOR_FONT_FILENAME, 100);
         resultremindLable->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
         resultremindLable->SetTextColor(Color::White());
         /*初始化检测时间*/
@@ -102,7 +102,7 @@ namespace OHOS
     bool StressUnderMeasureView::Initbackground()
     {
         error = new UIImageView();
-        error->SetPosition(145, 75, 111, 118);
+        error->SetPosition(140, 65, 111, 118);
         error->SetSrc(BPBACKPATH);
         group->Add(error);
         return true;