Merge #65 into xts_origin from refs/changes/65/head 66/target/1 67/target/1 68/target/1
author袁清梦 <3449750381@qq.com>
Mon, 22 Apr 2024 04:03:56 +0000 (04:03 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Mon, 22 Apr 2024 04:03:56 +0000 (04:03 +0000)
Code review from 袁清梦

* refs/changes/65/head: (3 commits squashed)

  - 同步训练强度数据

  - 优化训练蓝牙控制接口

  - Merge branch &#39;xts_origin&#39; of https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230 into xts_origin

Signed-off-by: Caisking <3449750381@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/65
13 files changed:
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingModel.h
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingEnddataView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingModel.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingNomalPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/src/TraingSetPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardView.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TrainingDetailView.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDetailView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/Training_CardPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_list_more/src/TraingMorePresenter.cpp

index 758e4c3..8d1f6aa 100644 (file)
@@ -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> sportdata;*/ // 使用 std::unique_ptr 管理 SportData 对象
     };
 }
index e788d90..50dfab9 100644 (file)
@@ -10,7 +10,8 @@
 #include "components/ui_button.h"
 #include "traing/include/TraingModel.h"
 #include "traing/Training_UiConfig.h"
-
+#include <cmath>  // 包含数学函数库,用于四舍五入
+#include <string> // 包含字符串处理库,用于使用 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()
index 474958f..2800963 100644 (file)
 #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;
index 537782d..69fdc59 100644 (file)
@@ -80,8 +80,8 @@ namespace OHOS
         if (strcmp(view.GetViewId(), BUTTONGO) == 0)\r
         {\r
             NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
-            // 获取运动类型\r
-            ExerciseClass type = TraingModel::GetInstance()->GetSportType();\r
+            // 获取运动项目\r
+            ExerciseClass type = TraingModel::GetInstance()->GetSportId();\r
             // 开启对应的运动\r
             TraingCardPresenter::GetInstance()->OpenSensor(type);\r
         }\r
index 8040a22..f936c45 100644 (file)
@@ -92,7 +92,8 @@ namespace OHOS
         {
             NativeAbility::GetInstance().EnterSlice(VIEW_TRAININGMORE);
         }
-
+        // 快捷训练都属于健身类
+        TraingModel::GetInstance()->SetSportType(Exercisetype::FITNESS);
         return true;
     }
 }
index 13f7d8c..f579401 100644 (file)
@@ -123,7 +123,7 @@ namespace OHOS
                 // TraingModel::GetInstance()->SetSportTag(ExerciseTag::STEP, 10); // 测试\r
                 PRINT("GetButtonIdFromCard:%d tag:%d \r\n", CardID, tag);\r
                 NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
-                ExerciseClass type = TraingModel::GetInstance()->GetSportType();\r
+                ExerciseClass type = TraingModel::GetInstance()->GetSportId();\r
                 TraingCardPresenter::GetInstance()->OpenSensor(type);\r
             }\r
             break;\r
index 604c5be..a8e0bf0 100644 (file)
@@ -81,7 +81,7 @@ namespace OHOS
         void ShowGetTagView();\r
         void ShowEndView();\r
         bool RefreshEndView();\r
-        UIView *GetTraingCrad();\r
+        UICrossView *GetTraingCrad();\r
         int GetCurrentPage();\r
         void SetPopupViewStatus(PopupType type, bool status);\r
         UIImageAnimatorView *GetAnimator();\r
index 34ab3e1..e961bbe 100644 (file)
@@ -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};
index d372140..fd78117 100644 (file)
@@ -19,6 +19,8 @@ extern "C" void do_cywee_service_check_msg(int cmd, int data[]);
 extern "C" void custom_VibratorFunc(OHOS::VibratorType vibratorType);\r
 #define MAXSPORTID 176\r
 \r
+#define DEFAULT_DASH "--"\r
+\r
 extern "C"\r
 {\r
     void InitTimer();\r
@@ -168,8 +170,6 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sportdata is null");\r
             return;\r
         }\r
-        PRINT("sportdata->tag[%d] sportdata->sportTag[%d]\r\n", sportdata->tag, sportdata->sportTag);\r
-    \r
         std::string distanceStr;\r
         if (sportdata->distance != 0)\r
         {\r
@@ -180,22 +180,21 @@ namespace OHOS
         }\r
         else\r
         {\r
-            distanceStr = "--";\r
+            distanceStr = DEFAULT_DASH;\r
         }\r
-\r
         std::string durationStr = std::to_string(sportdata->duration);\r
-        std::string heartStr = (sportdata->heart != 0) ? std::to_string(sportdata->heart) : "--";\r
-        std::string stepsStr = (sportdata->steps != 0) ? std::to_string(sportdata->steps) : "--";\r
-        std::string calorieStr = (sportdata->calories != 0) ? std::to_string(sportdata->calories) : "--";\r
-\r
-        TrainingDataView::GetInstance()->GetHeartLabel()->SetText(heartStr.c_str());\r
-\r
-        TrainingDetailView::GetInstance()->GetCalorieLabel()->SetText(calorieStr.c_str());\r
-        TrainingDetailView::GetInstance()->GetMileLabel()->SetText(distanceStr.c_str());\r
-        TrainingDetailView::GetInstance()->GetStepLabel()->SetText(stepsStr.c_str());\r
+        std::string heartStr = (sportdata->heart != 0) ? std::to_string(sportdata->heart) : DEFAULT_DASH;\r
+        std::string stepsStr = (sportdata->steps != 0) ? std::to_string(sportdata->steps) : DEFAULT_DASH;\r
+        std::string calorieStr = (sportdata->calories != 0) ? std::to_string(sportdata->calories) : DEFAULT_DASH;\r
+        // 训练强度刷新\r
+        UIResourceTextId intensityid = TraingModel::GetInstance()->GetIntensity();\r
+        TrainingDetailView::GetInstance()->Get_Intensity_Button()->SetFontId(intensityid);\r
 \r
+        TrainingDataView::GetInstance()->GetHeartLabel()->SetText(heartStr.c_str());       // 心率\r
+        TrainingDetailView::GetInstance()->GetCalorieLabel()->SetText(calorieStr.c_str()); // 卡路里\r
+        TrainingDetailView::GetInstance()->GetMileLabel()->SetText(distanceStr.c_str());   // 距离\r
+        TrainingDetailView::GetInstance()->GetStepLabel()->SetText(stepsStr.c_str());      // 步数\r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[Calories: %s, Distance: %s, Steps: %s]", calorieStr.c_str(), distanceStr.c_str(), stepsStr.c_str());\r
-\r
         // 释放sportdata内存\r
     }\r
     /*刷新time和data*/\r
@@ -306,7 +305,57 @@ namespace OHOS
             break;\r
         }\r
 \r
-        ControlSensor(static_cast<ExerciseState>(cmd->controlmd));\r
+        ExerciseState cmdState = static_cast<ExerciseState>(cmd->controlmd);\r
+        if (TraingCardView::GetInstance()->GetTraingCrad()->GetCurrentPageId() != Control_Card::CONTROL && cmdState != ExerciseState::Start)\r
+        {\r
+            // 跳转卡片界面\r
+            TraingCardView::GetInstance()->GetTraingCrad()->SetHorCurrentPage(Control_Card::CONTROL);\r
+        }\r
+\r
+        // 结束\r
+        if (cmdState == ExerciseState::End)\r
+        {\r
+            TraingModel::GetInstance()->SetSportState(ExerciseState::End);\r
+            ControlSensor(ExerciseState::End);\r
+            if (TraingCardView::GetInstance()->RefreshEndView())\r
+            {\r
+                // 进行存储操作?\r
+                NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
+            }\r
+            else\r
+            {\r
+                NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGMORE);\r
+            }\r
+            return true;\r
+        }\r
+        // 暂停和恢复\r
+        if (cmdState == ExerciseState::Continue || cmdState == ExerciseState::Pause)\r
+        {\r
+            // 开始状态\r
+            if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Start || TraingModel::GetInstance()->GetSportState() == ExerciseState::Continue)\r
+            {\r
+                TrainingControlView::GetInstance()->GetLabel()->SetText("继续");\r
+                TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE);\r
+                // 设置为暂停状态\r
+                TraingModel::GetInstance()->SetSportState(ExerciseState::Pause);\r
+                // 暂停计时器\r
+                PauseTimer();\r
+                // 暂停运动库\r
+                ControlSensor(ExerciseState::Pause);\r
+            }\r
+            // 暂停状态\r
+            if (TraingModel::GetInstance()->GetSportState() == ExerciseState::Pause)\r
+            {\r
+                TrainingControlView::GetInstance()->GetLabel()->SetText("暂停");\r
+                TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE);\r
+                // 设置为继续状态\r
+                TraingModel::GetInstance()->SetSportState(ExerciseState::Continue);\r
+                // 恢复计时器\r
+                ResumeTimer();\r
+                // 恢复运动库\r
+                ControlSensor(ExerciseState::Continue);\r
+            }\r
+        }\r
         return true;\r
     }\r
 \r
index bb1c894..cd91f93 100644 (file)
@@ -79,7 +79,7 @@ namespace OHOS
         // swipe_->HorAdd(DetailView);\r
 \r
         swipe_->VerAdd(DetailView, UICrossView::VPage::DOWN_PAGE);\r
-        swipe_->SetHorCurrentPage(Control_Card::CONTROL);\r
+        swipe_->SetHorCurrentPage(Control_Card::DATA);\r
 \r
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingCardView::InitPage over");\r
     }\r
@@ -444,7 +444,7 @@ namespace OHOS
     }\r
 \r
     /*获取卡片View单例*/\r
-    UIView *TraingCardView::GetTraingCrad()\r
+    UICrossView *TraingCardView::GetTraingCrad()\r
     {\r
         return swipe_;\r
     }\r
index f607d46..3a4e259 100644 (file)
@@ -144,5 +144,8 @@ namespace OHOS
     {
         return calorielabel;
     }
-
+    UILabelButtonExt *TrainingDetailView::Get_Intensity_Button()
+    {
+        return intensity_button;
+    }
 }
index c4334e3..d3afb26 100644 (file)
@@ -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
index 8c66c11..a481f32 100644 (file)
@@ -11,6 +11,7 @@
 #include "traing/training_list_more/include/TraingMoreItemView.h"\r
 #include "traing/training_list_more/include/TraingMorePresenter.h"\r
 #include "traing/training_list_more/include/TraingMoreView.h"\r
+#include "traing/include/TraingModel.h"\r
 // #include "TraingMoreView.h"\r
 \r
 namespace OHOS\r
@@ -89,6 +90,46 @@ namespace OHOS
         TraingMoreItemView *itemView = static_cast<TraingMoreItemView *>(&view);\r
         AppViewId viewId = itemView->GetTraingMoreIndex();\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ApplistPresenter::OnClick viewid = %d\n", viewId);\r
+        /*\r
+            VIEW_TRAININGLIMIT,   // 极限运动列表\r
+            VIEW_TRAININGICE,     // 冰上运动列表\r
+            VIEW_TRAININGFITNESS, // 健身运动列表\r
+            VIEW_TRAININGDANCE,   // 舞蹈运动列表\r
+            VIEW_TRAININGREST,    // 休闲运动列表\r
+            VIEW_TRAININGBALL,    // 球类运动列表\r
+            VIEW_TRAININGAQUATIC, // 水上运动列表\r
+            VIEW_TRAININGOTHER,   // 其他列表\r
+        */\r
+        // 设置训练类型\r
+        switch (viewId)\r
+        {\r
+        case VIEW_TRAININGLIMIT:\r
+            TraingModel::GetInstance()->SetSportType(Exercisetype::EXTREME);\r
+            break;\r
+        case VIEW_TRAININGICE:\r
+            TraingModel::GetInstance()->SetSportType(Exercisetype::ICE);\r
+            break;\r
+        case VIEW_TRAININGFITNESS:\r
+            TraingModel::GetInstance()->SetSportType(Exercisetype::FITNESS);\r
+            break;\r
+        case VIEW_TRAININGDANCE:\r
+            TraingModel::GetInstance()->SetSportType(Exercisetype::DANCE);\r
+            break;\r
+        case VIEW_TRAININGREST:\r
+            TraingModel::GetInstance()->SetSportType(Exercisetype::LEISURE);\r
+            break;\r
+        case VIEW_TRAININGBALL:\r
+            TraingModel::GetInstance()->SetSportType(Exercisetype::BALL);\r
+            break;\r
+        case VIEW_TRAININGAQUATIC:\r
+            TraingModel::GetInstance()->SetSportType(Exercisetype::WATER);\r
+            break;\r
+        case VIEW_TRAININGOTHER:\r
+            TraingModel::GetInstance()->SetSportType(Exercisetype::OTHER);\r
+            break;\r
+        default:\r
+            break;\r
+        }\r
         if (viewId < VIEW_MAX_INTER_APP)\r
         {\r
             NativeAbility::GetInstance().ChangeSlice(viewId);\r