训练:增加状态以及数据保存
authorCaisking <3449750381@qq.com>
Thu, 3 Oct 2024 03:54:16 +0000 (11:54 +0800)
committerCaisking <3449750381@qq.com>
Thu, 3 Oct 2024 03:54:16 +0000 (11:54 +0800)
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingControlView.cpp

index e9a8e33..1a6fb97 100644 (file)
@@ -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<uint32_t>(sportdata->sportType);  
-    data.ty = static_cast<uint32_t>(  
-        GetBleSportId(sportdata->sportType, sportdata->sportId));  
-    data.st = static_cast<uint32_t>(sportdata->starttime);  
-    data.sp = static_cast<uint32_t>(sportdata->endtime);  
-    data.tgt = static_cast<uint32_t>(sportdata->sportTagType);  
-    data.tg = static_cast<uint32_t>(sportdata->tag);  
-    data.pg = static_cast<uint32_t>(sportdata->goaldegree);  
-    data.du = static_cast<uint32_t>(sportdata->duration);  
-    data.ca = static_cast<uint32_t>(sportdata->calories * 10);  
-    data.di = static_cast<uint32_t>(sportdata->distance);  
-    data.hr = static_cast<uint32_t>(sportdata->avgheart);  
-    data.stp = static_cast<uint32_t>(sportdata->steps);  
-    data.ti = static_cast<uint32_t>(sportdata->intensity);  
-    /* 230 目前不支持【圈数】【最高海拔高度】 */  
-    data.cir = 0;  
-    data.alt = 0;  
-    /* 配速相关 */  
-    data.apc = static_cast<uint32_t>(sportdata->apc);  
-    data.fpc = static_cast<uint32_t>(sportdata->fpc);  
-    data.spc = static_cast<uint32_t>(sportdata->spc);  
-    data.std = static_cast<uint32_t>(sportdata->std);  
-    data.cdc = static_cast<uint32_t>(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<uint32_t>(sportdata->sportType);
+  data.ty = static_cast<uint32_t>(
+      GetBleSportId(sportdata->sportType, sportdata->sportId));
+  data.st = static_cast<uint32_t>(sportdata->starttime);
+  data.sp = static_cast<uint32_t>(sportdata->endtime);
+  data.tgt = static_cast<uint32_t>(sportdata->sportTagType);
+  data.tg = static_cast<uint32_t>(sportdata->tag);
+  data.pg = static_cast<uint32_t>(sportdata->goaldegree);
+  data.du = static_cast<uint32_t>(sportdata->duration);
+  data.ca = static_cast<uint32_t>(sportdata->calories * 10);
+  data.di = static_cast<uint32_t>(sportdata->distance);
+  data.hr = static_cast<uint32_t>(sportdata->avgheart);
+  data.stp = static_cast<uint32_t>(sportdata->steps);
+  data.ti = static_cast<uint32_t>(sportdata->intensity);
+  /* 230 目前不支持【圈数】【最高海拔高度】 */
+  data.cir = 0;
+  data.alt = 0;
+  /* 配速相关 */
+  data.apc = static_cast<uint32_t>(sportdata->apc);
+  data.fpc = static_cast<uint32_t>(sportdata->fpc);
+  data.spc = static_cast<uint32_t>(sportdata->spc);
+  data.std = static_cast<uint32_t>(sportdata->std);
+  data.cdc = static_cast<uint32_t>(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; }
index f5d312a..4267ca3 100644 (file)
@@ -22,6 +22,7 @@
 extern "C" {\r
 void InitTimer();\r
 void DisableTimer();\r
+void PauseTimer();\r
 }\r
 \r
 namespace OHOS {\r
@@ -70,11 +71,14 @@ static TraingCardView *g_pTraingCardView{nullptr};
 \r
 TraingCardView::TraingCardView() {\r
   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::TraingCardView");\r
-  InitTimer(); // 开启计时器\r
-  TraingModel::GetInstance()->SetSportState(\r
-      ExerciseState::Start); // 设置运动状态为开始\r
-  TraingModel::GetInstance()->SetTimestamp();\r
-  // uapi_add_sport_vote(); // 保护进程\r
+  if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) {\r
+    InitTimer(); // 开启计时器\r
+    TraingModel::GetInstance()->SetSportState(\r
+        ExerciseState::Start); // 设置运动状态为开始\r
+    TraingModel::GetInstance()->SetTimestamp();\r
+    // uapi_add_sport_vote(); // 保护进程\r
+  }\r
+\r
   g_pTraingCardView = this;\r
 }\r
 \r
@@ -85,8 +89,14 @@ TraingCardView::~TraingCardView() {
   DeInit();\r
 \r
   g_pTraingCardView = nullptr;\r
-  DisableTimer(); // 关闭计时器\r
-  TraingModel::GetInstance()->SetTimestamp();\r
+  if (TraingModel::GetInstance()->GetSportState() == ExerciseState::End) {\r
+    DisableTimer(); // 关闭计时器\r
+    TraingModel::GetInstance()->SetTimestamp();\r
+  } else {\r
+    TraingModel::GetInstance()->SetSportState(ExerciseState::Pause);\r
+    PauseTimer();\r
+    TraingCardPresenter::GetInstance()->ControlSensor(ExerciseState::Pause);\r
+  }\r
   // uapi_remove_sport_vote(); // 移除\r
 }\r
 \r
index d8b1483..342cd28 100644 (file)
 
 #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 <ui_scroll_view.h>
+#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 <chrono>
 #include <thread>
-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<UIView::OnClickListener *>(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<UIView::OnClickListener *>(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 <ui_scroll_view.h>
+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<UIView::OnClickListener *>(
+      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<UIView::OnClickListener *>(
+      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