呼吸训练优化修改 260/2 260/head
authorluozheng <1732036298@qq.com>
Wed, 12 Jun 2024 03:13:44 +0000 (11:13 +0800)
committerluozheng <1732036298@qq.com>
Wed, 12 Jun 2024 03:13:44 +0000 (11:13 +0800)
code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingModel.h
code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingView.h
code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingCompletedView.cpp
code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp
code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingView.cpp
code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/RespiratoryTraining/RespiratoryTraining.bin

index 481788d..bb26359 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-06-11 16:26:13
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-11 17:53:42
+ * @LastEditTime: 2024-06-12 10:35:46
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingModel.h
  */
 #ifndef RESPIRATORY_TRAINING_MODEL_H
@@ -20,7 +20,8 @@ namespace OHOS
         void AddRespiratoryTrainingTimes(void);
         std::string GetRespiratoryTrainingTotalTime(void) ;
         std::string GetHeartRateValue(void) ;
-
+        void ResumeStatus();
+        
         void RT_StartTimer(uint32_t interval);
         void RT_StopTimer(void);
 
index f1e34f0..51c7517 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-06-08 09:36:01
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-11 18:22:40
+ * @LastEditTime: 2024-06-12 10:37:30
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingView.h
  */
 
@@ -50,7 +50,7 @@ namespace OHOS
         int16_t step = -1;
         float scale = 0;
         uint16_t curTime = 0;
-        uint16_t durationTime = 4 * 1000; // 4000: means 4000ms
+        uint16_t durationTime = 5 * 1000; // 5000: means 5000ms
         int16_t startVal = durationTime;
         int16_t endVal = durationTime / 2; // 2: half
     };
@@ -76,7 +76,7 @@ namespace OHOS
         bool ChangeRespiratoryTrainingView(int16_t thisView);
         bool ChangeRespiratoryTrainingCompletedView(int16_t thisView);
         Animator *GetRespiratoryTrainingAnimator_();
-
+        bool StartRespiratoryTraining();
         void OnStart() override;
         void OnSetUpView() override;
         void OnTearDownView() override;
@@ -107,7 +107,8 @@ namespace OHOS
         RespiratoryTrainingCallback *RespiratoryTrainingCallBack_ = nullptr;
         Animator *RespiratoryTrainingAnimator_ = nullptr;
         UIImageView *RespiratoryTrainingImg_ = nullptr;
-        UILabelButton *RespiratoryTrainingStart_ = nullptr;
+        //UILabelButton *RespiratoryTrainingStart_ = nullptr;
+        UILabelExt *RespiratoryTrainingStartNote_ = nullptr;
         UILabelExt *RespiratoryTrainingLabel_ = nullptr;
         bool animateStart_ = false;
     };
index c878824..2414334 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-05-07 11:25:58
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-11 18:03:58
+ * @LastEditTime: 2024-06-12 10:25:32
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/RespiratoryTrainingCompleted/src/RespiratoryTrainingCompletedView.cpp
  */
 
@@ -20,13 +20,13 @@ namespace OHOS
 
     RespiratoryTrainingCompletedView::RespiratoryTrainingCompletedView()
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::RespiratoryTrainingCompletedView");
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::RespiratoryTrainingCompletedView");
         g_pRespiratoryTrainingCompletedView = this;
     }
 
     RespiratoryTrainingCompletedView::~RespiratoryTrainingCompletedView()
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::~RespiratoryTrainingCompletedView");
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingCompletedView::~RespiratoryTrainingCompletedView");
         ClearAll();
         g_pRespiratoryTrainingCompletedView = nullptr;
     }
index 8021550..65e03b6 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-06-11 16:26:20
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-11 18:25:07
+ * @LastEditTime: 2024-06-12 11:00:29
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp
  */
 #include "respiratorytraining/include/RespiratoryTrainingModel.h"
 #include "respiratorytraining/include/RespiratoryTrainingView.h"
 namespace OHOS
 {
+    // 声明定时器变量
+    static osTimerId_t g_timer = NULL;
+    static int Time = 5;
+    static constexpr int ONE_MINUTE = 60; // 一分钟
+    static bool START_FLAG = false;
+
     RespiratoryTrainingModel::RespiratoryTrainingModel() {}
 
     RespiratoryTrainingModel::~RespiratoryTrainingModel() {}
@@ -45,30 +51,39 @@ namespace OHOS
         return HeartRateValue;
     }
 
+    void RespiratoryTrainingModel::ResumeStatus()
+    {
+        Time = 5;
+        START_FLAG = false;
+    }
     /* -------------------------------------------------------------------------- */
-
-    // 声明定时器变量
-    static osTimerId_t g_timer = NULL;
     /*定时器到期时的处理*/
     static void RT_TimerCallbackProc(int data)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RT_TimerCallbackProc");
-        RespiratoryTrainingModel::GetInstance().RT_StopTimer();
-        RespiratoryTrainingModel::GetInstance().AddRespiratoryTrainingTimes();
-
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RT_TimerCallbackProc,Time = %d", Time);
+        Time -= 1;
         RespiratoryTrainingView *p_RespiratoryTrainingView = RespiratoryTrainingView::GetInstance();
         if (p_RespiratoryTrainingView == nullptr)
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "p_RespiratoryTrainingView is nullptr!!");
             return;
         }
-        if (p_RespiratoryTrainingView->GetRespiratoryTrainingAnimator_() == nullptr)
+        if (Time <= 0)
         {
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingAnimator_ is nullptr!!");
-            return;
+            if (START_FLAG == true)
+            {
+                RespiratoryTrainingModel::GetInstance().RT_StopTimer(); // 停止定时器
+                RespiratoryTrainingModel::GetInstance().AddRespiratoryTrainingTimes();
+                p_RespiratoryTrainingView->GetRespiratoryTrainingAnimator_()->Stop();
+                p_RespiratoryTrainingView->ChangeView(RESPIRATORYTRAINING, RESPIRATORYTRAININGCOMPLETED);
+            }
+            else
+            {
+                Time = ONE_MINUTE;
+                p_RespiratoryTrainingView->StartRespiratoryTraining();
+                START_FLAG = true;
+            }
         }
-        p_RespiratoryTrainingView->GetRespiratoryTrainingAnimator_()->Stop();
-        p_RespiratoryTrainingView->ChangeView(RESPIRATORYTRAINING, RESPIRATORYTRAININGCOMPLETED);
 
         return;
     }
@@ -87,7 +102,7 @@ namespace OHOS
      */
     void RespiratoryTrainingModel::RT_StartTimer(uint32_t interval)
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingModel::RT_StartTimer");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingModel::RT_StartTimer");
         /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 ------------------------- */
         if (g_timer != NULL)
         {
@@ -96,7 +111,7 @@ namespace OHOS
         }
 
         /* --------------------------------- 2.创建定时器 -------------------------------- */
-        g_timer = osTimerNew((osTimerFunc_t)RT_TimerCallbackProc, osTimerOnce, NULL, NULL);
+        g_timer = osTimerNew((osTimerFunc_t)RT_TimerCallback, osTimerPeriodic, NULL, NULL);
         // 检查定时器创建是否成功
         if (g_timer == NULL)
         {
@@ -127,7 +142,7 @@ namespace OHOS
      */
     void RespiratoryTrainingModel::RT_StopTimer(void)
     {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingModel::RT_StopTimer");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingModel::RT_StopTimer");
         // 检查定时器是否存在
         if (g_timer != NULL)
         {
index bd43990..68bc55d 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-05-07 11:26:06
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-11 17:16:42
+ * @LastEditTime: 2024-06-12 11:13:13
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/RespiratoryTraining/src/RespiratoryTrainingPresenter.cpp
  */
 
@@ -58,6 +58,7 @@ namespace OHOS
         Presenter<RespiratoryTrainingView>::OnStop();
         ScreenAlwaysOnCtr(0);
         RespiratoryTrainingModel::GetInstance().RT_StopTimer();
+        RespiratoryTrainingModel::GetInstance().ResumeStatus();
     }
 
     bool RespiratoryTrainingPresenter::OnClick(UIView &view, const ClickEvent &event)
index 5fbf86d..a34ef22 100644 (file)
@@ -2,7 +2,7 @@
  * @Author: luozheng 1732036298@qq.com
  * @Date: 2024-05-07 11:25:58
  * @LastEditors: luozheng 1732036298@qq.com
- * @LastEditTime: 2024-06-11 18:36:37
+ * @LastEditTime: 2024-06-12 11:09:19
  * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/RespiratoryTraining/src/RespiratoryTrainingView.cpp
  */
 
@@ -17,6 +17,7 @@
 namespace OHOS
 {
 
+    static constexpr uint16_t ONE_SECOND = 1000; // 一秒
     static RespiratoryTrainingView *g_pRespiratoryTrainingView{nullptr};
 
     RespiratoryTrainingView::RespiratoryTrainingView()
@@ -110,13 +111,18 @@ namespace OHOS
 
     Animator *RespiratoryTrainingView::GetRespiratoryTrainingAnimator_()
     {
-        return RespiratoryTrainingAnimator_;      
+        if (RespiratoryTrainingAnimator_ == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingAnimator_ is nullptr!!");
+            return nullptr;
+        }
+        return RespiratoryTrainingAnimator_;
     }
 
     // 设置按键监听
     static void SetKeyActListener()
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetKeyActListener");
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetKeyActListener");
         RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::RespiratoryTrainingPresenter::GetInstance();
         RootView::GetInstance()->SetOnKeyActListener(keyactListener);
     }
@@ -310,9 +316,10 @@ namespace OHOS
 
     bool RespiratoryTrainingView::OnClick(UIView &view, const ClickEvent &event)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingView::OnClick");
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingView::OnClick");
         UNUSED(view);
         UNUSED(event);
+#if 0
         if (!animateStart_)
         {
             RespiratoryTrainingAnimator_->Start();
@@ -330,7 +337,7 @@ namespace OHOS
                 return false;
             }
             RespiratoryTrainingLabel_->SetPosition(53, 320, 360, 70); // 180, 380, 100, 50: left, right, width, height
-            // RespiratoryTrainingLabel_->SetText("现在呼气气");
+            // RespiratoryTrainingLabel_->SetText("现在呼气");
             RespiratoryTrainingLabel_->SetTextId(STR_EXHALE_NOW);
             RespiratoryTrainingLabel_->SetStyle(STYLE_TEXT_FONT, 30);
             RespiratoryTrainingLabel_->SetStyle(STYLE_LINE_HEIGHT, 35);
@@ -342,11 +349,48 @@ namespace OHOS
             RespiratoryTrainingCallBack_->SetTextView(RespiratoryTrainingLabel_);
             RespiratoryTrainingCallBack_->startTimestamp = HALTick::GetInstance().GetTime();
             RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->Invalidate();
-            RespiratoryTrainingModel::GetInstance().RT_StartTimer(60 * 1000); // 呼吸训练每一分钟一次
         }
+#endif
         return true;
     }
 
+    // 开始呼吸训练
+    bool RespiratoryTrainingView::StartRespiratoryTraining()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingView::StartRespiratoryTraining");
+        if (!animateStart_)
+        {
+            RespiratoryTrainingAnimator_->Start();
+            animateStart_ = true;
+            if (RespiratoryTrainingStartNote_ != nullptr)
+            {
+                RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->Remove(RespiratoryTrainingStartNote_);
+                delete RespiratoryTrainingStartNote_;
+                RespiratoryTrainingStartNote_ = nullptr;
+            }
+            RespiratoryTrainingLabel_ = new UILabelExt();
+            if (RespiratoryTrainingLabel_ == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingLabel_ new fail");
+                return false;
+            }
+            RespiratoryTrainingLabel_->SetPosition(53, 320, 360, 70);
+            RespiratoryTrainingLabel_->SetTextId(STR_EXHALE_NOW); // 现在呼气
+            RespiratoryTrainingLabel_->SetStyle(STYLE_TEXT_FONT, 30);
+            RespiratoryTrainingLabel_->SetStyle(STYLE_LINE_HEIGHT, 35);
+            RespiratoryTrainingLabel_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+            RespiratoryTrainingLabel_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+            RespiratoryTrainingLabel_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+            RespiratoryTrainingLabel_->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
+            RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->Add(RespiratoryTrainingLabel_);
+            RespiratoryTrainingCallBack_->SetTextView(RespiratoryTrainingLabel_);
+            RespiratoryTrainingCallBack_->startTimestamp = HALTick::GetInstance().GetTime();
+            RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->Invalidate();
+        }
+        return true;
+    }
+
+    // 初始化呼吸训练元素
     void RespiratoryTrainingView::InitRespiratoryTrainingElements()
     {
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingView::InitRespiratoryTrainingElements");
@@ -373,6 +417,7 @@ namespace OHOS
         RespiratoryTrainingImg_->SetResizeMode(UIImageView::ImageResizeMode::CENTER);
         RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->Add(RespiratoryTrainingImg_);
 
+#if 0
         // 创建并设置呼吸训练开始按钮
         RespiratoryTrainingStart_ = new UILabelButton();
         if (RespiratoryTrainingStart_ == nullptr)
@@ -385,6 +430,24 @@ namespace OHOS
         RespiratoryTrainingStart_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
         RespiratoryTrainingStart_->SetOnClickListener(this);
         RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->Add(RespiratoryTrainingStart_);
+#elif 1
+
+        RespiratoryTrainingStartNote_ = new UILabelExt();
+        if (RespiratoryTrainingStartNote_ == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "RespiratoryTrainingStartNote_ new failed!");
+            return;
+        }
+        RespiratoryTrainingStartNote_->SetPosition(53, 320, 360, 70);
+        RespiratoryTrainingStartNote_->SetStyle(STYLE_TEXT_FONT, 30);
+        RespiratoryTrainingStartNote_->SetStyle(STYLE_LINE_HEIGHT, 35);
+        // RespiratoryTrainingStartNote_->SetText("保持不动,将注意力集中在呼吸上");
+        RespiratoryTrainingStartNote_->SetTextId(STR_KEEP_STILL_FOCUS_ON_BREATHING);
+        RespiratoryTrainingStartNote_->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);
+        RespiratoryTrainingStartNote_->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        RespiratoryTrainingStartNote_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->Add(RespiratoryTrainingStartNote_);
+#endif
     }
 
     void RespiratoryTrainingView::InitRespiratoryTrainingCallBackAndAnimator()
@@ -433,11 +496,12 @@ namespace OHOS
         InitRespiratoryTrainingScrollView();
         InitRespiratoryTrainingElements();
         InitRespiratoryTrainingCallBackAndAnimator();
+        RespiratoryTrainingModel::GetInstance().RT_StartTimer(ONE_SECOND);
     }
 
     void RespiratoryTrainingView::ClearAll(void)
     {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[RespiratoryTrainingView]ClearAll start");
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[RespiratoryTrainingView]ClearAll start");
         if (container_ != nullptr)
         {
             container_->RemoveAll();
@@ -486,7 +550,7 @@ namespace OHOS
             RespiratoryTrainingScrollView[RESPIRATORYTRAININGCOMPLETED] = nullptr;
         }
 
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[RespiratoryTrainingView]ClearAll end!!");
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[RespiratoryTrainingView]ClearAll end!!");
     }
 
     void RespiratoryTrainingView::OnStart()