From 5b2e50e794830ba22a4de10a73e4bf09d63b5672 Mon Sep 17 00:00:00 2001 From: Caisking <3449750381@qq.com> Date: Fri, 18 Oct 2024 16:49:26 +0800 Subject: [PATCH] =?utf8?q?#1049=E6=89=8B=E8=A1=A8=EF=BC=8C=E8=BF=90?= =?utf8?q?=E5=8A=A8=E5=AE=A4=E5=A4=96=E8=B7=91=E6=AD=A5=EF=BC=8C500?= =?utf8?q?=E6=AD=A5=E7=9B=AE=E6=A0=87=E6=B5=8B=E8=AF=95=EF=BC=8C=E5=AE=9E?= =?utf8?q?=E9=99=85600=E6=AD=A5=EF=BC=8C=E7=9B=AE=E6=A0=87=E5=AE=8C?= =?utf8?q?=E6=88=90=E5=BA=A6100%=EF=BC=8C=E7=9B=AE=E6=A0=87=E5=AE=8C?= =?utf8?q?=E6=88=90=E5=BA=A6=E9=9C=80=E8=A6=81=E8=BF=9B=E8=A1=8C=E7=9B=B8?= =?utf8?q?=E5=BA=94=E5=A2=9E=E5=8A=A0120%;?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit #1048手表,运动室外跑步,1KM目标测试,实际1259米,目标完成度100%,目标完成度需要进行相应增加125%; #1052配速,步频,目标完成度,目标完成提示,都有问题; #1047手表,运动室外跑步,1KM目标测试,目标进度条在运动过程中不会变更,在运动达标时直接显示满 --- .../nativeui/traing/include/TraingModel.h | 1 + .../nativeui/traing/src/TraingModel.cpp | 137 +++++++++++------- .../training_card/src/TraingCardPresenter.cpp | 6 +- .../training_card/src/TraingCardView.cpp | 3 + 4 files changed, 94 insertions(+), 53 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h index c9548ad0f..701d7b6fb 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h @@ -323,6 +323,7 @@ public: int GetSportTagData(); /*获取对应的训练目标的值*/ int GetGoaldegree(); /*获取训练目标完成百分比*/ std::string GetTagStr(); /*获取训练目标Str*/ + void CheckSportTag(); /*配速表以及心率表配置*/ bool AddHeartRateData(uint32_t timestamp, uint8_t heartRate); 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 cdbc3598e..7bdc5e8d9 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp @@ -32,6 +32,7 @@ #include "traingrecord/include/TraingRecordModel.h" #include "vibrator_service.h" #include +#include #include #include #include @@ -450,29 +451,9 @@ void TraingModel::AnalysisData(cywee_activity_result_t *cyweeInfo) { ui_api_vibrate_once_func(); } if (TraingCardView::GetInstance()) { - TraingCardView::GetInstance()->SetPopupViewStatus(HeartPopup, true); - } - } - - // 训练目标检查 - if (sportdata->tag && !Gettagstuats) { - sportdata->goaldegree = GetGoaldegree(); - - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "sportdata->goaldegree %d", - sportdata->goaldegree); - if (sportdata->goaldegree >= 100) { //测试 - // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentdata%d", currentdata); - uapi_set_screen_on_api(); // 亮屏检测 - if (true != OHOS::ConfigModel::GetInstance()->GetDnotdisturb()) { - ui_api_vibrate_once_func(); - } - if (TraingCardView::GetInstance()) { - TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, true); - if (TraingCardView::GetInstance()->GetAnimator()) { - TraingCardView::GetInstance()->GetAnimator()->Start(); - } - } - Gettagstuats = true; + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&TraingCardView::SetPopupViewStatus, + TraingCardView::GetInstance(), HeartPopup, true)); } } } @@ -920,29 +901,90 @@ UIResourceTextId TraingModel::GetIntensity() { break; } } -/*获取当前的目标值*/ + +/* +时长:10~600分钟 实际出值 秒 +距离:1~20km 实际出值 m +步数:500~50000步 实际出值 步 +卡路里:100~1000kcal 实际出值 kcal +*/ + +/* 获取当前的目标值 */ int TraingModel::GetSportTagData() { + if (sportdata->tag == 0) + return 0; + + float goaldegree = 0.0f; // 初始化目标完成度 + + // 根据设置的训练目标类型去对应相对的数据 + switch (sportdata->sportTagType) { + case ExerciseTag::Duration: { + // 转换目标时长为秒 + float durationInSeconds = static_cast(sportdata->tag * 60); + // 计算完成度 + goaldegree = + (static_cast(sportdata->duration) / durationInSeconds) * 100; + break; + } + case ExerciseTag::Calories: { + // 计算目标完成度 + goaldegree = + (static_cast(sportdata->calories) / sportdata->tag) * 100; + break; + } + case ExerciseTag::Distance: { + float distanceInMeters = static_cast(sportdata->tag * 1000); + // 计算目标完成度 + goaldegree = + (static_cast(sportdata->distance) / distanceInMeters) * 100; + break; + } + case ExerciseTag::Steps: { + // 计算目标完成度 + goaldegree = (static_cast(sportdata->steps) / sportdata->tag) * 100; + break; + } + default: + break; + } + + return static_cast(round(goaldegree)); // 返回目标完成度 +} + +/* 获取训练目标完成百分比 */ +int TraingModel::GetGoaldegree() { + if (sportdata->tag == 0) { + return 0; // 如果目标值为 0,返回 0% + } + + int goaldegree = GetSportTagData(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "goaldegree %d", goaldegree); + return goaldegree; // 直接返回目标完成度 +} + +/* 训练目标校验 */ +void TraingModel::CheckSportTag() { if (sportdata->tag) { - // 根据设置的训练目标类型去对应相对的数据 - switch (sportdata->sportTagType) { - case ExerciseTag::Duration: - return int(sportdata->duration / 60); // 时间是秒需要转换为目标的分钟 - break; - case ExerciseTag::Calories: - return sportdata->calories; //卡路里是kcal - break; - case ExerciseTag::Distance: - return int(sportdata->distance / 1000); //距离是米需要转换为km - break; - case ExerciseTag::Steps: - return sportdata->steps; //步数是步 - break; - default: - break; + sportdata->goaldegree = GetGoaldegree(); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "sportdata->goaldegree %d", + sportdata->goaldegree); + if (sportdata->goaldegree >= 100 && !Gettagstuats) { + uapi_set_screen_on_api(); // 亮屏检测 + if (!OHOS::ConfigModel::GetInstance()->GetDnotdisturb()) { + ui_api_vibrate_once_func(); // 震动提示 + } + if (TraingCardView::GetInstance()) { + GraphicService::GetInstance()->PostGraphicEvent( + std::bind(&TraingCardView::SetPopupViewStatus, + TraingCardView::GetInstance(), GetTagPopup, true)); + auto animator = TraingCardView::GetInstance()->GetAnimator(); + if (animator) { + animator->Start(); // 启动动画 + } + } + Gettagstuats = true; // 更新状态 } } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Not set Sport_Tag!"); - return 0; // 添加默认返回值 } //获取运动时长 int TraingModel::GetDuration() { return sportdata->duration; } @@ -1001,16 +1043,7 @@ void TraingModel::printTrainingData(const Trainingdata &data) { printf("cir: %u\n", data.cir); printf("alt: %u\n", data.alt); } -/*获取训练目标完成百分比*/ -int TraingModel::GetGoaldegree() { - if (sportTag_ == 0) { - return 0; - } - int currentdata = GetSportTagData(); - float completeness = (static_cast(currentdata) / sportdata->tag) * 100; - return round(completeness); // 四舍五入 -} /* uint32_t src; // 训练来源:0 - 手表开启的训练,1 - APP开启的训练 uint32_t bt; // 运动类型:0 - 健身类,1 - 舞蹈类,2 - 休闲运动,3 - 球类,4 @@ -2025,4 +2058,4 @@ bool TraingModel::LoadDataFormJson(std::vector &sportDataVector) { return true; } -} // namespace OHOS \ No newline at end of file +} // namespace OHOS 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 a9675343b..10982c32a 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 @@ -293,6 +293,9 @@ void TraingCardPresenter::UpdateDataView() { GraphicService::GetInstance()->PostGraphicEvent(std::bind( &TrainingDataView::UpdataTime, TrainingDataView::GetInstance())); + // 更新目标完成度 + TraingModel::GetInstance()->CheckSportTag(); + // 刷新训练数据:心率、卡路里、距离、步数、训练强度、目标完成度 SportData *sportdata = TraingModel::GetInstance()->GetSportdata(); RefreshData(sportdata); @@ -377,7 +380,8 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) { // 获取当前的运动状态 ExerciseState currentState = TraingModel::GetInstance()->GetSportState(); ExerciseState cmdstate = static_cast(cmd->controlmd); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cmdstate:%d currentState:%d", cmdstate,currentState); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cmdstate:%d currentState:%d", + cmdstate, currentState); switch (cmd->controlmd) { case SETGOAL: diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp index 32fc92413..d032fb7a3 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp @@ -19,6 +19,7 @@ #include "traing/include/TraingModel.h" #include "uicomponents/UIComponents.h" + extern "C" { void InitTimer(); void DisableTimer(); @@ -414,6 +415,8 @@ void TraingCardView::SetPopupViewStatus(PopupType type, bool status) { cardview->SetVisible(!status); } popupView->SetVisible(status); + //刷新 + RootView::GetInstance()->Invalidate(); } /*结束弹窗界面*/ void TraingCardView::ShowEndView() { -- 2.17.1