From 72f0cd05bef011a0863de47bd68d826b0600e687 Mon Sep 17 00:00:00 2001 From: Caisking <3449750381@qq.com> Date: Mon, 23 Sep 2024 21:03:18 +0800 Subject: [PATCH] =?utf8?q?#700=20=E8=BF=90=E5=8A=A8=E6=97=B6=E9=97=B4?= =?utf8?q?=E6=98=BE=E7=A4=BA=E8=8A=B1=E5=B1=8F=EF=BC=8C=E6=98=BE=E7=A4=BA?= =?utf8?q?=E9=80=BB=E8=BE=91=E4=B8=8D=E5=AF=B9=EF=BC=88=E4=B8=A4=E5=8F=B0?= =?utf8?q?=E6=B5=8B=E8=AF=95=E6=A0=B7=E6=9C=BA=E9=83=BD=E6=9C=89=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../nativeui/traing/src/TraingEnddataView.cpp | 4 +- .../nativeui/traing/src/TraingModel.cpp | 6 +- .../include/TraingCardPresenter.h | 116 ++- .../training_card/src/TraingCardPresenter.cpp | 794 +++++++++--------- 4 files changed, 474 insertions(+), 446 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp index fd7666fd1..30646da13 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp @@ -280,14 +280,14 @@ void TraingEnddataView::ExitView() { (startY_Value + labelInterval * (8 + tagflge) + 120), 300, 40, "label8", STR_MORE_APP, DEFAULT_VECTOR_FONT_FILENAME, 30); InitButtonExt(exitButton, 42, - (startY_Value + labelInterval * (8 + tagflge) + 220), 380, + (startY_Value + labelInterval * (8 + tagflge) + 190), 380, 100, BUTTONBACK, STR_CLOSE, 30); } else { InitRollLabel(exitLabel, 80, (startY_Value + labelInterval * (3 + tagflge) + 120), 300, 40, "label8", STR_MORE_APP, DEFAULT_VECTOR_FONT_FILENAME, 30); InitButtonExt(exitButton, 42, - (startY_Value + labelInterval * (3 + tagflge) + 220), 380, + (startY_Value + labelInterval * (3 + tagflge) + 190), 380, 100, BUTTONBACK, STR_CLOSE, 30); } exitLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp index 8a819753c..982df613c 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp @@ -1334,7 +1334,8 @@ namespace OHOS /* 定时器回调函数 */ void TraingTimerCallback() { - g_motionTimes++; + g_motionTimes++; +#if 0 TraingCardPresenter *gTraingCardPresenter = TraingCardPresenter::GetInstance(); if (gTraingCardPresenter == nullptr) { @@ -1342,7 +1343,8 @@ namespace OHOS return; } gTraingCardPresenter->ModifiesTime(); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingTimerCallback\r\n"); +#endif + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingTimerCallback\r\n"); } /* 开启定时器 */ diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h index 7e52f6804..b939924a4 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h @@ -1,87 +1,75 @@ -/*** - * @Date: 2024-04-15 10:55:58 - * @LastEditors: Caisking 3449750381@qq.com - * @LastEditTime: 2024-08-24 15:18:42 - * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h - */ -/*** - * @Date: 2024-04-15 10:55:58 - * @LastEditors: Caisking 3449750381@qq.com - * @LastEditTime: 2024-08-19 10:55:50 - * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h - */ -/*** - * @Author: Caisking 3449750381@qq.com - * @Date: 2024-03-19 17:37:18 - * @LastEditors: Caisking 3449750381@qq.com - * @LastEditTime: 2024-03-26 16:54:22 - * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h - * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE - */ #ifndef _TraingCard_PRESENTER_H #define _TraingCard_PRESENTER_H +#include "ModelListenerSample.h" #include "Presenter.h" #include "TraingCardView.h" #include "traing/training_card/include/TrainingControlView.h" #include "traing/training_card/include/TrainingDataView.h" #include "traing/training_card/include/TrainingDetailView.h" -#include "ModelListenerSample.h" -#include "cywee_service.h" +#include "bletest.h" +#include "components/root_view.h" +#include "components/ui_swipe_view.h" +#include "components/ui_view.h" + #include "cywee_hal.h" +#include "cywee_service.h" #include "traing/include/TraingModel.h" #include "uicomponents/UIComponents.h" -#include "bletest.h" -namespace OHOS -{ - class TraingCardView; - class TrainingControlView; - class TrainingDataView; - class TrainingDetailView; - class TraingModel; - class TraingCardPresenter : public Presenter, - public UIView::OnClickListener, - public UIView::OnDragListener, - public ModelListenerSample - { - public: - TraingCardPresenter(); - virtual ~TraingCardPresenter(); - static TraingCardPresenter *GetInstance(); +namespace OHOS { +class TraingCardView; +class TrainingControlView; +class TrainingDataView; +class TrainingDetailView; +class TraingModel; +class TraingCardPresenter : public Presenter, + public UIView::OnClickListener, + public UIView::OnDragListener, + public UISwipeView::OnSwipeListener, + public ModelListenerSample { +public: + TraingCardPresenter(); + virtual ~TraingCardPresenter() override; + static TraingCardPresenter *GetInstance(void); + + void OnStart() override; + void OnPause() override; + void OnResume() override; + void OnStop() override; + // void OnTickEvent() override; + void Notify() override; - void OnStart() override; - void OnPause() override; - void OnResume() override; - void OnStop() override; - // void OnTickEvent() override; - void Notify() override; + bool OpenSensor(ExerciseClass type); + bool ControlSensor(ExerciseState state); - bool OpenSensor(ExerciseClass type); - bool ControlSensor(ExerciseState state); + void ModifiesTime(); + void RefreshData(SportData *sportdata); // 更新数据 - void ModifiesTime(); - void RefreshData(SportData *sportdata); // 更新数据 + void UpdateTimeOfControl(); + void UpdateTimeOfData(); + void UpdateDataView(); - /*蓝牙开启运动*/ - bool send_sport_cmd(training_ble *cmd); + /*蓝牙开启运动*/ + bool send_sport_cmd(training_ble *cmd); - /*控制*/ - void handleStartState(); - void handleEndState(); - void handlePauseState(); - void handleContinueState(); + /*控制*/ + void handleStartState(); + void handleEndState(); + void handlePauseState(); + void handleContinueState(); - private: - // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; - bool OnClick(UIView &view, const ClickEvent &event) override; - bool OnDrag(UIView &view, const DragEvent &event) override; - int tag_ = 0; - bool opensensorstuats{false}; - // bool OnDragEnd(UIView& view, const DragEvent& event) override; - }; +private: + // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; + bool OnClick(UIView &view, const ClickEvent &event) override; + bool OnDrag(UIView &view, const DragEvent &event) override; + void OnSwipe(UISwipeView &view) override; + int tag_ = 0; + bool opensensorstuats{false}; + // bool OnDragEnd(UIView& view, const DragEvent& event) override; +}; } // namespace OHOS #endif // SLEEPDETAIL_PRESENTER_H \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp index 16488879a..86c3e77a8 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp @@ -2,34 +2,36 @@ * @Date: 2024-07-06 16:27:31 * @LastEditors: Caisking 3449750381@qq.com * @LastEditTime: 2024-08-02 10:21:14 - * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp + * @FilePath: + * /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp */ /*** * @Date: 2024-04-26 09:23:18 * @LastEditors: Caisking 3449750381@qq.com * @LastEditTime: 2024-04-26 10:25:05 - * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp + * @FilePath: + * /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp */ #include "AppViewIDs.h" +#include "NativeAbility.h" #include "components/ui_label_ext.h" #include "ui_resource_string.h" -#include "NativeAbility.h" -#include -#include -#include +#include "ConfigModel.h" +#include "custom_utils.h" +#include "graphic_service.h" +#include "traing/include/TraingModel.h" #include "traing/training_card/include/TraingCardPresenter.h" #include "traing/training_card/include/TrainingControlView.h" -#include "traing/include/TraingModel.h" #include "uicomponents/UIComponents.h" -#include "ConfigModel.h" -#include "custom_utils.h" #include "vibrator_service.h" +#include #include +#include #include +#include #include -#include "graphic_service.h" extern "C" void do_cywee_service_check_msg(int cmd, int data[]); @@ -38,196 +40,214 @@ extern "C" void do_cywee_service_check_msg(int cmd, int data[]); #define DEFAULT_DASH "--" #define DATATEST 0 -extern "C" -{ - void InitTimer(); - void DisableTimer(); - void PauseTimer(); - void ResumeTimer(); +extern "C" { +void InitTimer(); +void DisableTimer(); +void PauseTimer(); +void ResumeTimer(); } -namespace OHOS -{ - // 当前Presenter属性实例化的内存指针 - static TraingCardPresenter *g_pTraingCardPresenter = nullptr; +namespace OHOS { +// 当前Presenter属性实例化的内存指针 +static TraingCardPresenter *g_pTraingCardPresenter = nullptr; - TraingCardPresenter::TraingCardPresenter() - { - g_pTraingCardPresenter = this; - } +TraingCardPresenter::TraingCardPresenter() { g_pTraingCardPresenter = this; } - TraingCardPresenter::~TraingCardPresenter() - { - // tag_ = 0; - g_pTraingCardPresenter = nullptr; - } - - TraingCardPresenter *TraingCardPresenter::GetInstance() - { - static TraingCardPresenter instance; - return &instance; - } +TraingCardPresenter::~TraingCardPresenter() { + // tag_ = 0; + g_pTraingCardPresenter = nullptr; +} - void TraingCardPresenter::OnStart() - { - Presenter::OnStart(); - // ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 长亮屏 - } +TraingCardPresenter *TraingCardPresenter::GetInstance() { + static TraingCardPresenter instance; + return &instance; +} - void TraingCardPresenter::OnPause(void) - { +void TraingCardPresenter::OnStart() { + Presenter::OnStart(); + // ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 长亮屏 +} - Presenter::OnPause(); - } +void TraingCardPresenter::OnPause(void) { - void TraingCardPresenter::OnResume(void) - { + Presenter::OnPause(); +} - Presenter::OnResume(); - } +void TraingCardPresenter::OnResume(void) { - void TraingCardPresenter::OnStop(void) - { + Presenter::OnResume(); +} - Presenter::OnStop(); - // ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 长亮屏 - } +void TraingCardPresenter::OnStop(void) { - bool TraingCardPresenter::OnDrag(UIView &view, const DragEvent &event) - { - UNUSED(view); - return true; - } + Presenter::OnStop(); + // ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 长亮屏 +} - // 计时器更新timer - void TraingCardPresenter::ModifiesTime() - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ModifiesTime begin"); - std ::string TimeStr = TraingModel::GetInstance()->DisplayMotionDuration(); +bool TraingCardPresenter::OnDrag(UIView &view, const DragEvent &event) { + UNUSED(view); + return true; +} - /*灭屏状态不刷新UI*/ - if (uapi_get_screen_state() == 1) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_get_screen_state is off"); - return; - } +// 计时器更新timer +void TraingCardPresenter::ModifiesTime() { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ModifiesTime begin"); + std ::string TimeStr = TraingModel::GetInstance()->DisplayMotionDuration(); + + /*灭屏状态不刷新UI*/ + if (uapi_get_screen_state() == 1) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_get_screen_state is off"); + return; + } + + if (TimeStr.empty()) { + WEARABLE_LOGE( + WEARABLE_LOG_MODULE_APP, + "TraingModel::GetInstance()->DisplayMotionDuration() nullptr"); + return; + } + if (TrainingControlView::GetInstance()->GetTimeLabel() != nullptr) { + TrainingControlView::GetInstance()->GetTimeLabel()->SetText( + TimeStr.c_str()); + } + if (TrainingDataView::GetInstance()->GetTimeLabel() != nullptr) { + TrainingDataView::GetInstance()->GetTimeLabel()->SetText(TimeStr.c_str()); + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ModifiesTime end"); +} - if (TimeStr.empty()) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingModel::GetInstance()->DisplayMotionDuration() nullptr"); - return; - } - if (TrainingControlView::GetInstance()->GetTimeLabel() != nullptr) - { - TrainingControlView::GetInstance()->GetTimeLabel()->SetText(TimeStr.c_str()); - } - if (TrainingDataView::GetInstance()->GetTimeLabel() != nullptr) - { - TrainingDataView::GetInstance()->GetTimeLabel()->SetText(TimeStr.c_str()); - } - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ModifiesTime end"); - } +//计时器 +void TraingCardPresenter::UpdateTimeOfControl() { + std ::string TimeStr = TraingModel::GetInstance()->DisplayMotionDuration(); + if (TimeStr.empty()) { + WEARABLE_LOGE( + WEARABLE_LOG_MODULE_APP, + "TraingModel::GetInstance()->DisplayMotionDuration() nullptr"); + return; + } + if (TrainingControlView::GetInstance()->GetTimeLabel() != nullptr) { + TrainingControlView::GetInstance()->GetTimeLabel()->SetText( + TimeStr.c_str()); + } +} +void TraingCardPresenter::UpdateTimeOfData() { + std ::string TimeStr = TraingModel::GetInstance()->DisplayMotionDuration(); + if (TimeStr.empty()) { + WEARABLE_LOGE( + WEARABLE_LOG_MODULE_APP, + "TraingModel::GetInstance()->DisplayMotionDuration() nullptr"); + return; + } + if (TrainingDataView::GetInstance()->GetTimeLabel() != nullptr) { + TrainingDataView::GetInstance()->GetTimeLabel()->SetText(TimeStr.c_str()); + } +} - /* --------------------------------- cywee库操作 -------------------------------- */ - /*开启cywee*/ - bool TraingCardPresenter::OpenSensor(ExerciseClass type) - { - // 防止重复开启 - if (opensensorstuats) - { - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OpenSensor is opening!!"); - return false; - } - // 根据不同的运动项目进行不同的运动 - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardPresenter::OpenSensor!!"); - switch (type) - { - case ExerciseClass::NORMAL: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL); - break; - case ExerciseClass::TREADMILL: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE, NULL); - break; - case ExerciseClass::OUTDOOR: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE, NULL); - break; - case ExerciseClass::INDOOR: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE, NULL); - break; - case ExerciseClass::FITNESS_PEDOMETER: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE, NULL); - break; - case ExerciseClass::FREE_TRAINING: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE, NULL); - break; - default: - break; - } - opensensorstuats = true; - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OpenSensor--%d!!", type); - return true; - } +/* --------------------------------- cywee库操作 + * -------------------------------- */ +/*开启cywee*/ +bool TraingCardPresenter::OpenSensor(ExerciseClass type) { + // 防止重复开启 + if (opensensorstuats) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OpenSensor is opening!!"); + return false; + } + // 根据不同的运动项目进行不同的运动 + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardPresenter::OpenSensor!!"); + switch (type) { + case ExerciseClass::NORMAL: + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL); + break; + case ExerciseClass::TREADMILL: + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE, NULL); + break; + case ExerciseClass::OUTDOOR: + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE, NULL); + break; + case ExerciseClass::INDOOR: + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE, NULL); + break; + case ExerciseClass::FITNESS_PEDOMETER: + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE, NULL); + break; + case ExerciseClass::FREE_TRAINING: + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE, NULL); + break; + default: + break; + } + opensensorstuats = true; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OpenSensor--%d!!", type); + return true; +} - /*控制cywee*/ - bool TraingCardPresenter::ControlSensor(ExerciseState state) - { - switch (state) - { - case ExerciseState::End: - // 退出进入普通模式 - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL); - opensensorstuats = false; // 恢复标志位 - DisableTimer(); // 关闭计时器 - break; - case ExerciseState::Pause: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE, 0); - break; - case ExerciseState::Continue: - do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME, 0); - break; - default: - break; - } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ControlSensor[%d]!!", state); - return true; - } +/*控制cywee*/ +bool TraingCardPresenter::ControlSensor(ExerciseState state) { + switch (state) { + case ExerciseState::End: + // 退出进入普通模式 + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL); + opensensorstuats = false; // 恢复标志位 + DisableTimer(); // 关闭计时器 + break; + case ExerciseState::Pause: + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE, 0); + break; + case ExerciseState::Continue: + do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME, 0); + break; + default: + break; + } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ControlSensor[%d]!!", state); + return true; +} - void TraingCardPresenter::RefreshData(SportData *sportdata) - { - if (sportdata == nullptr) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sportdata is null"); - return; - } - std::string distanceStr; - if (sportdata->distance != 0) - { - double distance_km = sportdata->distance / 1000.0; // 转换为公里并保留两位小数 - std::stringstream ss; - ss << std::fixed << std::setprecision(2) << distance_km; - distanceStr = ss.str(); - } - else - { - distanceStr = DEFAULT_DASH; - } - - std::string heartStr = (sportdata->heart != 0) ? std::to_string(sportdata->heart) : DEFAULT_DASH; - std::string stepsStr = (sportdata->steps != 0) ? std::to_string(sportdata->steps) : DEFAULT_DASH; - std::string calorieStr = (sportdata->calories != 0) ? std::to_string(sportdata->calories) : DEFAULT_DASH; - // 训练强度刷新 - UIResourceTextId intensityid = TraingModel::GetInstance()->GetIntensity(); - // printf("intensityid %d \r\n", intensityid); - TrainingDetailView::GetInstance()->Get_Intensity_Button()->SetTextId(intensityid); - - TrainingDataView::GetInstance()->GetProgress()->SetValue(sportdata->goaldegree); // 目标完成度 - TrainingDataView::GetInstance()->GetHeartLabel()->SetText(heartStr.c_str()); // 心率 - TrainingDetailView::GetInstance()->GetCalorieLabel()->SetText(calorieStr.c_str()); // 卡路里 - TrainingDetailView::GetInstance()->GetMileLabel()->SetText(distanceStr.c_str()); // 距离 - TrainingDetailView::GetInstance()->GetStepLabel()->SetText(stepsStr.c_str()); // 步数 - - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[Calories: %s, Distance: %s, Steps: %s Intensityid: %d]", calorieStr.c_str(), distanceStr.c_str(), stepsStr.c_str(), intensityid); - // 释放sportdata内存 - } +void TraingCardPresenter::RefreshData(SportData *sportdata) { + if (sportdata == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sportdata is null"); + return; + } + std::string distanceStr; + if (sportdata->distance != 0) { + double distance_km = + sportdata->distance / 1000.0; // 转换为公里并保留两位小数 + std::stringstream ss; + ss << std::fixed << std::setprecision(2) << distance_km; + distanceStr = ss.str(); + } else { + distanceStr = DEFAULT_DASH; + } + + std::string heartStr = + (sportdata->heart != 0) ? std::to_string(sportdata->heart) : DEFAULT_DASH; + std::string stepsStr = + (sportdata->steps != 0) ? std::to_string(sportdata->steps) : DEFAULT_DASH; + std::string calorieStr = (sportdata->calories != 0) + ? std::to_string(sportdata->calories) + : DEFAULT_DASH; + // 训练强度刷新 + UIResourceTextId intensityid = TraingModel::GetInstance()->GetIntensity(); + // printf("intensityid %d \r\n", intensityid); + TrainingDetailView::GetInstance()->Get_Intensity_Button()->SetTextId( + intensityid); + + TrainingDataView::GetInstance()->GetProgress()->SetValue( + sportdata->goaldegree); // 目标完成度 + TrainingDataView::GetInstance()->GetHeartLabel()->SetText( + heartStr.c_str()); // 心率 + TrainingDetailView::GetInstance()->GetCalorieLabel()->SetText( + calorieStr.c_str()); // 卡路里 + TrainingDetailView::GetInstance()->GetMileLabel()->SetText( + distanceStr.c_str()); // 距离 + TrainingDetailView::GetInstance()->GetStepLabel()->SetText( + stepsStr.c_str()); // 步数 + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, + "[Calories: %s, Distance: %s, Steps: %s Intensityid: %d]", + calorieStr.c_str(), distanceStr.c_str(), stepsStr.c_str(), + intensityid); + // 释放sportdata内存 +} #if 0 /*刷新 time 和 data */ void TraingCardPresenter::OnTickEvent() @@ -242,210 +262,228 @@ namespace OHOS } #endif #if 1 - void TraingCardPresenter::Notify(void) - { - // 未开启训练 直接退出 - if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) - return; +void TraingCardPresenter::Notify(void) { + // 如果未开启训练,直接退出 + if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) { + return; + } + + Control_Card cardId = static_cast(view_->GetCurrentPage()); + + switch (cardId) { + case Control_Card::CONTROL: { + UpdateTimeOfControl(); // 更新控制界面的时间 + break; + } + case Control_Card::DATA: { + UpdateDataView(); // 更新训练数据视图 + break; + } + default: + break; // 其他情况不处理 + } +} - // 刷新训练数据界面 现实时间 - GraphicService::GetInstance()->PostGraphicEvent(std::bind(&TrainingDataView::UpdataTime, TrainingDataView::GetInstance())); +void TraingCardPresenter::UpdateDataView() { + // 刷新计时 + UpdateTimeOfData(); - // 刷新训练数据界面 心率 卡路里 距离 步数 训练强度 目标完成度 - SportData *sportdata = TraingModel::GetInstance()->GetSportdata(); - GraphicService::GetInstance()->PostGraphicEvent(std::bind(&TraingCardPresenter::RefreshData, TraingCardPresenter::GetInstance(), sportdata)); - } + // 刷新训练数据视图,显示当前时间 + GraphicService::GetInstance()->PostGraphicEvent(std::bind( + &TrainingDataView::UpdataTime, TrainingDataView::GetInstance())); + + // 刷新训练数据:心率、卡路里、距离、步数、训练强度、目标完成度 + SportData *sportdata = TraingModel::GetInstance()->GetSportdata(); + RefreshData(sportdata); +} #endif - /* --------------------------------- 点击事件处理 --------------------------------- */ - bool TraingCardPresenter::OnClick(UIView &view, const ClickEvent &event) - { - const std::string viewId = view.GetViewId(); - - // 定义点击事件映射 - static const std::unordered_map> actionMap = { - // 暂停按键 - {BUTTONSTOP, [&]() - { - auto currentState = TraingModel::GetInstance()->GetSportState(); - if (currentState == ExerciseState::Continue || currentState == ExerciseState::Start) - { - handlePauseState(); - } - else if (currentState == ExerciseState::Pause) - { - handleContinueState(); - } - }}, - // 结束按键 - {BUTTONEND, [&]() - { - ControlSensor(ExerciseState::Pause); - TraingCardView::GetInstance()->SetPopupViewStatus(EndPopup, true); - TraingCardView::GetInstance()->RefreshEndView(); - }}, - // 确定结束 - {BUTTONEXIT, [&]() - { - handleEndState(); - }}, - // 返回 - {BUTTONBACK, [&]() - { - ControlSensor(ExerciseState::Continue); - TraingCardView::GetInstance()->SetPopupViewStatus(EndPopup, false); - }}, - // 确定达到目标 - {BUTTONWINOK, [&]() - { - TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, false); - TraingCardView::GetInstance()->GetAnimator()->Stop(); - }}, - // 确定心率提醒 - {BUTTONNOTE, [&]() - { - TraingCardView::GetInstance()->SetPopupViewStatus(HeartPopup, false); - }}, - }; - - // 查找并执行对应的操作 - auto it = actionMap.find(viewId); - if (it != actionMap.end()) - { - it->second(); // 执行操作 - return true; - } - - return false; // 没有匹配的操作 +/* --------------------------------- 点击事件处理 + * --------------------------------- */ +bool TraingCardPresenter::OnClick(UIView &view, const ClickEvent &event) { + const std::string viewId = view.GetViewId(); + + // 定义点击事件映射 + static const std::unordered_map> + actionMap = { + // 暂停按键 + {BUTTONSTOP, + [&]() { + auto currentState = TraingModel::GetInstance()->GetSportState(); + if (currentState == ExerciseState::Continue || + currentState == ExerciseState::Start) { + handlePauseState(); + } else if (currentState == ExerciseState::Pause) { + handleContinueState(); + } + }}, + // 结束按键 + {BUTTONEND, + [&]() { + ControlSensor(ExerciseState::Pause); + TraingCardView::GetInstance()->SetPopupViewStatus(EndPopup, true); + TraingCardView::GetInstance()->RefreshEndView(); + }}, + // 确定结束 + {BUTTONEXIT, [&]() { handleEndState(); }}, + // 返回 + {BUTTONBACK, + [&]() { + ControlSensor(ExerciseState::Continue); + TraingCardView::GetInstance()->SetPopupViewStatus(EndPopup, false); + }}, + // 确定达到目标 + {BUTTONWINOK, + [&]() { + TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, + false); + TraingCardView::GetInstance()->GetAnimator()->Stop(); + }}, + // 确定心率提醒 + {BUTTONNOTE, + [&]() { + TraingCardView::GetInstance()->SetPopupViewStatus(HeartPopup, + false); + }}, + }; + + // 查找并执行对应的操作 + auto it = actionMap.find(viewId); + if (it != actionMap.end()) { + it->second(); // 执行操作 + return true; + } + + return false; // 没有匹配的操作 +} +void TraingCardPresenter::OnSwipe(UISwipeView &view) { + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TempPresenter::OnSwipe "); + UNUSED(view); + return; +} +/* -------------------------------- 协议发起运动处理 + * -------------------------------- */ +bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { + if (cmd == nullptr) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid sport command"); + return false; + } + + switch (cmd->controlmd) { + case SETGOAL: + if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) { + // 设置目标:在非运动情况下设置 [单指令,执行后退出] + TraingModel::GetInstance()->SetSportTag( + static_cast(cmd->sportTagType), cmd->sportTag); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetSportTag is succeed!\r\n"); + return true; } - - /* -------------------------------- 协议发起运动处理 -------------------------------- */ - bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) - { - if (cmd == nullptr) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid sport command"); - return false; - } - - switch (cmd->controlmd) - { - case SETGOAL: - if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) - { - // 设置目标:在非运动情况下设置 [单指令,执行后退出] - TraingModel::GetInstance()->SetSportTag(static_cast(cmd->sportTagType), cmd->sportTag); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetSportTag is succeed!\r\n"); - return true; - } - break; - - case SENDDATA: - TraingModel::GetInstance()->SendLiveData(); // 发送实时数据 [单指令,执行后退出] - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SendLiveData is succeed!\r\n"); - return true; - default: - break; - } - - if (TraingCardView::GetInstance() == nullptr) - { - uapi_set_screen_on_api(); // 亮屏 - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD); - // 设置目标类型和项目有且只有一次 - switch (cmd->sportType) - { - case 0: - TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING); - OpenSensor(ExerciseClass::OUTDOOR); - break; - case 1: - TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING); - OpenSensor(ExerciseClass::OUTDOOR); - break; - case 2: - TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING); - OpenSensor(ExerciseClass::FREE_TRAINING); - break; - default: - break; - } - } - - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "cmd->sportType[%d],cmd->controlmd[%d],cmd->sportTagType[%d],cmd->sportTag[%d]\r\n", cmd->sportType, cmd->controlmd, cmd->sportTagType, cmd->sportTag); - - ExerciseState cmdState = static_cast(cmd->controlmd); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ExerciseState::End [%d]\r\n", cmdState); - - switch (cmdState) - { - case ExerciseState::End: - handleEndState(); - break; - case ExerciseState::Pause: - handlePauseState(); - break; - case ExerciseState::Continue: - handleContinueState(); - break; - case ExerciseState::Start: - handleStartState(); - break; - default: - break; - } - - return true; + break; + + case SENDDATA: + TraingModel::GetInstance() + ->SendLiveData(); // 发送实时数据 [单指令,执行后退出] + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SendLiveData is succeed!\r\n"); + return true; + default: + break; + } + + if (TraingCardView::GetInstance() == nullptr) { + uapi_set_screen_on_api(); // 亮屏 + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD); + // 设置目标类型和项目有且只有一次 + switch (cmd->sportType) { + case 0: + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING); + OpenSensor(ExerciseClass::OUTDOOR); + break; + case 1: + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING); + OpenSensor(ExerciseClass::OUTDOOR); + break; + case 2: + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING); + OpenSensor(ExerciseClass::FREE_TRAINING); + break; + default: + break; } + } + + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, + "cmd->sportType[%d],cmd->controlmd[%d],cmd->sportTagType[%d]," + "cmd->sportTag[%d]\r\n", + cmd->sportType, cmd->controlmd, cmd->sportTagType, + cmd->sportTag); + + ExerciseState cmdState = static_cast(cmd->controlmd); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ExerciseState::End [%d]\r\n", + cmdState); + + switch (cmdState) { + case ExerciseState::End: + handleEndState(); + break; + case ExerciseState::Pause: + handlePauseState(); + break; + case ExerciseState::Continue: + handleContinueState(); + break; + case ExerciseState::Start: + handleStartState(); + break; + default: + break; + } + + return true; +} - /*训练结束*/ - void TraingCardPresenter::handleEndState() - { - TraingModel::GetInstance()->SetSportState(ExerciseState::End); - ControlSensor(ExerciseState::End); +/*训练结束*/ +void TraingCardPresenter::handleEndState() { + TraingModel::GetInstance()->SetSportState(ExerciseState::End); + ControlSensor(ExerciseState::End); #if DATATEST - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA); - return; + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA); + return; #endif - // 是否达到训练目标 - if (TraingModel::GetInstance()->GetMomentum()) - { - // 进入训练详情 - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA); - NativeAbility::GetInstance().ClearSliceIdStack(); // 清空所有SLiceId栈元素 - } - else - { - // 进入训练记录 - NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING_RECORD); - NativeAbility::GetInstance().ClearSliceIdStack(); // 清空所有SLiceId栈元素 - } - } - - /*训练暂停*/ - void TraingCardPresenter::handlePauseState() - { - TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_RESUME); - TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE); - TraingModel::GetInstance()->SetSportState(ExerciseState::Pause); - PauseTimer(); - ControlSensor(ExerciseState::Pause); - } + // 是否达到训练目标 + if (TraingModel::GetInstance()->GetMomentum()) { + // 进入训练详情 + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA); + NativeAbility::GetInstance().ClearSliceIdStack(); // 清空所有SLiceId栈元素 + } else { + // 进入训练记录 + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING_RECORD); + NativeAbility::GetInstance().ClearSliceIdStack(); // 清空所有SLiceId栈元素 + } +} - /*训练继续*/ - void TraingCardPresenter::handleContinueState() - { - TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_PAUSE); - TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE); - TraingModel::GetInstance()->SetSportState(ExerciseState::Continue); - ResumeTimer(); - ControlSensor(ExerciseState::Continue); - } +/*训练暂停*/ +void TraingCardPresenter::handlePauseState() { + TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_RESUME); + TrainingControlView::GetInstance()->GetButton()->SetImageSrc( + SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE); + TraingModel::GetInstance()->SetSportState(ExerciseState::Pause); + PauseTimer(); + ControlSensor(ExerciseState::Pause); +} - /*训练开始*/ - void TraingCardPresenter::handleStartState() - { - ControlSensor(ExerciseState::Start); - TraingModel::GetInstance()->SetSportOpenWay(true); - } +/*训练继续*/ +void TraingCardPresenter::handleContinueState() { + TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_PAUSE); + TrainingControlView::GetInstance()->GetButton()->SetImageSrc( + SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE); + TraingModel::GetInstance()->SetSportState(ExerciseState::Continue); + ResumeTimer(); + ControlSensor(ExerciseState::Continue); +} +/*训练开始*/ +void TraingCardPresenter::handleStartState() { + ControlSensor(ExerciseState::Start); + TraingModel::GetInstance()->SetSportOpenWay(true); } + +} // namespace OHOS -- 2.17.1