#include "traingrecord/include/TraingRecordModel.h"
#include "vibrator_service.h"
#include <algorithm>
+#include <cmath>
#include <filesystem>
#include <fstream>
#include <limits.h>
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));
}
}
}
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<float>(sportdata->tag * 60);
+ // 计算完成度
+ goaldegree =
+ (static_cast<float>(sportdata->duration) / durationInSeconds) * 100;
+ break;
+ }
+ case ExerciseTag::Calories: {
+ // 计算目标完成度
+ goaldegree =
+ (static_cast<float>(sportdata->calories) / sportdata->tag) * 100;
+ break;
+ }
+ case ExerciseTag::Distance: {
+ float distanceInMeters = static_cast<float>(sportdata->tag * 1000);
+ // 计算目标完成度
+ goaldegree =
+ (static_cast<float>(sportdata->distance) / distanceInMeters) * 100;
+ break;
+ }
+ case ExerciseTag::Steps: {
+ // 计算目标完成度
+ goaldegree = (static_cast<float>(sportdata->steps) / sportdata->tag) * 100;
+ break;
+ }
+ default:
+ break;
+ }
+
+ return static_cast<int>(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; }
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<float>(currentdata) / sportdata->tag) * 100;
- return round(completeness); // 四舍五入
-}
/*
uint32_t src; // 训练来源:0 - 手表开启的训练,1 - APP开启的训练
uint32_t bt; // 运动类型:0 - 健身类,1 - 舞蹈类,2 - 休闲运动,3 - 球类,4
return true;
}
-} // namespace OHOS
\ No newline at end of file
+} // namespace OHOS