From 941af6b6184430b59dd6d1f65ce7538afdbec53c Mon Sep 17 00:00:00 2001 From: luozheng <1732036298@qq.com> Date: Wed, 12 Jun 2024 11:13:44 +0800 Subject: [PATCH] =?utf8?q?=E5=91=BC=E5=90=B8=E8=AE=AD=E7=BB=83=E4=BC=98?= =?utf8?q?=E5=8C=96=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../include/RespiratoryTrainingModel.h | 5 +- .../include/RespiratoryTrainingView.h | 9 ++- .../src/RespiratoryTrainingCompletedView.cpp | 6 +- .../src/RespiratoryTrainingModel.cpp | 47 +++++++---- .../src/RespiratoryTrainingPresenter.cpp | 3 +- .../src/RespiratoryTrainingView.cpp | 80 +++++++++++++++++-- .../RespiratoryTraining.bin | 2 +- 7 files changed, 117 insertions(+), 35 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingModel.h b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingModel.h index 481788da8..bb2635983 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingModel.h @@ -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); diff --git a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingView.h b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingView.h index f1e34f002..51c751751 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/include/RespiratoryTrainingView.h @@ -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; }; diff --git a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingCompletedView.cpp b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingCompletedView.cpp index c8788241f..241433431 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingCompletedView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingCompletedView.cpp @@ -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; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp index 8021550b7..65e03b6ca 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingModel.cpp @@ -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" @@ -15,6 +15,12 @@ #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) { diff --git a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingPresenter.cpp index bd4399053..68bc55d64 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingPresenter.cpp @@ -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::OnStop(); ScreenAlwaysOnCtr(0); RespiratoryTrainingModel::GetInstance().RT_StopTimer(); + RespiratoryTrainingModel::GetInstance().ResumeStatus(); } bool RespiratoryTrainingPresenter::OnClick(UIView &view, const ClickEvent &event) diff --git a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingView.cpp b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingView.cpp index 5fbf86deb..a34ef22c4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/respiratorytraining/src/RespiratoryTrainingView.cpp @@ -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() diff --git a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/RespiratoryTraining/RespiratoryTraining.bin b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/RespiratoryTraining/RespiratoryTraining.bin index bc23fac93..c9e63a99c 100644 --- a/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/RespiratoryTraining/RespiratoryTraining.bin +++ b/code/sdk/build/config/target_config/brandy/mk_fs_image/fd230/fs/user/res/RespiratoryTraining/RespiratoryTraining.bin @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c04df592f1983b48be8ea953fc16aeb299371367c2ef44b0526a8f0801124def +oid sha256:96216f711924bb5ef1774a35de2a673b88e5adc4734789d55fec43642697b900 size 38424 -- 2.17.1