Merge #1007 into sdk602patch0626 from refs/changes/1007/head 1009/target/1 1010/target/1
author袁清梦 <3449750381@qq.com>
Tue, 24 Sep 2024 10:42:37 +0000 (10:42 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Tue, 24 Sep 2024 10:42:37 +0000 (10:42 +0000)
Code review from 袁清梦

* refs/changes/1007/head: (12 commits squashed)

  - 修改心率曲线图Y轴数字

  - #144 手表,心率测量开始测量的时候显示的心率值太大,需要优化开始显示的心率值

  - #678 心率初始出值不稳定,偏差太大。

  - #560 运动,徒步运动设置目标1KM,实际放桌子上未动,提示我目标达成

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

  - #446 运动界面,上下滑,下界面是覆盖式的,优化为U6那种滑动式界面

  - #667 运动结束界面,数据不完整,数据内容不丰富,没有设置目标也会显示目标完成度

  - #700 运动时间显示花屏,显示逻辑不对(两台测试样机都有)

  - #687 省电模式-有长按不起反应现象

  - #819 手表,表盘步数显示-31441,实际步数99631

  - 修改表盘距离数据为uint32_t

  - #448 运动结束训练记录滑动会遮挡,并且运动结束会显示训练历史记录

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/1007
23 files changed:
code/sdk/application/wearable/fd230app/CMakeLists.txt
code/sdk/application/wearable/fd230app/nativeui/activity/src/ActivityModel.cpp
code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h
code/sdk/application/wearable/fd230app/nativeui/main/include/dial/DialModelDistance.h
code/sdk/application/wearable/fd230app/nativeui/main/include/dial/DialModelSteps.h
code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelDistance.cpp
code/sdk/application/wearable/fd230app/nativeui/main/src/dial/DialModelSteps.cpp
code/sdk/application/wearable/fd230app/nativeui/saveele/include/SaveBatPresenter.h
code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.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/training_card/include/TraingCardPresenter.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardView.h
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingDataAllView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TrainingDataView.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/TraingDataAllView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDataView.cpp
code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDetailView.cpp
code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordView.cpp

index 8497548..7372ec0 100644 (file)
@@ -612,6 +612,7 @@ set(SOURCES
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_card/src/TrainingControlView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_card/src/TrainingDataView.cpp
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_card/src/TrainingDetailView.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traing/training_card/src/TraingDataAllView.cpp
 
     #训练记录
     ${CMAKE_CURRENT_SOURCE_DIR}/nativeui/traingrecord/src/TraingRecordView.cpp
index f053aac..4b7ea84 100644 (file)
@@ -124,7 +124,8 @@ static void Notify(void *args, const Topic topic, Request* request)
             return;
         }
         // 计步数据累加
-        uint32 counter =0;// OHOS::ActivityModel::GetInstance()->GetStepCounter();
+        uint32_t counter =
+            0; // OHOS::ActivityModel::GetInstance()->GetStepCounter();
         counter = *(uint32_t *)request->data;
         set_step_data(counter);
         counter = get_step_data();//*(uint32_t *)request->data;
index 3837b51..2fcb1ea 100644 (file)
  * @Date: 2024-03-01 15:10:34
  * @LastEditors: luozheng 1732036298@qq.com
  * @LastEditTime: 2024-09-03 17:53:43
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h
+ * @FilePath:
+ * /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainPresenterSample.h
  */
 
 #ifndef MAIN_PRESENTER_SAMPLE_H
 #define MAIN_PRESENTER_SAMPLE_H
 
-#include "Presenter.h"
-#include "ModelListenerSample.h"
-#include "components/root_view.h"
+#include "HeartRateView.h"
 #include "KeyInputListener.h"
-#include "drag_event.h"
-#include "MainViewSample.h"
+#include "MainCompassPresenter.h"
+#include "MainCompassView.h"
 #include "MainModel.h"
+#include "MainViewSample.h"
+#include "ModelListenerSample.h"
+#include "PlayersView.h"
+#include "Presenter.h"
+#include "components/root_view.h"
 #include "components/ui_swipe_view.h"
 #include "components/ui_view.h"
-#include "MainCompassView.h"
-#include "MainCompassPresenter.h"
-#include "PlayersView.h"
-#include "HeartRateView.h"
+#include "drag_event.h"
 #include "swipe_effect/zoom_effect.h"
 
-namespace OHOS
-{
-    static constexpr const char *MAIN_CLICK_WEATHER = "mainclickweather";
-    static constexpr const char *MAIN_CLICK_ACTIVITY = "mainclickactivity";
-    static constexpr const char *MAIN_CLICK_MESSAGE = "mainclickmessage";
-    static constexpr const char *MAIN_CLICK_HEARTRATE = "mainclickheartrate";
-    static constexpr const char *MAIN_CLICK_BLOOD = "mainclickblood";     // 血氧检测
-    static constexpr const char *MAIN_CLICK_SETCARD = "mainclicksetcard"; // 设置卡片
+namespace OHOS {
+static constexpr const char *MAIN_CLICK_WEATHER = "mainclickweather";
+static constexpr const char *MAIN_CLICK_ACTIVITY = "mainclickactivity";
+static constexpr const char *MAIN_CLICK_MESSAGE = "mainclickmessage";
+static constexpr const char *MAIN_CLICK_HEARTRATE = "mainclickheartrate";
+static constexpr const char *MAIN_CLICK_BLOOD = "mainclickblood"; // 血氧检测
+static constexpr const char *MAIN_CLICK_SETCARD =
+    "mainclicksetcard"; // 设置卡片
 
-    static constexpr const char *DROPDOWN_CLICK_DONOTDISTURB = "dropdownclickdonotdisturb";
-    static constexpr const char *DROPDOWN_CLICK_BRIGHTENSCREEN = "dropdownclickbrightscreen";
+static constexpr const char *DROPDOWN_CLICK_DONOTDISTURB =
+    "dropdownclickdonotdisturb";
+static constexpr const char *DROPDOWN_CLICK_BRIGHTENSCREEN =
+    "dropdownclickbrightscreen";
 
-    static constexpr const char *DROPDOWN_CLICK_SETTING = "dropdownclicksetting";         // 设置
-    static constexpr const char *DROPDOWN_CLICK_BLUETOOTH = "dropdownclickbluetooth";     // 蓝牙
-    static constexpr const char *DROPDOWN_CLICK_DNOTDISTURB = "dropdownclickdnotdisturb"; // 勿扰
-    static constexpr const char *DROPDOWN_CLICK_SAVEELE = "dropdownclicksaveele";         // 省电
-    static constexpr const char *DROPDOWN_CLICK_FINDMYPHONE = "dropdownclickfindmyphone"; // 找手机
+static constexpr const char *DROPDOWN_CLICK_SETTING =
+    "dropdownclicksetting"; // 设置
+static constexpr const char *DROPDOWN_CLICK_BLUETOOTH =
+    "dropdownclickbluetooth"; // 蓝牙
+static constexpr const char *DROPDOWN_CLICK_DNOTDISTURB =
+    "dropdownclickdnotdisturb"; // 勿扰
+static constexpr const char *DROPDOWN_CLICK_SAVEELE =
+    "dropdownclicksaveele"; // 省电
+static constexpr const char *DROPDOWN_CLICK_FINDMYPHONE =
+    "dropdownclickfindmyphone"; // 找手机
 
-    static constexpr const char *CONNECTEDSTATUSBACKGROUNDBUTTON = "connectedstatusbackgroundbutton"; // 连接状态按钮
-    static constexpr const char *CONNECTEDSTATUSVIEWCLOSEBUTTON = "connectedstatusviewclosebutton";   // 连接状态视图的关闭按钮
+static constexpr const char *CONNECTEDSTATUSBACKGROUNDBUTTON =
+    "connectedstatusbackgroundbutton"; // 连接状态按钮
+static constexpr const char *CONNECTEDSTATUSVIEWCLOSEBUTTON =
+    "connectedstatusviewclosebutton"; // 连接状态视图的关闭按钮
 
-    constexpr uint16_t VERTICAL_STATUS = 1;
-    constexpr uint16_t HORIZONTAL_STATUS = 0;
+constexpr uint16_t VERTICAL_STATUS = 1;
+constexpr uint16_t HORIZONTAL_STATUS = 0;
 
-    class MainViewSample;
-    class MainPresenterSample : public Presenter<MainViewSample>, public ModelListenerSample, public UIView::OnClickListener, public UIView::OnDragListener, public UISwipeView::OnSwipeListener, public UIView::OnLongPressListener, public UISwipeView, public CompassPresenter
-    {
-    public:
-        MainPresenterSample();
-        ~MainPresenterSample() override;
-        static MainPresenterSample *GetInstance(void);
+class MainViewSample;
+class MainPresenterSample : public Presenter<MainViewSample>,
+                            public ModelListenerSample,
+                            public UIView::OnClickListener,
+                            public UIView::OnDragListener,
+                            public UISwipeView::OnSwipeListener,
+                            public UIView::OnLongPressListener,
+                            public UISwipeView,
+                            public CompassPresenter {
+public:
+  MainPresenterSample();
+  ~MainPresenterSample() override;
+  static MainPresenterSample *GetInstance(void);
 
-        void OnStart() override;
-        void OnPause() override;
-        void OnResume() override;
-        void OnStop() override;
-        void Notify() override;
-        bool OnClick(UIView &view, const ClickEvent &event) override;
-        bool OnDrag(UIView &view, const DragEvent &event) override;
-        bool OnLongPress(UIView &view, const LongPressEvent &event) override;
-        void OnSwipe(UISwipeView &view) override;
-        void SetPage(int8_t id);
-        void SetTaskPeroid(CardId cardId);
-        void setCallback(ZoomEffect *callback)
-        {
-            callback_ = callback;
-        }
+  void OnStart() override;
+  void OnPause() override;
+  void OnResume() override;
+  void OnStop() override;
+  void Notify() override;
+  bool OnClick(UIView &view, const ClickEvent &event) override;
+  bool OnDrag(UIView &view, const DragEvent &event) override;
+  bool OnLongPress(UIView &view, const LongPressEvent &event) override;
+  void OnSwipe(UISwipeView &view) override;
+  void SetPage(int8_t id);
+  void SetTaskPeroid(CardId cardId);
+  void setCallback(ZoomEffect *callback) { callback_ = callback; }
 
-        void InitCardSettings(void);
-        uint8_t GetCardSettingCount(void);
-        CardId *GetCardSettings(void);
-        void InitDialSettings(void);
-        DialSetting &GetDialSetting();
-        void UpdataTime();
-        uint32_t GetWeekStr(char *p_week);
-        void UpdataBaseData();
-        void PullUpDown_StartTimer(uint32_t interval);
-        void PullUpDown_StopTimer(void);
-        static uint8_t g_PullUpDownTimes;
+  void InitCardSettings(void);
+  uint8_t GetCardSettingCount(void);
+  CardId *GetCardSettings(void);
+  void InitDialSettings(void);
+  DialSetting &GetDialSetting();
+  void UpdataTime();
+  uint32_t GetWeekStr(char *p_week);
+  void UpdataBaseData();
+  void PullUpDown_StartTimer(uint32_t interval);
+  void PullUpDown_StopTimer(void);
+  static uint8_t g_PullUpDownTimes;
 
-        void get_memcheck();
+  void get_memcheck();
 
-        bool IsFromSetCardView(void) const;
-        void SetFromSetCardView(bool isFrom);
-        uint8_t GetFromCardId(void);
+  bool IsFromSetCardView(void) const;
+  void SetFromSetCardView(bool isFrom);
+  uint8_t GetFromCardId(void);
 
-    private:
-        void LogCardTransition(CardId previous, CardId current);
-        void ResetSleepCardView();
-        void ResetWeatherCardView();
-        void ResetgoalCardView();
-        void StartHeartRateDetection();
-        void UpdateWatchFace();
-        void UpdateWeather();
-        void Updategoal();
-        void ProcessDataNotify(void);
-        void SetCircleProgress(void);
-        void SetCompassRotate(void);
-        KeyInputListener *keyActListener_{nullptr};
-        ZoomEffect *callback_{nullptr};
-        uint8_t state_ = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;
-        int64_t playerCurrentTime_{0};
-        int64_t playerMusicDuration_{0};
-        int64_t playerProgressValue_{0};
-        bool isCompassSensorOpened_{false};
-        CardId previousCardId{WATCH_FACE};
-    };
+private:
+  void LogCardTransition(CardId previous, CardId current);
+  void ResetSleepCardView();
+  void ResetWeatherCardView();
+  void ResetgoalCardView();
+  void StartHeartRateDetection();
+  void UpdateWatchFace();
+  void UpdateWeather();
+  void Updategoal();
+  void ProcessDataNotify(void);
+  void SetCircleProgress(void);
+  void SetCompassRotate(void);
+  KeyInputListener *keyActListener_{nullptr};
+  ZoomEffect *callback_{nullptr};
+  uint8_t state_ = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;
+  int64_t playerCurrentTime_{0};
+  int64_t playerMusicDuration_{0};
+  int64_t playerProgressValue_{0};
+  bool isCompassSensorOpened_{false};
+  CardId previousCardId{WATCH_FACE};
+};
 }
 
 #endif // MAIN_PRESENTER_H
index 4a7500a..1498d82 100644 (file)
@@ -29,7 +29,7 @@ namespace OHOS
             return &instance;
         }
         bool GetDialFloatData(DialDataType &type, float &out) override;
-        void UpdateDistance(int16_t Distance);
+        void UpdateDistance(uint32_t Distance);
         int GetDistanceData(void);
 
     private:
index e721c60..b688637 100644 (file)
@@ -21,9 +21,9 @@ public:
         return &instance;
     }
     bool GetDialFloatData(DialDataType& type, float& out) override;
-    void UpdateSteps(int16_t steps);
+    void UpdateSteps(uint32_t steps);
 
-private:
+  private:
     float steps_ = 0; // 11520.0: default step value as reference
 };
 }
index 38f2466..07a12ed 100644 (file)
@@ -17,15 +17,14 @@ namespace OHOS
         return true;
     }
 
-    void DialModelDistance::UpdateDistance(int16_t distance)
-    {
-        // 将距离从米(m)转换为公里(km)并保留一位小数
-        distance_ = static_cast<float>(distance) / 1000.0f; //  distance 米
+    void DialModelDistance::UpdateDistance(uint32_t distance) {
+      // 将距离从米(m)转换为公里(km)并保留一位小数
+      distance_ = static_cast<float>(distance) / 1000.0f; //  distance 米
 
-        if (onChangeListener_ != nullptr)
-        {
-            // 通知改变监听器更新距离数据
-            onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_DISTANCE, distance_);
-        }
+      if (onChangeListener_ != nullptr) {
+        // 通知改变监听器更新距离数据
+        onChangeListener_->OnDialFloatDataUpdate(
+            DialDataType::DATA_TYPE_DISTANCE, distance_);
+      }
     }
 }
index b21f8cc..4fd12b9 100644 (file)
@@ -18,11 +18,11 @@ bool DialModelSteps::GetDialFloatData(DialDataType& type, float& out)
     return true;
 }
 
-void DialModelSteps::UpdateSteps(int16_t steps)
-{
-    steps_ = static_cast<float>(steps);
-    if(onChangeListener_ != nullptr) {
-        onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_STEPS, steps_);
-    }
+void DialModelSteps::UpdateSteps(uint32_t steps) {
+  steps_ = static_cast<float>(steps);
+  if (onChangeListener_ != nullptr) {
+    onChangeListener_->OnDialFloatDataUpdate(DialDataType::DATA_TYPE_STEPS,
+                                             steps_);
+  }
 }
 }
index 5d60a82..d731685 100644 (file)
@@ -53,6 +53,8 @@ namespace OHOS
         uint64_t startTime{0};\r
         int count = 3;         // 初始计数\r
         int progressValue = 0; // 初始进度值\r
+        uint16_t drag_x = 0;\r
+        uint16_t drag_y = 0;\r
     };\r
 \r
 } // namespace OHOS\r
index 092c658..4856ddf 100644 (file)
@@ -1,24 +1,3 @@
-/***\r
- * @Date: 2024-04-15 10:55:58\r
- * @LastEditors: Caisking 3449750381@qq.com\r
- * @LastEditTime: 2024-08-20 16:29:53\r
- * @FilePath:\r
- * /FD230/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatPresenter.cpp\r
- */\r
-/***\r
- * @Date: 2024-04-15 10:55:58\r
- * @LastEditors: Caisking 3449750381@qq.com\r
- * @LastEditTime: 2024-08-20 16:28:11\r
- * @FilePath:\r
- * /FD230/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatPresenter.cpp\r
- */\r
-/***\r
- * @Date: 2024-04-15 10:55:58\r
- * @LastEditors: Caisking 3449750381@qq.com\r
- * @LastEditTime: 2024-08-17 15:08:53\r
- * @FilePath:\r
- * /FD230/code/sdk/application/wearable/fd230app/nativeui/saveele/src/SaveBatPresenter.cpp\r
- */\r
 \r
 #include "AppViewIDs.h"\r
 #include "KeyInputListener.h"\r
@@ -59,7 +38,21 @@ SaveBatPresenter *SaveBatPresenter::GetInstance() {
   return g_pSaveBatPresenter;\r
 }\r
 \r
-void SaveBatPresenter::OnStart() { Presenter<SaveBatView>::OnStart(); }\r
+/*\r
+  void enable_drag(uint8_t direction, uint8_t enable);\r
+  void set_drag_limit(uint8_t direction, uint16_t limit);\r
+  uint16_t get_drag_limit(uint8_t direction);\r
+*/\r
+void SaveBatPresenter::OnStart() {\r
+  Presenter<SaveBatView>::OnStart();\r
+  // 1.获取原drag\r
+  drag_x = get_drag_limit(0);\r
+  drag_y = get_drag_limit(1);\r
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "drag_x:%d,drag_y:%d", drag_x, drag_y);\r
+  // 2.设置drag\r
+  enable_drag(0, 0);\r
+  enable_drag(1, 0);\r
+}\r
 \r
 void SaveBatPresenter::OnPause(void) { Presenter<SaveBatView>::OnPause(); }\r
 \r
@@ -68,6 +61,9 @@ void SaveBatPresenter::OnResume(void) { Presenter<SaveBatView>::OnResume(); }
 void SaveBatPresenter::OnStop(void) {\r
   SaveEleModel::GetInstance()->SetViewState(false);\r
   Presenter<SaveBatView>::OnStop();\r
+  ///回退darg设置\r
+  enable_drag(0, 1);\r
+  enable_drag(1, 1);\r
 }\r
 \r
 bool SaveBatPresenter::OnPress(UIView &view, const PressEvent &event) {\r
index be75218..2ed8314 100644 (file)
  * @Date: 2024-04-15 10:55:58
  * @LastEditors: Caisking 3449750381@qq.com
  * @LastEditTime: 2024-04-25 10:32:38
- * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h
+ * @FilePath:
+ * /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h
  */
 /***
  * @Date: 2024-04-15 10:55:58
  * @LastEditors: Caisking 3449750381@qq.com
  * @LastEditTime: 2024-04-16 09:27:11
- * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h
+ * @FilePath:
+ * /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/include/TraingEnddataView.h
  */
 #ifndef _TraingEnddata_VIEW_H
 #define _TraingEnddata_VIEW_H
 
 #include "BaseView.h"
 #include "View.h"
-#include <ui_scroll_view.h>
-#include "components/ui_view_group.h"
-#include "components/ui_label.h"
-#include "components/ui_label_ext.h"
-#include "components/ui_image_view.h"
+#include "components/icon_adapter.h"
 #include "components/ui_button.h"
+#include "components/ui_card_page.h"
+#include "components/ui_chart.h"
 #include "components/ui_image_animator.h"
+#include "components/ui_image_view.h"
+#include "components/ui_label.h"
 #include "components/ui_label_button_ext.h"
-#include "components/ui_chart.h"
+#include "components/ui_label_ext.h"
 #include "components/ui_list.h"
-#include "components/icon_adapter.h"
-#include "wearable_log.h"
+#include "components/ui_view_group.h"
 #include "ohos_types.h"
-#include "components/ui_card_page.h"
+#include "wearable_log.h"
+#include <ui_scroll_view.h>
 
+#include "TraingEnddataPresenter.h"
+#include "traing/Training_UiConfig.h"
 #include "traing/include/TraingModel.h"
 #include "uicomponents/UIComponents.h"
-#include "traing/Training_UiConfig.h"
-#include "TraingEnddataPresenter.h"
-namespace OHOS
-{
+namespace OHOS {
 #define BUTTONBACK "button1"
 
-    class TraingEnddataPresenter;
-    class TraingEnddataView : public View<TraingEnddataPresenter>
-    {
+class TraingEnddataPresenter;
+class TraingEnddataView : public View<TraingEnddataPresenter> {
 
-    public:
-        TraingEnddataView();
-        virtual ~TraingEnddataView();
-        static TraingEnddataView *GetInstance(void);
+public:
+  TraingEnddataView();
+  virtual ~TraingEnddataView();
+  static TraingEnddataView *GetInstance(void);
 
-        void OnStart() override;
-        void OnSetUpView() override;
-        void OnTearDownView() override;
-        void OnStop() override;
-        void InitView();
-        void DeInit();
+  void OnStart() override;
+  void OnSetUpView() override;
+  void OnTearDownView() override;
+  void OnStop() override;
+  void InitView();
+  void DeInit();
 
-        void PreLoad(void);
+  void PreLoad(void);
 
-        void InitData(void);
-        void InitializeImageViews(void);
-        void InitializeLabels(void);
-        void SetLabelsTextColor(const std::vector<UILabel *> &labels, OHOS::ColorType color);
-        void AddLabelsToScrollView(const std::vector<UILabel *> &labels);
-        void InitializeExitControls(void);
+  void InitData(void);
+  void InitializeImageViews(void);
+  void InitializeLabels(void);
+  void SetLabelsTextColor(const std::vector<UILabel *> &labels,
+                          OHOS::ColorType color);
+  void AddLabelsToScrollView(const std::vector<UILabel *> &labels);
+  void InitializeExitControls(void);
 
-        void BonusdataView();
-        void ExitView();
+  void BonusdataView();
+  void ExitView();
 
-    private:
-        UIView::OnDragListener *draglistener{nullptr};
-        TraingEnddataView(TraingEnddataView &&) = delete;
-        TraingEnddataView &operator=(TraingEnddataView &&) = delete;
+private:
+  UIView::OnDragListener *draglistener{nullptr};
+  TraingEnddataView(TraingEnddataView &&) = delete;
+  TraingEnddataView &operator=(TraingEnddataView &&) = delete;
 
-        UIViewGroup *container_ = nullptr;
-        UIScrollView *scrollView_ = nullptr;
+  UIViewGroup *container_ = nullptr;
+  UIScrollView *scrollView_ = nullptr;
 
-        UILabelExt *labelutime = nullptr;   // u训练时间
-        UILabelExt *labelutag = nullptr;    // u训练完成度
-        UILabelExt *labelumile = nullptr;   // u训练距离
-        UILabelExt *labeluheart = nullptr;  // u训练平均心率
-        UILabelExt *labelustrong = nullptr; // u训练强度
-        UILabelExt *labelusteps = nullptr;  // u训练步数
-        UILabelExt *labeluavpace = nullptr; // u训练平均配速
-        UILabelExt *labelufreq = nullptr;   // u训练步频
-        UILabelExt *labelustride = nullptr; // u训练步幅
+  UILabelExt *labelutime = nullptr;    // u训练时间
+  UILabelExt *labelutag = nullptr;     // u训练完成度
+  UILabelExt *labelumile = nullptr;    // u训练距离
+  UILabelExt *labeluheart = nullptr;   // u训练平均心率
+  UILabelExt *labelustrong = nullptr;  // u训练强度
+  UILabelExt *labelusteps = nullptr;   // u训练步数
+  UILabelExt *labeluavpace = nullptr;  // u训练平均配速
+  UILabelExt *labelufreq = nullptr;    // u训练步频
+  UILabelExt *labelustride = nullptr;  // u训练步幅
+  UILabelExt *labelucalorie = nullptr; // u训练卡路里
 
-        UILabelExt *labeltype = nullptr;     // 训练类型
-        UILabelExt *labelsport = nullptr;    // 训练项
-        UILabelExt *labelduration = nullptr; // 训练时间
-        UILabelExt *labeltag = nullptr;      // 训练目标完成度
-        UILabelExt *labeltime = nullptr;     // 训练时长
-        UILabelExt *labelmile = nullptr;     // 训练距离
-        UILabelExt *labelheart = nullptr;    // 训练平均心率
-        UILabelExt *labelstrong = nullptr;   // 训练强度
-        UILabelExt *labelsteps = nullptr;    // 训练步数
-        UILabelExt *labelavpace = nullptr;   // 训练平均配速
-        UILabelExt *labelfreq = nullptr;     // 训练步频
-        UILabelExt *labelstride = nullptr;   // 训练步幅
+  UILabelExt *labeltype = nullptr;     // 训练类型
+  UILabelExt *labelsport = nullptr;    // 训练项
+  UILabelExt *labelduration = nullptr; // 训练时间
+  UILabelExt *labeltag = nullptr;      // 训练目标完成度
+  UILabelExt *labeltime = nullptr;     // 训练时长
+  UILabelExt *labelmile = nullptr;     // 训练距离
+  UILabelExt *labelheart = nullptr;    // 训练平均心率
+  UILabelExt *labelstrong = nullptr;   // 训练强度
+  UILabelExt *labelsteps = nullptr;    // 训练步数
+  UILabelExt *labelavpace = nullptr;   // 训练平均配速
+  UILabelExt *labelfreq = nullptr;     // 训练步频
+  UILabelExt *labelstride = nullptr;   // 训练步幅
+  UILabelExt *labelcalories = nullptr; // 训练卡路里
 
-        UILabelExt *exitLabel = nullptr;        // APP提醒
-        UILabelButtonExt *exitButton = nullptr; // 返回按键
+  UILabelExt *exitLabel = nullptr;        // APP提醒
+  UILabelButtonExt *exitButton = nullptr; // 返回按键
 
-        UIImageView *imageIcon = nullptr;
-        UIImageView *imageLine2 = nullptr;
-        UIImageView *imageLine3 = nullptr;
-        UIImageView *imageLine4 = nullptr;
-        UIImageView *imageLine5 = nullptr;
-        UIImageView *imageLine6 = nullptr;
-        UIImageView *imageLine7 = nullptr;
-        UIImageView *imageLine8 = nullptr;
-        UIImageView *imageLine9 = nullptr;
-        UIImageView *imageLine10 = nullptr;
+  UIImageView *imageIcon = nullptr;
+  UIImageView *imageLine2 = nullptr;
+  UIImageView *imageLine3 = nullptr;
+  UIImageView *imageLine4 = nullptr;
+  UIImageView *imageLine5 = nullptr;
+  UIImageView *imageLine6 = nullptr;
+  UIImageView *imageLine7 = nullptr;
+  UIImageView *imageLine8 = nullptr;
+  UIImageView *imageLine9 = nullptr;
+  UIImageView *imageLine10 = nullptr;
+  UIImageView *imageLine11 = nullptr;
+  UIImageView *imageLine12 = nullptr;
 
-        bool viewiInitStatus{false};
-    };
+  bool viewiInitStatus{false};
+};
 } // namespace OHOS
 #endif // TraingEnddata_PRESENTER_H
index ded48ee..a8abf78 100644 (file)
 
 #include "traing/include/TraingEnddataView.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 "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 <cmath>  // 包含数学函数库,用于四舍五入
-#include <string> // 包含字符串处理库,用于使用 std::to_string
+#include <cmath> // 包含数学函数库,用于四舍五入
+#include <iostream>
+#include <sstream> // 用于 std::ostringstream
+#include <string>  // 包含字符串处理库,用于使用 std::to_string
+#include <ui_scroll_view.h>
 
 /*测试打印函数*/
-#define PRINT_LINE_INFO() WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "File: %s, Line: %d\r\n", __FILE__, __LINE__)
-#define PRINT_FUNCTION_LINE() WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Function: %s, Line: %d\r\n", __FUNCTION__, __LINE__)
-
+#define PRINT_LINE_INFO()                                                      \
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "File: %s, Line: %d\r\n", __FILE__,   \
+                __LINE__)
+#define PRINT_FUNCTION_LINE()                                                  \
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Function: %s, Line: %d\r\n",         \
+                __FUNCTION__, __LINE__)
+
+/*
+    普通运动:
+                时长,平均心率,训练强度,卡路里,目标完成度
+    算法支持运动:
+                时长,平均心率,训练强度,卡路里,
+                距离,步数,平均配速,步幅,步频,目标完成度
+*/
 #define UI_UPDATA 0
-namespace OHOS
-{
+namespace OHOS {
 
-    static const int startY_Unit = 252;
-    static const int startY_Value = 292;
-    static const int labelHeight = 40;
-    static const int labelInterval = 130;
-    ColorType textColor = Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f);
+static const int startY_Unit = 252;
+static const int startY_Value = 292;
+static const int labelHeight = 40;
+static const int labelInterval = 130;
+ColorType textColor = Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f);
 
-    static const int initialY = 132;
-    static const int lineHeight = 130;
-    static const int iconHeight = 80;
-    static const int verticalOffset = 2;
-    static const int baseY = 214;
+static const int initialY = 132;
+static const int lineHeight = 130;
+static const int iconHeight = 80;
+static const int verticalOffset = 2;
+static const int baseY = 214;
 
-    static TraingEnddataView *g_pTraingEnddataView{nullptr};
+static TraingEnddataView *g_pTraingEnddataView{nullptr};
 
-    TraingEnddataView::TraingEnddataView()
-    {
-        g_pTraingEnddataView = this;
-    }
+TraingEnddataView::TraingEnddataView() { g_pTraingEnddataView = this; }
 
-    TraingEnddataView::~TraingEnddataView()
-    {
-        // DeInit();
-        UIViewGroup *tmpGroup = dynamic_cast<UIViewGroup *>(container_);
-        UIViewGroup::RemoveAndDeleteAllRecursively(tmpGroup);
+TraingEnddataView::~TraingEnddataView() {
+  // DeInit();
+  scrollView_->RemoveAll();
 
-        g_pTraingEnddataView = nullptr;
-    }
+  UIViewGroup *tmpGroup = dynamic_cast<UIViewGroup *>(container_);
+  UIViewGroup::RemoveAndDeleteAllRecursively(tmpGroup);
 
-    TraingEnddataView *TraingEnddataView::GetInstance()
-    {
+  g_pTraingEnddataView = nullptr;
+}
 
-        return g_pTraingEnddataView;
-    }
+TraingEnddataView *TraingEnddataView::GetInstance() {
 
-    // 初始化图像
-    void TraingEnddataView ::InitializeImageViews()
-    {
-        // 初始化主图标
-        InitImageView(imageIcon, 80, initialY, 54, iconHeight, "image", WALKING_54_IMAGE);
-
-        InitImageView(imageLine2, 97, baseY, 80, 20, "image2", LINE_IMAGE);                  // imageLine2
-        InitImageView(imageLine3, 97, baseY + lineHeight, 80, 20, "image3", LINE_IMAGE);     // imageLine3
-        InitImageView(imageLine4, 97, baseY + 2 * lineHeight, 80, 20, "image4", LINE_IMAGE); // imageLine4
-        InitImageView(imageLine5, 97, baseY + 3 * lineHeight, 80, 20, "image5", LINE_IMAGE); // imageLine5
-        scrollView_->Add(imageLine2);
-        scrollView_->Add(imageLine3);
-        scrollView_->Add(imageLine4);
-        scrollView_->Add(imageLine5);
-        scrollView_->Add(imageIcon);
-
-#if UI_UPDATA
-        InitImageView(imageLine6, 97, baseY + 4 * lineHeight, 80, 20, "image6", LINE_IMAGE); // imageLine6
-        InitImageView(imageLine7, 97, baseY + 5 * lineHeight, 80, 20, "image7", LINE_IMAGE); // imageLine7
-        scrollView_->Add(imageLine6);
-        scrollView_->Add(imageLine7);
-#endif
-    }
-    void TraingEnddataView ::InitializeLabels(void)
-    {
-        /*title and sport*/
-        InitRollLabel(labeltype, 83, 50, 300, 35, "label1", STR_EXERCISE_LIST, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitLabel(labelsport, 147, 140, 240, 35, "label6", "健走", DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitLabel(labelduration, 146, 179, 240, 40, "label7", "13:00:22-15:00:12", DEFAULT_VECTOR_FONT_FILENAME, 28);
-
-        // 初始化单位Label
-        InitRollLabel(labelutag, 146, startY_Unit + labelInterval * 0, 240, 40, "label8", STR_GOAL_ACCOMPLISHMENT_DEGREE, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitRollLabel(labelutime, 146, startY_Unit + labelInterval * 1, 240, 40, "label9", STR_TRAINING_DURATION, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitRollLabel(labeluheart, 146, startY_Unit + labelInterval * 2, 240, 40, "label11", STR_MEAN_HEART_RATE_MIN, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitRollLabel(labelustrong, 146, startY_Unit + labelInterval * 3, 240, 40, "label2", STR_TRAINING_INTENSITY, DEFAULT_VECTOR_FONT_FILENAME, 30);
-
-        // 设置文本颜色
-        labelduration->SetTextColor(textColor);
-        labelutag->SetTextColor(textColor);
-        labelutime->SetTextColor(textColor);
-        labeluheart->SetTextColor(textColor);
-        labelustrong->SetTextColor(textColor);
-
-        // 初始化值
-        InitLabel(labeltag, 146, startY_Value + 0 * labelInterval, 240, 60, "label18", "--", DEFAULT_VECTOR_FONT_FILENAME, 40);
-        labeltag->SetTextColor(Color::Green());
-        InitLabel(labeltime, 146, startY_Value + 1 * labelInterval, 240, 60, "label14", "00:00:00", DEFAULT_VECTOR_FONT_FILENAME, 40);
-        labeltime->SetTextColor(Color::Red());
-        InitLabel(labelheart, 146, startY_Value + 2 * labelInterval, 240, 60, "label16", "--", DEFAULT_VECTOR_FONT_FILENAME, 40);
-        labelheart->SetTextColor(Color::Yellow());
-        InitLabel(labelstrong, 146, startY_Value + 3 * labelInterval, 240, 60, "label17", "中等强度", DEFAULT_VECTOR_FONT_FILENAME, 30);
-        labelstrong->SetTextColor(Color::Red());
-
-        scrollView_->Add(labeltype);
-        scrollView_->Add(labelsport);
-        scrollView_->Add(labeltime);
-        scrollView_->Add(labelutag);
-        scrollView_->Add(labelutime);
-        scrollView_->Add(labeluheart);
-        scrollView_->Add(labelustrong);
-
-        scrollView_->Add(labeltag);
-        scrollView_->Add(labelduration);
-        scrollView_->Add(labelheart);
-        scrollView_->Add(labelstrong);
-
-#if UI_UPDATA
-        InitRollLabel(labelumile, 146, startY_Unit + labelInterval * 2, 240, 40, "label10", STR_RANGE_MILE, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitRollLabel(labelusteps, 146, startY_Unit + labelInterval * 4, 240, 40, "label12", STR_STEP_NUMBER, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        labelumile->SetTextColor(textColor);
-        labelusteps->SetTextColor(textColor);
-
-        InitLabel(labelmile, 146, startY_Value + 2 * labelInterval, 240, 60, "label15", "8,301", DEFAULT_VECTOR_FONT_FILENAME, 40);
-        labelmile->SetTextColor(Color::Blue());
-        InitLabel(labelsteps, 146, startY_Value + 4 * labelInterval, 240, 60, "label16", "5000", DEFAULT_VECTOR_FONT_FILENAME, 40);
-        labelsteps->SetTextColor(Color::Green());
-
-        scrollView_->Add(labelumile);
-        scrollView_->Add(labelusteps);
-        scrollView_->Add(labelmile);
-        scrollView_->Add(labelsteps);
-#endif
-    }
-    /* InitView:初始化界面*/
-    void TraingEnddataView ::InitView()
-    {
+  return g_pTraingEnddataView;
+}
+
+// 初始化图像
+void TraingEnddataView ::InitializeImageViews() {
+  // 初始化主图标
+  InitImageView(imageIcon, 80, initialY, 54, iconHeight, "image",
+                WALKING_54_IMAGE);
+
+  InitImageView(imageLine2, 97, baseY, 80, 20, "image2",
+                LINE_IMAGE); // imageLine2
+  InitImageView(imageLine3, 97, baseY + lineHeight, 80, 20, "image3",
+                LINE_IMAGE); // imageLine3
+  InitImageView(imageLine4, 97, baseY + 2 * lineHeight, 80, 20, "image4",
+                LINE_IMAGE); // imageLine4
+  InitImageView(imageLine5, 97, baseY + 3 * lineHeight, 80, 20, "image5",
+                LINE_IMAGE); // imageLine5
+
+  bool isincludeTag = TraingModel::GetInstance()->GetSportTag();
+  if (isincludeTag) {
+    InitImageView(imageLine6, 97, baseY + 4 * lineHeight, 80, 20, "image7",
+                  LINE_IMAGE);
+    scrollView_->Add(imageLine6);
+  }
+
+  scrollView_->Add(imageLine2);
+  scrollView_->Add(imageLine3);
+  scrollView_->Add(imageLine4);
+  scrollView_->Add(imageLine5);
+
+  scrollView_->Add(imageIcon);
+}
+/*
+    InitView:初始化界面
+
+    普通运动:
+                时长,平均心率,训练强度,卡路里,目标完成度
+    算法支持运动:
+                时长,平均心率,训练强度,卡路里,目标完成度
+                距离,步数,平均配速,步幅,步频,
+
+    蓝色:距离、平均配速
+    黄色:训练时长
+    橙色:平均心率、训练强度
+    绿色:步数,步幅,步频,平均配速,卡路里,目标完成度
+*/
+void TraingEnddataView ::InitializeLabels() {
+
+  /*title and sport*/
+  InitRollLabel(labeltype, 83, 50, 300, 35, "label1", STR_EXERCISE_LIST,
+                DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabel(labelsport, 147, 140, 240, 35, "label6", "健走",
+            DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabel(labelduration, 146, 179, 240, 40, "label7", "13:00:22-15:00:12",
+            DEFAULT_VECTOR_FONT_FILENAME, 28);
+  // 初始化Label
+  //时长
+  InitRollLabel(labelutime, 146, startY_Unit + labelInterval * 0, 240, 40,
+                "label8", STR_TRAINING_DURATION, DEFAULT_VECTOR_FONT_FILENAME,
+                30);
+  InitLabel(labeltime, 146, startY_Value + 0 * labelInterval, 240, 60,
+            "label14", "00:00:00", DEFAULT_VECTOR_FONT_FILENAME, 40);
+  labeltime->SetTextColor(Color::Yellow());
+  //平均心率
+  InitRollLabel(labeluheart, 146, startY_Unit + labelInterval * 1, 240, 40,
+                "label9", STR_MEAN_HEART_RATE_MIN, DEFAULT_VECTOR_FONT_FILENAME,
+                30);
+  InitLabel(labelheart, 146, startY_Value + 1 * labelInterval, 240, 60,
+            "label16", "--", DEFAULT_VECTOR_FONT_FILENAME, 40);
+  labelheart->SetTextColor(Color::Orange());
+  // 训练强度
+  InitRollLabel(labelustrong, 146, startY_Unit + labelInterval * 2, 240, 40,
+                "label11", STR_TRAINING_INTENSITY, DEFAULT_VECTOR_FONT_FILENAME,
+                30);
+  InitLabel(labelstrong, 146, startY_Value + 2 * labelInterval, 240, 60,
+            "label17", "中等强度", DEFAULT_VECTOR_FONT_FILENAME, 30);
+  labelstrong->SetTextColor(Color::Orange());
+  //卡路里
+  InitRollLabel(labelucalorie, 146, startY_Unit + labelInterval * 3, 240, 40,
+                "label2", STR_CALORIE_SETTING, DEFAULT_VECTOR_FONT_FILENAME,
+                30);
+  InitLabel(labelcalories, 146, startY_Value + 3 * labelInterval, 240, 60,
+            "label15", "--", DEFAULT_VECTOR_FONT_FILENAME, 40);
+  labelcalories->SetTextColor(Color::Green());
+
+  //目标完成度
+  bool isincludeTag = TraingModel::GetInstance()->GetSportTag();
+  if (isincludeTag) {
+    InitRollLabel(labelutag, 146, startY_Unit + labelInterval * 4, 240, 40,
+                  "label10", STR_GOAL_ACCOMPLISHMENT_DEGREE,
+                  DEFAULT_VECTOR_FONT_FILENAME, 30);
+    labelutag->SetTextColor(textColor);
+    InitLabel(labeltag, 146, startY_Value + 4 * labelInterval, 240, 60,
+              "label18", "--", DEFAULT_VECTOR_FONT_FILENAME, 40);
+    labeltag->SetTextColor(Color::Green());
+    scrollView_->Add(labelutag);
+    scrollView_->Add(labeltag);
+  }
+
+  // 设置文本颜色
+  labelduration->SetTextColor(textColor);
+  labelutime->SetTextColor(textColor);
+  labeluheart->SetTextColor(textColor);
+  labelustrong->SetTextColor(textColor);
+  labelucalorie->SetTextColor(textColor);
+
+  scrollView_->Add(labeltype);
+  scrollView_->Add(labelsport);
+  scrollView_->Add(labeltime);
+
+  scrollView_->Add(labelutime);
+  scrollView_->Add(labeluheart);
+  scrollView_->Add(labelustrong);
+  scrollView_->Add(labelucalorie);
+
+  scrollView_->Add(labelduration);
+  scrollView_->Add(labelheart);
+  scrollView_->Add(labelstrong);
+  scrollView_->Add(labelcalories);
+}
+// 增加额外配置
+void TraingEnddataView::BonusdataView() {
+  if (!TraingModel::GetInstance()->GetIsSpecial())
+    return;
+
+  bool isincludeTag = TraingModel::GetInstance()->GetSportTag();
+  int tagflge = isincludeTag ? 1 : 0;
+
+  // 初始化线条
+
+  InitImageView(imageLine8, 97, baseY + (4 + tagflge) * lineHeight, 80, 20,
+                "image8", LINE_IMAGE); // imageLine8
+  InitImageView(imageLine9, 97, baseY + (5 + tagflge) * lineHeight, 80, 20,
+                "image9", LINE_IMAGE); // imageLine9
+  InitImageView(imageLine10, 97, baseY + (6 + tagflge) * lineHeight, 80, 20,
+                "image10", LINE_IMAGE); // imageLine10
+  InitImageView(imageLine11, 97, baseY + (7 + tagflge) * lineHeight, 80, 20,
+                "image11", LINE_IMAGE);
+  InitImageView(imageLine12, 97, baseY + (8 + tagflge) * lineHeight, 80, 20,
+                "image7", LINE_IMAGE);
+
+  scrollView_->Add(imageLine8);
+  scrollView_->Add(imageLine9);
+  scrollView_->Add(imageLine10);
+  scrollView_->Add(imageLine11);
+  scrollView_->Add(imageLine12);
+
+  // 初始化标签
+  // 距离
+  InitRollLabel(labelumile, 146, startY_Unit + labelInterval * (4 + tagflge),
+                240, 40, "label10", STR_RANGE_MILE,
+                DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabel(labelmile, 146, startY_Value + (4 + tagflge) * labelInterval, 240,
+            60, "label15", "--", DEFAULT_VECTOR_FONT_FILENAME, 40);
+  labelumile->SetTextColor(textColor);
+  labelmile->SetTextColor(Color::Blue());
+
+  // 步数
+  InitRollLabel(labelusteps, 146, startY_Unit + labelInterval * (5 + tagflge),
+                240, 40, "label12", STR_STEP_NUMBER,
+                DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabel(labelsteps, 146, startY_Value + (5 + tagflge) * labelInterval, 240,
+            60, "label17", "--", DEFAULT_VECTOR_FONT_FILENAME, 40);
+  labelusteps->SetTextColor(textColor);
+  labelsteps->SetTextColor(Color::Green());
+
+  // 平均配速
+  InitRollLabel(labeluavpace, 146, startY_Unit + labelInterval * (6 + tagflge),
+                240, 40, "label2", STR_AVG_PACE, DEFAULT_VECTOR_FONT_FILENAME,
+                30);
+  InitLabel(labelavpace, 146, startY_Value + (6 + tagflge) * labelInterval, 240,
+            60, "label17", "--", DEFAULT_VECTOR_FONT_FILENAME, 40);
+  labeluavpace->SetTextColor(textColor);
+  labelavpace->SetTextColor(Color::Green());
+
+  // 步幅
+  InitRollLabel(labelustride, 146, startY_Unit + labelInterval * (7 + tagflge),
+                240, 40, "label2", STR_STEP_LENGTH,
+                DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabel(labelstride, 146, startY_Value + (7 + tagflge) * labelInterval, 240,
+            60, "label17", "77", DEFAULT_VECTOR_FONT_FILENAME, 40);
+  labelustride->SetTextColor(textColor);
+  labelstride->SetTextColor(Color::Green());
+
+  // 步频
+  InitRollLabel(labelufreq, 146, startY_Unit + labelInterval * (8 + tagflge),
+                240, 40, "label2", STR_STEP_FREQUENCY,
+                DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabel(labelfreq, 146, startY_Value + (8 + tagflge) * labelInterval, 240,
+            60, "label17", "154", DEFAULT_VECTOR_FONT_FILENAME, 40);
+  labelufreq->SetTextColor(textColor);
+  labelfreq->SetTextColor(Color::Green());
+
+  scrollView_->Add(labelumile);
+  scrollView_->Add(labelmile);
+  scrollView_->Add(labelusteps);
+  scrollView_->Add(labelsteps);
+  scrollView_->Add(labeluavpace);
+  scrollView_->Add(labelavpace);
+  scrollView_->Add(labelustride);
+  scrollView_->Add(labelstride);
+  scrollView_->Add(labelufreq);
+  scrollView_->Add(labelfreq);
+}
+// 配置退出相关位置
+void TraingEnddataView::ExitView() {
+
+  bool isincludeTag = TraingModel::GetInstance()->GetSportTag();
+  int tagflge = isincludeTag ? 1 : 0;
+
+  if (TraingModel::GetInstance()->GetIsSpecial()) {
+    // 初始化退出(最后 要根据前方配置设置位置)
+    // 是否为特殊运动
+    // 是否包含目标
+    InitRollLabel(exitLabel, 80,
+                  (startY_Value + labelInterval * (8 + tagflge) + 100), 300, 40,
+                  "label8", STR_MORE_APP, DEFAULT_VECTOR_FONT_FILENAME, 30);
+    InitButtonExt(exitButton, 42,
+                  (startY_Value + labelInterval * (8 + tagflge) + 160), 380,
+                  100, BUTTONBACK, STR_CLOSE, 30);
+  } else {
+    InitRollLabel(exitLabel, 80,
+                  (startY_Value + labelInterval * (3 + tagflge) + 100), 300, 40,
+                  "label8", STR_MORE_APP, DEFAULT_VECTOR_FONT_FILENAME, 30);
+    InitButtonExt(exitButton, 42,
+                  (startY_Value + labelInterval * (3 + tagflge) + 160), 380,
+                  100, BUTTONBACK, STR_CLOSE, 30);
+  }
+  exitLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
+  scrollView_->Add(exitLabel);
+  exitButton->SetOnClickListener(presenter_);
+  scrollView_->Add(exitButton);
+}
+void TraingEnddataView ::InitView() {
 
-        scrollView_ = new UIScrollView();
+  scrollView_ = new UIScrollView();
 
-        scrollView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
-        scrollView_->SetScrollBlankSize(50);
-        // scrollView_->SetReboundSize(35);
-        scrollView_->SetHorizontalScrollState(false);
-        scrollView_->RequestFocus();
-        scrollView_->SetRotateFactor(1.0);
-        scrollView_->SetMaxScrollDistance(1000);
-        scrollView_->SetDragACCLevel(5);
-        scrollView_->SetSwipeACCLevel(800); /*设置手指抬起屏幕后的补偿距离。*/
-        scrollView_->SetTouchable(true);
-        scrollView_->SetDraggable(true);
+  scrollView_->SetPosition(0, 0, Screen::GetInstance().GetWidth(),
+                           Screen::GetInstance().GetHeight());
+  scrollView_->SetScrollBlankSize(100);
+  scrollView_->SetReboundSize(50);
+  scrollView_->SetHorizontalScrollState(false);
+  scrollView_->RequestFocus();
+  scrollView_->SetRotateFactor(1.0);
+  scrollView_->SetMaxScrollDistance(1000);
+  scrollView_->SetDragACCLevel(5);
+  scrollView_->SetSwipeACCLevel(800); /*设置手指抬起屏幕后的补偿距离。*/
+  scrollView_->SetTouchable(true);
+  scrollView_->SetDraggable(true);
 
-        /*初始化线条*/
-        InitializeImageViews();
+  /*初始化线条*/
+  InitializeImageViews();
 
-        /*初始化label*/
-        InitializeLabels();
+  /*初始化label*/
+  InitializeLabels();
 
-        BonusdataView(); // 配置额外数据
+  BonusdataView(); // 配置额外数据
 
-        ExitView(); // 配置退出组件
+  ExitView(); // 配置退出组件
 
-        container_->Add(scrollView_);
-    }
-    // 增加额外配置
-    void TraingEnddataView::BonusdataView()
+  container_->Add(scrollView_);
+}
+
+/* DeInit:删除组件 */
+void TraingEnddataView::DeInit() {
+  scrollView_->RemoveAll();
+
+  /*单位label*/
+  delete labelutime;
+  labelutime = nullptr;
+  delete labelutag;
+  labelutag = nullptr;
+  delete labelusteps;
+  labelusteps = nullptr;
+  delete labelumile;
+  labelumile = nullptr;
+  delete labeluheart;
+  labeluheart = nullptr;
+  delete labelustrong;
+  labelustrong = nullptr;
+  delete labeluavpace;
+  labeluavpace = nullptr;
+  delete labelufreq;
+  labelufreq = nullptr;
+  delete labelustride;
+  labelustride = nullptr;
+
+  /*值label*/
+  delete labeltype;
+  labeltype = nullptr;
+  delete labelsport;
+  labelsport = nullptr;
+  delete labelduration;
+  labelduration = nullptr;
+  delete labeltag;
+  labeltag = nullptr;
+  delete labeltime;
+  labeltime = nullptr;
+  delete labelmile;
+  labelmile = nullptr;
+  delete labelheart;
+  labelheart = nullptr;
+  delete labelstrong;
+  labelstrong = nullptr;
+  delete labelsteps;
+  labelsteps = nullptr;
+  delete labelavpace;
+  labelavpace = nullptr;
+  delete labelfreq;
+  labelfreq = nullptr;
+  delete labelstride;
+  labelstride = nullptr;
+
+  /*图片label*/
+  delete imageIcon;
+  imageIcon = nullptr;
+  delete imageLine2;
+  imageLine2 = nullptr;
+  delete imageLine3;
+  imageLine3 = nullptr;
+  delete imageLine4;
+  imageLine4 = nullptr;
+  delete imageLine5;
+  imageLine5 = nullptr;
+  delete imageLine6;
+  imageLine6 = nullptr;
+  delete imageLine8;
+  imageLine8 = nullptr;
+  delete imageLine9;
+  imageLine9 = nullptr;
+  delete imageLine10;
+  imageLine10 = nullptr;
+
+  /*退出相关*/
+  delete exitButton;
+  exitButton = nullptr;
+  delete exitLabel;
+  exitLabel = nullptr;
+
+  delete scrollView_;
+  scrollView_ = nullptr;
+}
+
+void TraingEnddataView::PreLoad(void) {
+  if (!viewiInitStatus) {
+    InitView();
+    viewiInitStatus = true;
+  }
+}
+
+void TraingEnddataView::InitData() {
+  SportData *enddata = TraingModel::GetInstance()->GetSportdata();
+
+  if (enddata == nullptr) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Enddata is nullptr. Exiting InitData()...\r\n");
+    return;
+  }
+
+  // 训练图标Icon
+  std::string imageStr =
+      TraingModel::GetInstance()->GetSportType(enddata->sportType);
+  if (!imageStr.empty()) {
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "imageIcon %s\r\n",
+                  imageStr.c_str());
+    if (imageIcon) // 检查 imageIcon 是否为空
     {
-        if (!TraingModel::GetInstance()->GetIsSpecial())
-            return;
-#if UI_UPDATA
-        /*线条*/
-        InitImageView(imageLine8, 97, baseY + 6 * lineHeight, 80, 20, "image8", LINE_IMAGE);   // imageLine8
-        InitImageView(imageLine9, 97, baseY + 7 * lineHeight, 80, 20, "image9", LINE_IMAGE);   // imageLine9
-        InitImageView(imageLine10, 97, baseY + 8 * lineHeight, 80, 20, "image10", LINE_IMAGE); // imageLine10
-        scrollView_->Add(imageLine8);
-        scrollView_->Add(imageLine9);
-        scrollView_->Add(imageLine10);
-        /*label*/
-        InitRollLabel(labeluavpace, 146, startY_Unit + labelInterval * 6, 240, 40, "label2", STR_AVG_PACE, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitRollLabel(labelufreq, 146, startY_Unit + labelInterval * 7, 240, 40, "label2", STR_STEP_FREQUENCY, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitRollLabel(labelustride, 146, startY_Unit + labelInterval * 8, 240, 40, "label2", STR_STEP_LENGTH, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        labeluavpace->SetTextColor(textColor);
-        labelufreq->SetTextColor(textColor);
-        labelustride->SetTextColor(textColor);
-        scrollView_->Add(labeluavpace);
-        scrollView_->Add(labelufreq);
-        scrollView_->Add(labelustride);
-
-        InitLabel(labelavpace, 146, startY_Value + 6 * labelInterval, 240, 60, "label17", "5.45", DEFAULT_VECTOR_FONT_FILENAME, 40);
-        labelavpace->SetTextColor(Color::Blue());
-        InitLabel(labelfreq, 146, startY_Value + 7 * labelInterval, 240, 60, "label17", "154", DEFAULT_VECTOR_FONT_FILENAME, 40);
-        labelfreq->SetTextColor(Color::Green());
-        InitLabel(labelstride, 146, startY_Value + 8 * labelInterval, 240, 60, "label17", "77", DEFAULT_VECTOR_FONT_FILENAME, 40);
-        labelstride->SetTextColor(Color::Green());
-        scrollView_->Add(labelavpace);
-        scrollView_->Add(labelfreq);
-        scrollView_->Add(labelstride);
-#else
-        InitRollLabel(labelumile, 146, startY_Unit + labelInterval * 4, 240, 40, "label10", STR_RANGE_MILE, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitRollLabel(labelusteps, 146, startY_Unit + labelInterval * 5, 240, 40, "label12", STR_STEP_NUMBER, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        labelumile->SetTextColor(textColor);
-        labelusteps->SetTextColor(textColor);
-
-        InitLabel(labelmile, 146, startY_Value + 4 * labelInterval, 240, 60, "label15", "8,301", DEFAULT_VECTOR_FONT_FILENAME, 40);
-        labelmile->SetTextColor(Color::Blue());
-        InitLabel(labelsteps, 146, startY_Value + 5 * labelInterval, 240, 60, "label16", "5000", DEFAULT_VECTOR_FONT_FILENAME, 40);
-        labelsteps->SetTextColor(Color::Green());
-
-        scrollView_->Add(labelumile);
-        scrollView_->Add(labelusteps);
-        scrollView_->Add(labelmile);
-        scrollView_->Add(labelsteps);
-
-        InitImageView(imageLine6, 97, baseY + 4 * lineHeight, 80, 20, "image6", LINE_IMAGE); // imageLine6
-        InitImageView(imageLine7, 97, baseY + 5 * lineHeight, 80, 20, "image7", LINE_IMAGE); // imageLine7
-        scrollView_->Add(imageLine6);
-        scrollView_->Add(imageLine7);
-#endif
+      imageIcon->SetSrc(imageStr.c_str());
     }
-    // 配置退出相关位置
-    void TraingEnddataView::ExitView()
+  } else {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Failed to get image string. Skipping imageIcon update.\r\n");
+  }
+
+  // 训练类
+  UIResourceTextId typeId =
+      TraingModel::GetInstance()->GetSportTypeId(enddata->sportType);
+  if (labeltype) // 检查 labeltype 是否为空
+  {
+    labeltype->SetTextId(typeId);
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Sport Type ID set: %d\r\n",
+                  typeId); // 打印运动类型ID
+  }
+
+  // 运动项目
+  if (labelsport) // 检查 labelsport 是否为空
+  {
+    labelsport->SetTextId(enddata->sportId);
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Sport ID set: %d\r\n",
+                  enddata->sportId); // 打印运动项目ID
+  }
+
+  // 运动开始结束时间
+  std::string startTimeStr = enddata->start_time;
+  std::string endTimeStr = enddata->end_time;
+  std::string durationStr = startTimeStr + "-" + endTimeStr;
+  if (labelduration) // 检查 labelduration 是否为空
+  {
+    labelduration->SetText(durationStr.c_str());
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Duration set: %s\r\n",
+                  durationStr.c_str()); // 打印运动时间段
+  }
+
+  // 运动目标
+  if (enddata->goaldegree) {
+    std::string tagStr = std::to_string(enddata->goaldegree) + "%";
+    if (labeltag) // 检查 labeltag 是否为空
     {
-        if (TraingModel::GetInstance()->GetIsSpecial())
-        {
-            // 初始化退出(最后 要根据前方配置设置位置)
-            InitRollLabel(exitLabel, 80, 1033, 300, 40, "label8", STR_MORE_APP, DEFAULT_VECTOR_FONT_FILENAME, 30);
-            InitButtonExt(exitButton, 42, 1083, 380, 100, BUTTONBACK, STR_CLOSE, 30);
-        }
-        else
-        {
-            InitRollLabel(exitLabel, 80, 773, 300, 40, "label8", STR_MORE_APP, DEFAULT_VECTOR_FONT_FILENAME, 30);
-            InitButtonExt(exitButton, 42, 823, 380, 100, BUTTONBACK, STR_CLOSE, 30);
-        }
-        exitLabel->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x7f));
-        scrollView_->Add(exitLabel);
-        exitButton->SetOnClickListener(presenter_);
-        scrollView_->Add(exitButton);
+      labeltag->SetText(tagStr.c_str());
+      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Goal degree set: %s\r\n",
+                    tagStr.c_str()); // 打印运动目标
     }
-    /* DeInit:删除组件 */
-    void TraingEnddataView::DeInit()
+  } else {
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                  "Enddata tag is null. Skipping labeltag update.\r\n");
+  }
+
+  // 运动时长
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Duration of the sport: %d\r\n",
+                enddata->duration);
+  std::string timeStr = TraingModel::GetInstance()->GetTrainingTime();
+  if (labeltime) // 检查 labeltime 是否为空
+  {
+    labeltime->SetText(timeStr.c_str());
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Training time set: %s\r\n",
+                  timeStr.c_str()); // 打印训练时间
+  }
+
+  // 运动距离
+  std::string mileStr = std::to_string(enddata->distance);
+  if (labelmile) // 检查 labelmile 是否为空
+  {
+    labelmile->SetText(mileStr.c_str());
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Distance set: %s\r\n",
+                  mileStr.c_str()); // 打印运动距离
+  }
+
+  // 平均心率
+  std::string heartStr = std::to_string(enddata->avgheart);
+  if (labelheart) // 检查 labelheart 是否为空
+  {
+    labelheart->SetText(heartStr.c_str());
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Average heart rate set: %s\r\n",
+                  heartStr.c_str()); // 打印平均心率
+  }
+
+  // 步数
+  std::string stepStr = std::to_string(enddata->steps);
+  if (labelsteps) // 检查 labelsteps 是否为空
+  {
+    labelsteps->SetText(stepStr.c_str());
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Steps set: %s\r\n",
+                  stepStr.c_str()); // 打印步数
+  }
+
+  // 训练强度
+  UIResourceTextId intensityid = TraingModel::GetInstance()->GetIntensity();
+  if (labelstrong) // 检查 labelstrong 是否为空
+  {
+    labelstrong->SetTextId(intensityid);
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Intensity ID set: %d\r\n",
+                  intensityid); // 打印训练强度ID
+  }
+  //卡路里
+  std::string calStr = std::to_string(enddata->calories);
+  if (labelcalories) // 检查 labelcal 是否为空
+  {
+    labelcalories->SetText(calStr.c_str());
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Calories set: %s\r\n",
+                  calStr.c_str()); // 打印卡路里
+  }
+
+  //特殊配置
+  if (TraingModel::GetInstance()->GetIsSpecial()) {
+    // 平均配速
+    // 需要计算一下 是秒 需要显示 分钟''秒''
+    int totalSeconds = enddata->apc; // 总秒数
+    int minutes = totalSeconds / 60; // 计算分钟
+    int seconds = totalSeconds % 60; // 计算剩余秒数
+    // 格式化为字符串
+    std::ostringstream oss;
+    oss << minutes << "'" << seconds << "\""; // 生成 "X'Y\"" 格式的字符串
+    std::string avpaceStr = oss.str();        // 得到字符串
+    if (labelavpace)                          // 检查标签是否为空
     {
-        scrollView_->RemoveAll();
-
-        /*单位label*/
-        delete labelutime;
-        labelutime = nullptr;
-        delete labelutag;
-        labelutag = nullptr;
-        delete labelusteps;
-        labelusteps = nullptr;
-        delete labelumile;
-        labelumile = nullptr;
-        delete labeluheart;
-        labeluheart = nullptr;
-        delete labelustrong;
-        labelustrong = nullptr;
-        delete labeluavpace;
-        labeluavpace = nullptr;
-        delete labelufreq;
-        labelufreq = nullptr;
-        delete labelustride;
-        labelustride = nullptr;
-
-        /*值label*/
-        delete labeltype;
-        labeltype = nullptr;
-        delete labelsport;
-        labelsport = nullptr;
-        delete labelduration;
-        labelduration = nullptr;
-        delete labeltag;
-        labeltag = nullptr;
-        delete labeltime;
-        labeltime = nullptr;
-        delete labelmile;
-        labelmile = nullptr;
-        delete labelheart;
-        labelheart = nullptr;
-        delete labelstrong;
-        labelstrong = nullptr;
-        delete labelsteps;
-        labelsteps = nullptr;
-        delete labelavpace;
-        labelavpace = nullptr;
-        delete labelfreq;
-        labelfreq = nullptr;
-        delete labelstride;
-        labelstride = nullptr;
-
-        /*图片label*/
-        delete imageIcon;
-        imageIcon = nullptr;
-        delete imageLine2;
-        imageLine2 = nullptr;
-        delete imageLine3;
-        imageLine3 = nullptr;
-        delete imageLine4;
-        imageLine4 = nullptr;
-        delete imageLine5;
-        imageLine5 = nullptr;
-        delete imageLine6;
-        imageLine6 = nullptr;
-        delete imageLine8;
-        imageLine8 = nullptr;
-        delete imageLine9;
-        imageLine9 = nullptr;
-        delete imageLine10;
-        imageLine10 = nullptr;
-
-        /*退出相关*/
-        delete exitButton;
-        exitButton = nullptr;
-        delete exitLabel;
-        exitLabel = nullptr;
-
-        delete scrollView_;
-        scrollView_ = nullptr;
+      labelavpace->SetText(avpaceStr.c_str());
+      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Average pace set: %s\r\n",
+                    avpaceStr.c_str()); // 打印平均配速
     }
 
-    void TraingEnddataView::PreLoad(void)
+    // 步频
+    std::string freqStr = std::to_string(enddata->cdc);
+    if (labelfreq) // 检查 labelfreq 是否为空
     {
-        if (!viewiInitStatus)
-        {
-            InitView();
-            viewiInitStatus = true;
-        }
+      labelfreq->SetText(freqStr.c_str());
+      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Cadence set: %s\r\n",
+                    freqStr.c_str()); // 打印步频
     }
 
-    void TraingEnddataView::InitData()
+    // 步幅
+    std::string strideStr = std::to_string(enddata->std);
+    if (labelstride) // 检查 labelstride 是否为空
     {
-        SportData *enddata = TraingModel::GetInstance()->GetSportdata();
-
-        if (enddata == nullptr)
-        {
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Enddata is nullptr. Exiting InitData()...\r\n");
-            return;
-        }
-
-        // 训练图标Icon
-        std::string imageStr = TraingModel::GetInstance()->GetSportType(enddata->sportType);
-        if (!imageStr.empty())
-        {
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "imageIcon %s\r\n", imageStr.c_str());
-            if (imageIcon) // 检查 imageIcon 是否为空
-            {
-                imageIcon->SetSrc(imageStr.c_str());
-            }
-        }
-        else
-        {
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Failed to get image string. Skipping imageIcon update.\r\n");
-        }
-
-        // 训练类
-        UIResourceTextId typeId = TraingModel::GetInstance()->GetSportTypeId(enddata->sportType);
-        if (labeltype) // 检查 labeltype 是否为空
-        {
-            labeltype->SetTextId(typeId);
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Sport Type ID set: %d\r\n", typeId); // 打印运动类型ID
-        }
-
-        // 运动项目
-        if (labelsport) // 检查 labelsport 是否为空
-        {
-            labelsport->SetTextId(enddata->sportId);
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Sport ID set: %d\r\n", enddata->sportId); // 打印运动项目ID
-        }
-
-        // 运动开始结束时间
-        std::string startTimeStr = enddata->start_time;
-        std::string endTimeStr = enddata->end_time;
-        std::string durationStr = startTimeStr + "-" + endTimeStr;
-        if (labelduration) // 检查 labelduration 是否为空
-        {
-            labelduration->SetText(durationStr.c_str());
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Duration set: %s\r\n", durationStr.c_str()); // 打印运动时间段
-        }
-
-        // 运动目标
-        if (enddata->goaldegree)
-        {
-            std::string tagStr = std::to_string(enddata->goaldegree) + "%";
-            if (labeltag) // 检查 labeltag 是否为空
-            {
-                labeltag->SetText(tagStr.c_str());
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Goal degree set: %s\r\n", tagStr.c_str()); // 打印运动目标
-            }
-        }
-        else
-        {
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Enddata tag is null. Skipping labeltag update.\r\n");
-        }
-
-        // 运动时长
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Duration of the sport: %d\r\n", enddata->duration);
-        std::string timeStr = TraingModel::GetInstance()->GetTrainingTime();
-        if (labeltime) // 检查 labeltime 是否为空
-        {
-            labeltime->SetText(timeStr.c_str());
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Training time set: %s\r\n", timeStr.c_str()); // 打印训练时间
-        }
-
-        // 运动距离
-        std::string mileStr = std::to_string(enddata->distance);
-        if (labelmile) // 检查 labelmile 是否为空
-        {
-            labelmile->SetText(mileStr.c_str());
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Distance set: %s\r\n", mileStr.c_str()); // 打印运动距离
-        }
-
-        // 平均心率
-        std::string heartStr = std::to_string(enddata->avgheart);
-        if (labelheart) // 检查 labelheart 是否为空
-        {
-            labelheart->SetText(heartStr.c_str());
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Average heart rate set: %s\r\n", heartStr.c_str()); // 打印平均心率
-        }
-
-        // 步数
-        std::string stepStr = std::to_string(enddata->steps);
-        if (labelsteps) // 检查 labelsteps 是否为空
-        {
-            labelsteps->SetText(stepStr.c_str());
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Steps set: %s\r\n", stepStr.c_str()); // 打印步数
-        }
-
-        // 训练强度
-        UIResourceTextId intensityid = TraingModel::GetInstance()->GetIntensity();
-        if (labelstrong) // 检查 labelstrong 是否为空
-        {
-            labelstrong->SetTextId(intensityid);
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Intensity ID set: %d\r\n", intensityid); // 打印训练强度ID
-        }
-
-        if (TraingModel::GetInstance()->GetIsSpecial())
-        {
-            // 平均配速
-            std::string avpaceStr = std::to_string(enddata->apc);
-            if (labelavpace) // 检查 labelavpace 是否为空
-            {
-                labelavpace->SetText(avpaceStr.c_str());
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Average pace set: %s\r\n", avpaceStr.c_str()); // 打印平均配速
-            }
-
-            // 步频
-            std::string freqStr = std::to_string(enddata->cdc);
-            if (labelfreq) // 检查 labelfreq 是否为空
-            {
-                labelfreq->SetText(freqStr.c_str());
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Cadence set: %s\r\n", freqStr.c_str()); // 打印步频
-            }
-
-            // 步幅
-            std::string strideStr = std::to_string(enddata->std);
-            if (labelstride) // 检查 labelstride 是否为空
-            {
-                labelstride->SetText(strideStr.c_str());
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stride length set: %s\r\n", strideStr.c_str()); // 打印步幅
-            }
-        }
-
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingEnddataView data initialization complete.\r\n");
+      labelstride->SetText(strideStr.c_str());
+      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Stride length set: %s\r\n",
+                    strideStr.c_str()); // 打印步幅
     }
-    // 设置按键监听
-    static void SetKeyActListener()
-    {
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetKeyActListener");
-        // 增加按键监听
-        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::TraingEnddataPresenter::GetInstance();
-        RootView::GetInstance()->SetOnKeyActListener(keyactListener);
-    }
-    void TraingEnddataView::OnStart()
-    {
-        View<TraingEnddataPresenter>::OnStart();
+  }
 
-        container_ = new UIViewGroup();
-        container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                "TraingEnddataView data initialization complete.\r\n");
+}
+// 设置按键监听
+static void SetKeyActListener() {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetKeyActListener");
+  // 增加按键监听
+  RootView::OnKeyActListener *keyactListener =
+      (RootView::OnKeyActListener *)OHOS::TraingEnddataPresenter::GetInstance();
+  RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+}
+void TraingEnddataView::OnStart() {
+  View<TraingEnddataPresenter>::OnStart();
 
-        PreLoad();
-        InitData(); // 刷新数据
+  container_ = new UIViewGroup();
+  container_->SetPosition(0, 0, Screen::GetInstance().GetWidth(),
+                          Screen::GetInstance().GetHeight());
 
-        SetContainerView(container_);
+  PreLoad();
+  InitData(); // 刷新数据
 
-        container_->SetDraggable(true);
-        container_->SetTouchable(true);
-        container_->SetOnDragListener(presenter_);
+  SetContainerView(container_);
 
-        SetKeyActListener();
-    }
+  container_->SetDraggable(true);
+  container_->SetTouchable(true);
+  container_->SetOnDragListener(presenter_);
 
-    void TraingEnddataView::OnSetUpView()
-    {
+  SetKeyActListener();
+}
 
-        View<TraingEnddataPresenter>::OnSetUpView();
-        Draw();
-    }
+void TraingEnddataView::OnSetUpView() {
 
-    void TraingEnddataView::OnTearDownView()
-    {
-        View<TraingEnddataPresenter>::OnTearDownView();
-        return;
-    }
+  View<TraingEnddataPresenter>::OnSetUpView();
+  Draw();
+}
 
-    void TraingEnddataView::OnStop()
-    {
-        View<TraingEnddataPresenter>::OnStop();
-        RootView::GetInstance()->ClearOnKeyActListener();
-        if (container_ != nullptr)
-        {
-            container_->RemoveAll();
-            delete container_;
-            container_ = nullptr;
-        }
-        return;
-    }
+void TraingEnddataView::OnTearDownView() {
+  View<TraingEnddataPresenter>::OnTearDownView();
+  return;
+}
 
+void TraingEnddataView::OnStop() {
+  View<TraingEnddataPresenter>::OnStop();
+  RootView::GetInstance()->ClearOnKeyActListener();
+  if (container_ != nullptr) {
+    container_->RemoveAll();
+    delete container_;
+    container_ = nullptr;
+  }
+  return;
 }
+
+} // namespace OHOS
index 8a81975..982df61 100644 (file)
@@ -1334,7 +1334,8 @@ namespace OHOS
         /* 定时器回调函数 */
         void TraingTimerCallback()
         {
-            g_motionTimes++;
+          g_motionTimes++;
+#if 0
             TraingCardPresenter *gTraingCardPresenter = TraingCardPresenter::GetInstance();
             if (gTraingCardPresenter == nullptr)
             {
@@ -1342,7 +1343,8 @@ namespace OHOS
                 return;
             }
             gTraingCardPresenter->ModifiesTime();
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingTimerCallback\r\n");
+#endif
+          WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingTimerCallback\r\n");
         }
 
         /* 开启定时器 */
index 7e52f68..b939924 100644 (file)
@@ -1,87 +1,75 @@
-/*** \r
- * @Date: 2024-04-15 10:55:58\r
- * @LastEditors: Caisking 3449750381@qq.com\r
- * @LastEditTime: 2024-08-24 15:18:42\r
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h\r
- */\r
-/***\r
- * @Date: 2024-04-15 10:55:58\r
- * @LastEditors: Caisking 3449750381@qq.com\r
- * @LastEditTime: 2024-08-19 10:55:50\r
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h\r
- */\r
-/***\r
- * @Author: Caisking 3449750381@qq.com\r
- * @Date: 2024-03-19 17:37:18\r
- * @LastEditors: Caisking 3449750381@qq.com\r
- * @LastEditTime: 2024-03-26 16:54:22\r
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingCardPresenter.h\r
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE\r
- */\r
 \r
 #ifndef _TraingCard_PRESENTER_H\r
 #define _TraingCard_PRESENTER_H\r
 \r
+#include "ModelListenerSample.h"\r
 #include "Presenter.h"\r
 #include "TraingCardView.h"\r
 #include "traing/training_card/include/TrainingControlView.h"\r
 #include "traing/training_card/include/TrainingDataView.h"\r
 #include "traing/training_card/include/TrainingDetailView.h"\r
-#include "ModelListenerSample.h"\r
 \r
-#include "cywee_service.h"\r
+#include "bletest.h"\r
+#include "components/root_view.h"\r
+#include "components/ui_swipe_view.h"\r
+#include "components/ui_view.h"\r
+\r
 #include "cywee_hal.h"\r
+#include "cywee_service.h"\r
 #include "traing/include/TraingModel.h"\r
 #include "uicomponents/UIComponents.h"\r
-#include "bletest.h"\r
 \r
-namespace OHOS\r
-{\r
-    class TraingCardView;\r
-    class TrainingControlView;\r
-    class TrainingDataView;\r
-    class TrainingDetailView;\r
-    class TraingModel;\r
-    class TraingCardPresenter : public Presenter<TraingCardView>,\r
-                                public UIView::OnClickListener,\r
-                                public UIView::OnDragListener,\r
-                                public ModelListenerSample\r
-    {\r
-    public:\r
-        TraingCardPresenter();\r
-        virtual ~TraingCardPresenter();\r
-        static TraingCardPresenter *GetInstance();\r
+namespace OHOS {\r
+class TraingCardView;\r
+class TrainingControlView;\r
+class TrainingDataView;\r
+class TrainingDetailView;\r
+class TraingModel;\r
+class TraingCardPresenter : public Presenter<TraingCardView>,\r
+                            public UIView::OnClickListener,\r
+                            public UIView::OnDragListener,\r
+                            public UISwipeView::OnSwipeListener,\r
+                            public ModelListenerSample {\r
+public:\r
+  TraingCardPresenter();\r
+  virtual ~TraingCardPresenter() override;\r
+  static TraingCardPresenter *GetInstance(void);\r
+\r
+  void OnStart() override;\r
+  void OnPause() override;\r
+  void OnResume() override;\r
+  void OnStop() override;\r
+  // void OnTickEvent() override;\r
+  void Notify() override;\r
 \r
-        void OnStart() override;\r
-        void OnPause() override;\r
-        void OnResume() override;\r
-        void OnStop() override;\r
-        // void OnTickEvent() override;\r
-        void Notify() override;\r
+  bool OpenSensor(ExerciseClass type);\r
+  bool ControlSensor(ExerciseState state);\r
 \r
-        bool OpenSensor(ExerciseClass type);\r
-        bool ControlSensor(ExerciseState state);\r
+  void ModifiesTime();\r
+  void RefreshData(SportData *sportdata); // 更新数据\r
 \r
-        void ModifiesTime();\r
-        void RefreshData(SportData *sportdata); // 更新数据\r
+  void UpdateTimeOfControl();\r
+  void UpdateTimeOfData();\r
+  void UpdateDataView();\r
 \r
-        /*蓝牙开启运动*/\r
-        bool send_sport_cmd(training_ble *cmd);\r
+  /*蓝牙开启运动*/\r
+  bool send_sport_cmd(training_ble *cmd);\r
 \r
-        /*控制*/\r
-        void handleStartState();\r
-        void handleEndState();\r
-        void handlePauseState();\r
-        void handleContinueState();\r
+  /*控制*/\r
+  void handleStartState();\r
+  void handleEndState();\r
+  void handlePauseState();\r
+  void handleContinueState();\r
 \r
-    private:\r
-        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
-        bool OnClick(UIView &view, const ClickEvent &event) override;\r
-        bool OnDrag(UIView &view, const DragEvent &event) override;\r
-        int tag_ = 0;\r
-        bool opensensorstuats{false};\r
-        // bool OnDragEnd(UIView& view, const DragEvent& event) override;\r
-    };\r
+private:\r
+  // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+  bool OnClick(UIView &view, const ClickEvent &event) override;\r
+  bool OnDrag(UIView &view, const DragEvent &event) override;\r
+  void OnSwipe(UISwipeView &view) override;\r
+  int tag_ = 0;\r
+  bool opensensorstuats{false};\r
+  // bool OnDragEnd(UIView& view, const DragEvent& event) override;\r
+};\r
 } // namespace OHOS\r
 \r
 #endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
index 704b059..3812646 100644 (file)
@@ -35,6 +35,7 @@
 #include "traing/training_card/include/TraingCardPresenter.h"\r
 \r
 #include "PlayersView.h"\r
+#include "traing/training_card/include/TraingDataAllView.h"\r
 #include "traing/training_card/include/TrainingControlView.h"\r
 #include "traing/training_card/include/TrainingDataView.h"\r
 #include "traing/training_card/include/TrainingDetailView.h"\r
@@ -80,6 +81,7 @@ namespace OHOS
         UICardPage *InitControlPage(void);\r
         UICardPage *InitDataPage(void);\r
         UICardPage *InitMusicPage(void);\r
+\r
         UICardPage *InitDetailPage(void);\r
 \r
         void InitView();\r
@@ -106,10 +108,10 @@ namespace OHOS
         UIScrollView *endView{nullptr};\r
         UIScrollView *getView{nullptr};\r
         UIScrollView *heartView{nullptr};\r
-        TrainingControlView *ControlView{nullptr}; // 控制卡片\r
-        TrainingDataView *DataVIew{nullptr};       // 数据卡片\r
+        TrainingControlView *controlview_{nullptr}; // 控制卡片\r
+        TraingDataAllView *dataallview_{nullptr};      // 数据卡片\r
         TrainingDetailView *DetailView{nullptr};   // 详细数据卡片\r
-        PlayersView *MusicView{nullptr};           // 音乐卡片\r
+        PlayersView *musicview_{nullptr};           // 音乐卡片\r
 \r
         /*结束弹窗*/\r
         UILabelExt *endtitle{nullptr};  // 结束弹窗title\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingDataAllView.h b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/include/TraingDataAllView.h
new file mode 100644 (file)
index 0000000..ee8312d
--- /dev/null
@@ -0,0 +1,75 @@
+/***
+ * @Date: 2024-06-25 10:41:08
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-09-02 09:22:33
+ * @FilePath:
+ * /FD230/code/sdk/application/wearable/fd230app/nativeui/TraingDataAll/include/TraingDataAllView.h
+ */
+
+#ifndef TRAING_DATA_ALL__VIEW_H
+#define TRAING_DATA_ALL__VIEW_H
+
+#include "BaseView.h"
+#include "View.h"
+#include "components/ui_swipe_view.h"
+#include "traing/training_card/include/TraingCardPresenter.h"
+#include "traing/training_card/include/TrainingDataView.h"
+#include "traing/training_card/include/TrainingDetailView.h"
+
+#include "components/ui_card_page.h"
+namespace OHOS {
+
+typedef enum {
+  TRAING_DATA_ALL_MAIN_VIEW = 0, // Heart rate time data chart
+  TRAING_DATA_ALL_DETAIL_VIEW,   // Detailed view
+  TRAING_DATA_ALL_MAX_VIEW,
+} TraingDataAllPageId;
+
+#define TRAING_DATA_ALL_VIEW "TraingDataAllView"
+
+class TraingCardPresenter;
+class TrainingDataView;
+class TrainingDetailView;
+
+class TraingDataAllView : public UICardPage {
+public:
+  TraingDataAllView();
+  virtual ~TraingDataAllView();
+
+  static TraingDataAllView *GetInstance(void);
+
+  UISwipeView *TraingDataAllViewInit(void);
+  void ClearAll(void);
+
+  AppGroupView *TraingDataPageInit(void);
+  AppGroupView *TraingDetailPageInit(void);
+
+  TrainingDataView *GetTrainingDataView(void);
+  TrainingDetailView *GetTrainingDetailView(void);
+
+  UISwipeView *GetTraingDataAllPageView(void);
+  void ChangeView(int16_t hideView, int16_t showView);
+
+  void InitPage(void);
+
+  void PreLoad(void) override;
+  void UnLoad(void) override;
+  bool InitView(void);
+
+private:
+  TrainingDataView *trainingDataView{nullptr};
+  TrainingDetailView *trainingDetailView{nullptr};
+  TraingDataAllView *trainingDataAllView{nullptr};
+  UISwipeView *traingDataAllPageView{nullptr};
+
+  int16_t maxPage = TRAING_DATA_ALL_MAX_VIEW;
+  UISwipeView *TraingDataAllSwipeViewList{nullptr};
+  AppGroupView *recordCard[TRAING_DATA_ALL_MAX_VIEW]{nullptr};
+
+  AppGroupView *CreatePage(uint8_t pageId);
+  bool viewiInitStatus{false};
+};
+
+} // namespace OHOS
+
+#endif // TRAING_DATA_ALL__VIEW_H
\ No newline at end of file
index 82dd76e..593c898 100644 (file)
 #include "components/icon_adapter.h"
 #include "components/ui_circle_progress.h"
 
-#include "wearable_log.h"
-#include "ohos_types.h"
+#include "AppGroupView.h"
 #include "components/ui_card_page.h"
+#include "ohos_types.h"
+#include "traing/Training_UiConfig.h"
 #include "traing/include/TraingModel.h"
 #include "uicomponents/UIComponents.h"
-#include "traing/Training_UiConfig.h"
+#include "wearable_log.h"
 
 #include "traing/include/TraingModel.h"
 #include "uicomponents/UIComponents.h"
@@ -39,51 +40,48 @@ namespace OHOS
 {
 #define BUTTONNOTE "button1"
 
-    class TrainingDataView : public UICardPage
-    {
-    public:
-        TrainingDataView();
-        virtual ~TrainingDataView();
-        static TrainingDataView *GetInstance(void);
-
-        void InitView();
-        void DeInit();
+class TrainingDataView : public AppGroupView {
+public:
+  TrainingDataView();
+  virtual ~TrainingDataView();
+  static TrainingDataView *GetInstance(void);
+  bool InitPage(void);
+  virtual bool InitView(void *caller) override;
+  void DeInit();
 
-        void PreLoad(void) override;
-        void UnLoad(void) override;
-        UILabelExt *GetTimeLabel();
-        UILabelExt *GetHeartLabel();
-        UICircleProgress*GetProgress();
+  UILabelExt *GetTimeLabel();
+  UILabelExt *GetHeartLabel();
+  UICircleProgress *GetProgress();
 
-        void UpdataTime();
+  void UpdataTime();
 
-    private:
-        UIView::OnDragListener *draglistener{nullptr};
-        TrainingDataView(TrainingDataView &&) = delete;
-        TrainingDataView &operator=(TrainingDataView &&) = delete;
+private:
+  UIView::OnDragListener *draglistener{nullptr};
+  TrainingDataView(TrainingDataView &&) = delete;
+  TrainingDataView &operator=(TrainingDataView &&) = delete;
 
-        UIViewGroup *container_ = nullptr;
+  UIViewGroup *container_ = nullptr;
 
-        UILabelExt *curtimelabel = nullptr; // 当前时间
-        UILabelExt *sportlabel = nullptr;   // 运动项目名称
-        UILabelExt *timerlabel = nullptr;   // 计时
-        UILabelExt *heartlabel = nullptr;   // 运动实时心率
-        UILabelExt *ubpmlabel = nullptr;    // 运动强度
+  UILabelExt *curtimelabel = nullptr; // 当前时间
+  UILabelExt *sportlabel = nullptr;   // 运动项目名称
+  UILabelExt *timerlabel = nullptr;   // 计时
+  UILabelExt *heartlabel = nullptr;   // 运动实时心率
+  UILabelExt *ubpmlabel = nullptr;    // 运动强度
 
-        UIImageView *image_progress = nullptr;
-        UIImageView *image_heart = nullptr;
-        UIImageView *image_lowIntensity = nullptr;       // 低等强度
-        UIImageView *image_mediumIntensity = nullptr;    // 中等强度
-        UIImageView *image_highIntensity = nullptr;      // 高等强度
-        UIImageView *image_superHighIntensity = nullptr; // 超高等强度
+  UIImageView *image_progress = nullptr;
+  UIImageView *image_heart = nullptr;
+  UIImageView *image_lowIntensity = nullptr;       // 低等强度
+  UIImageView *image_mediumIntensity = nullptr;    // 中等强度
+  UIImageView *image_highIntensity = nullptr;      // 高等强度
+  UIImageView *image_superHighIntensity = nullptr; // 超高等强度
 
-        UICircleProgress *circleProgress = nullptr;
+  UICircleProgress *circleProgress = nullptr;
 
-        UIImageView *image_iconup = nullptr;
-        UIImageView *image_iconpoint = nullptr;
+  UIImageView *image_iconup = nullptr;
+  UIImageView *image_iconpoint = nullptr;
 
-        UIButton *buttonNote = nullptr; // 注意事项按键
-        bool viewiInitStatus{false};
-    };
+  UIButton *buttonNote = nullptr; // 注意事项按键
+  bool viewiInitStatus{false};
+};
 } // namespace OHOS
 #endif // TraingData_PRESENTER_H
index 84566bf..7f32c43 100644 (file)
 namespace OHOS
 {
 
-    class TrainingDetailView : public UICardPage
-    {
-    public:
-        TrainingDetailView();
-        virtual ~TrainingDetailView();
-        static TrainingDetailView *GetInstance(void);
+class TrainingDetailView : public AppGroupView {
+public:
+  TrainingDetailView();
+  virtual ~TrainingDetailView();
+  static TrainingDetailView *GetInstance(void);
 
-        void InitView();
-        void DeInit();
+  void DeInit();
 
-        void PreLoad(void) override;
-        void UnLoad(void) override;
+  bool InitPage(void);
+  virtual bool InitView(void *caller) override;
 
-        UILabelExt *GetMileLabel();
-        UILabelExt *GetStepLabel();
-        UILabelExt *GetCalorieLabel();
-        UILabelButtonExt *Get_Intensity_Button();
+  UILabelExt *GetMileLabel();
+  UILabelExt *GetStepLabel();
+  UILabelExt *GetCalorieLabel();
+  UILabelButtonExt *Get_Intensity_Button();
 
-    private:
-        UIView::OnDragListener *draglistener{nullptr};
-        TrainingDetailView(TrainingDetailView &&) = delete;
-        TrainingDetailView &operator=(TrainingDetailView &&) = delete;
+private:
+  UIView::OnDragListener *draglistener{nullptr};
+  TrainingDetailView(TrainingDetailView &&) = delete;
+  TrainingDetailView &operator=(TrainingDetailView &&) = delete;
 
-        UIViewGroup *container_ = nullptr;
+  UIViewGroup *container_ = nullptr;
 
-        UILabelButtonExt *intensity_button{nullptr};
+  UILabelButtonExt *intensity_button{nullptr};
 
-        UILabelExt *u_milelabel = nullptr;
-        UILabelExt *u_stepslabel = nullptr;
-        UILabelExt *u_calorielabel = nullptr;
-        UILabelExt *milelabel = nullptr;
-        UILabelExt *steplabel = nullptr;
-        UILabelExt *calorielabel = nullptr;
+  UILabelExt *u_milelabel = nullptr;
+  UILabelExt *u_stepslabel = nullptr;
+  UILabelExt *u_calorielabel = nullptr;
+  UILabelExt *milelabel = nullptr;
+  UILabelExt *steplabel = nullptr;
+  UILabelExt *calorielabel = nullptr;
 
-        UIImageView *progress_image = nullptr;
-        UIImageView *lineimage2_ = nullptr;
+  UIImageView *progress_image = nullptr;
+  UIImageView *lineimage2_ = nullptr;
 
-        bool viewiInitStatus{false};
-    };
+  bool viewiInitStatus{false};
+};
 } // namespace OHOS
 #endif // TraingDetail_PRESENTER_H
index 1648887..9d1ea29 100644 (file)
@@ -2,34 +2,36 @@
  * @Date: 2024-07-06 16:27:31\r
  * @LastEditors: Caisking 3449750381@qq.com\r
  * @LastEditTime: 2024-08-02 10:21:14\r
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp\r
+ * @FilePath:\r
+ * /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp\r
  */\r
 /***\r
  * @Date: 2024-04-26 09:23:18\r
  * @LastEditors: Caisking 3449750381@qq.com\r
  * @LastEditTime: 2024-04-26 10:25:05\r
- * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp\r
+ * @FilePath:\r
+ * /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingCardPresenter.cpp\r
  */\r
 \r
 #include "AppViewIDs.h"\r
+#include "NativeAbility.h"\r
 #include "components/ui_label_ext.h"\r
 #include "ui_resource_string.h"\r
-#include "NativeAbility.h"\r
 \r
-#include <iostream>\r
-#include <chrono>\r
-#include <thread>\r
+#include "ConfigModel.h"\r
+#include "custom_utils.h"\r
+#include "graphic_service.h"\r
+#include "traing/include/TraingModel.h"\r
 #include "traing/training_card/include/TraingCardPresenter.h"\r
 #include "traing/training_card/include/TrainingControlView.h"\r
-#include "traing/include/TraingModel.h"\r
 #include "uicomponents/UIComponents.h"\r
-#include "ConfigModel.h"\r
-#include "custom_utils.h"\r
 #include "vibrator_service.h"\r
+#include <chrono>\r
 #include <iomanip>\r
+#include <iostream>\r
 #include <sstream>\r
+#include <thread>\r
 #include <unordered_map>\r
-#include "graphic_service.h"\r
 \r
 extern "C" void do_cywee_service_check_msg(int cmd, int data[]);\r
 \r
@@ -38,196 +40,214 @@ extern "C" void do_cywee_service_check_msg(int cmd, int data[]);
 #define DEFAULT_DASH "--"\r
 #define DATATEST 0\r
 \r
-extern "C"\r
-{\r
-    void InitTimer();\r
-    void DisableTimer();\r
-    void PauseTimer();\r
-    void ResumeTimer();\r
+extern "C" {\r
+void InitTimer();\r
+void DisableTimer();\r
+void PauseTimer();\r
+void ResumeTimer();\r
 }\r
-namespace OHOS\r
-{\r
-    // 当前Presenter属性实例化的内存指针\r
-    static TraingCardPresenter *g_pTraingCardPresenter = nullptr;\r
+namespace OHOS {\r
+// 当前Presenter属性实例化的内存指针\r
+static TraingCardPresenter *g_pTraingCardPresenter = nullptr;\r
 \r
-    TraingCardPresenter::TraingCardPresenter()\r
-    {\r
-        g_pTraingCardPresenter = this;\r
-    }\r
+TraingCardPresenter::TraingCardPresenter() { g_pTraingCardPresenter = this; }\r
 \r
-    TraingCardPresenter::~TraingCardPresenter()\r
-    {\r
-        // tag_ = 0;\r
-        g_pTraingCardPresenter = nullptr;\r
-    }\r
-\r
-    TraingCardPresenter *TraingCardPresenter::GetInstance()\r
-    {\r
-        static TraingCardPresenter instance;\r
-        return &instance;\r
-    }\r
+TraingCardPresenter::~TraingCardPresenter() {\r
+  // tag_ = 0;\r
+  g_pTraingCardPresenter = nullptr;\r
+}\r
 \r
-    void TraingCardPresenter::OnStart()\r
-    {\r
-        Presenter<TraingCardView>::OnStart();\r
-        // ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 长亮屏\r
-    }\r
+TraingCardPresenter *TraingCardPresenter::GetInstance() {\r
+  static TraingCardPresenter instance;\r
+  return &instance;\r
+}\r
 \r
-    void TraingCardPresenter::OnPause(void)\r
-    {\r
+void TraingCardPresenter::OnStart() {\r
+  Presenter<TraingCardView>::OnStart();\r
+  // ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); // 长亮屏\r
+}\r
 \r
-        Presenter<TraingCardView>::OnPause();\r
-    }\r
+void TraingCardPresenter::OnPause(void) {\r
 \r
-    void TraingCardPresenter::OnResume(void)\r
-    {\r
+  Presenter<TraingCardView>::OnPause();\r
+}\r
 \r
-        Presenter<TraingCardView>::OnResume();\r
-    }\r
+void TraingCardPresenter::OnResume(void) {\r
 \r
-    void TraingCardPresenter::OnStop(void)\r
-    {\r
+  Presenter<TraingCardView>::OnResume();\r
+}\r
 \r
-        Presenter<TraingCardView>::OnStop();\r
-        // ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 长亮屏\r
-    }\r
+void TraingCardPresenter::OnStop(void) {\r
 \r
-    bool TraingCardPresenter::OnDrag(UIView &view, const DragEvent &event)\r
-    {\r
-        UNUSED(view);\r
-        return true;\r
-    }\r
+  Presenter<TraingCardView>::OnStop();\r
+  // ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); // 长亮屏\r
+}\r
 \r
-    // 计时器更新timer\r
-    void TraingCardPresenter::ModifiesTime()\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ModifiesTime begin");\r
-        std ::string TimeStr = TraingModel::GetInstance()->DisplayMotionDuration();\r
+bool TraingCardPresenter::OnDrag(UIView &view, const DragEvent &event) {\r
+  UNUSED(view);\r
+  return true;\r
+}\r
 \r
-        /*灭屏状态不刷新UI*/\r
-        if (uapi_get_screen_state() == 1)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_get_screen_state is off");\r
-            return;\r
-        }\r
+// 计时器更新timer\r
+void TraingCardPresenter::ModifiesTime() {\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ModifiesTime begin");\r
+  std ::string TimeStr = TraingModel::GetInstance()->DisplayMotionDuration();\r
+\r
+  /*灭屏状态不刷新UI*/\r
+  if (uapi_get_screen_state() == 1) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "uapi_get_screen_state is off");\r
+    return;\r
+  }\r
+\r
+  if (TimeStr.empty()) {\r
+    WEARABLE_LOGE(\r
+        WEARABLE_LOG_MODULE_APP,\r
+        "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
+  }\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ModifiesTime end");\r
+}\r
 \r
-        if (TimeStr.empty())\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingModel::GetInstance()->DisplayMotionDuration() nullptr");\r
-            return;\r
-        }\r
-        if (TrainingControlView::GetInstance()->GetTimeLabel() != nullptr)\r
-        {\r
-            TrainingControlView::GetInstance()->GetTimeLabel()->SetText(TimeStr.c_str());\r
-        }\r
-        if (TrainingDataView::GetInstance()->GetTimeLabel() != nullptr)\r
-        {\r
-            TrainingDataView::GetInstance()->GetTimeLabel()->SetText(TimeStr.c_str());\r
-        }\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ModifiesTime end");\r
-    }\r
+//计时器\r
+void TraingCardPresenter::UpdateTimeOfControl() {\r
+  std ::string TimeStr = TraingModel::GetInstance()->DisplayMotionDuration();\r
+  if (TimeStr.empty()) {\r
+    WEARABLE_LOGE(\r
+        WEARABLE_LOG_MODULE_APP,\r
+        "TraingModel::GetInstance()->DisplayMotionDuration() nullptr");\r
+    return;\r
+  }\r
+  if (TrainingControlView::GetInstance()->GetTimeLabel() != nullptr) {\r
+    TrainingControlView::GetInstance()->GetTimeLabel()->SetText(\r
+        TimeStr.c_str());\r
+  }\r
+}\r
+void TraingCardPresenter::UpdateTimeOfData() {\r
+  std ::string TimeStr = TraingModel::GetInstance()->DisplayMotionDuration();\r
+  if (TimeStr.empty()) {\r
+    WEARABLE_LOGE(\r
+        WEARABLE_LOG_MODULE_APP,\r
+        "TraingModel::GetInstance()->DisplayMotionDuration() nullptr");\r
+    return;\r
+  }\r
+  if (TrainingDataView::GetInstance()->GetTimeLabel() != nullptr) {\r
+    TrainingDataView::GetInstance()->GetTimeLabel()->SetText(TimeStr.c_str());\r
+  }\r
+}\r
 \r
-    /* --------------------------------- cywee库操作 -------------------------------- */\r
-    /*开启cywee*/\r
-    bool TraingCardPresenter::OpenSensor(ExerciseClass type)\r
-    {\r
-        // 防止重复开启\r
-        if (opensensorstuats)\r
-        {\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
-        {\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
-        return true;\r
-    }\r
+/* --------------------------------- cywee库操作\r
+ * -------------------------------- */\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
+  return true;\r
+}\r
 \r
-    /*控制cywee*/\r
-    bool TraingCardPresenter::ControlSensor(ExerciseState state)\r
-    {\r
-        switch (state)\r
-        {\r
-        case ExerciseState::End:\r
-            // 退出进入普通模式\r
-            do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL);\r
-            opensensorstuats = false; // 恢复标志位\r
-            DisableTimer();           // 关闭计时器\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
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ControlSensor[%d]!!", state);\r
-        return true;\r
-    }\r
+/*控制cywee*/\r
+bool TraingCardPresenter::ControlSensor(ExerciseState state) {\r
+  switch (state) {\r
+  case ExerciseState::End:\r
+    // 退出进入普通模式\r
+    do_cywee_service_check_msg(CYWEE_SERVICE_CMD_NORMAL_MODE, NULL);\r
+    opensensorstuats = false; // 恢复标志位\r
+    DisableTimer();           // 关闭计时器\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
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ControlSensor[%d]!!", state);\r
+  return true;\r
+}\r
 \r
-    void TraingCardPresenter::RefreshData(SportData *sportdata)\r
-    {\r
-        if (sportdata == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sportdata is null");\r
-            return;\r
-        }\r
-        std::string distanceStr;\r
-        if (sportdata->distance != 0)\r
-        {\r
-            double distance_km = sportdata->distance / 1000.0; // 转换为公里并保留两位小数\r
-            std::stringstream ss;\r
-            ss << std::fixed << std::setprecision(2) << distance_km;\r
-            distanceStr = ss.str();\r
-        }\r
-        else\r
-        {\r
-            distanceStr = DEFAULT_DASH;\r
-        }\r
-\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
-        // printf("intensityid %d \r\n", intensityid);\r
-        TrainingDetailView::GetInstance()->Get_Intensity_Button()->SetTextId(intensityid);\r
-\r
-        TrainingDataView::GetInstance()->GetProgress()->SetValue(sportdata->goaldegree);   // 目标完成度\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
-\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[Calories: %s, Distance: %s, Steps: %s Intensityid: %d]", calorieStr.c_str(), distanceStr.c_str(), stepsStr.c_str(), intensityid);\r
-        // 释放sportdata内存\r
-    }\r
+void TraingCardPresenter::RefreshData(SportData *sportdata) {\r
+  if (sportdata == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sportdata is null");\r
+    return;\r
+  }\r
+  std::string distanceStr;\r
+  if (sportdata->distance != 0) {\r
+    double distance_km =\r
+        sportdata->distance / 1000.0; // 转换为公里并保留两位小数\r
+    std::stringstream ss;\r
+    ss << std::fixed << std::setprecision(2) << distance_km;\r
+    distanceStr = ss.str();\r
+  } else {\r
+    distanceStr = DEFAULT_DASH;\r
+  }\r
+\r
+  std::string heartStr =\r
+      (sportdata->heart != 0) ? std::to_string(sportdata->heart) : DEFAULT_DASH;\r
+  std::string stepsStr =\r
+      (sportdata->steps != 0) ? std::to_string(sportdata->steps) : DEFAULT_DASH;\r
+  std::string calorieStr = (sportdata->calories != 0)\r
+                               ? std::to_string(sportdata->calories)\r
+                               : DEFAULT_DASH;\r
+  // 训练强度刷新\r
+  UIResourceTextId intensityid = TraingModel::GetInstance()->GetIntensity();\r
+  // printf("intensityid %d \r\n", intensityid);\r
+  TrainingDetailView::GetInstance()->Get_Intensity_Button()->SetTextId(\r
+      intensityid);\r
+\r
+  TrainingDataView::GetInstance()->GetProgress()->SetValue(\r
+      sportdata->goaldegree); // 目标完成度\r
+  TrainingDataView::GetInstance()->GetHeartLabel()->SetText(\r
+      heartStr.c_str()); // 心率\r
+  TrainingDetailView::GetInstance()->GetCalorieLabel()->SetText(\r
+      calorieStr.c_str()); // 卡路里\r
+  TrainingDetailView::GetInstance()->GetMileLabel()->SetText(\r
+      distanceStr.c_str()); // 距离\r
+  TrainingDetailView::GetInstance()->GetStepLabel()->SetText(\r
+      stepsStr.c_str()); // 步数\r
+\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,\r
+                "[Calories: %s, Distance: %s, Steps: %s Intensityid: %d]",\r
+                calorieStr.c_str(), distanceStr.c_str(), stepsStr.c_str(),\r
+                intensityid);\r
+  // 释放sportdata内存\r
+}\r
 #if 0\r
     /*刷新 time 和 data */\r
     void TraingCardPresenter::OnTickEvent()\r
@@ -242,210 +262,236 @@ namespace OHOS
     }\r
 #endif\r
 #if 1\r
-    void TraingCardPresenter::Notify(void)\r
-    {\r
-        // 未开启训练 直接退出\r
-        if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General)\r
-            return;\r
+void TraingCardPresenter::Notify(void) {\r
+  // 如果未开启训练,直接退出\r
+  if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) {\r
+    return;\r
+  }\r
+\r
+  Control_Card cardId = static_cast<Control_Card>(view_->GetCurrentPage());\r
+\r
+  switch (cardId) {\r
+  case Control_Card::CONTROL: {\r
+    UpdateTimeOfControl(); // 更新控制界面的时间\r
+    break;\r
+  }\r
+  case Control_Card::DATA: {\r
+    UpdateDataView(); // 更新训练数据视图\r
+    break;\r
+  }\r
+  default:\r
+    break; // 其他情况不处理\r
+  }\r
+}\r
 \r
-        // 刷新训练数据界面 现实时间\r
-        GraphicService::GetInstance()->PostGraphicEvent(std::bind(&TrainingDataView::UpdataTime, TrainingDataView::GetInstance()));\r
+void TraingCardPresenter::UpdateDataView() {\r
+  // 刷新计时\r
+  UpdateTimeOfData();\r
 \r
-        // 刷新训练数据界面 心率 卡路里 距离 步数 训练强度 目标完成度\r
-        SportData *sportdata = TraingModel::GetInstance()->GetSportdata();\r
-        GraphicService::GetInstance()->PostGraphicEvent(std::bind(&TraingCardPresenter::RefreshData, TraingCardPresenter::GetInstance(), sportdata));\r
-    }\r
+  // 刷新训练数据视图,显示当前时间\r
+  GraphicService::GetInstance()->PostGraphicEvent(std::bind(\r
+      &TrainingDataView::UpdataTime, TrainingDataView::GetInstance()));\r
+\r
+  // 刷新训练数据:心率、卡路里、距离、步数、训练强度、目标完成度\r
+  SportData *sportdata = TraingModel::GetInstance()->GetSportdata();\r
+  RefreshData(sportdata);\r
+}\r
 #endif\r
-    /* --------------------------------- 点击事件处理 --------------------------------- */\r
-    bool TraingCardPresenter::OnClick(UIView &view, const ClickEvent &event)\r
-    {\r
-        const std::string viewId = view.GetViewId();\r
-\r
-        // 定义点击事件映射\r
-        static const std::unordered_map<std::string, std::function<void()>> actionMap = {\r
-            // 暂停按键\r
-            {BUTTONSTOP, [&]()\r
-             {\r
-                 auto currentState = TraingModel::GetInstance()->GetSportState();\r
-                 if (currentState == ExerciseState::Continue || currentState == ExerciseState::Start)\r
-                 {\r
-                     handlePauseState();\r
-                 }\r
-                 else if (currentState == ExerciseState::Pause)\r
-                 {\r
-                     handleContinueState();\r
-                 }\r
-             }},\r
-            // 结束按键\r
-            {BUTTONEND, [&]()\r
-             {\r
-                 ControlSensor(ExerciseState::Pause);\r
-                 TraingCardView::GetInstance()->SetPopupViewStatus(EndPopup, true);\r
-                 TraingCardView::GetInstance()->RefreshEndView();\r
-             }},\r
-            // 确定结束\r
-            {BUTTONEXIT, [&]()\r
-             {\r
-                 handleEndState();\r
-             }},\r
-            // 返回\r
-            {BUTTONBACK, [&]()\r
-             {\r
-                 ControlSensor(ExerciseState::Continue);\r
-                 TraingCardView::GetInstance()->SetPopupViewStatus(EndPopup, false);\r
-             }},\r
-            // 确定达到目标\r
-            {BUTTONWINOK, [&]()\r
-             {\r
-                 TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup, false);\r
-                 TraingCardView::GetInstance()->GetAnimator()->Stop();\r
-             }},\r
-            // 确定心率提醒\r
-            {BUTTONNOTE, [&]()\r
-             {\r
-                 TraingCardView::GetInstance()->SetPopupViewStatus(HeartPopup, false);\r
-             }},\r
-        };\r
-\r
-        // 查找并执行对应的操作\r
-        auto it = actionMap.find(viewId);\r
-        if (it != actionMap.end())\r
-        {\r
-            it->second(); // 执行操作\r
-            return true;\r
-        }\r
-\r
-        return false; // 没有匹配的操作\r
+/* --------------------------------- 点击事件处理\r
+ * --------------------------------- */\r
+bool TraingCardPresenter::OnClick(UIView &view, const ClickEvent &event) {\r
+  const std::string viewId = view.GetViewId();\r
+\r
+  // 定义点击事件映射\r
+  static const std::unordered_map<std::string, std::function<void()>>\r
+      actionMap = {\r
+          // 暂停按键\r
+          {BUTTONSTOP,\r
+           [&]() {\r
+             auto currentState = TraingModel::GetInstance()->GetSportState();\r
+             if (currentState == ExerciseState::Continue ||\r
+                 currentState == ExerciseState::Start) {\r
+               handlePauseState();\r
+             } else if (currentState == ExerciseState::Pause) {\r
+               handleContinueState();\r
+             }\r
+           }},\r
+          // 结束按键\r
+          {BUTTONEND,\r
+           [&]() {\r
+             ControlSensor(ExerciseState::Pause);\r
+             TraingCardView::GetInstance()->SetPopupViewStatus(EndPopup, true);\r
+             TraingCardView::GetInstance()->RefreshEndView();\r
+           }},\r
+          // 确定结束\r
+          {BUTTONEXIT, [&]() { handleEndState(); }},\r
+          // 返回\r
+          {BUTTONBACK,\r
+           [&]() {\r
+             ControlSensor(ExerciseState::Continue);\r
+             TraingCardView::GetInstance()->SetPopupViewStatus(EndPopup, false);\r
+           }},\r
+          // 确定达到目标\r
+          {BUTTONWINOK,\r
+           [&]() {\r
+             TraingCardView::GetInstance()->SetPopupViewStatus(GetTagPopup,\r
+                                                               false);\r
+             TraingCardView::GetInstance()->GetAnimator()->Stop();\r
+           }},\r
+          // 确定心率提醒\r
+          {BUTTONNOTE,\r
+           [&]() {\r
+             TraingCardView::GetInstance()->SetPopupViewStatus(HeartPopup,\r
+                                                               false);\r
+           }},\r
+      };\r
+\r
+  // 查找并执行对应的操作\r
+  auto it = actionMap.find(viewId);\r
+  if (it != actionMap.end()) {\r
+    it->second(); // 执行操作\r
+    return true;\r
+  }\r
+\r
+  return false; // 没有匹配的操作\r
+}\r
+void TraingCardPresenter::OnSwipe(UISwipeView &view) {\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TempPresenter::OnSwipe ");\r
+  UNUSED(view);\r
+  return;\r
+}\r
+/* -------------------------------- 协议发起运动处理\r
+ * -------------------------------- */\r
+bool TraingCardPresenter::send_sport_cmd(training_ble *cmd) {\r
+  if (cmd == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid sport command");\r
+    return false;\r
+  }\r
+\r
+  switch (cmd->controlmd) {\r
+  case SETGOAL:\r
+    if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General) {\r
+      // 设置目标:在非运动情况下设置  [单指令,执行后退出]\r
+      TraingModel::GetInstance()->SetSportTag(\r
+          static_cast<ExerciseTag>(cmd->sportTagType), cmd->sportTag);\r
+      WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetSportTag is succeed!\r\n");\r
+      return true;\r
     }\r
-\r
-    /* -------------------------------- 协议发起运动处理 -------------------------------- */\r
-    bool TraingCardPresenter::send_sport_cmd(training_ble *cmd)\r
-    {\r
-        if (cmd == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid sport command");\r
-            return false;\r
-        }\r
-\r
-        switch (cmd->controlmd)\r
-        {\r
-        case SETGOAL:\r
-            if (TraingModel::GetInstance()->GetSportState() == ExerciseState::General)\r
-            {\r
-                // 设置目标:在非运动情况下设置  [单指令,执行后退出]\r
-                TraingModel::GetInstance()->SetSportTag(static_cast<ExerciseTag>(cmd->sportTagType), cmd->sportTag);\r
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetSportTag is succeed!\r\n");\r
-                return true;\r
-            }\r
-            break;\r
-\r
-        case SENDDATA:\r
-            TraingModel::GetInstance()->SendLiveData(); // 发送实时数据 [单指令,执行后退出]\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SendLiveData is succeed!\r\n");\r
-            return true;\r
-        default:\r
-            break;\r
-        }\r
-\r
-        if (TraingCardView::GetInstance() == nullptr)\r
-        {\r
-            uapi_set_screen_on_api(); // 亮屏\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
-            // 设置目标类型和项目有且只有一次\r
-            switch (cmd->sportType)\r
-            {\r
-            case 0:\r
-                TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING);\r
-                OpenSensor(ExerciseClass::OUTDOOR);\r
-                break;\r
-            case 1:\r
-                TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING);\r
-                OpenSensor(ExerciseClass::OUTDOOR);\r
-                break;\r
-            case 2:\r
-                TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING);\r
-                OpenSensor(ExerciseClass::FREE_TRAINING);\r
-                break;\r
-            default:\r
-                break;\r
-            }\r
-        }\r
-\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "cmd->sportType[%d],cmd->controlmd[%d],cmd->sportTagType[%d],cmd->sportTag[%d]\r\n", cmd->sportType, cmd->controlmd, cmd->sportTagType, cmd->sportTag);\r
-\r
-        ExerciseState cmdState = static_cast<ExerciseState>(cmd->controlmd);\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ExerciseState::End   [%d]\r\n", cmdState);\r
-\r
-        switch (cmdState)\r
-        {\r
-        case ExerciseState::End:\r
-            handleEndState();\r
-            break;\r
-        case ExerciseState::Pause:\r
-            handlePauseState();\r
-            break;\r
-        case ExerciseState::Continue:\r
-            handleContinueState();\r
-            break;\r
-        case ExerciseState::Start:\r
-            handleStartState();\r
-            break;\r
-        default:\r
-            break;\r
-        }\r
-\r
-        return true;\r
+    break;\r
+\r
+  case SENDDATA:\r
+    TraingModel::GetInstance()\r
+        ->SendLiveData(); // 发送实时数据 [单指令,执行后退出]\r
+    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SendLiveData is succeed!\r\n");\r
+    return true;\r
+  default:\r
+    break;\r
+  }\r
+\r
+  if (TraingCardView::GetInstance() == nullptr) {\r
+    uapi_set_screen_on_api(); // 亮屏\r
+    NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGCRAD);\r
+    // 设置目标类型和项目有且只有一次\r
+    switch (cmd->sportType) {\r
+    case 0:\r
+      TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORWALKING);\r
+      OpenSensor(ExerciseClass::OUTDOOR);\r
+      break;\r
+    case 1:\r
+      TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORRUNNING);\r
+      OpenSensor(ExerciseClass::OUTDOOR);\r
+      break;\r
+    case 2:\r
+      TraingModel::GetInstance()->SetSportEvent(STR_EXERCISE_OUTDOORBIKING);\r
+      OpenSensor(ExerciseClass::FREE_TRAINING);\r
+      break;\r
+    default:\r
+      break;\r
     }\r
+  }\r
+\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,\r
+                "cmd->sportType[%d],cmd->controlmd[%d],cmd->sportTagType[%d],"\r
+                "cmd->sportTag[%d]\r\n",\r
+                cmd->sportType, cmd->controlmd, cmd->sportTagType,\r
+                cmd->sportTag);\r
+\r
+  ExerciseState cmdState = static_cast<ExerciseState>(cmd->controlmd);\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ExerciseState::End   [%d]\r\n",\r
+                cmdState);\r
+\r
+  switch (cmdState) {\r
+  case ExerciseState::End:\r
+    handleEndState();\r
+    break;\r
+  case ExerciseState::Pause:\r
+    handlePauseState();\r
+    break;\r
+  case ExerciseState::Continue:\r
+    handleContinueState();\r
+    break;\r
+  case ExerciseState::Start:\r
+    handleStartState();\r
+    break;\r
+  default:\r
+    break;\r
+  }\r
+\r
+  return true;\r
+}\r
 \r
-    /*训练结束*/\r
-    void TraingCardPresenter::handleEndState()\r
-    {\r
-        TraingModel::GetInstance()->SetSportState(ExerciseState::End);\r
-        ControlSensor(ExerciseState::End);\r
+/*训练结束*/\r
+void TraingCardPresenter::handleEndState() {\r
+  TraingModel::GetInstance()->SetSportState(ExerciseState::End);\r
+  ControlSensor(ExerciseState::End);\r
 #if DATATEST\r
-        NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
-        return;\r
+  NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
+  return;\r
 #endif\r
-        // 是否达到训练目标\r
-        if (TraingModel::GetInstance()->GetMomentum())\r
-        {\r
-            // 进入训练详情\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
-            NativeAbility::GetInstance().ClearSliceIdStack(); // 清空所有SLiceId栈元素\r
-        }\r
-        else\r
-        {\r
-            // 进入训练记录\r
-            NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING_RECORD);\r
-            NativeAbility::GetInstance().ClearSliceIdStack(); // 清空所有SLiceId栈元素\r
-        }\r
-    }\r
-\r
-    /*训练暂停*/\r
-    void TraingCardPresenter::handlePauseState()\r
-    {\r
-        TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_RESUME);\r
-        TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE);\r
-        TraingModel::GetInstance()->SetSportState(ExerciseState::Pause);\r
-        PauseTimer();\r
-        ControlSensor(ExerciseState::Pause);\r
+  // 是否达到训练目标\r
+  if (TraingModel::GetInstance()->GetMomentum()) {\r
+    // 进入训练详情\r
+    NativeAbility::GetInstance().ChangeSlice(VIEW_TRAININGENDDATA);\r
+    NativeAbility::GetInstance().ClearSliceIdStack(); // 清空所有SLiceId栈元素\r
+  } else {\r
+    // 进入训练记录\r
+    // NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING_RECORD);\r
+    if (TraingModel::GetInstance()->GetEntryType() == APPLIST_ENTER)\r
+      NativeAbility::GetInstance().ChangeSlice(VIEW_TRAINING,\r
+                                               TransitionType::TRANSITION_ZOOM);\r
+    else {\r
+      NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN,\r
+                                               TransitionType::TRANSITION_ZOOM);\r
+      NativeAbility::GetInstance().ClearSliceIdStack(); // 清空所有SLiceId栈元素\r
     }\r
+    NativeAbility::GetInstance().ClearSliceIdStack(); // 清空所有SLiceId栈元素\r
+  }\r
+}\r
 \r
-    /*训练继续*/\r
-    void TraingCardPresenter::handleContinueState()\r
-    {\r
-        TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_PAUSE);\r
-        TrainingControlView::GetInstance()->GetButton()->SetImageSrc(SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE);\r
-        TraingModel::GetInstance()->SetSportState(ExerciseState::Continue);\r
-        ResumeTimer();\r
-        ControlSensor(ExerciseState::Continue);\r
-    }\r
+/*训练暂停*/\r
+void TraingCardPresenter::handlePauseState() {\r
+  TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_RESUME);\r
+  TrainingControlView::GetInstance()->GetButton()->SetImageSrc(\r
+      SPORT_CONTINUE_IMAGE, SPORT_CONTINUE_IMAGE);\r
+  TraingModel::GetInstance()->SetSportState(ExerciseState::Pause);\r
+  PauseTimer();\r
+  ControlSensor(ExerciseState::Pause);\r
+}\r
 \r
-    /*训练开始*/\r
-    void TraingCardPresenter::handleStartState()\r
-    {\r
-        ControlSensor(ExerciseState::Start);\r
-        TraingModel::GetInstance()->SetSportOpenWay(true);\r
-    }\r
+/*训练继续*/\r
+void TraingCardPresenter::handleContinueState() {\r
+  TrainingControlView::GetInstance()->GetLabel()->SetTextId(STR_PAUSE);\r
+  TrainingControlView::GetInstance()->GetButton()->SetImageSrc(\r
+      SPORT_PAUSE_IMAGE, SPORT_PAUSE_IMAGE);\r
+  TraingModel::GetInstance()->SetSportState(ExerciseState::Continue);\r
+  ResumeTimer();\r
+  ControlSensor(ExerciseState::Continue);\r
+}\r
 \r
+/*训练开始*/\r
+void TraingCardPresenter::handleStartState() {\r
+  ControlSensor(ExerciseState::Start);\r
+  TraingModel::GetInstance()->SetSportOpenWay(true);\r
 }\r
+\r
+} // namespace OHOS\r
index 860980b..29a583e 100644 (file)
@@ -1,12 +1,12 @@
 \r
 #include "traing/training_card/include/TraingCardView.h"\r
+#include "UiConfig.h"\r
 #include "common/image_cache_manager.h"\r
+#include "components/ui_button.h"\r
 #include "components/ui_label_ext.h"\r
-#include "ui_resource_string.h"\r
-#include "UiConfig.h"\r
 #include "ui_resource_image.h"\r
+#include "ui_resource_string.h"\r
 #include <ui_scroll_view.h>\r
-#include "components/ui_button.h"\r
 \r
 #include "common/screen.h"\r
 #include "components/ui_digital_clock.h"\r
 #include "components/ui_label_ext.h"\r
 #include "font/ui_font.h"\r
 \r
-#include "traing/include/TraingModel.h"\r
-#include "uicomponents/UIComponents.h"\r
 #include "ConfigModel.h"\r
 #include "custom_utils.h"\r
+#include "traing/include/TraingModel.h"\r
+#include "uicomponents/UIComponents.h"\r
 \r
-extern "C"\r
-{\r
-    void InitTimer();\r
-    void DisableTimer();\r
+extern "C" {\r
+void InitTimer();\r
+void DisableTimer();\r
 }\r
 \r
-namespace OHOS\r
-{\r
+namespace OHOS {\r
 \r
 #ifdef __cplusplus\r
-    extern "C"\r
-    {\r
+extern "C" {\r
 #endif\r
 \r
-#include "pm_veto.h"\r
 #include "pm.h"\r
-        /*移除睡眠否决投票*/\r
-        void uapi_remove_sport_vote(void)\r
-        {\r
-            uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART);\r
-            if (cnt == 1)\r
-            {\r
-                uapi_pm_remove_sleep_veto(PM_ID_HEART);\r
-            }\r
-            else\r
-            {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE, "Sport SERVICE MCU has delete pm_id_Sport vote");\r
-            }\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_MAIN_SERVICE, "Sport SERVICE MCU SLEEP SUCCESS");\r
-        }\r
-\r
-        /*添加睡眠否决投票*/\r
-        void uapi_add_sport_vote(void)\r
-        {\r
-            uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART);\r
-            if (cnt == 0)\r
-            {\r
-                uapi_pm_add_sleep_veto(PM_ID_HEART);\r
-            }\r
-            else\r
-            {\r
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE, "Sport SERVICE MCU has got pm_id_Sport vote");\r
-            }\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_MAIN_SERVICE, "Sport SERVICE MCU WAKEUP SUCCESS");\r
-        }\r
+#include "pm_veto.h"\r
+/*移除睡眠否决投票*/\r
+void uapi_remove_sport_vote(void) {\r
+  uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART);\r
+  if (cnt == 1) {\r
+    uapi_pm_remove_sleep_veto(PM_ID_HEART);\r
+  } else {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,\r
+                  "Sport SERVICE MCU has delete pm_id_Sport vote");\r
+  }\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_MAIN_SERVICE,\r
+                "Sport SERVICE MCU SLEEP SUCCESS");\r
+}\r
+\r
+/*添加睡眠否决投票*/\r
+void uapi_add_sport_vote(void) {\r
+  uint8_t cnt = pm_veto_get_id_cnt(PM_ID_HEART);\r
+  if (cnt == 0) {\r
+    uapi_pm_add_sleep_veto(PM_ID_HEART);\r
+  } else {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_MAIN_SERVICE,\r
+                  "Sport SERVICE MCU has got pm_id_Sport vote");\r
+  }\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_MAIN_SERVICE,\r
+                "Sport SERVICE MCU WAKEUP SUCCESS");\r
+}\r
 \r
 #ifdef __cplusplus\r
-    }\r
+}\r
 #endif\r
 \r
-    static const uint16_t LABEL_FONT_SIZE = 200;\r
-    static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;\r
-    static const uint32_t CARD_PAGE_COLOR = 0xffd0d0d0;\r
-\r
-    static TraingCardView *g_pTraingCardView{nullptr};\r
-\r
-    TraingCardView::TraingCardView()\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::TraingCardView");\r
-        InitTimer();                                                     // 开启计时器\r
-        TraingModel::GetInstance()->SetSportState(ExerciseState::Start); // 设置运动状态为开始\r
-        TraingModel::GetInstance()->SetTimestamp();\r
-        uapi_add_sport_vote(); // 保护进程\r
-        g_pTraingCardView = this;\r
-    }\r
-\r
-    TraingCardView::~TraingCardView()\r
-    {\r
-        imageAnimator->Stop();\r
-        FreeImageInfoArray(winimageInfos, winbasePath.c_str(), 94);\r
-        ReleaseImageAnimatorSource(winimageAnimatorInfo, 94);\r
-        DeInit();\r
-\r
-        g_pTraingCardView = nullptr;\r
-        DisableTimer(); // 关闭计时器\r
-        TraingModel::GetInstance()->SetTimestamp();\r
-        uapi_remove_sport_vote(); // 移除\r
-    }\r
-\r
-    TraingCardView *TraingCardView::GetInstance()\r
-    {\r
-        return g_pTraingCardView;\r
-    }\r
-\r
-    /* InitView:初始化界面*/\r
-    void TraingCardView ::InitView()\r
-    {\r
-        UISwipeView::OnSwipeListener *listener = nullptr;\r
-\r
-        if (swipe_ == nullptr)\r
-        {\r
-            swipe_ = new UICrossView();\r
-            swipe_->SetPosition(0, 0, 466, 466);\r
-            swipe_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
-        }\r
-\r
-        InitControlPage();\r
-        InitDataPage();\r
-        InitMusicPage();\r
-        InitDetailPage();\r
-\r
-        swipe_->HorAdd(ControlView);\r
-        swipe_->HorAdd(DataVIew);\r
-        swipe_->HorAdd(MusicView);\r
-\r
-        ShowEndView();\r
-        ShowGetTagView();\r
-        ShowHeartView();\r
-        //  swipe_->HorAdd(DetailView);\r
-\r
-        swipe_->VerAdd(DetailView, UICrossView::VPage::DOWN_PAGE);\r
-        swipe_->SetHorCurrentPage(Control_Card::DATA); // 设置进入索引 [数据]\r
-\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::InitPage over");\r
-    }\r
-\r
-    /* DeInit:删除组件 */\r
-    void TraingCardView::DeInit()\r
-    {\r
-        swipe_->RemoveAll();\r
-\r
-        /*界面*/\r
-        ControlView->RemoveAll();\r
-        DataVIew->RemoveAll();\r
-        DetailView->RemoveAll();\r
-        MusicView->RemoveAll();\r
-        endView->RemoveAll();\r
-        getView->RemoveAll();\r
-        heartView->RemoveAll();\r
-\r
-        /*标签*/\r
-        delete endtitle;\r
-        endtitle = nullptr;\r
-        delete notelabel;\r
-        notelabel = nullptr;\r
-        delete endnotelabel;\r
-        endnotelabel = nullptr;\r
-        delete endnote;\r
-        endnote = nullptr;\r
-        delete labeltitle;\r
-        labeltitle = nullptr;\r
-        delete labeltag;\r
-        labeltag = nullptr;\r
-        delete labelgettag;\r
-        labelgettag = nullptr;\r
-        delete labelpre;\r
-        labelpre = nullptr;\r
-        delete hearttitle;\r
-        hearttitle = nullptr;\r
-        delete labelnote;\r
-        labelnote = nullptr;\r
-        /*图片*/\r
-        delete heartiamge;\r
-        heartiamge = nullptr;\r
-\r
-        /*按键*/\r
-        delete exit;\r
-        exit = nullptr;\r
-        delete back;\r
-        back = nullptr;\r
-        delete buttonok_;\r
-        buttonok_ = nullptr;\r
-        delete buttonnote_;\r
-        buttonnote_ = nullptr;\r
-\r
-        /*动画*/\r
-        delete imageAnimator;\r
-        imageAnimator = nullptr;\r
-\r
-        /*卡片*/\r
-        delete ControlView;\r
-        ControlView = nullptr;\r
-        delete DataVIew;\r
-        DataVIew = nullptr;\r
-        delete DetailView;\r
-        DetailView = nullptr;\r
-        delete swipe_;\r
-        delete MusicView;\r
-        MusicView = nullptr;\r
-        /*弹窗*/\r
-        delete endView;\r
-        endView = nullptr;\r
-        delete getView;\r
-        getView = nullptr;\r
-        delete heartView;\r
-        heartView = nullptr;\r
-\r
-        swipe_ = nullptr;\r
-    }\r
-    UICardPage *TraingCardView::InitControlPage(void)\r
-    {\r
-        ControlView = new TrainingControlView();\r
-        ControlView->PreLoad();\r
-        if (ControlView == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ControlView new fail");\r
-            return nullptr;\r
-        }\r
-        return ControlView;\r
-    }\r
-    UICardPage *TraingCardView::InitDataPage(void)\r
-    {\r
-        DataVIew = new TrainingDataView();\r
-        DataVIew->PreLoad();\r
-        if (DataVIew == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DataVIew new fail");\r
-            return nullptr;\r
-        }\r
-        return DataVIew;\r
-    }\r
-    UICardPage *TraingCardView::InitMusicPage(void)\r
-    {\r
-        MusicView = new PlayersView();\r
-        MusicView->PreLoad();\r
-        if (MusicView == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MusicView new fail");\r
-            return nullptr;\r
-        }\r
-        return MusicView;\r
-    }\r
-    UICardPage *TraingCardView::InitDetailPage()\r
-    {\r
-        DetailView = new TrainingDetailView();\r
-        DetailView->PreLoad();\r
-        DetailView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
-        DetailView->SetStyle(STYLE_BORDER_RADIUS, 466); // 设置为圆形\r
-        if (DetailView == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DetailView new fail");\r
-            return nullptr;\r
-        }\r
-        return DetailView;\r
-    }\r
-    void TraingCardView::PreLoad(void)\r
-    {\r
-        if (!viewiInitStatus)\r
-        {\r
-            InitView();\r
-            viewiInitStatus = true;\r
-        }\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView  PreLoad");\r
-    }\r
-    void TraingCardView::OnStart()\r
-    {\r
-        swipe_ = new UICrossView();\r
-        if (swipe_ == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "swipe_ new fail");\r
-            return;\r
-        }\r
-        swipe_->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
-        // 创建 draglistener 实例并设置为拖动监听器\r
-        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(TraingCardPresenter::GetInstance());\r
-        if (draglistener == nullptr)\r
-        {\r
-            return;\r
-        }\r
-        swipe_->SetOnDragListener(draglistener);\r
-        swipe_->SetTouchable(true);\r
-        swipe_->SetDraggable(true);\r
-        swipe_->SetStyle(STYLE_BACKGROUND_COLOR, BACK_GROUND_COLOR);\r
-        swipe_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
-        // swipe_->EnableScreenCap(true);\r
-        PreLoad();\r
-        SetContainerView(swipe_);\r
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "swipe_ new ok");\r
-    }\r
-    /*设置弹窗状态*/\r
-    void TraingCardView::SetPopupViewStatus(PopupType type, bool status)\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetPopupViewStatus %d", type);\r
-        UIView *popupView = nullptr;\r
-        if (type == EndPopup)\r
-        {\r
-            popupView = endView;\r
-        }\r
-        else if (type == GetTagPopup)\r
-        {\r
-            popupView = getView;\r
-        }\r
-        else if (type == HeartPopup)\r
-        {\r
-            popupView = heartView;\r
-        }\r
-\r
-        if (popupView == nullptr)\r
-        {\r
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PopupView is NULL");\r
-            return;\r
-        }\r
-\r
-        UIView *cardview = TraingCardView::GetInstance()->GetTraingCrad();\r
-        if (cardview != nullptr)\r
-        {\r
-            cardview->SetVisible(!status);\r
-        }\r
-\r
-        popupView->SetVisible(status);\r
-    }\r
-    /*结束弹窗界面*/\r
-    void TraingCardView::ShowEndView()\r
-    {\r
-        // momentumFlag = false; // 标志位还原\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowEndView");\r
-        endView = new UIScrollView();\r
-        if (endView == nullptr)\r
-        {\r
-            return;\r
-        }\r
-        endView->SetPosition(0, 0);\r
-        endView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
-        endView->SetScrollBlankSize(20);\r
-        endView->SetReboundSize(50);\r
-        endView->SetDirection(1);\r
-\r
-        InitRollLabel(endtitle, 83, 50, 300, 35, "label1", STR_LOOK_OUT, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        InitRollLabel(notelabel, 56, 167, 360, 80, "label2", STR_INSUFFICIENT_EXERCISE_AMOUNT, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        /*隐藏是否结束运动title*/\r
-        InitRollLabel(endnote, 56, 207, 360, 80, "label3", STR_END_THIS_MOVEMENT, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        endnote->SetVisible(false);\r
-\r
-        endView->Add(endnote);\r
-        endView->Add(endtitle);\r
-        endView->Add(notelabel);\r
-\r
-        InitButton(exit, 111, 299, 100, 100, BUTTONBACK);\r
-        exit->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingCardPresenter::GetInstance()));\r
-        exit->SetImageSrc(NO_IMAGE, NO_IMAGE);\r
-        InitButton(back, 256, 299, 100, 100, BUTTONEXIT);\r
-        back->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingCardPresenter::GetInstance()));\r
-        back->SetImageSrc(YES_IMAGE, YES_IMAGE);\r
-        endView->Add(exit);\r
-        endView->Add(back);\r
-        RootView::GetInstance()->Add(endView);\r
-        endView->SetDraggable(false);\r
-        endView->SetTouchable(true);\r
-        endView->SetVisible(false); // 界面隐藏\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowEndView end");\r
-    }\r
-    /*目标达成界面*/\r
-    void TraingCardView::ShowGetTagView()\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowGetTagView");\r
-        getView = new UIScrollView();\r
-        if (getView == nullptr)\r
-        {\r
-            return;\r
-        }\r
-        getView->SetPosition(0, 0);\r
-        getView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
-        getView->SetScrollBlankSize(20);\r
-        getView->SetReboundSize(50);\r
-        getView->SetDirection(1);\r
-\r
-        // 初始化Lable\r
-        InitRollLabel(labeltitle, 83, 50, 300, 35, "label1", STR_GOAL_ACHIEVED, DEFAULT_VECTOR_FONT_FILENAME, 35);\r
-        getView->Add(labeltitle);\r
-        InitRollLabel(labelgettag, 103, 307, 200, 35, "label3", STR_ACCOMPLISH_GOAL, DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        getView->Add(labelgettag);\r
-        InitLabel(labelpre, 233, 307, 160, 35, "label3", "100%", DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        getView->Add(labelpre);\r
-\r
-        // 初始化按键\r
-        InitButtonExt(buttonok_, 0, 366, 466, 100, BUTTONWINOK, STR_OK, 30);\r
-        buttonok_->SetImageSrc(BUTTONOK_IMAGE, BUTTONOK_IMAGE);\r
-        buttonok_->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingCardPresenter::GetInstance()));\r
-        getView->Add(buttonok_);\r
-\r
-        InitImageAnimator();\r
-        RootView::GetInstance()->Add(getView);\r
-        getView->SetDraggable(false);\r
-        getView->SetTouchable(true);\r
-        getView->SetVisible(false); // 界面隐藏\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowGetTagView end");\r
-    }\r
-    /*最高心率提醒弹窗*/\r
-    void TraingCardView::ShowHeartView()\r
-    {\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowHeartView");\r
-        heartView = new UIScrollView();\r
-        if (heartView == nullptr)\r
-        {\r
-            return;\r
-        }\r
-        heartView->SetPosition(0, 0);\r
-        heartView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
-        heartView->SetScrollBlankSize(20);\r
-        heartView->SetReboundSize(50);\r
-        heartView->SetDirection(1);\r
-\r
-        // 初始化Lable\r
-        InitRollLabel(hearttitle, 83, 50, 300, 35, "label1", STR_HEARTTITLE, DEFAULT_VECTOR_FONT_FILENAME, 35);\r
-        heartView->Add(hearttitle);\r
-\r
-        int maxheart = ConfigModel::GetInstance()->get_configData_int(ConfigModel::CONFIGMODEL_ITEM_TRAINING_HEART_MAX);\r
-        std::string heartStr = "当前心率高于" + std::to_string(maxheart) + "次/分钟";\r
-        InitLabel(labelnote, 53, 269, 360, 35, "label3", heartStr.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 30);\r
-        heartView->Add(labelnote);\r
-\r
-        InitImageView(heartiamge, 193, 149, 80, 80, "note", WARNING_IMAGE);\r
-        heartView->Add(heartiamge);\r
-\r
-        // 初始化按键\r
-        InitButtonExt(buttonnote_, 0, 366, 466, 100, BUTTONNOTE, STR_OK, 30);\r
-        buttonnote_->SetImageSrc(BUTTONOK_IMAGE, BUTTONOK_IMAGE);\r
-        buttonnote_->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingCardPresenter::GetInstance()));\r
-        heartView->Add(buttonnote_);\r
-\r
-        RootView::GetInstance()->Add(heartView);\r
-        heartView->SetDraggable(false);\r
-        heartView->SetTouchable(true);\r
-        heartView->SetVisible(false); // 界面隐藏\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowHeartView end");\r
-    }\r
-    /*获取运动量结束弹窗界面刷新*/\r
-    bool TraingCardView::RefreshEndView()\r
-    {\r
-        // 获取训练卡路里判断运动量\r
-        momentumFlag = TraingModel::GetInstance()->GetMomentum();\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "momentumFlag %d", momentumFlag);\r
-\r
-        if (momentumFlag)\r
-        {\r
-            // 正常结束\r
-            endnote->SetVisible(false);\r
-            endtitle->SetTextId(STR_END_MOVEMENT);\r
-            notelabel->SetTextId(STR_END_THIS_MOVEMENT);\r
-        }\r
-        else\r
-        {\r
-            endtitle->SetTextId(STR_LOOK_OUT);\r
-            notelabel->SetTextId(STR_INSUFFICIENT_EXERCISE_AMOUNT);\r
-            endnote->SetVisible(true);\r
-        }\r
-        return momentumFlag;\r
-    }\r
-    /*初始化动画以及Taglabel*/\r
-    void TraingCardView::InitImageAnimator()\r
-    {\r
-        int tag = TraingModel::GetInstance()->GetSportTag();\r
-        ExerciseTag tagType = TraingModel::GetInstance()->GetSportTagtype();\r
-        std::string tagString = std::to_string(tag);\r
-        switch (tagType)\r
-        {\r
-        case ExerciseTag::Duration:\r
-        {\r
-            int hours = tag / 60;\r
-            int minutes = tag % 60;\r
-            int seconds = 0;\r
-            // 将小时、分钟、秒转换为字符串,并在小于10时补零\r
-            std::string hoursStr = (hours < 10) ? "0" + std::to_string(hours) : std::to_string(hours);\r
-            std::string minutesStr = (minutes < 10) ? "0" + std::to_string(minutes) : std::to_string(minutes);\r
-            std::string secondsStr = (seconds < 10) ? "0" + std::to_string(seconds) : std::to_string(seconds);\r
-            tagString = hoursStr + ":" + minutesStr + ":" + secondsStr;\r
-            break;\r
-        }\r
-        case ExerciseTag::Calories:\r
-        {\r
-            tagString = tagString + "kcal";\r
-            break;\r
-        }\r
-        case ExerciseTag::Distance:\r
-        {\r
-            tagString = tagString + "km";\r
-            break;\r
-        }\r
-        case ExerciseTag::Steps:\r
-            break;\r
-        default:\r
-            break;\r
-        }\r
-        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "tag[%d]-tagType[%d]-tagString[%s]\r\n", tag, tagType, tagString.c_str());\r
-        InitLabel(labeltag, 70, 215, 326, 97, "label2", tagString.c_str(), DEFAULT_VECTOR_FONT_FILENAME, 80);\r
-        labeltag->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));\r
-        getView->Add(labeltag);\r
-\r
-        // 初始化图片数组以及动画\r
-        winimageInfos = CreateImageInfoArray(winbasePath.c_str(), 94);\r
-        InitImageAnimatorSource(imageAnimator, winimageAnimatorInfo, winimageInfos, 94, 173, 100, 120, 120, "imageAnimator1", 10);\r
-        getView->Add(imageAnimator);\r
-    }\r
-\r
-    /*获取卡片View单例*/\r
-    UICrossView *TraingCardView::GetTraingCrad()\r
-    {\r
-        return swipe_;\r
-    }\r
-    void TraingCardView::OnSetUpView()\r
-    {\r
-        View<TraingCardPresenter>::OnSetUpView();\r
-        Draw();\r
-    }\r
-\r
-    void TraingCardView::OnTearDownView()\r
-    {\r
-        View<TraingCardPresenter>::OnTearDownView();\r
-        return;\r
-    }\r
-\r
-    void TraingCardView::OnStop()\r
-    {\r
-        View<TraingCardPresenter>::OnStop();\r
-        RootView::GetInstance()->RemoveAll();\r
-        return;\r
-    }\r
-\r
-    int TraingCardView::GetCurrentPage()\r
-    {\r
-        return swipe_->GetCurrentPageId(0); // 获取水平页面\r
-    }\r
-    UIImageAnimatorView *TraingCardView::GetAnimator()\r
-    {\r
-        return imageAnimator;\r
-    }\r
+static const uint16_t LABEL_FONT_SIZE = 200;\r
+static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;\r
+static const uint32_t CARD_PAGE_COLOR = 0xffd0d0d0;\r
+\r
+static TraingCardView *g_pTraingCardView{nullptr};\r
+\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
+  g_pTraingCardView = this;\r
+}\r
+\r
+TraingCardView::~TraingCardView() {\r
+  imageAnimator->Stop();\r
+  FreeImageInfoArray(winimageInfos, winbasePath.c_str(), 94);\r
+  ReleaseImageAnimatorSource(winimageAnimatorInfo, 94);\r
+  DeInit();\r
+\r
+  g_pTraingCardView = nullptr;\r
+  DisableTimer(); // 关闭计时器\r
+  TraingModel::GetInstance()->SetTimestamp();\r
+  uapi_remove_sport_vote(); // 移除\r
+}\r
+\r
+TraingCardView *TraingCardView::GetInstance() { return g_pTraingCardView; }\r
+\r
+/* InitView:初始化界面*/\r
+void TraingCardView ::InitView() {\r
+\r
+  if (swipe_ == nullptr) {\r
+    swipe_ = new UICrossView();\r
+    swipe_->SetPosition(0, 0, 466, 466);\r
+    swipe_->SetStyle(STYLE_BACKGROUND_OPA, 0);\r
+  }\r
+\r
+  InitControlPage();\r
+  InitDataPage();\r
+  InitMusicPage();\r
+  InitDetailPage();\r
+\r
+  swipe_->HorAdd(controlview_);\r
+  swipe_->HorAdd(dataallview_);\r
+  swipe_->HorAdd(musicview_);\r
+\r
+  ShowEndView();\r
+  ShowGetTagView();\r
+  ShowHeartView();\r
+\r
+  //  swipe_->HorAdd(DetailView);\r
+  swipe_->VerAdd(DetailView, UICrossView::VPage::DOWN_PAGE);\r
+\r
+  swipe_->SetHorCurrentPage(Control_Card::DATA); // 设置进入索引 [数据]\r
+\r
+  UISwipeView::OnSwipeListener *onSwipeListener =\r
+      static_cast<UISwipeView::OnSwipeListener *>(\r
+          OHOS::TraingCardPresenter::GetInstance());\r
+  if (onSwipeListener == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "onSwipeListener is null");\r
+    return;\r
+  }\r
+  swipe_->SetOnSwipeListener(onSwipeListener);\r
+\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView::InitPage over");\r
+}\r
+\r
+/* DeInit:删除组件 */\r
+void TraingCardView::DeInit() {\r
+  swipe_->RemoveAll();\r
+\r
+  /*界面*/\r
+  controlview_->RemoveAll();\r
+  dataallview_->RemoveAll();\r
+  // DetailView->RemoveAll();\r
+  musicview_->RemoveAll();\r
+  endView->RemoveAll();\r
+  getView->RemoveAll();\r
+  heartView->RemoveAll();\r
+\r
+  /*标签*/\r
+  delete endtitle;\r
+  endtitle = nullptr;\r
+  delete notelabel;\r
+  notelabel = nullptr;\r
+  delete endnotelabel;\r
+  endnotelabel = nullptr;\r
+  delete endnote;\r
+  endnote = nullptr;\r
+  delete labeltitle;\r
+  labeltitle = nullptr;\r
+  delete labeltag;\r
+  labeltag = nullptr;\r
+  delete labelgettag;\r
+  labelgettag = nullptr;\r
+  delete labelpre;\r
+  labelpre = nullptr;\r
+  delete hearttitle;\r
+  hearttitle = nullptr;\r
+  delete labelnote;\r
+  labelnote = nullptr;\r
+  /*图片*/\r
+  delete heartiamge;\r
+  heartiamge = nullptr;\r
+\r
+  /*按键*/\r
+  delete exit;\r
+  exit = nullptr;\r
+  delete back;\r
+  back = nullptr;\r
+  delete buttonok_;\r
+  buttonok_ = nullptr;\r
+  delete buttonnote_;\r
+  buttonnote_ = nullptr;\r
+\r
+  /*动画*/\r
+  delete imageAnimator;\r
+  imageAnimator = nullptr;\r
+\r
+  /*卡片*/\r
+  delete controlview_;\r
+  controlview_ = nullptr;\r
+  delete dataallview_;\r
+  dataallview_ = nullptr;\r
+  // delete DetailView;\r
+  // DetailView = nullptr;\r
+  delete swipe_;\r
+  delete musicview_;\r
+  musicview_ = nullptr;\r
+  /*弹窗*/\r
+  delete endView;\r
+  endView = nullptr;\r
+  delete getView;\r
+  getView = nullptr;\r
+  delete heartView;\r
+  heartView = nullptr;\r
+\r
+  swipe_ = nullptr;\r
+}\r
+UICardPage *TraingCardView::InitControlPage(void) {\r
+  controlview_ = new TrainingControlView();\r
+  // controlview_->PreLoad();\r
+  if (controlview_ == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "controlview_ new fail");\r
+    return nullptr;\r
+  }\r
+  return controlview_;\r
+}\r
+UICardPage *TraingCardView::InitDataPage(void) {\r
+  dataallview_ = new TraingDataAllView();\r
+  //   dataallview_->PreLoad();\r
+  if (dataallview_ == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dataallview_ new fail");\r
+    return nullptr;\r
+  }\r
+  return dataallview_;\r
+}\r
+UICardPage *TraingCardView::InitMusicPage(void) {\r
+  musicview_ = new PlayersView();\r
+  // musicview_->PreLoad();\r
+  if (musicview_ == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "musicview_ new fail");\r
+    return nullptr;\r
+  }\r
+  return musicview_;\r
+}\r
+UICardPage *TraingCardView::InitDetailPage() {\r
+  DetailView = new TrainingDetailView();\r
+  //   DetailView->PreLoad();\r
+  DetailView->SetPosition(0, 0, Screen::GetInstance().GetWidth(),\r
+                          Screen::GetInstance().GetHeight());\r
+  DetailView->SetStyle(STYLE_BORDER_RADIUS, 466); // 设置为圆形\r
+  if (DetailView == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DetailView new fail");\r
+    return nullptr;\r
+  }\r
+  return DetailView;\r
+}\r
+void TraingCardView::PreLoad(void) {\r
+  if (!viewiInitStatus) {\r
+    InitView();\r
+    viewiInitStatus = true;\r
+  }\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TraingCardView  PreLoad");\r
+}\r
+void TraingCardView::OnStart() {\r
+  View<TraingCardPresenter>::OnStart();\r
+\r
+  swipe_ = new UICrossView();\r
+  if (swipe_ == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "swipe_ new fail");\r
+    return;\r
+  }\r
+  UIView::OnDragListener *listener =\r
+      static_cast<UIView::OnDragListener *>(TraingCardPresenter::GetInstance());\r
+  if (listener == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,\r
+                  "AlarmSetWeekView:: new alarmDragListener fail");\r
+    return;\r
+  }\r
+  swipe_->SetOnDragListener(listener);\r
+\r
+  PreLoad();\r
+  swipe_->SetPosition(0, 0, Screen::GetInstance().GetWidth(),\r
+                      Screen::GetInstance().GetHeight());\r
+  swipe_->SetTouchable(true);\r
+  swipe_->SetDraggable(true);\r
+  swipe_->SetStyle(STYLE_BACKGROUND_COLOR, BACK_GROUND_COLOR);\r
+  swipe_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);\r
+  swipe_->EnableScreenCap(true);\r
+  swipe_->SetAnimatorTime(50);\r
+\r
+  SetContainerView(swipe_);\r
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "swipe_ new ok");\r
+}\r
+/*设置弹窗状态*/\r
+void TraingCardView::SetPopupViewStatus(PopupType type, bool status) {\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SetPopupViewStatus %d", type);\r
+  UIView *popupView = nullptr;\r
+  if (type == EndPopup) {\r
+    popupView = endView;\r
+  } else if (type == GetTagPopup) {\r
+    popupView = getView;\r
+  } else if (type == HeartPopup) {\r
+    popupView = heartView;\r
+  }\r
+\r
+  if (popupView == nullptr) {\r
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PopupView is NULL");\r
+    return;\r
+  }\r
+\r
+  UIView *cardview = TraingCardView::GetInstance()->GetTraingCrad();\r
+  if (cardview != nullptr) {\r
+    cardview->SetVisible(!status);\r
+  }\r
+\r
+  popupView->SetVisible(status);\r
+}\r
+/*结束弹窗界面*/\r
+void TraingCardView::ShowEndView() {\r
+  // momentumFlag = false; // 标志位还原\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowEndView");\r
+  endView = new UIScrollView();\r
+  if (endView == nullptr) {\r
+    return;\r
+  }\r
+  endView->SetPosition(0, 0);\r
+  endView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
+  endView->SetScrollBlankSize(20);\r
+  endView->SetReboundSize(50);\r
+  endView->SetDirection(1);\r
+\r
+  InitRollLabel(endtitle, 83, 50, 300, 35, "label1", STR_LOOK_OUT,\r
+                DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+  InitRollLabel(notelabel, 56, 167, 360, 80, "label2",\r
+                STR_INSUFFICIENT_EXERCISE_AMOUNT, DEFAULT_VECTOR_FONT_FILENAME,\r
+                30);\r
+  /*隐藏是否结束运动title*/\r
+  InitRollLabel(endnote, 56, 207, 360, 80, "label3", STR_END_THIS_MOVEMENT,\r
+                DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+  endnote->SetVisible(false);\r
+\r
+  endView->Add(endnote);\r
+  endView->Add(endtitle);\r
+  endView->Add(notelabel);\r
+\r
+  InitButton(exit, 111, 299, 100, 100, BUTTONBACK);\r
+  exit->SetOnClickListener(static_cast<UIView::OnClickListener *>(\r
+      TraingCardPresenter::GetInstance()));\r
+  exit->SetImageSrc(NO_IMAGE, NO_IMAGE);\r
+  InitButton(back, 256, 299, 100, 100, BUTTONEXIT);\r
+  back->SetOnClickListener(static_cast<UIView::OnClickListener *>(\r
+      TraingCardPresenter::GetInstance()));\r
+  back->SetImageSrc(YES_IMAGE, YES_IMAGE);\r
+  endView->Add(exit);\r
+  endView->Add(back);\r
+  RootView::GetInstance()->Add(endView);\r
+  endView->SetDraggable(false);\r
+  endView->SetTouchable(true);\r
+  endView->SetVisible(false); // 界面隐藏\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowEndView end");\r
+}\r
+/*目标达成界面*/\r
+void TraingCardView::ShowGetTagView() {\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowGetTagView");\r
+  getView = new UIScrollView();\r
+  if (getView == nullptr) {\r
+    return;\r
+  }\r
+  getView->SetPosition(0, 0);\r
+  getView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
+  getView->SetScrollBlankSize(20);\r
+  getView->SetReboundSize(50);\r
+  getView->SetDirection(1);\r
+\r
+  // 初始化Lable\r
+  InitRollLabel(labeltitle, 83, 50, 300, 35, "label1", STR_GOAL_ACHIEVED,\r
+                DEFAULT_VECTOR_FONT_FILENAME, 35);\r
+  getView->Add(labeltitle);\r
+  InitRollLabel(labelgettag, 103, 307, 200, 35, "label3", STR_ACCOMPLISH_GOAL,\r
+                DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+  getView->Add(labelgettag);\r
+  InitLabel(labelpre, 233, 307, 160, 35, "label3", "100%",\r
+            DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+  getView->Add(labelpre);\r
+\r
+  // 初始化按键\r
+  InitButtonExt(buttonok_, 0, 366, 466, 100, BUTTONWINOK, STR_OK, 30);\r
+  buttonok_->SetImageSrc(BUTTONOK_IMAGE, BUTTONOK_IMAGE);\r
+  buttonok_->SetOnClickListener(static_cast<UIView::OnClickListener *>(\r
+      TraingCardPresenter::GetInstance()));\r
+  getView->Add(buttonok_);\r
+\r
+  InitImageAnimator();\r
+  RootView::GetInstance()->Add(getView);\r
+  getView->SetDraggable(false);\r
+  getView->SetTouchable(true);\r
+  getView->SetVisible(false); // 界面隐藏\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowGetTagView end");\r
+}\r
+/*最高心率提醒弹窗*/\r
+void TraingCardView::ShowHeartView() {\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowHeartView");\r
+  heartView = new UIScrollView();\r
+  if (heartView == nullptr) {\r
+    return;\r
+  }\r
+  heartView->SetPosition(0, 0);\r
+  heartView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);\r
+  heartView->SetScrollBlankSize(20);\r
+  heartView->SetReboundSize(50);\r
+  heartView->SetDirection(1);\r
+\r
+  // 初始化Lable\r
+  InitRollLabel(hearttitle, 83, 50, 300, 35, "label1", STR_HEARTTITLE,\r
+                DEFAULT_VECTOR_FONT_FILENAME, 35);\r
+  heartView->Add(hearttitle);\r
+\r
+  int maxheart = ConfigModel::GetInstance()->get_configData_int(\r
+      ConfigModel::CONFIGMODEL_ITEM_TRAINING_HEART_MAX);\r
+  std::string heartStr = "当前心率高于" + std::to_string(maxheart) + "次/分钟";\r
+  InitLabel(labelnote, 53, 269, 360, 35, "label3", heartStr.c_str(),\r
+            DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+  heartView->Add(labelnote);\r
+\r
+  InitImageView(heartiamge, 193, 149, 80, 80, "note", WARNING_IMAGE);\r
+  heartView->Add(heartiamge);\r
+\r
+  // 初始化按键\r
+  InitButtonExt(buttonnote_, 0, 366, 466, 100, BUTTONNOTE, STR_OK, 30);\r
+  buttonnote_->SetImageSrc(BUTTONOK_IMAGE, BUTTONOK_IMAGE);\r
+  buttonnote_->SetOnClickListener(static_cast<UIView::OnClickListener *>(\r
+      TraingCardPresenter::GetInstance()));\r
+  heartView->Add(buttonnote_);\r
+\r
+  RootView::GetInstance()->Add(heartView);\r
+  heartView->SetDraggable(false);\r
+  heartView->SetTouchable(true);\r
+  heartView->SetVisible(false); // 界面隐藏\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ShowHeartView end");\r
+}\r
+/*获取运动量结束弹窗界面刷新*/\r
+bool TraingCardView::RefreshEndView() {\r
+  // 获取训练卡路里判断运动量\r
+  momentumFlag = TraingModel::GetInstance()->GetMomentum();\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "momentumFlag %d", momentumFlag);\r
+\r
+  if (momentumFlag) {\r
+    // 正常结束\r
+    endnote->SetVisible(false);\r
+    endtitle->SetTextId(STR_END_MOVEMENT);\r
+    notelabel->SetTextId(STR_END_THIS_MOVEMENT);\r
+  } else {\r
+    endtitle->SetTextId(STR_LOOK_OUT);\r
+    notelabel->SetTextId(STR_INSUFFICIENT_EXERCISE_AMOUNT);\r
+    endnote->SetVisible(true);\r
+  }\r
+  return momentumFlag;\r
+}\r
+/*初始化动画以及Taglabel*/\r
+void TraingCardView::InitImageAnimator() {\r
+  int tag = TraingModel::GetInstance()->GetSportTag();\r
+  ExerciseTag tagType = TraingModel::GetInstance()->GetSportTagtype();\r
+  std::string tagString = std::to_string(tag);\r
+  switch (tagType) {\r
+  case ExerciseTag::Duration: {\r
+    int hours = tag / 60;\r
+    int minutes = tag % 60;\r
+    int seconds = 0;\r
+    // 将小时、分钟、秒转换为字符串,并在小于10时补零\r
+    std::string hoursStr =\r
+        (hours < 10) ? "0" + std::to_string(hours) : std::to_string(hours);\r
+    std::string minutesStr = (minutes < 10) ? "0" + std::to_string(minutes)\r
+                                            : std::to_string(minutes);\r
+    std::string secondsStr = (seconds < 10) ? "0" + std::to_string(seconds)\r
+                                            : std::to_string(seconds);\r
+    tagString = hoursStr + ":" + minutesStr + ":" + secondsStr;\r
+    break;\r
+  }\r
+  case ExerciseTag::Calories: {\r
+    tagString = tagString + "kcal";\r
+    break;\r
+  }\r
+  case ExerciseTag::Distance: {\r
+    tagString = tagString + "km";\r
+    break;\r
+  }\r
+  case ExerciseTag::Steps:\r
+    break;\r
+  default:\r
+    break;\r
+  }\r
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,\r
+                "tag[%d]-tagType[%d]-tagString[%s]\r\n", tag, tagType,\r
+                tagString.c_str());\r
+  InitLabel(labeltag, 70, 215, 326, 97, "label2", tagString.c_str(),\r
+            DEFAULT_VECTOR_FONT_FILENAME, 80);\r
+  labeltag->SetTextColor(Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff));\r
+  getView->Add(labeltag);\r
+\r
+  // 初始化图片数组以及动画\r
+  winimageInfos = CreateImageInfoArray(winbasePath.c_str(), 94);\r
+  InitImageAnimatorSource(imageAnimator, winimageAnimatorInfo, winimageInfos,\r
+                          94, 173, 100, 120, 120, "imageAnimator1", 10);\r
+  getView->Add(imageAnimator);\r
+}\r
+\r
+/*获取卡片View单例*/\r
+UICrossView *TraingCardView::GetTraingCrad() { return swipe_; }\r
+void TraingCardView::OnSetUpView() {\r
+  View<TraingCardPresenter>::OnSetUpView();\r
+  Draw();\r
+}\r
+\r
+void TraingCardView::OnTearDownView() {\r
+  View<TraingCardPresenter>::OnTearDownView();\r
+  return;\r
+}\r
+\r
+void TraingCardView::OnStop() {\r
+  View<TraingCardPresenter>::OnStop();\r
+  RootView::GetInstance()->RemoveAll();\r
+  return;\r
+}\r
+\r
+int TraingCardView::GetCurrentPage() {\r
+  return swipe_->GetCurrentPageId(0); // 获取水平页面\r
 }\r
+UIImageAnimatorView *TraingCardView::GetAnimator() { return imageAnimator; }\r
+} // namespace OHOS\r
diff --git a/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingDataAllView.cpp b/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TraingDataAllView.cpp
new file mode 100644 (file)
index 0000000..1579cf2
--- /dev/null
@@ -0,0 +1,169 @@
+#include "traing/include/TraingModel.h"
+#include "traing/training_card/include/TrainingControlView.h"
+#include "traing/training_card/include/TrainingDataView.h"
+#include "traing/training_card/include/TrainingDetailView.h"
+#include "wearable_log.h"
+
+namespace OHOS {
+
+static TraingDataAllView *g_pTraingDataAllView{nullptr};
+
+TraingDataAllView::TraingDataAllView() {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                "TraingDataAllView::TraingDataAllView");
+  SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+  g_pTraingDataAllView = this;
+}
+
+TraingDataAllView::~TraingDataAllView() {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                "TraingDataAllView::~TraingDataAllView");
+  ClearAll();
+  g_pTraingDataAllView = nullptr;
+}
+
+TraingDataAllView *TraingDataAllView::GetInstance(void) {
+  return g_pTraingDataAllView;
+}
+
+void TraingDataAllView::ClearAll(void) {
+  for (int32_t i = 0; i < maxPage; i++) {
+    recordCard[i] = nullptr;
+  }
+
+  if (TraingDataAllSwipeViewList) {
+    TraingDataAllSwipeViewList->RemoveAll();
+    delete TraingDataAllSwipeViewList;
+    TraingDataAllSwipeViewList = nullptr;
+  }
+
+  delete trainingDataView;
+  trainingDataView = nullptr;
+
+  delete trainingDetailView;
+  trainingDetailView = nullptr;
+}
+
+UISwipeView *TraingDataAllView::TraingDataAllViewInit(void) {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                "TraingDataAllView::TraingDataAllViewInit");
+
+  TraingDataAllSwipeViewList = new UISwipeView(UISwipeView::VERTICAL);
+  if (!TraingDataAllSwipeViewList) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Failed to create TraingDataAllSwipeViewList");
+    return nullptr;
+  }
+
+  TraingDataAllSwipeViewList->SetStyle(STYLE_BACKGROUND_COLOR,
+                                       Color::Black().full);
+  TraingDataAllSwipeViewList->SetPosition(0, 0, HORIZONTAL_RESOLUTION,
+                                          VERTICAL_RESOLUTION);
+  TraingDataAllSwipeViewList->SetDraggable(true);
+  TraingDataAllSwipeViewList->SetTouchable(true);
+
+  for (uint16_t i = 0; i < maxPage; i++) {
+    recordCard[i] = CreatePage(i);
+    if (!recordCard[i]) {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recordCard[%d] is nullptr", i);
+      return nullptr;
+    }
+    recordCard[i]->InitView(this);
+    TraingDataAllSwipeViewList->Add(recordCard[i]);
+  }
+
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TraingDataAllView InitPage complete");
+  return TraingDataAllSwipeViewList;
+}
+
+UISwipeView *TraingDataAllView::GetTraingDataAllPageView() {
+  return TraingDataAllViewInit();
+}
+
+TrainingDataView *TraingDataAllView::GetTrainingDataView(void) {
+  return trainingDataView;
+}
+
+TrainingDetailView *TraingDataAllView::GetTrainingDetailView(void) {
+  return trainingDetailView;
+}
+
+AppGroupView *TraingDataAllView::TraingDataPageInit(void) {
+  trainingDataView = new TrainingDataView();
+  if (!trainingDataView) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to create TrainingDataView");
+    return nullptr;
+  }
+  return trainingDataView;
+}
+
+AppGroupView *TraingDataAllView::TraingDetailPageInit(void) {
+  trainingDetailView = new TrainingDetailView();
+  if (!trainingDetailView) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Failed to create TrainingDetailView");
+    return nullptr;
+  }
+  return trainingDetailView;
+}
+
+struct TraingDataAllViewMapper {
+  const int16_t viewId;
+  AppGroupView *(TraingDataAllView::*func)(void);
+};
+
+static const TraingDataAllViewMapper g_pageMapper[] = {
+    {TRAING_DATA_ALL_MAIN_VIEW, &TraingDataAllView::TraingDataPageInit},
+    {TRAING_DATA_ALL_DETAIL_VIEW, &TraingDataAllView::TraingDetailPageInit},
+};
+
+AppGroupView *TraingDataAllView::CreatePage(uint8_t TraingDataAllPageId) {
+  for (const auto &mapper : g_pageMapper) {
+    if (mapper.viewId == TraingDataAllPageId) {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                    "Creating page for TraingDataAllPageId: %d",
+                    TraingDataAllPageId);
+      return (this->*(mapper.func))();
+    }
+  }
+  return nullptr;
+}
+
+bool TraingDataAllView::InitView(void) {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Initializing TraingDataAllView");
+
+  if (!trainingDataAllView) {
+    trainingDataAllView = new TraingDataAllView();
+    if (!trainingDataAllView) {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                    "Failed to create TraingDataAllView");
+      return false;
+    }
+  }
+
+  traingDataAllPageView = dynamic_cast<UISwipeView *>(
+      trainingDataAllView->GetTraingDataAllPageView());
+  if (!traingDataAllPageView) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "GetTraingDataAllPageView returned nullptr");
+    return false;
+  }
+  traingDataAllPageView->SetDraggable(true);
+  traingDataAllPageView->SetTouchable(true);
+  Add(traingDataAllPageView);
+
+  return true;
+}
+
+void TraingDataAllView::PreLoad(void) {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Preloading TraingDataAllView");
+  if (!viewiInitStatus && InitView()) {
+    viewiInitStatus = true;
+  }
+}
+
+void TraingDataAllView::UnLoad(void) {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unloading TraingDataAllView");
+}
+
+} // namespace OHOS
\ No newline at end of file
index f8a9194..d91ce22 100644 (file)
@@ -2,95 +2,98 @@
  * @Date: 2024-04-15 10:55:58
  * @LastEditors: Caisking 3449750381@qq.com
  * @LastEditTime: 2024-08-02 09:35:58
- * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDataView.cpp
+ * @FilePath:
+ * /FD230/code/sdk/application/wearable/fd230app/nativeui/traing/training_card/src/TrainingDataView.cpp
  */
 
 #include "traing/training_card/include/TrainingDataView.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 "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 <ui_scroll_view.h>
+
+namespace OHOS {
 
-namespace OHOS
-{
-
-    static TrainingDataView *g_pTrainingDataView{nullptr};
-
-    TrainingDataView::TrainingDataView()
-    {
-        SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
-        g_pTrainingDataView = this;
-    }
-
-    TrainingDataView::~TrainingDataView()
-    {
-        RemoveAll();
-        DeInit();
-        g_pTrainingDataView = nullptr;
-    }
-
-    TrainingDataView *TrainingDataView::GetInstance()
-    {
-        return g_pTrainingDataView;
-    }
-
-    /* InitView:初始化界面*/
-    void TrainingDataView ::InitView()
-    {
-        // 初始化Image
-        InitImageView(image_progress, 13, 13, 440, 386, "image1", PROGRESS_IMAGE);
-        InitImageView(image_heart, 88, 295, 50, 50, "image2", SPORT_HEARTRATE_IMAGE);
-        InitImageView(image_iconup, 225, 396, 16, 10, "image4", INCO_UP_IMAGE);
-        InitImageView(image_iconpoint, 193, 421, 80, 20, "image5", DATA_POINT_IMAGE);
-        Add(image_progress);
-        Add(image_heart);
-        Add(image_iconup);
-        Add(image_iconpoint);
-
-        // 初始化进度条
-        circleProgress = new UICircleProgress();
-        circleProgress->SetPosition(0, 0);
-        circleProgress->Resize(466, 466);
-        circleProgress->SetViewId("circleProgress");
-        circleProgress->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
-        circleProgress->SetBackgroundStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
-        circleProgress->SetBackgroundStyle(STYLE_LINE_WIDTH, 12);
-        circleProgress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xff2195F6);
-        circleProgress->SetForegroundStyle(STYLE_BORDER_COLOR, 0xff000000);
-        circleProgress->SetForegroundStyle(STYLE_LINE_COLOR, 0xff4fC34C);
-        circleProgress->SetForegroundStyle(STYLE_LINE_WIDTH, 10);
-        circleProgress->SetCenterPosition(235, 235);
-        circleProgress->SetRadius(215);
-        circleProgress->SetStartAngle(215);
-        circleProgress->SetEndAngle(505);
-        circleProgress->SetCapType(CAP_ROUND);
-        circleProgress->SetValue(0);
-        Add(circleProgress);
-
-        // 初始化Lable
-        UIResourceTextId sport_id = TraingModel::GetInstance()->GetSportEvent();
-        InitLabelExt(sportlabel, 83, 120, 300, 35, "label2", sport_id, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        sportlabel->SetTextColor(Color::Gray());
-
-        InitLabel(curtimelabel, 155, 60, 150, 50, "label1", "23:54", DEFAULT_VECTOR_FONT_FILENAME, 40);
-
-        InitLabel(timerlabel, 0, 163, 466, 150, "label3", "00:00:00", DEFAULT_VECTOR_FONT_FILENAME, 80);
-        InitLabel(heartlabel, 85, 284, 230, 80, "label4", "--", DEFAULT_VECTOR_FONT_FILENAME, 60);
-        InitLabel(ubpmlabel, 218, 284, 230, 80, "label5", "bpm", DEFAULT_VECTOR_FONT_FILENAME, 60);
-        ubpmlabel->SetTextColor(Color::Gray());
-        Add(curtimelabel);
-        Add(sportlabel);
-        Add(timerlabel);
-        Add(heartlabel);
-        Add(ubpmlabel);
+static TrainingDataView *g_pTrainingDataView{nullptr};
+
+TrainingDataView::TrainingDataView() {
+  SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+  g_pTrainingDataView = this;
+}
+
+TrainingDataView::~TrainingDataView() {
+  RemoveAll();
+  DeInit();
+  g_pTrainingDataView = nullptr;
+}
+
+TrainingDataView *TrainingDataView::GetInstance() {
+  return g_pTrainingDataView;
+}
+
+/* InitView:初始化界面*/
+bool TrainingDataView ::InitPage() {
+  // 初始化Image
+  InitImageView(image_progress, 13, 13, 440, 386, "image1", PROGRESS_IMAGE);
+  InitImageView(image_heart, 88, 295, 50, 50, "image2", SPORT_HEARTRATE_IMAGE);
+  InitImageView(image_iconup, 225, 396, 16, 10, "image4", INCO_UP_IMAGE);
+  InitImageView(image_iconpoint, 193, 421, 80, 20, "image5", DATA_POINT_IMAGE);
+  Add(image_progress);
+  Add(image_heart);
+  Add(image_iconup);
+  Add(image_iconpoint);
+
+  // 初始化进度条
+  circleProgress = new UICircleProgress();
+  circleProgress->SetPosition(0, 0);
+  circleProgress->Resize(466, 466);
+  circleProgress->SetViewId("circleProgress");
+  circleProgress->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+  circleProgress->SetBackgroundStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
+  circleProgress->SetBackgroundStyle(STYLE_LINE_WIDTH, 12);
+  circleProgress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xff2195F6);
+  circleProgress->SetForegroundStyle(STYLE_BORDER_COLOR, 0xff000000);
+  circleProgress->SetForegroundStyle(STYLE_LINE_COLOR, 0xff4fC34C);
+  circleProgress->SetForegroundStyle(STYLE_LINE_WIDTH, 10);
+  circleProgress->SetCenterPosition(235, 235);
+  circleProgress->SetRadius(215);
+  circleProgress->SetStartAngle(215);
+  circleProgress->SetEndAngle(505);
+  circleProgress->SetCapType(CAP_ROUND);
+  circleProgress->SetValue(0);
+  Add(circleProgress);
+
+  // 初始化Lable
+  UIResourceTextId sport_id = TraingModel::GetInstance()->GetSportEvent();
+  InitLabelExt(sportlabel, 83, 120, 300, 35, "label2", sport_id,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  sportlabel->SetTextColor(Color::Gray());
+
+  InitLabel(curtimelabel, 155, 60, 150, 50, "label1", "23:54",
+            DEFAULT_VECTOR_FONT_FILENAME, 40);
+
+  InitLabel(timerlabel, 0, 163, 466, 150, "label3", "00:00:00",
+            DEFAULT_VECTOR_FONT_FILENAME, 80);
+  InitLabel(heartlabel, 85, 284, 230, 80, "label4", "--",
+            DEFAULT_VECTOR_FONT_FILENAME, 60);
+  InitLabel(ubpmlabel, 218, 284, 230, 80, "label5", "bpm",
+            DEFAULT_VECTOR_FONT_FILENAME, 60);
+  ubpmlabel->SetTextColor(Color::Gray());
+  Add(curtimelabel);
+  Add(sportlabel);
+  Add(timerlabel);
+  Add(heartlabel);
+  Add(ubpmlabel);
+
+  return true;
 
 #if 0
         //  初始化Button
@@ -100,108 +103,91 @@ namespace OHOS
         buttonNote->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingCardPresenter::GetInstance()));
         Add(buttonNote);
 #endif
-        // 增加上拉卡片
-        SetCoverable(true);
-    }
-
-    /* DeInit:删除组件 */
-    void TrainingDataView::DeInit()
-    {
-        RemoveAll();
-        if (curtimelabel != nullptr)
-        {
-            curtimelabel = nullptr;
-        }
-        if (sportlabel != nullptr)
-        {
-            delete sportlabel;
-            sportlabel = nullptr;
-        }
-        if (timerlabel != nullptr)
-        {
-            delete timerlabel;
-            timerlabel = nullptr;
-        }
-        if (heartlabel != nullptr)
-        {
-            delete heartlabel;
-            heartlabel = nullptr;
-        }
-        if (ubpmlabel != nullptr)
-        {
-            delete ubpmlabel;
-            ubpmlabel = nullptr;
-        }
-        // 删除button
-        if (buttonNote != nullptr)
-        {
-            delete buttonNote;
-            buttonNote = nullptr;
-        }
-
-        // 删除Image
-        if (image_lowIntensity != nullptr)
-        {
-            delete image_lowIntensity;
-            image_lowIntensity = nullptr;
-        }
-        if (image_iconup != nullptr)
-        {
-            delete image_iconup;
-            image_iconup = nullptr;
-        }
-        if (image_iconpoint != nullptr)
-        {
-            delete image_iconpoint;
-            image_iconpoint = nullptr;
-        }
-        if (circleProgress != nullptr)
-        {
-            delete circleProgress;
-            circleProgress = nullptr;
-        }
-    }
-
-    void TrainingDataView::PreLoad(void)
-    {
-        if (!viewiInitStatus)
-        {
-            InitView();
-            viewiInitStatus = true;
-        }
-    }
-
-    void TrainingDataView::UnLoad(void) {}
-    UILabelExt *TrainingDataView::GetTimeLabel()
-    {
-        return timerlabel;
-    }
-    UILabelExt *TrainingDataView::GetHeartLabel()
-    {
-        return heartlabel;
-    }
-    UICircleProgress *TrainingDataView::GetProgress()
-    {
-        return circleProgress;
-    }
-    /*更新当前时间*/
-    void TrainingDataView::UpdataTime()
-    {
-        if (curtimelabel == nullptr) // 防止刷新空组件
-            return;
-
-        // 获取当前时间
-        struct tm pTM;
-        time_t seconds;
-        time(&seconds);
-        localtime_r(&seconds, &pTM);
-
-        // 解析时间
-        int hour = pTM.tm_hour;
-        int minute = pTM.tm_min;
-
-        // 将时间和日期转换为字符串
-        std::string stringtime = (hour < 10 ? "0" : "") + std::to_string(hour) + ":" + (minute < 10 ? "0" : "") + std::to_string(minute);
-        curtimelabel->SetText(stringtime.c_str());
-    }
+  // 增加上拉卡片
+  // SetCoverable(true);
+}
+
+/* DeInit:删除组件 */
+void TrainingDataView::DeInit() {
+  RemoveAll();
+  if (curtimelabel != nullptr) {
+    curtimelabel = nullptr;
+  }
+  if (sportlabel != nullptr) {
+    delete sportlabel;
+    sportlabel = nullptr;
+  }
+  if (timerlabel != nullptr) {
+    delete timerlabel;
+    timerlabel = nullptr;
+  }
+  if (heartlabel != nullptr) {
+    delete heartlabel;
+    heartlabel = nullptr;
+  }
+  if (ubpmlabel != nullptr) {
+    delete ubpmlabel;
+    ubpmlabel = nullptr;
+  }
+  // 删除button
+  if (buttonNote != nullptr) {
+    delete buttonNote;
+    buttonNote = nullptr;
+  }
+
+  // 删除Image
+  if (image_lowIntensity != nullptr) {
+    delete image_lowIntensity;
+    image_lowIntensity = nullptr;
+  }
+  if (image_iconup != nullptr) {
+    delete image_iconup;
+    image_iconup = nullptr;
+  }
+  if (image_iconpoint != nullptr) {
+    delete image_iconpoint;
+    image_iconpoint = nullptr;
+  }
+  if (circleProgress != nullptr) {
+    delete circleProgress;
+    circleProgress = nullptr;
+  }
+}
+
+UILabelExt *TrainingDataView::GetTimeLabel() { return timerlabel; }
+UILabelExt *TrainingDataView::GetHeartLabel() { return heartlabel; }
+UICircleProgress *TrainingDataView::GetProgress() { return circleProgress; }
+/*更新当前时间*/
+void TrainingDataView::UpdataTime() {
+  if (curtimelabel == nullptr) // 防止刷新空组件
+    return;
+
+  // 获取当前时间
+  struct tm pTM;
+  time_t seconds;
+  time(&seconds);
+  localtime_r(&seconds, &pTM);
+
+  // 解析时间
+  int hour = pTM.tm_hour;
+  int minute = pTM.tm_min;
+
+  // 将时间和日期转换为字符串
+  std::string stringtime = (hour < 10 ? "0" : "") + std::to_string(hour) + ":" +
+                           (minute < 10 ? "0" : "") + std::to_string(minute);
+  curtimelabel->SetText(stringtime.c_str());
+}
+
+bool TrainingDataView::InitView(void *caller) {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TrainingDataView InitView %p",
+                caller);
+  if (InitPage() == false) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TrainingDataView::InitPage fail");
+    return false;
+  }
+  SetDraggable(true);
+  SetTouchable(true);
+  //   SleepDataRefresh();
+  return true;
 }
+} // namespace OHOS
index a4518a6..cc77a90 100644 (file)
 #include "traing/training_card/include/TrainingDetailView.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 "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"
-
-namespace OHOS
-{
-
-    static TrainingDetailView *g_pTrainingDetailView{nullptr};
-
-    TrainingDetailView::TrainingDetailView()
-    {
-        SetPosition(0, 0, 466, 466);
-        // SetStyle(STYLE_BACKGROUND_OPA, 0);
-        // SetStyle(STYLE_BORDER_RADIUS, 466);
-        g_pTrainingDetailView = this;
-    }
-    TrainingDetailView::~TrainingDetailView()
-    {
-        RemoveAll();
-        DeInit();
-        g_pTrainingDetailView = nullptr;
-    }
-
-    TrainingDetailView *TrainingDetailView::GetInstance()
-    {
-        return g_pTrainingDetailView;
-    }
-
-    /* InitView:初始化界面*/
-    void TrainingDetailView ::InitView()
-    {
-        // 初始化Image
-
-        InitImageView(progress_image, 0, 0, 100, 100, "image5", COLOR_PROGRESS_IMAGE);
-        // InitImageView(lineimage2_, 225, 190, 0, 0, "image", LINE_2_IMAGE);
-        if (lineimage2_ == nullptr)
-        {
-            lineimage2_ = new UIImageView();
-        }
-        lineimage2_->SetPosition(232, 191);
-        lineimage2_->Resize(2, 82);
-        lineimage2_->SetViewId("image2");
-        lineimage2_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff333333);
-        lineimage2_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
-        lineimage2_->SetVisible(true);
-
-        Add(progress_image);
-        Add(lineimage2_);
-
-        // 初始化Lable
-        InitLabelExt(u_milelabel, 16, 234, 220, 35, "label2", STR_RANGE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitLabelExt(u_stepslabel, 73, 362, 320, 35, "label3", STR_STEP_NUMBER, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitLabelExt(u_calorielabel, 225, 235, 230, 35, "label4", STR_CALORIE_SETTING, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        u_milelabel->SetTextColor(Color::Gray());
-        u_stepslabel->SetTextColor(Color::Gray());
-        u_calorielabel->SetTextColor(Color::Gray());
-
-        InitLabel(milelabel, 17, 160, 200, 80, "label6", "13.21", DEFAULT_VECTOR_FONT_FILENAME, 65);
-        InitLabel(calorielabel, 230, 160, 200, 80, "label7", "28312", DEFAULT_VECTOR_FONT_FILENAME, 65);
-        InitLabel(steplabel, 133, 285, 200, 80, "label8", "210.03", DEFAULT_VECTOR_FONT_FILENAME, 65);
-        Add(u_milelabel);
-        Add(u_stepslabel);
-        Add(u_calorielabel);
-        Add(milelabel);
-        Add(steplabel);
-        Add(calorielabel);
+#include <ui_scroll_view.h>
 
-        InitButtonExt(intensity_button, 103, 70, 260, 80, "button", STR_LOWER_STRENGTH, 30);
-        Add(intensity_button);
+namespace OHOS {
 
-        SetTouchable(true);
-        // SetIntercept(true);
-    }
-    /* DeInit:删除组件 */
-    void TrainingDetailView::DeInit()
-    {
-        RemoveAll();
-        if (u_milelabel != nullptr)
-        {
-            delete u_milelabel;
-            u_milelabel = nullptr;
-        }
-        if (u_stepslabel != nullptr)
-        {
-            delete u_stepslabel;
-            u_stepslabel = nullptr;
-        }
-        if (u_calorielabel != nullptr)
-        {
-            delete u_calorielabel;
-            u_calorielabel = nullptr;
-        }
-        if (milelabel != nullptr)
-        {
-            delete milelabel;
-            milelabel = nullptr;
-        }
-        if (steplabel != nullptr)
-        {
-            delete steplabel;
-            steplabel = nullptr;
-        }
-        if (calorielabel != nullptr)
-        {
-            delete calorielabel;
-            calorielabel = nullptr;
-        }
+static TrainingDetailView *g_pTrainingDetailView{nullptr};
 
-        if (progress_image != nullptr)
-        {
-            delete progress_image;
-            progress_image = nullptr;
-        }
-        if (lineimage2_ != nullptr)
-        {
-            delete lineimage2_;
-            lineimage2_ = nullptr;
-        }
-        if (intensity_button != nullptr)
-        {
-            delete intensity_button;
-            intensity_button = nullptr;
-        }
-    }
+TrainingDetailView::TrainingDetailView() {
+  SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+  // SetStyle(STYLE_BACKGROUND_OPA, 0);
+  // SetStyle(STYLE_BORDER_RADIUS, 466);
+  g_pTrainingDetailView = this;
+}
+TrainingDetailView::~TrainingDetailView() {
+  RemoveAll();
+  DeInit();
+  g_pTrainingDetailView = nullptr;
+}
 
-    void TrainingDetailView::PreLoad(void)
-    {
-        if (!viewiInitStatus)
-        {
-            InitView();
-            viewiInitStatus = true;
-        }
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TrainingDetailView");
-    }
+TrainingDetailView *TrainingDetailView::GetInstance() {
+  return g_pTrainingDetailView;
+}
 
-    void TrainingDetailView::UnLoad(void) {}
+/* InitView:初始化界面*/
+bool TrainingDetailView ::InitPage() {
+  // 初始化Image
+  InitImageView(progress_image, 0, 0, 100, 100, "image5", COLOR_PROGRESS_IMAGE);
+  // InitImageView(lineimage2_, 225, 190, 0, 0, "image", LINE_2_IMAGE);
+  if (lineimage2_ == nullptr) {
+    lineimage2_ = new UIImageView();
+  }
+  lineimage2_->SetPosition(232, 191);
+  lineimage2_->Resize(2, 82);
+  lineimage2_->SetViewId("image2");
+  lineimage2_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff333333);
+  lineimage2_->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+  lineimage2_->SetVisible(true);
+
+  Add(progress_image);
+  Add(lineimage2_);
+
+  // 初始化Lable
+  InitLabelExt(u_milelabel, 16, 234, 220, 35, "label2", STR_RANGE_SETTING,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabelExt(u_stepslabel, 73, 362, 320, 35, "label3", STR_STEP_NUMBER,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  InitLabelExt(u_calorielabel, 225, 235, 230, 35, "label4", STR_CALORIE_SETTING,
+               DEFAULT_VECTOR_FONT_FILENAME, 30);
+  u_milelabel->SetTextColor(Color::Gray());
+  u_stepslabel->SetTextColor(Color::Gray());
+  u_calorielabel->SetTextColor(Color::Gray());
+
+  InitLabel(milelabel, 17, 160, 200, 80, "label6", "13.21",
+            DEFAULT_VECTOR_FONT_FILENAME, 65);
+  InitLabel(calorielabel, 230, 160, 200, 80, "label7", "28312",
+            DEFAULT_VECTOR_FONT_FILENAME, 65);
+  InitLabel(steplabel, 133, 285, 200, 80, "label8", "210.03",
+            DEFAULT_VECTOR_FONT_FILENAME, 65);
+  Add(u_milelabel);
+  Add(u_stepslabel);
+  Add(u_calorielabel);
+  Add(milelabel);
+  Add(steplabel);
+  Add(calorielabel);
+
+  InitButtonExt(intensity_button, 103, 70, 260, 80, "button",
+                STR_LOWER_STRENGTH, 30);
+  Add(intensity_button);
+
+  SetTouchable(true);
+
+  return true;
+}
+/* DeInit:删除组件 */
+void TrainingDetailView::DeInit() {
+  RemoveAll();
+  if (u_milelabel != nullptr) {
+    delete u_milelabel;
+    u_milelabel = nullptr;
+  }
+  if (u_stepslabel != nullptr) {
+    delete u_stepslabel;
+    u_stepslabel = nullptr;
+  }
+  if (u_calorielabel != nullptr) {
+    delete u_calorielabel;
+    u_calorielabel = nullptr;
+  }
+  if (milelabel != nullptr) {
+    delete milelabel;
+    milelabel = nullptr;
+  }
+  if (steplabel != nullptr) {
+    delete steplabel;
+    steplabel = nullptr;
+  }
+  if (calorielabel != nullptr) {
+    delete calorielabel;
+    calorielabel = nullptr;
+  }
+
+  if (progress_image != nullptr) {
+    delete progress_image;
+    progress_image = nullptr;
+  }
+  if (lineimage2_ != nullptr) {
+    delete lineimage2_;
+    lineimage2_ = nullptr;
+  }
+  if (intensity_button != nullptr) {
+    delete intensity_button;
+    intensity_button = nullptr;
+  }
+}
 
-    UILabelExt *TrainingDetailView::GetMileLabel()
-    {
-        return milelabel;
-    }
-    UILabelExt *TrainingDetailView::GetStepLabel()
-    {
-        return steplabel;
-    }
-    UILabelExt *TrainingDetailView::GetCalorieLabel()
-    {
-        return calorielabel;
-    }
-    UILabelButtonExt *TrainingDetailView::Get_Intensity_Button()
-    {
-        return intensity_button;
-    }
+bool TrainingDetailView::InitView(void *caller) {
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "TrainingDetailView InitView %p",
+                caller);
+  if (InitPage() == false) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "TrainingDetailView::InitPage fail");
+    return false;
+  }
+  SetDraggable(true);
+  SetTouchable(true);
+  //   SleepDataRefresh();
+  return true;
+}
+UILabelExt *TrainingDetailView::GetMileLabel() { return milelabel; }
+UILabelExt *TrainingDetailView::GetStepLabel() { return steplabel; }
+UILabelExt *TrainingDetailView::GetCalorieLabel() { return calorielabel; }
+UILabelButtonExt *TrainingDetailView::Get_Intensity_Button() {
+  return intensity_button;
 }
+} // namespace OHOS
index 97bdacd..a459d5e 100644 (file)
@@ -29,11 +29,14 @@ namespace OHOS
 
     TraingRecordView::~TraingRecordView()
     {
-        // DeInit();
-        UIViewGroup *tmpGroup = dynamic_cast<UIViewGroup *>(container_);
-        UIViewGroup::RemoveAndDeleteAllRecursively(tmpGroup);
+      // DeInit()
+      lackView->RemoveAll();
+      recordView->RemoveAll();
 
-        g_pTraingRecordView = nullptr;
+      UIViewGroup *tmpGroup = dynamic_cast<UIViewGroup *>(container_);
+      UIViewGroup::RemoveAndDeleteAllRecursively(tmpGroup);
+
+      g_pTraingRecordView = nullptr;
     }
 
     TraingRecordView *TraingRecordView::GetInstance()