修复运动界面无法进入的bug
authorCaisking <Casiking@zhihuishixun.com>
Sat, 19 Jul 2025 10:23:16 +0000 (18:23 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Sat, 19 Jul 2025 10:23:16 +0000 (18:23 +0800)
code/sdk/application/wearable/fd230/nativeapp/nativelauncher/src/NativeLauncher.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/traing/training_card/src/TraingCardPresenter.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/traing/training_card/src/TraingCardView.cpp
code/sdk/zhihui/drivers/cywee/dml/cywee_dml.c
code/sdk/zhihui/drivers/cywee/service/cywee_service.c

index c122e4b..7166adc 100644 (file)
@@ -105,7 +105,7 @@ void NativeLauncher::InitNativeLauncher(LaunchMode mode)
         // 初始化所有预加载slice
         InitAllNativeSlices();
 
-        // #ifdef FD230_650
+  
         CallerLogModel::GetInstance()->InitPhoneService();
         GoalModel::GetInstance().GoalModelInitdata();//活动数据初始化
         // PresenterTask::GetInstance()->Init();
index a9d959a..fd10a79 100644 (file)
@@ -48,10 +48,13 @@ void PauseTimer();
 void ResumeTimer();\r
 }\r
 #include "NativeRegisterManager.h"\r
-namespace OHOS\r
-{\r
 \r
-    REGIST_SLICE(VIEW_TRAININGCRAD, TraingCardView, TraingCardPresenter);\r
+#ifdef SUPPORT_CYWEE_SERVICE\r
+#include "cywee_service.h"\r
+#endif\r
+namespace OHOS {\r
+\r
+REGIST_SLICE(VIEW_TRAININGCRAD, TraingCardView, TraingCardPresenter);\r
 \r
 // 当前Presenter属性实例化的内存指针\r
 static TraingCardPresenter *g_pTraingCardPresenter = nullptr;\r
@@ -111,12 +114,15 @@ void TraingCardPresenter::ModifiesTime() {
         "TraingModel::GetInstance()->DisplayMotionDuration() nullptr");\r
     return;\r
   }\r
-  if (TrainingControlView::GetInstance()->GetTimeLabel() != nullptr) {\r
-    TrainingControlView::GetInstance()->GetTimeLabel()->SetText(\r
-        TimeStr.c_str());\r
-  }\r
-  if (TrainingDataView::GetInstance()->GetTimeLabel() != nullptr) {\r
-    TrainingDataView::GetInstance()->GetTimeLabel()->SetText(TimeStr.c_str());\r
+  if (TrainingControlView::GetInstance() != nullptr &&\r
+      TrainingDataView::GetInstance() != nullptr) {\r
+    if (TrainingControlView::GetInstance()->GetTimeLabel() != nullptr) {\r
+      TrainingControlView::GetInstance()->GetTimeLabel()->SetText(\r
+          TimeStr.c_str());\r
+    }\r
+    if (TrainingDataView::GetInstance()->GetTimeLabel() != nullptr) {\r
+      TrainingDataView::GetInstance()->GetTimeLabel()->SetText(TimeStr.c_str());\r
+    } \r
   }\r
   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ModifiesTime end");\r
 }\r
@@ -130,9 +136,11 @@ void TraingCardPresenter::UpdateTimeOfControl() {
         "TraingModel::GetInstance()->DisplayMotionDuration() nullptr");\r
     return;\r
   }\r
-  if (TrainingControlView::GetInstance()->GetTimeLabel() != nullptr) {\r
-    TrainingControlView::GetInstance()->GetTimeLabel()->SetText(\r
-        TimeStr.c_str());\r
+  if (TrainingControlView::GetInstance() != nullptr) {\r
+    if (TrainingControlView::GetInstance()->GetTimeLabel() != nullptr) {\r
+      TrainingControlView::GetInstance()->GetTimeLabel()->SetText(\r
+          TimeStr.c_str());\r
+    }\r
   }\r
 }\r
 void TraingCardPresenter::UpdateTimeOfData() {\r
@@ -143,8 +151,10 @@ void TraingCardPresenter::UpdateTimeOfData() {
         "TraingModel::GetInstance()->DisplayMotionDuration() nullptr");\r
     return;\r
   }\r
-  if (TrainingDataView::GetInstance()->GetTimeLabel() != nullptr) {\r
-    TrainingDataView::GetInstance()->GetTimeLabel()->SetText(TimeStr.c_str());\r
+  if (TrainingDataView::GetInstance() != nullptr) {\r
+    if (TrainingDataView::GetInstance()->GetTimeLabel() != nullptr) {\r
+      TrainingDataView::GetInstance()->GetTimeLabel()->SetText(TimeStr.c_str());\r
+    }\r
   }\r
 }\r
 \r
@@ -152,58 +162,62 @@ void TraingCardPresenter::UpdateTimeOfData() {
  * -------------------------------- */\r
 /*开启cywee*/\r
 bool TraingCardPresenter::OpenSensor(ExerciseClass type) {\r
-  // // 防止重复开启\r
-  // if (opensensorstuats) {\r
-  //   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OpenSensor is opening!!");\r
-  //   return false;\r
-  // }\r
-  // // 根据不同的运动项目进行不同的运动\r
-  // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardPresenter::OpenSensor!!");\r
-  // switch (type) {\r
-  // case ExerciseClass::NORMAL:\r
-  //   do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL);\r
-  //   break;\r
-  // case ExerciseClass::TREADMILL:\r
-  //   do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE, NULL);\r
-  //   break;\r
-  // case ExerciseClass::OUTDOOR:\r
-  //   do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE, NULL);\r
-  //   break;\r
-  // case ExerciseClass::INDOOR:\r
-  //   do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE, NULL);\r
-  //   break;\r
-  // case ExerciseClass::FITNESS_PEDOMETER:\r
-  //   do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE, NULL);\r
-  //   break;\r
-  // case ExerciseClass::FREE_TRAINING:\r
-  //   do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE, NULL);\r
-  //   break;\r
-  // default:\r
-  //   break;\r
-  // }\r
-  // opensensorstuats = true;\r
-  // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OpenSensor--%d!!", type);\r
+  // 防止重复开启\r
+  if (opensensorstuats) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OpenSensor is opening!!");\r
+    return false;\r
+  }\r
+  // 根据不同的运动项目进行不同的运动\r
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingCardPresenter::OpenSensor!!");\r
+#ifdef SUPPORT_PPG_SERVICE\r
+  switch (type) {\r
+  case ExerciseClass::NORMAL:\r
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL);\r
+    break;\r
+  case ExerciseClass::TREADMILL:\r
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_TREADMILL_MODE, NULL);\r
+    break;\r
+  case ExerciseClass::OUTDOOR:\r
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE, NULL);\r
+    break;\r
+  case ExerciseClass::INDOOR:\r
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE, NULL);\r
+    break;\r
+  case ExerciseClass::FITNESS_PEDOMETER:\r
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE, NULL);\r
+    break;\r
+  case ExerciseClass::FREE_TRAINING:\r
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_FREE_TRAINING_MODE, NULL);\r
+    break;\r
+  default:\r
+    break;\r
+  }\r
+#endif\r
+  opensensorstuats = true;\r
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OpenSensor--%d!!", type);\r
   return true;\r
 }\r
 \r
 /*控制cywee*/\r
 bool TraingCardPresenter::ControlSensor(ExerciseState state) {\r
+#ifdef SUPPORT_PPG_SERVICE\r
   switch (state) {\r
-  // case ExerciseState::End:\r
-  //   // 退出进入普通模式\r
-  //   do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL);\r
-  //   opensensorstuats = false; // 恢复标志位\r
-  //   StopAndResetTimer();      // 关闭计时器\r
-  //   break;\r
-  // case ExerciseState::Pause:\r
-  //   do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE, 0);\r
-  //   break;\r
-  // case ExerciseState::Continue:\r
-  //   do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME, 0);\r
-  //   break;\r
+  case ExerciseState::End:\r
+    // 退出进入普通模式\r
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL);\r
+    opensensorstuats = false; // 恢复标志位\r
+    StopAndResetTimer();      // 关闭计时器\r
+    break;\r
+  case ExerciseState::Pause:\r
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_PAUSE, 0);\r
+    break;\r
+  case ExerciseState::Continue:\r
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_RESUME, 0);\r
+    break;\r
   default:\r
     break;\r
   }\r
+#endif\r
   WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ControlSensor[%d]!!", state);\r
   return true;\r
 }\r
@@ -213,6 +227,11 @@ void TraingCardPresenter::RefreshData(SportData *sportdata) {
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sportdata is null");\r
     return;\r
   }\r
+\r
+  if (TrainingDetailView::GetInstance() == nullptr ||\r
+      TrainingDataView::GetInstance() == nullptr)\r
+    return;\r
+\r
   std::string distanceStr;\r
   if (sportdata->distance != 0) {\r
     double distance_km =\r
@@ -270,7 +289,7 @@ void TraingCardPresenter::RefreshData(SportData *sportdata) {
 #if 1\r
 void TraingCardPresenter::Notify(void) {\r
   // 如果未开启训练,直接退出\r
-  if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) {\r
+  if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General || view_ == nullptr) {\r
     return;\r
   }\r
 \r
@@ -375,7 +394,7 @@ bool TraingCardPresenter::OnKeyAct(UIView &view, const KeyEvent &event) {
 /* -------------------------------- 协议发起运动处理\r
  * -------------------------------- */\r
 \r
- #ifdef BLE_SERVER_ENABLE\r
+#ifdef BLE_SERVER_ENABLE\r
 bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {\r
   if (cmd == nullptr) {\r
     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "无效的运动命令 cmd 为空!");\r
@@ -496,7 +515,6 @@ bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {
 }\r
 #endif\r
 \r
-\r
 /*训练结束*/\r
 void TraingCardPresenter::handleEndState() {\r
   TraingModel::GetInstance()->SetSportState(ExerciseState::End);\r
index 70cf11f..da986c5 100644 (file)
@@ -618,7 +618,7 @@ void TraingCardView ::InitView() {
   }\r
   swipe_->SetOnSwipeListener(onSwipeListener);\r
 \r
- RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
+  RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
   WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::InitPage over");\r
 }\r
 \r
@@ -1024,8 +1024,9 @@ void TraingCardView::InitImageAnimator() {
 /*获取卡片View单例*/\r
 UICrossView *TraingCardView::GetTraingCrad() { return swipe_; }\r
 \r
-\r
 int TraingCardView::GetCurrentPage() {\r
+  if (swipe_ == nullptr)\r
+    return -1;\r
   return swipe_->GetCurrentPageId(0); // 获取水平页面\r
 }\r
 UIImageAnimatorView *TraingCardView::GetAnimator() { return imageAnimator; }\r
index 447e6f5..57b211c 100644 (file)
@@ -1010,7 +1010,7 @@ void cywee_activity_mode_change(int mode)
     {
         //一般模式(生活模式)
         case SPORT_ACTIVE_MODE_NORMAL:
-            // CWM_OS_dbgPrintf("SPORT_ACTIVE_MODE_NORMAL\r\n");
+            CWM_OS_dbgPrintf("SPORT_ACTIVE_MODE_NORMAL\r\n");
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
             scl.iData[1] = SPORT_ACTIVE_MODE_NORMAL;
@@ -1054,7 +1054,7 @@ void cywee_activity_mode_change(int mode)
 
         //自由运动
         case SPORT_ACTIVE_MODE_FREE_TRAINING:
-            // CWM_OS_dbgPrintf("SPORT_ACTIVE_MODE_FREE_TRAINING\r\n");
+            CWM_OS_dbgPrintf("SPORT_ACTIVE_MODE_FREE_TRAINING\r\n");
             memset(&scl, 0, sizeof(scl));
             scl.iData[0] = 1;
             scl.iData[1] = SPORT_ACTIVE_MODE_FREE_TRAINING;
index e8c88ad..3d03899 100644 (file)
@@ -275,34 +275,34 @@ static void cywee_service_check_task(void const *arg)
 
             case CYWEE_SERVICE_CMD_NORMAL_MODE:
                 // PRINT("普通运动模式\r\n");
-                // cywee_activity_mode_change(SPORT_ACTIVE_MODE_NORMAL);
+                cywee_activity_mode_change(SPORT_ACTIVE_MODE_NORMAL);
             break;
 
             case CYWEE_SERVICE_CMD_TREADMILL_MODE:
-                // cywee_activity_mode_change(SPORT_ACTIVE_MODE_TREADMILL);
+                cywee_activity_mode_change(SPORT_ACTIVE_MODE_TREADMILL);
             break;
 
             case CYWEE_SERVICE_CMD_OUTDOOR_RUNNING_MODE:
                 // PRINT("室外跑步模式\r\n");
-                // cywee_activity_mode_change(SPORT_ACTIVE_MODE_OUTDOOR_RUNNING);
+                cywee_activity_mode_change(SPORT_ACTIVE_MODE_OUTDOOR_RUNNING);
             break;
 
             case CYWEE_SERVICE_CMD_INDOOR_RUNNING_MODE:
                 // PRINT("室内跑步模式\r\n");
-                // cywee_activity_mode_change(SPORT_ACTIVE_MODE_INDOOR_RUNNING);
+                cywee_activity_mode_change(SPORT_ACTIVE_MODE_INDOOR_RUNNING);
             break;
 
             case CYWEE_SERVICE_CMD_FITNESS_PEDOMETER_MODE:
-                // cywee_activity_mode_change(SPORT_ACTIVE_MODE_FITNESS_PEDOMETERR);
+                cywee_activity_mode_change(SPORT_ACTIVE_MODE_FITNESS_PEDOMETERR);
             break;
 
             case CYWEE_SERVICE_CMD_FREE_TRAINING_MODE:
                 // PRINT("自由训练模式\r\n");
-                // cywee_activity_mode_change(SPORT_ACTIVE_MODE_FREE_TRAINING);
+                cywee_activity_mode_change(SPORT_ACTIVE_MODE_FREE_TRAINING);
             break;
 
             case CYWEE_SERVICE_CMD_AR_ALERT_MODE:
-                // cywee_activity_mode_change(SPORT_ACTIVE_MODE_AR_ALERT);
+                cywee_activity_mode_change(SPORT_ACTIVE_MODE_AR_ALERT);
             break;
 
             case CYWEE_SERVICE_CMD_PAUSE: