From: 袁清梦 <3449750381@qq.com> Date: Tue, 16 Apr 2024 13:21:27 +0000 (+0000) Subject: Merge #17 into xts_origin from refs/changes/17/head X-Git-Tag: release_V1.2.70_20241020_135402~1184 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=700e9afb3cdffd3c7739c9f7808ded7c4d93ad94;p=mirrors%2FFD230.git Merge #17 into xts_origin from refs/changes/17/head Code review from 袁清梦 * refs/changes/17/head: (7 commits squashed) - 修改主界面上拉界面UI;删除视频表盘panda;优化训练结束以及弹窗UI;搭建训练结束数据处理 - Merge branch 'xts_origin' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into xts_origin - 优化部分交互逻辑 - 训练同步部分结束数据 - Merge branch 'xts_origin' of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into xts_origin - 增加训练数据获取;通用函数增加时间获取;删除快速访问结构体 - 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/17 --- 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 282677b76..629fb9b6d 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h @@ -47,25 +47,6 @@ #define GILROY_BOLD_FONT "./font_library/gilroy-bold-4.ttf" #define GILROY_MEDIUM_FONT "./font_library/gilroy-medium-2.ttf" -struct QuickTraining -{ - OHOS::UIResourceTextId training1_Text; - OHOS::UIResourceTextId training2_Text; - OHOS::UIResourceTextId training3_Text; - - std::string training1_Image; - std::string training2_Image; - std::string training3_Image; - - QuickTraining() - : training1_Text(OHOS::STR_EXERCISE_OUTDOORWALKING), - training2_Text(OHOS::STR_EXERCISE_OUTDOORBIKING), - training3_Text(OHOS::STR_EXERCISE_OUTDOORRUNNING), - training1_Image(OHOS::WALKING_60_IMAGE), - training2_Image(OHOS::RIDING_60_IMAGE), - training3_Image(OHOS::RUNNING_60_IMAGE) {} -}; - #ifdef __cplusplus extern "C" { @@ -168,14 +149,41 @@ namespace OHOS { uint64 starttime; // 开始时间时间戳 uint64 endtime; // 结束时间时间戳 + uint64 duration; // 训练时长 int goaldegree; // 目标完成度 int calories; // 训练卡路里 - int duration; // 训练时长 int steps; // 训练步数 int distance; // 训练距离 int intensity; // 训练强度 (0:较低强度 1:中等强度 2:高等强度 3:超高强度) int avgheart; // 训练平均心率 + std::string start_date; // 训练开始日期 + std::string start_time; // 训练开始时间 + std::string end_time; // 训练结束时间 + Exercisetype sportType; // 训练类型 UIResourceTextId sportId; // 训练Id + + void Initialize() + { + starttime = 0; + endtime = 0; + duration = 0; + goaldegree = 0; + calories = 0; + steps = 0; + distance = 0; + intensity = 1; + avgheart = 0; + start_date = nullptr; + start_time = nullptr; + end_time = nullptr; + sportType = Exercisetype::FITNESS; + sportId = UIResourceTextId::STR_EXTREME_SPORTS; + } + + void Reset() + { + Initialize(); // 调用初始化函数将数据重置为初始状态 + } }; class TraingModel @@ -194,8 +202,6 @@ namespace OHOS bool InitImageView(UIImageView *&imageView, int left, int top, int width, int height, const char *viewId, const char *imagePath); void InitList(); - void SetQuickTraining(QuickTraining *quickTraining); - QuickTraining *GetQuickTraining() const; /*定时器 */ std::string DisplayMotionDuration(); @@ -225,6 +231,10 @@ namespace OHOS std::string AnalysisTimestamp(uint64_t timestamp); /*获取运动总时长*/ uint32_t GetTrainingTime(); + + std::string GetStartTiemStr(); + std::string GetEndTiemStr(); + /*平均心率计算*/ int CalculateAverageHeartRate(int newHeartRate); @@ -232,12 +242,15 @@ namespace OHOS TraingModel(const TraingModel &) = delete; TraingModel &operator=(const TraingModel &) = delete; - std::string motionDuration; // 训练时长 + std::string motionDuration; // 显示训练时长 UIResourceTextId sportId_ = STR_EXTREME_SPORTS; // 训练项目 - Exercisetype sporttype_ = Exercisetype::FITNESS; // 训练类型 + Exercisetype sportType_ = Exercisetype::FITNESS; // 训练类型 ExerciseState sportstate_ = ExerciseState::General; // 训练状态 + // std::string startdate_{nullptr}; + // std::string starttime_{nullptr}; + // std::string endtime_{nullptr}; int totalHeartRate = 0; - int countHeartRate = 1; + int countHeartRate = 0; /*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 40e949ab9..bd64a6555 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp @@ -172,8 +172,8 @@ namespace OHOS labelsport->SetTextId(enddata->sportId); // 运动开始结束时间 - std::string startTimeStr = TraingModel::GetInstance()->AnalysisTimestamp(enddata->starttime); - std::string endTimeStr = TraingModel::GetInstance()->AnalysisTimestamp(enddata->endtime); + std::string startTimeStr = enddata->start_time; + std::string endTimeStr = enddata->end_time; std::string durationStr = startTimeStr + "-" + endTimeStr; labelduration->SetText(durationStr.c_str()); @@ -181,7 +181,7 @@ namespace OHOS labeltag->SetText("100%"); // 暂时设置为默认 // 运动时长 - uint32_t time = TraingModel::GetInstance()->GetTrainingTime(); + uint64_t time = TraingModel::GetInstance()->GetTrainingTime(); std::string timeStr = TraingModel::GetInstance()->AnalysisTimestamp(time); labeltime->SetText(timeStr.c_str()); 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 b22017bdd..64bd565b6 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp @@ -126,22 +126,12 @@ namespace OHOS static constexpr int16 NUM_TIME_MIN = 60; static constexpr int16 NUM_TIME_HOUR = 3600; static constexpr int32 NUM_TIME_DAY = 86400; - - SportData *sportdata = new SportData(); - #endif + SportData *sportdata = new SportData(); TraingModel ::TraingModel() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingModel::TraingModel()"); -#if CHECK - printf(" quickTraining_--training1_Text: %s\n", quickTraining_->training1_Text.c_str()); - printf(" quickTraining_--training1_Image: %s\n", quickTraining_->training1_Image.c_str()); - printf(" quickTraining_--training2_Text: %s\n", quickTraining_->training2_Text.c_str()); - printf(" quickTraining_--training2_Image: %s\n", quickTraining_->training2_Image.c_str()); - printf(" quickTraining_--training3_Text: %s\n", quickTraining_->training3_Text.c_str()); - printf(" quickTraining_--training3_Image: %s\n", quickTraining_->training3_Image.c_str()); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingModel::TraingModel()"); -#endif + // sportdata->Initialize(); // 初始化结构体 } TraingModel ::~TraingModel() { @@ -158,26 +148,6 @@ namespace OHOS { TraingSubscribeTopic(TOPIC_EVENT_ACTIVITY_UPDATE); // 进行消息订阅 } - /* -------------------------------------------------------------------------- */ - /*** - * @description: - * @param {QuickTraining} *quickTraining - * @brief 设置快捷训练 - */ - void TraingModel::SetQuickTraining(QuickTraining *quickTraining) - { - // quickTraining_ = quickTraining; - } - /*** - * @description: - * @return {quickTraining_} - * @brief 获取快捷训练 - */ - QuickTraining *TraingModel::GetQuickTraining() const - { - QuickTraining *quickTraining_ = new QuickTraining(); // 为quickTraining_赋初值 - return quickTraining_; - } /*** * @description: 初始化标签 * @param {UILabel} * @@ -360,10 +330,12 @@ namespace OHOS /*设置运动类型*/ void TraingModel::SetSportType(Exercisetype type) { + sportType_ = type; } /*获取运动类型*/ Exercisetype TraingModel::GetSporType() { + return sportType_; } /*设置运动Id*/ void TraingModel::SetSportEvent(UIResourceTextId id) @@ -381,6 +353,7 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " GetSportType %d", sportId_); // 设置结构体里面的运动类型 sportdata->sportId = sportId_; + sportdata->sportType = sportType_; switch (sportId_) { // 室外跑步 @@ -414,7 +387,7 @@ namespace OHOS WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " AnalysisData %d", type); // 通用数据 sportdata->calories = cyweeInfo->calories; - sportdata->duration = cyweeInfo->duration; + // sportdata->duration = cyweeInfo->duration; PRINT("normal sportdata->calories[%d],sportdata->duration[%d] \r\n", sportdata->calories, sportdata->duration); switch (type) { @@ -440,29 +413,76 @@ namespace OHOS { return sportdata->calories; } - /*设置时间戳*/ + /*设置时间*/ void TraingModel::SetTimestamp() { - // std::lock_guard lock(mutex); // 使用互斥锁确保线程安全 uint64_t time; - uapi_get_timestampe_ms(&time); + if (uapi_get_timestampe_ms(&time) != ERRCODE_SUCC) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp"); + return; + } ExerciseState currentState = GetSportState(); // 获取当前运动状态 - if (currentState == ExerciseState::Start) { sportdata->starttime = time; + + char *start_date = (char *)malloc(9 * sizeof(char)); // 分配内存给start_date + if (uapi_get_YYMMDD_Time(start_date, '/') != ERRCODE_SUCC) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get start date"); + free(start_date); // 释放内存 + return; + } + PRINT("start_date[%s]\r\n", start_date); + sportdata->start_date = std::string(start_date); + free(start_date); // 释放内存 + + char *start_time = (char *)malloc(9 * sizeof(char)); // 分配内存给start_time + if (uapi_get_HHMMSS_Time(start_time, ':', true) != ERRCODE_SUCC) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get start time"); + 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()); } else if (currentState == ExerciseState::End) { sportdata->endtime = time; - } - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " SetTimestamp [%d %lu]", currentState, time); + char *end_time = (char *)malloc(9 * sizeof(char)); // 分配内存给end_time + if (uapi_get_HHMMSS_Time(end_time, ':', true) != ERRCODE_SUCC) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get end time"); + free(end_time); // 释放内存 + return; + } + // 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()); + } + } +#if 0 + std::string TraingModel::GetStartTiemStr() + { + return starttime_; + } + std::string TraingModel::GetEndTiemStr() + { + return endtime_; } +#endif // 获取训练时长时间戳 uint32_t TraingModel::GetTrainingTime() { - return g_motionTimes; + return (sportdata->endtime - sportdata->starttime); } /*解析时间戳 返回例如:13:00:22*/ std::string TraingModel::AnalysisTimestamp(uint64_t timestamp) @@ -472,9 +492,14 @@ namespace OHOS int minutes = (timestamp % 3600000) / 60000; // 1分钟 = 60000毫秒 int seconds = (timestamp % 60000) / 1000; // 1秒 = 1000毫秒 + // 将小时、分钟、秒转换为字符串 + std::string hoursStr = std::to_string(hours); + std::string minutesStr = std::to_string(minutes); + std::string secondsStr = std::to_string(seconds); + // 格式化输出为 HH:MM:SS std::stringstream ss; - ss << std::setfill('0') << std::setw(2) << hours << ":" << std::setw(2) << minutes << ":" << std::setw(2) << seconds; + ss << std::setfill('0') << std::setw(2) << hoursStr << ":" << std::setw(2) << minutesStr << ":" << std::setw(2) << secondsStr; return ss.str(); } @@ -571,6 +596,7 @@ namespace OHOS return; } g_startCounting = NULL; + PRINT("g_motionTimes:%d\r\n", sportdata->duration); g_motionTimes = 0; WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DisableTimer!"); } 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 c475f049a..8f9231862 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp @@ -1,4 +1,9 @@ - +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-04-16 17:33:11 + * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp + */ #include "AppViewIDs.h" #include "components/ui_label_ext.h" @@ -17,18 +22,15 @@ namespace OHOS // 当前Presenter属性实例化的内存指针 static TraingPresenter *g_pTraingPresenter = nullptr; - QuickTraining *data = new QuickTraining; TraingPresenter::TraingPresenter() { - data = TraingModel::GetInstance()->GetQuickTraining(); g_pTraingPresenter = this; } TraingPresenter::~TraingPresenter() { g_pTraingPresenter = nullptr; - delete data; } TraingPresenter *TraingPresenter::GetInstance() @@ -74,24 +76,23 @@ namespace OHOS if (strcmp(view.GetViewId(), BUTTON1) == 0) { NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL); - TraingModel::GetInstance()->SetSportEvent(data->training1_Text); + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING); } if (strcmp(view.GetViewId(), BUTTON2) == 0) { NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL); - TraingModel::GetInstance()->SetSportEvent(data->training2_Text); + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING); } if (strcmp(view.GetViewId(), BUTTON3) == 0) { NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL); - TraingModel::GetInstance()->SetSportEvent(data->training3_Text); + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING); } if (strcmp(view.GetViewId(), BUTTONMORE) == 0) { NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE); } - delete data; return true; } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingView.cpp index f58023d61..747ca81da 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingView.cpp @@ -46,11 +46,9 @@ namespace OHOS static constexpr uint16_t BTNMORE_IMAGE_Y = 324; static TraingView *g_pTraingView{nullptr}; - static QuickTraining *data = new QuickTraining; TraingView::TraingView() { - data = TraingModel::GetInstance()->GetQuickTraining(); g_pTraingView = this; } @@ -58,7 +56,6 @@ namespace OHOS { DeInitView(); g_pTraingView = nullptr; - delete data; } TraingView *TraingView::GetInstance() { @@ -76,9 +73,9 @@ namespace OHOS // 初始化标签 TraingModel::GetInstance()->InitLabelExt(title_label, TITLE_LABEL_X, TITLE_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "title_label", STR_RAPID_TRAINING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE); - TraingModel::GetInstance()->InitLabelExt(btn1_label, BTN1_LABEL_X, BTN1_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu1_label", data->training1_Text, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE); - TraingModel::GetInstance()->InitLabelExt(btn2_label, BTN2_LABEL_X, BTN2_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu2_label", data->training2_Text, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE); - TraingModel::GetInstance()->InitLabelExt(btn3_label, BTN3_LABEL_X, BTN3_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu3_label", data->training3_Text, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE); + TraingModel::GetInstance()->InitLabelExt(btn1_label, BTN1_LABEL_X, BTN1_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu1_label", STR_EXERCISE_OUTDOORWALKING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE); + TraingModel::GetInstance()->InitLabelExt(btn2_label, BTN2_LABEL_X, BTN2_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu2_label", STR_EXERCISE_OUTDOORBIKING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE); + TraingModel::GetInstance()->InitLabelExt(btn3_label, BTN3_LABEL_X, BTN3_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btu3_label", STR_EXERCISE_OUTDOORRUNNING, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE); TraingModel::GetInstance()->InitLabelExt(btnmore_label, BTN2_LABEL_X, BTN3_LABEL_Y, LABEL_X_SIZE, LABEL_Y_SIZE, "btumore_label", STR_MORE, DEFAULT_VECTOR_FONT_FILENAME, LABEL_FONT_SIZE); return true; } @@ -114,15 +111,10 @@ namespace OHOS */ bool TraingView::AddImageView() { - const char *dataStr1 = (data->training1_Image).c_str(); - const char *dataStr2 = (data->training2_Image).c_str(); - const char *dataStr3 = (data->training3_Image).c_str(); - // const char *dataStr1 = WALKING_60_IMAGE; - // const char *dataStr2 = RUNNING_60_IMAGE; - // const char *dataStr3 = RIDING_60_IMAGE; - TraingModel::GetInstance()->InitImageView(btn1_image, BTN1_IMAGE_X, BTN1_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn1_image", dataStr1); - TraingModel::GetInstance()->InitImageView(btn2_image, BTN2_IMAGE_X, BTN2_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn2_image", dataStr2); - TraingModel::GetInstance()->InitImageView(btn3_image, BTN3_IMAGE_X, BTN3_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn3_image", dataStr3); + + TraingModel::GetInstance()->InitImageView(btn1_image, BTN1_IMAGE_X, BTN1_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn1_image", WALKING_60_IMAGE); + TraingModel::GetInstance()->InitImageView(btn2_image, BTN2_IMAGE_X, BTN2_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn2_image", RIDING_60_IMAGE); + TraingModel::GetInstance()->InitImageView(btn3_image, BTN3_IMAGE_X, BTN3_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btn3_image", RUNNING_60_IMAGE); TraingModel::GetInstance()->InitImageView(btnmore_image, BTNMORE_IMAGE_X, BTNMORE_IMAGE_Y, BTN_IMAGE_SIZE, BTN_IMAGE_SIZE, "btnmore_image", MORE_ICON_IMAGE); return true; } 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 bac9ee6d8..4423c08e9 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 @@ -170,11 +170,18 @@ namespace OHOS // 处理数据为空的情况 return; } - - double distance_km = sportdata->distance / 1000.0; // 转换为公里并保留两位小数 - std::stringstream ss; - ss << std::fixed << std::setprecision(2) << distance_km; - std::string distanceStr = ss.str(); + 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 = "--"; + } std::string durationStr = std::to_string(sportdata->duration); std::string stepsStr = (sportdata->steps != 0) ? std::to_string(sportdata->steps) : "--"; @@ -245,28 +252,13 @@ namespace OHOS ControlSensor(ExerciseState::End); if (TraingCardView::GetInstance()->RefreshEndView()) { + //进行存储操作? NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGWIN); } else { NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE); } -#if 0 - // 在点击事件中打印 SportData 对象之前,确保结束时间戳已经被设置 - if (TraingModel::GetInstance()->GetSportdata()->endtime == 0 && TraingModel::GetInstance()->GetSportState() == ExerciseState::End) - { - PRINT("RESET ENDTIMESTAMP\r\n"); - TraingModel::GetInstance()->SetTimestamp(); // 如果结束时间戳为0且当前为结束状态,再次调用 SetTimestamp 设置结束时间戳 - } - // 打印 SportData 中的数据 - SportData *sportData = TraingModel::GetInstance()->GetSportdata(); - - std::string formattedStartTime = TraingModel::GetInstance()->AnalysisTimestamp(sportData->starttime); - std::string formattedEndTime = TraingModel::GetInstance()->AnalysisTimestamp(sportData->endtime); - std::string formattedTimeRange = formattedStartTime + "-" + formattedEndTime; - - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "【SportData - StartTime: [%lu], EndTime: [%lu] %s】", sportData->starttime, sportData->endtime, formattedTimeRange.c_str()); -#endif } // 返回按键 if (strcmp(view.GetViewId(), BUTTONBACK) == 0) 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 544ca6141..bec50928d 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 @@ -1,3 +1,9 @@ +/*** + * @Date: 2024-04-15 10:55:58 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-04-16 17:36:17 + * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/Training_CardPresenter.cpp + */ #include "traing/training_card/include/Training_CardPresenter.h" #include "traing/training_card/include/Training_CardView.h" @@ -14,7 +20,7 @@ namespace OHOS { - static QuickTraining *data = new QuickTraining; + bool TraingOnClickListener::OnClick(UIView &view, const ClickEvent &event) { UNUSED(event); @@ -28,17 +34,17 @@ namespace OHOS if (strcmp(view.GetViewId(), BUTTON1) == 0) { NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL); - TraingModel::GetInstance()->SetSportEvent(data->training1_Text); + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING); } if (strcmp(view.GetViewId(), BUTTON2) == 0) { NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL); - TraingModel::GetInstance()->SetSportEvent(data->training2_Text); + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING); } if (strcmp(view.GetViewId(), BUTTON3) == 0) { NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGNOMAL); - TraingModel::GetInstance()->SetSportEvent(data->training3_Text); + TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING); } if (strcmp(view.GetViewId(), BUTTONMORE) == 0) { diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/Training_CardView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/Training_CardView.cpp index 37c53277b..6f024f910 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/Training_CardView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/Training_CardView.cpp @@ -18,14 +18,12 @@ namespace OHOS { static Training_CardView *g_pTraining_CardView{nullptr}; - static QuickTraining *data = new QuickTraining; Training_CardView::Training_CardView() { WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Training_CardView::Training_CardView"); SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); g_pTraining_CardView = this; - data = TraingModel::GetInstance()->GetQuickTraining(); } Training_CardView::~Training_CardView() @@ -34,7 +32,6 @@ namespace OHOS RemoveAll(); DeInit(); g_pTraining_CardView = nullptr; - delete data; } Training_CardView *Training_CardView::GetInstance() @@ -93,9 +90,9 @@ namespace OHOS }; ButtonInfo buttons[] = { - {data->training1_Text, BUTTON1, TRAINING_BUTTONGROUND2, Button1, 86, 118}, - {data->training2_Text, BUTTON2, TRAINING_BOUTTONGROUND, Button2, 236, 118}, - {data->training3_Text, BUTTON3, TRAINING_BOUTTONGROUND, Button3, 86, 268}, + {STR_EXERCISE_OUTDOORWALKING, BUTTON1, TRAINING_BUTTONGROUND2, Button1, 86, 118}, + {STR_EXERCISE_OUTDOORBIKING, BUTTON2, TRAINING_BOUTTONGROUND, Button2, 236, 118}, + {STR_EXERCISE_OUTDOORRUNNING, BUTTON3, TRAINING_BOUTTONGROUND, Button3, 86, 268}, {STR_MORE, BUTTONMORE, TRAINING_MORE, ButtonMore, 236, 268}}; for (auto &buttonInfo : buttons) diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.c b/code/sdk/drivers/peripheral/utils/custom_utils.c index 891d41e2d..e625e4b56 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.c +++ b/code/sdk/drivers/peripheral/utils/custom_utils.c @@ -416,6 +416,65 @@ errcode_t uapi_get_yyyymmddhhmmss_Date(char *date) return ERRCODE_SUCC; } +/** + * @param {char} *p_time + * @param {char} 隔断符 + * @brief 获取日期 + */ +errcode_t uapi_get_YYMMDD_Time(char *p_time, char separator) +{ + if (p_time == NULL) + { + return ERRCODE_FAIL; // 返回空指针错误码 + } + + time_t currtime; + struct tm *timeinfo; + time(&currtime); + timeinfo = localtime(&currtime); + + // 根据传入的分隔符参数选择中间分隔符 + char sep[2] = {separator, '\0'}; + + // 将年月日信息存储到 p_time 变量中,使用指定的分隔符 + sprintf(p_time, "%02d%s%02d%s%02d", timeinfo->tm_year + 1900, sep, timeinfo->tm_mon + 1, sep, timeinfo->tm_mday); + + return ERRCODE_SUCC; +} +/** + * @param {char} *p_time + * @param {char} 隔断符 + * @param {bool} 是否包含秒 + * @brief 获取时间 + */ +errcode_t uapi_get_HHMMSS_Time(char *p_time, char separator, bool include_seconds) +{ + if (p_time == NULL) + { + return ERRCODE_FAIL; // 返回空指针错误码 + } + + time_t currtime; + struct tm *timeinfo; + time(&currtime); + timeinfo = localtime(&currtime); + + // 根据传入的分隔符参数选择中间分隔符 + char sep[2] = {separator, '\0'}; + + // 根据传入的 include_seconds 参数决定是否包含秒 + if (include_seconds) + { + sprintf(p_time, "%02d%s%02d%s%02d", timeinfo->tm_hour, sep, timeinfo->tm_min, sep, timeinfo->tm_sec); + } + else + { + sprintf(p_time, "%02d%s%02d", timeinfo->tm_hour, sep, timeinfo->tm_min); + } + + return ERRCODE_SUCC; +} + /// @brief 控制屏幕是否常亮 /// @param turnOnFlag 1:常亮屏幕 /// @param turnOnFlag 0:取消常亮 diff --git a/code/sdk/drivers/peripheral/utils/custom_utils.h b/code/sdk/drivers/peripheral/utils/custom_utils.h index 7b80de55b..3cf6b2d33 100644 --- a/code/sdk/drivers/peripheral/utils/custom_utils.h +++ b/code/sdk/drivers/peripheral/utils/custom_utils.h @@ -40,6 +40,11 @@ errcode_t uapi_set_time_from_cat1(char* cat1time); /**获取日期*/ errcode_t uapi_get_yyyymmddhhmmss_Date(char *date); +/*获取日期*/ +errcode_t uapi_get_YYMMDD_Time(char *p_time, char separator); +/*获取时间*/ +errcode_t uapi_get_HHMMSS_Time(char *p_time, char separator, bool include_seconds); + char *uapi_get_local_yyyymmdd_date(void); void ScreenAlwaysOnCtr(uint8_t turnOnFlag);