From: 袁清梦 <3449750381@qq.com> Date: Mon, 22 Apr 2024 04:03:56 +0000 (+0000) Subject: Merge #65 into xts_origin from refs/changes/65/head X-Git-Tag: release_V1.2.70_20241020_135402~1154^2 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=b9e6fc771d032a233a3b5b82ea9c1d80b4d0beaa;p=mirrors%2FFD230.git Merge #65 into xts_origin from refs/changes/65/head Code review from 袁清梦 * refs/changes/65/head: (3 commits squashed) - 同步训练强度数据 - 优化训练蓝牙控制接口 - Merge branch 'xts_origin' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into xts_origin Signed-off-by: Caisking <3449750381@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/65 --- 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 758e4c3ef..8d1f6aa92 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h @@ -177,9 +177,9 @@ namespace OHOS std::string start_date; // 训练开始日期 std::string start_time; // 训练开始时间 std::string end_time; // 训练结束时间 - Exercisetype sportType; // 训练类型 + Exercisetype sportType; // 训练类型(0:健身类 1:跳舞类 2:休闲运动 3:球类 4:水上运动:5:冰上运动:6:极限运动:7:其他) UIResourceTextId sportId; // 训练Id - ExerciseTag sportTag; // 训练目标类型 + ExerciseTag sportTag; // 训练目标类型(0: 距离 1:时长 2:卡路里 3:步数) void Initialize() { @@ -231,17 +231,17 @@ namespace OHOS /*设置运动类型*/ void SetSportType(Exercisetype type); /*获取运动类型*/ - Exercisetype GetSporType(); + Exercisetype GetSportType(); /*设置运动项目*/ void SetSportEvent(UIResourceTextId id); /*获取运动项目*/ UIResourceTextId GetSportEvent(); + /*获取运动项目Id*/ + ExerciseClass GetSportId(); /*设置运动状态*/ void SetSportState(ExerciseState state); /*获取运动状态*/ ExerciseState GetSportState(); - /*获取运动类型*/ - ExerciseClass GetSportType(); /*解析传输过来的数据*/ void AnalysisData(cywee_activity_result_t *cyweeInfo); /*获取训练数据*/ @@ -262,6 +262,10 @@ namespace OHOS ExerciseTag GetSportTagtype(); /*设置训练强度*/ void SetIntensity(int heart); + /*获取训练强度STR*/ + UIResourceTextId GetIntensity(); + /*获取对应的训练目标的值*/ + int GetSportTypeData(); std::string GetStartTiemStr(); std::string GetEndTiemStr(); @@ -277,12 +281,15 @@ namespace OHOS UIResourceTextId sportId_ = STR_EXTREME_SPORTS; // 训练项目 Exercisetype sportType_ = Exercisetype::FITNESS; // 训练类型 ExerciseState sportState_ = ExerciseState::General; // 训练状态 - ExerciseTag sportTag_ = ExerciseTag::Distance; // 训练目标类型 + ExerciseTag sportTagType_ = ExerciseTag::Distance; // 训练目标类型 - int tag_ = 0; // 训练目标 + int sportTag_ = 0; // 训练目标 int totalHeartRate = 0; int countHeartRate = 0; - bool gettagstuats{false}; + bool gettagstuats{false}; // 训练达标标志位 + bool Startstate{false}; // 开始训练标志位 + bool Endstate{false}; // 结束训练标志位 + /*std::unique_ptr sportdata;*/ // 使用 std::unique_ptr 管理 SportData 对象 }; } 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 e788d909a..50dfab9af 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp @@ -10,7 +10,8 @@ #include "components/ui_button.h" #include "traing/include/TraingModel.h" #include "traing/Training_UiConfig.h" - +#include // 包含数学函数库,用于四舍五入 +#include // 包含字符串处理库,用于使用 std::to_string namespace OHOS { @@ -92,7 +93,7 @@ namespace OHOS labelustrong->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); labelnote->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f)); - TraingModel::GetInstance()->InitLabel(labeltag, 146, 292, 240, 60, "label18", "230%", DEFAULT_VECTOR_FONT_FILENAME, 40); + TraingModel::GetInstance()->InitLabel(labeltag, 146, 292, 240, 60, "label18", "--", DEFAULT_VECTOR_FONT_FILENAME, 40); labeltag->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff)); TraingModel::GetInstance()->InitLabel(labeltime, 146, 418, 240, 60, "label14", "05:45:46", DEFAULT_VECTOR_FONT_FILENAME, 40); labeltime->SetTextColor(Color::GetColorFromRGBA(0xff, 0x8a, 0x36, 0xff)); @@ -269,8 +270,15 @@ namespace OHOS labelduration->SetText(durationStr.c_str()); // 运动目标 - labeltag->SetText("100%"); // 暂时设置为默认 - + if (enddata && enddata->tag) + { + // labeltag->SetText("100%"); // 暂时设置为默认 + int currentdata = TraingModel::GetInstance()->GetSportTypeData(); + float completeness = (currentdata / enddata->tag) * 100; + completeness = round(completeness); // 四舍五入? + std::string tagStr = std::to_string(completeness) + "%"; + labeltag->SetText(tagStr.c_str()); + } // 运动时长 uint64_t time = TraingModel::GetInstance()->GetTrainingTime(); std::string timeStr = TraingModel::GetInstance()->AnalysisTimestamp(time); @@ -281,12 +289,13 @@ namespace OHOS labelmile->SetText(mileStr.c_str()); // 平均心率 - int heart = TraingModel::GetInstance()->CalculateAverageHeartRate(155); // 设置一个测试值 - std::string heartStr = std::to_string(heart); + // int heart = TraingModel::GetInstance()->CalculateAverageHeartRate(155); // 设置一个测试值 + std::string heartStr = std::to_string(enddata->avgheart); labelheart->SetText(heartStr.c_str()); // 训练强度 - labelstrong->SetText("中等强度"); + UIResourceTextId intensityid = TraingModel::GetInstance()->GetIntensity(); + labelstrong->SetTextId(intensityid); } void TraingEnddataView::OnStart() 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 474958fb3..280096327 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,15 @@ #define BLETEST 0 #define HARD_OFF 1 #define TRAINING_PATH "user/userdata/sportdata/" + +#define MAX_HEART_RATE 220 +#define AGE_THRESHOLD 59 +#define LOW_INTENSITY_THRESHOLD 59 +#define MEDIUM_INTENSITY_LOWER_THRESHOLD 60 +#define MEDIUM_INTENSITY_UPPER_THRESHOLD 69 +#define HIGH_INTENSITY_LOWER_THRESHOLD 70 +#define HIGH_INTENSITY_UPPER_THRESHOLD 79 + extern "C" errcode_t uapi_get_timestampe_ms(uint64_t *tm); extern "C" void custom_VibratorFunc(OHOS::VibratorType vibratorType); @@ -424,7 +433,7 @@ namespace OHOS sportType_ = type; } /*获取运动类型*/ - Exercisetype TraingModel::GetSporType() + Exercisetype TraingModel::GetSportType() { return sportType_; } @@ -438,8 +447,8 @@ namespace OHOS { return sportId_; } - /*获取运动类型*/ - ExerciseClass TraingModel::GetSportType() + /*获取运动项目*/ + ExerciseClass TraingModel::GetSportId() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " GetSportType %d", sportId_); // 设置结构体里面的运动类型 @@ -474,7 +483,7 @@ namespace OHOS void TraingModel::AnalysisData(cywee_activity_result_t *cyweeInfo) { // 不同的运动类型解析不同的数据 - ExerciseClass type = GetSportType(); + ExerciseClass type = GetSportId(); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " AnalysisData %d", type); // 通用数据 sportdata->calories = cyweeInfo->calories; @@ -504,45 +513,15 @@ namespace OHOS if (sportdata->tag && (!gettagstuats)) { // 根据设置的训练目标类型去对应相对的数据 - switch (sportdata->sportTag) + int currentdata = GetSportTypeData(); + if (currentdata >= sportdata->tag) { - case ExerciseTag::Duration: - break; - case ExerciseTag::Calories: - if (sportdata->calories >= sportdata->tag) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Calories"); - uapi_set_screen_on_api(); // 亮屏检测 - custom_VibratorFunc(VibratorType::VIBRATOR_TYPE_TWO); - TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, true); - TraingCardView::GetInstance()->GetAnimator()->Start(); - gettagstuats = true; - } - break; - case ExerciseTag::Distance: - if (sportdata->distance >= sportdata->tag) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Distance"); - uapi_set_screen_on_api(); // 亮屏检测 - custom_VibratorFunc(VibratorType::VIBRATOR_TYPE_TWO); - TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, true); - TraingCardView::GetInstance()->GetAnimator()->Start(); - gettagstuats = true; - } - break; - case ExerciseTag::STEP: - if (sportdata->steps >= sportdata->tag) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "STEP"); - uapi_set_screen_on_api(); // 亮屏检测 - custom_VibratorFunc(VibratorType::VIBRATOR_TYPE_TWO); - TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, true); - TraingCardView::GetInstance()->GetAnimator()->Start(); - gettagstuats = true; - } - break; - default: - break; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "currentdata%d", currentdata); + uapi_set_screen_on_api(); // 亮屏检测 + custom_VibratorFunc(VibratorType::VIBRATOR_TYPE_TWO); + TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, true); + TraingCardView::GetInstance()->GetAnimator()->Start(); + gettagstuats = true; } } } @@ -576,16 +555,22 @@ namespace OHOS return; } ExerciseState currentState = GetSportState(); // 获取当前运动状态 - if (currentState == ExerciseState::Start) + /*增加标志位互斥保障"开始""结束"的唯一性操作*/ + if (currentState == ExerciseState::Start && (!Startstate)) { sportdata->Reset(); // 重置结构体 + + /*将Model的成员变量赋值到结构体里面*/ sportdata->starttime = time; - if (tag_) + sportdata->sportType = sportType_; // 训练类型 + gettagstuats = false; // 重置训练达标标志位 + if (sportTag_) // 有值才设置[训练目标] { - // 有值才设置 - sportdata->sportTag = sportTag_; - sportdata->tag = tag_; + + sportdata->sportTag = sportTagType_; + sportdata->tag = sportTag_; } + char *start_date = (char *)malloc(9 * sizeof(char)); // 分配内存给start_date if (uapi_get_YYMMDD_Time(start_date, '/') != ERRCODE_SUCC) { @@ -604,13 +589,14 @@ namespace OHOS free(start_time); // 释放内存 return; } - // PRINT("start_time [%s]\r\n", start_time); sportdata->start_time = std::string(start_time); free(start_time); // 释放内存 - PRINT("sportdata->start_time [%s]\r\n", (sportdata->start_time).c_str()); + + Startstate = true; + Endstate = false; // 确保"开始"和"结束"状态互斥 } - else if (currentState == ExerciseState::End) + else if (currentState == ExerciseState::End && (!Endstate)) { sportdata->endtime = time; @@ -624,20 +610,12 @@ namespace OHOS // PRINT("end_time [%s]\r\n", end_time); sportdata->end_time = std::string(end_time); free(end_time); // 释放内存 - PRINT("sportdata->end_time [%s]\r\n", (sportdata->end_time).c_str()); + + Startstate = false; + Endstate = true; } } -#if 0 - std::string TraingModel::GetStartTiemStr() - { - return starttime_; - } - std::string TraingModel::GetEndTiemStr() - { - return endtime_; - } -#endif // 获取训练时长时间戳 uint32_t TraingModel::GetTrainingTime() { @@ -675,8 +653,8 @@ namespace OHOS void TraingModel::SetSportTag(ExerciseTag tagtpye, int tag) { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "tagtpye[%d] tag[%d]", tagtpye, tag); - sportTag_ = tagtpye; - tag_ = tag; + sportTagType_ = tagtpye; + sportTag_ = tag; } /* 设置训练强度 */ @@ -693,21 +671,19 @@ namespace OHOS 超高强度=最高心率*80%以上 */ int age = ConfigModel::GetInstance()->GetUserAge(); - int maxHeartRate = 220 - age; - + int maxHeartRate = MAX_HEART_RATE - age; double intensityPercentage = (heart / (double)maxHeartRate) * 100; - - if (intensityPercentage < 59) + if (intensityPercentage < LOW_INTENSITY_THRESHOLD) { // 较低强度 sportdata->intensity = LOW_INTENSITY; } - else if (intensityPercentage >= 60 && intensityPercentage <= 69) + else if (intensityPercentage >= MEDIUM_INTENSITY_LOWER_THRESHOLD && intensityPercentage <= MEDIUM_INTENSITY_UPPER_THRESHOLD) { // 中等强度 sportdata->intensity = MEDIUM_INTENSITY; } - else if (intensityPercentage >= 70 && intensityPercentage <= 79) + else if (intensityPercentage >= HIGH_INTENSITY_LOWER_THRESHOLD && intensityPercentage <= HIGH_INTENSITY_UPPER_THRESHOLD) { // 高等强度 sportdata->intensity = HIGH_INTENSITY; @@ -718,6 +694,53 @@ namespace OHOS sportdata->intensity = VERY_HIGH_INTENSITY; } } + /*获取训练强度STR*/ + UIResourceTextId TraingModel::GetIntensity() + { + switch (sportdata->intensity) + { + case LOW_INTENSITY: + return UIResourceTextId::STR_LOWER_STRENGTH; + break; + case MEDIUM_INTENSITY: + return UIResourceTextId::STR_MEDIUM_STRENGTH; + break; + case HIGH_INTENSITY: + return UIResourceTextId::STR_HIGH_STRENGTH; + break; + case VERY_HIGH_INTENSITY: + return UIResourceTextId::STR_ULTRA_HIGH_STRENGTH; + break; + default: + break; + } + } + /*获取对应的训练目标的值*/ + int TraingModel::GetSportTypeData() + { + if (sportTag_) + { + // 根据设置的训练目标类型去对应相对的数据 + switch (sportdata->sportTag) + { + case ExerciseTag::Duration: + return sportdata->duration; + break; + case ExerciseTag::Calories: + return sportdata->calories; + break; + case ExerciseTag::Distance: + return sportdata->distance; + break; + case ExerciseTag::STEP: + return sportdata->steps; + break; + default: + break; + } + } + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Not set Sport_Tag!"); + } /* -------------------------------------------------------------------------- */ #if TIMER /* 时间显示 */ @@ -976,7 +999,6 @@ namespace OHOS } } #endif - fseek(fp, 0, SEEK_SET); fclose(fp); return 1; diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp index 537782d46..69fdc59e8 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp @@ -80,8 +80,8 @@ namespace OHOS if (strcmp(view.GetViewId(), BUTTONGO) == 0) { NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD); - // 获取运动类型 - ExerciseClass type = TraingModel::GetInstance()->GetSportType(); + // 获取运动项目 + ExerciseClass type = TraingModel::GetInstance()->GetSportId(); // 开启对应的运动 TraingCardPresenter::GetInstance()->OpenSensor(type); } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp index 8040a22b5..f936c450a 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp @@ -92,7 +92,8 @@ namespace OHOS { NativeAbility::GetInstance().EnterSlice(VIEW_TRAININGMORE); } - + // 快捷训练都属于健身类 + TraingModel::GetInstance()->SetSportType(Exercisetype::FITNESS); return true; } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp index 13f7d8cfe..f57940196 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp @@ -123,7 +123,7 @@ namespace OHOS // TraingModel::GetInstance()->SetSportTag(ExerciseTag::STEP, 10); // 测试 PRINT("GetButtonIdFromCard:%d tag:%d \r\n", CardID, tag); NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD); - ExerciseClass type = TraingModel::GetInstance()->GetSportType(); + ExerciseClass type = TraingModel::GetInstance()->GetSportId(); TraingCardPresenter::GetInstance()->OpenSensor(type); } break; diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardView.h index 604c5be2d..a8e0bf083 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardView.h @@ -81,7 +81,7 @@ namespace OHOS void ShowGetTagView(); void ShowEndView(); bool RefreshEndView(); - UIView *GetTraingCrad(); + UICrossView *GetTraingCrad(); int GetCurrentPage(); void SetPopupViewStatus(PopupType type, bool status); UIImageAnimatorView *GetAnimator(); diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TrainingDetailView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TrainingDetailView.h index 34ab3e167..e961bbe0b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TrainingDetailView.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TrainingDetailView.h @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-04-22 09:43:01 + * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TrainingDetailView.h + */ #ifndef _TrainingDetail_VIEW_H #define _TrainingDetail_VIEW_H @@ -41,10 +47,10 @@ namespace OHOS void PreLoad(void) override; void UnLoad(void) override; - UILabelExt *GetMileLabel(); UILabelExt *GetStepLabel(); UILabelExt *GetCalorieLabel(); + UILabelButtonExt *Get_Intensity_Button(); private: UIView::OnDragListener *draglistener{nullptr}; 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 d3721401e..fd78117d9 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 @@ -19,6 +19,8 @@ extern "C" void do_cywee_service_check_msg(int cmd, int data[]); extern "C" void custom_VibratorFunc(OHOS::VibratorType vibratorType); #define MAXSPORTID 176 +#define DEFAULT_DASH "--" + extern "C" { void InitTimer(); @@ -168,8 +170,6 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sportdata is null"); return; } - PRINT("sportdata->tag[%d] sportdata->sportTag[%d]\r\n", sportdata->tag, sportdata->sportTag); - std::string distanceStr; if (sportdata->distance != 0) { @@ -180,22 +180,21 @@ namespace OHOS } else { - distanceStr = "--"; + distanceStr = DEFAULT_DASH; } - std::string durationStr = std::to_string(sportdata->duration); - std::string heartStr = (sportdata->heart != 0) ? std::to_string(sportdata->heart) : "--"; - std::string stepsStr = (sportdata->steps != 0) ? std::to_string(sportdata->steps) : "--"; - std::string calorieStr = (sportdata->calories != 0) ? std::to_string(sportdata->calories) : "--"; - - 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()); + 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(); + TrainingDetailView::GetInstance()->Get_Intensity_Button()->SetFontId(intensityid); + 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_LOGE(WEARABLE_LOG_MODULE_APP, "[Calories: %s, Distance: %s, Steps: %s]", calorieStr.c_str(), distanceStr.c_str(), stepsStr.c_str()); - // 释放sportdata内存 } /*刷新time和data*/ @@ -306,7 +305,57 @@ namespace OHOS break; } - ControlSensor(static_cast(cmd->controlmd)); + ExerciseState cmdState = static_cast(cmd->controlmd); + if (TraingCardView::GetInstance()->GetTraingCrad()->GetCurrentPageId() != Control_Card::CONTROL && cmdState != ExerciseState::Start) + { + // 跳转卡片界面 + TraingCardView::GetInstance()->GetTraingCrad()->SetHorCurrentPage(Control_Card::CONTROL); + } + + // 结束 + if (cmdState == ExerciseState::End) + { + TraingModel::GetInstance()->SetSportState(ExerciseState::End); + ControlSensor(ExerciseState::End); + if (TraingCardView::GetInstance()->RefreshEndView()) + { + // 进行存储操作? + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA); + } + else + { + NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE); + } + return true; + } + // 暂停和恢复 + if (cmdState == ExerciseState::Continue || cmdState == ExerciseState::Pause) + { + // 开始状态 + if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Start || TraingModel::GetInstance()->GetSportState() == ExerciseState::Continue) + { + TrainingControlView::GetInstance()->GetLabel()->SetText("ç»§ç»­"); + TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE); + // 设置为暂停状态 + TraingModel::GetInstance()->SetSportState(ExerciseState::Pause); + // 暂停计时器 + PauseTimer(); + // 暂停运动库 + ControlSensor(ExerciseState::Pause); + } + // 暂停状态 + if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Pause) + { + TrainingControlView::GetInstance()->GetLabel()->SetText("暂停"); + TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE); + // 设置为继续状态 + TraingModel::GetInstance()->SetSportState(ExerciseState::Continue); + // 恢复计时器 + ResumeTimer(); + // 恢复运动库 + ControlSensor(ExerciseState::Continue); + } + } return true; } 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 bb1c894e7..cd91f93ca 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 @@ -79,7 +79,7 @@ namespace OHOS // swipe_->HorAdd(DetailView); swipe_->VerAdd(DetailView, UICrossView::VPage::DOWN_PAGE); - swipe_->SetHorCurrentPage(Control_Card::CONTROL); + swipe_->SetHorCurrentPage(Control_Card::DATA); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingCardView::InitPage over"); } @@ -444,7 +444,7 @@ namespace OHOS } /*获取卡片View单例*/ - UIView *TraingCardView::GetTraingCrad() + UICrossView *TraingCardView::GetTraingCrad() { return swipe_; } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDetailView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDetailView.cpp index f607d46cc..3a4e259b2 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDetailView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDetailView.cpp @@ -144,5 +144,8 @@ namespace OHOS { return calorielabel; } - + UILabelButtonExt *TrainingDetailView::Get_Intensity_Button() + { + return intensity_button; + } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/Training_CardPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/Training_CardPresenter.cpp index c4334e3b9..d3afb26b8 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/Training_CardPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/Training_CardPresenter.cpp @@ -54,9 +54,8 @@ namespace OHOS NativeAbility::GetInstance().EnterSlice(VIEW_TRAININGMORE); // NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE); } - // 标记进入界面是主界面 - // TraingModel::GetInstance()->SetInterface(VIEW_MAIN); - + // 快捷训练都属于健身类 + TraingModel::GetInstance()->SetSportType(Exercisetype::FITNESS); return true; } } // namespace OHOS \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_list_more/src/TraingMorePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_list_more/src/TraingMorePresenter.cpp index 8c66c1187..a481f32dc 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_list_more/src/TraingMorePresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_list_more/src/TraingMorePresenter.cpp @@ -11,6 +11,7 @@ #include "traing/training_list_more/include/TraingMoreItemView.h" #include "traing/training_list_more/include/TraingMorePresenter.h" #include "traing/training_list_more/include/TraingMoreView.h" +#include "traing/include/TraingModel.h" // #include "TraingMoreView.h" namespace OHOS @@ -89,6 +90,46 @@ namespace OHOS TraingMoreItemView *itemView = static_cast(&view); AppViewId viewId = itemView->GetTraingMoreIndex(); WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistPresenter::OnClick viewid = %d\n", viewId); + /* + VIEW_TRAININGLIMIT, // 极限运动列表 + VIEW_TRAININGICE, // 冰上运动列表 + VIEW_TRAININGFITNESS, // 健身运动列表 + VIEW_TRAININGDANCE, // 舞蹈运动列表 + VIEW_TRAININGREST, // 休闲运动列表 + VIEW_TRAININGBALL, // 球类运动列表 + VIEW_TRAININGAQUATIC, // 水上运动列表 + VIEW_TRAININGOTHER, // 其他列表 + */ + // 设置训练类型 + switch (viewId) + { + case VIEW_TRAININGLIMIT: + TraingModel::GetInstance()->SetSportType(Exercisetype::EXTREME); + break; + case VIEW_TRAININGICE: + TraingModel::GetInstance()->SetSportType(Exercisetype::ICE); + break; + case VIEW_TRAININGFITNESS: + TraingModel::GetInstance()->SetSportType(Exercisetype::FITNESS); + break; + case VIEW_TRAININGDANCE: + TraingModel::GetInstance()->SetSportType(Exercisetype::DANCE); + break; + case VIEW_TRAININGREST: + TraingModel::GetInstance()->SetSportType(Exercisetype::LEISURE); + break; + case VIEW_TRAININGBALL: + TraingModel::GetInstance()->SetSportType(Exercisetype::BALL); + break; + case VIEW_TRAININGAQUATIC: + TraingModel::GetInstance()->SetSportType(Exercisetype::WATER); + break; + case VIEW_TRAININGOTHER: + TraingModel::GetInstance()->SetSportType(Exercisetype::OTHER); + break; + default: + break; + } if (viewId < VIEW_MAX_INTER_APP) { NativeAbility::GetInstance().ChangeSlice(viewId);