From: Caisking <3449750381@qq.com> Date: Thu, 3 Oct 2024 03:54:16 +0000 (+0800) Subject: 训练:增加状态以及数据保存 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=9a9f01797953e26d7722d0ff1419f2d814017a4f;p=mirrors%2FFD230.git 训练:增加状态以及数据保存 --- 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 e9a8e3393..1a6fb97e3 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp @@ -274,8 +274,11 @@ std::string TraingModel::GetSportIcon(Exercisetype sporttype) { /*设置运动Id*/ void TraingModel::SetSportEvent(UIResourceTextId id) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " SetSportType %d", sportId_); - IsSpecialSport(id); // 设置特殊性 - sportId_ = id; + //需要是结束开启的运动才重新配置 + if (sportState_ == ExerciseState::General) { + IsSpecialSport(id); // 设置特殊性 + sportId_ = id; + } } /*获取运动Id*/ UIResourceTextId TraingModel::GetSportEvent() { @@ -1014,69 +1017,69 @@ int TraingModel::GetGoaldegree() { 超高强度 uint32_t cir; // 圈数 uint32_t alt; // 最高海拔高度 */ /*保存数据*/ -bool TraingModel::SaveSportData() { - - // 配置训练存储状态 - uapi_dev_runtime_set_train_storage_status(1); - - Trainingdata data; - data.src = Openingway; - data.bt = static_cast(sportdata->sportType); - data.ty = static_cast( - GetBleSportId(sportdata->sportType, sportdata->sportId)); - data.st = static_cast(sportdata->starttime); - data.sp = static_cast(sportdata->endtime); - data.tgt = static_cast(sportdata->sportTagType); - data.tg = static_cast(sportdata->tag); - data.pg = static_cast(sportdata->goaldegree); - data.du = static_cast(sportdata->duration); - data.ca = static_cast(sportdata->calories * 10); - data.di = static_cast(sportdata->distance); - data.hr = static_cast(sportdata->avgheart); - data.stp = static_cast(sportdata->steps); - data.ti = static_cast(sportdata->intensity); - /* 230 目前不支持【圈数】【最高海拔高度】 */ - data.cir = 0; - data.alt = 0; - /* 配速相关 */ - data.apc = static_cast(sportdata->apc); - data.fpc = static_cast(sportdata->fpc); - data.spc = static_cast(sportdata->spc); - data.std = static_cast(sportdata->std); - data.cdc = static_cast(sportdata->cdc); - - // 保存数据到 bin - if (write_Trainingdata_data(data) != 1) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "write_Trainingdata_data is error!"); - uapi_dev_runtime_set_train_storage_status(0); // 恢复状态 - return false; - } - - // 保存数据到 json - if (!SaveDataToJson(sportdata)) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveDataToJson is error!"); - uapi_dev_runtime_set_train_storage_status(0); // 恢复状态 - return false; - } - - if (isspecialsport_) { - // 保存心率表 - if (!SaveHeartTable()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveHeartRateData is error!"); - uapi_dev_runtime_set_train_storage_status(0); // 恢复状态 - return false; - } - // 保存速度表 - if (!SavePaceTable()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveSpeedData is error!"); - uapi_dev_runtime_set_train_storage_status(0); // 恢复状态 - return false; - } - } - - // 如果所有操作成功,则恢复训练存储状态 - uapi_dev_runtime_set_train_storage_status(0); - return true; +bool TraingModel::SaveSportData() { + + // 配置训练存储状态 + uapi_dev_runtime_set_train_storage_status(1); + + Trainingdata data; + data.src = Openingway; + data.bt = static_cast(sportdata->sportType); + data.ty = static_cast( + GetBleSportId(sportdata->sportType, sportdata->sportId)); + data.st = static_cast(sportdata->starttime); + data.sp = static_cast(sportdata->endtime); + data.tgt = static_cast(sportdata->sportTagType); + data.tg = static_cast(sportdata->tag); + data.pg = static_cast(sportdata->goaldegree); + data.du = static_cast(sportdata->duration); + data.ca = static_cast(sportdata->calories * 10); + data.di = static_cast(sportdata->distance); + data.hr = static_cast(sportdata->avgheart); + data.stp = static_cast(sportdata->steps); + data.ti = static_cast(sportdata->intensity); + /* 230 目前不支持【圈数】【最高海拔高度】 */ + data.cir = 0; + data.alt = 0; + /* 配速相关 */ + data.apc = static_cast(sportdata->apc); + data.fpc = static_cast(sportdata->fpc); + data.spc = static_cast(sportdata->spc); + data.std = static_cast(sportdata->std); + data.cdc = static_cast(sportdata->cdc); + + // 保存数据到 bin + if (write_Trainingdata_data(data) != 1) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "write_Trainingdata_data is error!"); + uapi_dev_runtime_set_train_storage_status(0); // 恢复状态 + return false; + } + + // 保存数据到 json + if (!SaveDataToJson(sportdata)) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveDataToJson is error!"); + uapi_dev_runtime_set_train_storage_status(0); // 恢复状态 + return false; + } + + if (isspecialsport_) { + // 保存心率表 + if (!SaveHeartTable()) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveHeartRateData is error!"); + uapi_dev_runtime_set_train_storage_status(0); // 恢复状态 + return false; + } + // 保存速度表 + if (!SavePaceTable()) { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveSpeedData is error!"); + uapi_dev_runtime_set_train_storage_status(0); // 恢复状态 + return false; + } + } + + // 如果所有操作成功,则恢复训练存储状态 + uapi_dev_runtime_set_train_storage_status(0); + return true; } /*设置进入方式*/ void TraingModel::SetEntryType(ENTEYTYPE type) { entey_type = type; } 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 f5d312a86..4267ca3f3 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 @@ -22,6 +22,7 @@ extern "C" { void InitTimer(); void DisableTimer(); +void PauseTimer(); } namespace OHOS { @@ -70,11 +71,14 @@ static TraingCardView *g_pTraingCardView{nullptr}; TraingCardView::TraingCardView() { WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::TraingCardView"); - InitTimer(); // 开启计时器 - TraingModel::GetInstance()->SetSportState( - ExerciseState::Start); // 设置运动状态为开始 - TraingModel::GetInstance()->SetTimestamp(); - // uapi_add_sport_vote(); // 保护进程 + if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) { + InitTimer(); // 开启计时器 + TraingModel::GetInstance()->SetSportState( + ExerciseState::Start); // 设置运动状态为开始 + TraingModel::GetInstance()->SetTimestamp(); + // uapi_add_sport_vote(); // 保护进程 + } + g_pTraingCardView = this; } @@ -85,8 +89,14 @@ TraingCardView::~TraingCardView() { DeInit(); g_pTraingCardView = nullptr; - DisableTimer(); // 关闭计时器 - TraingModel::GetInstance()->SetTimestamp(); + if (TraingModel::GetInstance()->GetSportState() == ExerciseState::End) { + DisableTimer(); // 关闭计时器 + TraingModel::GetInstance()->SetTimestamp(); + } else { + TraingModel::GetInstance()->SetSportState(ExerciseState::Pause); + PauseTimer(); + TraingCardPresenter::GetInstance()->ControlSensor(ExerciseState::Pause); + } // uapi_remove_sport_vote(); // 移除 } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingControlView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingControlView.cpp index d8b1483b9..342cd287d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingControlView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingControlView.cpp @@ -1,141 +1,131 @@ #include "traing/training_card/include/TrainingControlView.h" -#include "traing/training_card/include/TraingCardView.h" -#include "common/image_cache_manager.h" -#include "components/ui_label_ext.h" -#include "ui_resource_string.h" #include "UiConfig.h" -#include "ui_resource_image.h" -#include +#include "common/image_cache_manager.h" #include "components/ui_button.h" +#include "components/ui_label_ext.h" +#include "string" +#include "traing/Training_UiConfig.h" #include "traing/include/TraingModel.h" +#include "ui_resource_image.h" +#include "ui_resource_string.h" #include "uicomponents/UIComponents.h" -#include "traing/Training_UiConfig.h" -#include "string" #include #include -namespace OHOS -{ - - static TrainingControlView *g_pTrainingControlView{nullptr}; - - TrainingControlView::TrainingControlView() - { - SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); - g_pTrainingControlView = this; - } - - TrainingControlView::~TrainingControlView() - { - RemoveAll(); - DeInit(); - g_pTrainingControlView = nullptr; - } - - TrainingControlView *TrainingControlView::GetInstance() - { - return g_pTrainingControlView; - } - - /* InitView:初始化界面*/ - void TrainingControlView ::InitView() - { - // 初始化Button - InitButton(buttonEnd, 91, 205, 110, 110, BUTTONEND); - // Set additional property - buttonEnd->SetImageSrc(SPORT_STOP_IMAGE, SPORT_STOP_IMAGE); - // 设置按钮的点击事件监听器为 TraingGPSPresenter 的实例 - buttonEnd->SetOnClickListener(static_cast(TraingCardPresenter::GetInstance())); - Add(buttonEnd); - InitButton(buttonStop, 261, 205, 110, 110, BUTTONSTOP); - // Set additional property - buttonStop->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE); - buttonStop->SetOnClickListener(static_cast(TraingCardPresenter::GetInstance())); - Add(buttonStop); - - // 初始化Lable - InitLabelExt(labeltitle, 83, 50, 300, 35, "label1", STR_TRAINING_IN_PROGRESS, DEFAULT_VECTOR_FONT_FILENAME, 30); - InitLabel(labeltimer, 45, 110, 360, 80, "label2", "00:00:00", DEFAULT_VECTOR_FONT_FILENAME, 65); - InitLabelExt(labelend, 81, 330, 130, 35, "label3", STR_FINISH, DEFAULT_VECTOR_FONT_FILENAME, 30); - InitLabelExt(labelstop, 251, 330, 130, 35, "label4", STR_PAUSE, DEFAULT_VECTOR_FONT_FILENAME, 30); - Add(labeltitle); - Add(labeltimer); - Add(labelend); - Add(labelstop); - - // 初始化Image - InitImageView(imagepoint, 193, 421, 80, 20, "image1", CONTROL_POINT_IMAGE); - Add(imagepoint); - } - - UILabelExt *TrainingControlView::GetLabel() - { - return labelstop; - } - - UIButton *TrainingControlView::GetButton() - { - return buttonStop; - } - - /* DeInit:删除组件 */ - void TrainingControlView::DeInit() - { - RemoveAll(); - if (labeltitle != nullptr) - { - labeltitle = nullptr; - } - if (labeltimer != nullptr) - { - delete labeltimer; - labeltimer = nullptr; - } - if (labelend != nullptr) - { - delete labelend; - labelend = nullptr; - } - if (labelstop != nullptr) - { - delete labelstop; - labelstop = nullptr; - } - - // 删除Button - if (buttonEnd != nullptr) - { - delete buttonEnd; - buttonEnd = nullptr; - } - if (buttonStop != nullptr) - { - delete buttonStop; - buttonStop = nullptr; - } - - // 删除Image - if (imagepoint != nullptr) - { - delete imagepoint; - imagepoint = nullptr; - } - } - - void TrainingControlView::PreLoad(void) - { - if (!viewiInitStatus) - { - InitView(); - viewiInitStatus = true; - } - } - - void TrainingControlView::UnLoad(void) {} - - UILabelExt *TrainingControlView::GetTimeLabel() - { - return labeltimer; - } +#include +namespace OHOS { + +static TrainingControlView *g_pTrainingControlView{nullptr}; + +TrainingControlView::TrainingControlView() { + SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); + g_pTrainingControlView = this; +} + +TrainingControlView::~TrainingControlView() { + RemoveAll(); + DeInit(); + g_pTrainingControlView = nullptr; +} + +TrainingControlView *TrainingControlView::GetInstance() { + return g_pTrainingControlView; +} + +/* InitView:初始化界面*/ +/* InitView:初始化界面 */ +void TrainingControlView::InitView() { + // 初始化 Button + InitButton(buttonEnd, 91, 205, 110, 110, BUTTONEND); + buttonEnd->SetImageSrc(SPORT_STOP_IMAGE, SPORT_STOP_IMAGE); + buttonEnd->SetOnClickListener(static_cast( + TraingCardPresenter::GetInstance())); + Add(buttonEnd); + + InitButton(buttonStop, 261, 205, 110, 110, BUTTONSTOP); + // Set additional property based on the sport state + ExerciseState state = TraingModel::GetInstance()->GetSportState(); + + if (state == ExerciseState::Pause) { + buttonStop->SetImageSrc(SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE); + } else { + buttonStop->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE); + } + + buttonStop->SetOnClickListener(static_cast( + TraingCardPresenter::GetInstance())); + Add(buttonStop); + + // 初始化 Label + InitLabelExt(labeltitle, 83, 50, 300, 35, "label1", STR_TRAINING_IN_PROGRESS, + DEFAULT_VECTOR_FONT_FILENAME, 30); + InitLabel(labeltimer, 45, 110, 360, 80, "label2", "00:00:00", + DEFAULT_VECTOR_FONT_FILENAME, 65); + InitLabelExt(labelend, 81, 330, 130, 35, "label3", STR_FINISH, + DEFAULT_VECTOR_FONT_FILENAME, 30); + InitLabelExt(labelstop, 251, 330, 130, 35, "label4", STR_PAUSE, + DEFAULT_VECTOR_FONT_FILENAME, 30); + + // 添加到视图中 + Add(labeltitle); + Add(labeltimer); + Add(labelend); + Add(labelstop); + + // 初始化 Image + InitImageView(imagepoint, 193, 421, 80, 20, "image1", CONTROL_POINT_IMAGE); + Add(imagepoint); +} + +UILabelExt *TrainingControlView::GetLabel() { return labelstop; } + +UIButton *TrainingControlView::GetButton() { return buttonStop; } + +/* DeInit:删除组件 */ +void TrainingControlView::DeInit() { + RemoveAll(); + if (labeltitle != nullptr) { + labeltitle = nullptr; + } + if (labeltimer != nullptr) { + delete labeltimer; + labeltimer = nullptr; + } + if (labelend != nullptr) { + delete labelend; + labelend = nullptr; + } + if (labelstop != nullptr) { + delete labelstop; + labelstop = nullptr; + } + + // 删除Button + if (buttonEnd != nullptr) { + delete buttonEnd; + buttonEnd = nullptr; + } + if (buttonStop != nullptr) { + delete buttonStop; + buttonStop = nullptr; + } + + // 删除Image + if (imagepoint != nullptr) { + delete imagepoint; + imagepoint = nullptr; + } } + +void TrainingControlView::PreLoad(void) { + if (!viewiInitStatus) { + InitView(); + viewiInitStatus = true; + } +} + +void TrainingControlView::UnLoad(void) {} + +UILabelExt *TrainingControlView::GetTimeLabel() { return labeltimer; } +} // namespace OHOS