* @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
*/
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
};
bool ChangeRespiratoryTrainingView(int16_t thisView);
bool ChangeRespiratoryTrainingCompletedView(int16_t thisView);
Animator *GetRespiratoryTrainingAnimator_();
-
+ bool StartRespiratoryTraining();
void OnStart() override;
void OnSetUpView() override;
void OnTearDownView() override;
RespiratoryTrainingCallback *RespiratoryTrainingCallBack_ = nullptr;
Animator *RespiratoryTrainingAnimator_ = nullptr;
UIImageView *RespiratoryTrainingImg_ = nullptr;
- UILabelButton *RespiratoryTrainingStart_ = nullptr;
+ //UILabelButton *RespiratoryTrainingStart_ = nullptr;
+ UILabelExt *RespiratoryTrainingStartNote_ = nullptr;
UILabelExt *RespiratoryTrainingLabel_ = nullptr;
bool animateStart_ = false;
};
* @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() {}
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;
}
*/
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)
{
}
/* --------------------------------- 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)
{
*/
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)
{
* @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
*/
namespace OHOS
{
+ static constexpr uint16_t ONE_SECOND = 1000; // 一秒
static RespiratoryTrainingView *g_pRespiratoryTrainingView{nullptr};
RespiratoryTrainingView::RespiratoryTrainingView()
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);
}
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();
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);
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");
RespiratoryTrainingImg_->SetResizeMode(UIImageView::ImageResizeMode::CENTER);
RespiratoryTrainingScrollView[RESPIRATORYTRAINING]->Add(RespiratoryTrainingImg_);
+#if 0
// 创建并设置呼吸训练开始按钮
RespiratoryTrainingStart_ = new UILabelButton();
if (RespiratoryTrainingStart_ == nullptr)
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()
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();
RespiratoryTrainingScrollView[RESPIRATORYTRAININGCOMPLETED] = nullptr;
}
- WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[RespiratoryTrainingView]ClearAll end!!");
+ WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[RespiratoryTrainingView]ClearAll end!!");
}
void RespiratoryTrainingView::OnStart()