【主界面】UI
authorCaisking <Casiking@zhihuishixun.com>
Tue, 15 Apr 2025 07:01:14 +0000 (15:01 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Tue, 15 Apr 2025 07:01:14 +0000 (15:01 +0800)
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/MainModel.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/MainPresenterSample.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/MainViewSample.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/PullUpDownView.h
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/MainModel.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/MainPresenterSample.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/MainViewSample.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/PullUpDownView.cpp

index 659ff24..2111248 100644 (file)
@@ -1,8 +1,8 @@
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: MainModel.h\r
- * Author:\r
- * Create: 2021-11-23\r
+/***\r
+ * @Date: 2024-06-21 09:56:18\r
+ * @LastEditors: Caisking 3449750381@qq.com\r
+ * @LastEditTime: 2024-08-20 10:44:15\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/MainModel.h\r
  */\r
 \r
 #ifndef MAIN_MODEL_H\r
 \r
 #include <string>\r
 #include "UiConfig.h"\r
+#include "ui_resource_string.h"\r
 \r
-namespace OHOS {\r
-    typedef struct {\r
+namespace OHOS\r
+{\r
+    struct CardInfo\r
+    {\r
         CardId id;\r
         const char *cardImg;\r
-    } CardInfo;\r
-\r
-    typedef struct {\r
-        uint8_t id;\r
+        bool isVisible;\r
+        UIResourceTextId cardid;\r
+    };\r
+    struct CardInfoSet\r
+    {\r
+        CardId id;\r
+        bool isVisible;\r
+    };\r
+    // 自定义表盘配置\r
+    typedef struct\r
+    {\r
+        DialId id;\r
         const char *dialName;\r
         const char *dialImg;\r
         uint8_t freq;\r
-        uint8_t capability;\r
     } DialInfo;\r
 \r
-    typedef struct {\r
-        uint8_t dialFlag; // 0 在线表盘 1 离线表盘\r
+    typedef struct\r
+    {\r
+        uint8_t dialFlag;\r
         uint8_t dialId;\r
         std::string dialFullName;\r
     } DialSetting;\r
 \r
-    class MainModel {\r
+    /*表盘状态*/\r
+    enum class DialState\r
+    {\r
+        DO_NOT_DISTURB, // 勿扰\r
+        SLEEP,          // 睡眠\r
+        LOCK,           // 锁\r
+        INVALID         // 无效状态\r
+    };\r
+    const int STATE_COUNT = 3; // 确保这里的数量与 DialState 状态数相同\r
+\r
+    struct DialStateInfo\r
+    {\r
+        DialState state;\r
+        bool active; // 是否激活\r
+    };\r
+    class MainModel\r
+    {\r
     public:\r
         static MainModel &GetInstance(void);\r
         void InitCardSettings(void);\r
@@ -40,32 +67,44 @@ namespace OHOS {
         void DeleteCardSetting(uint8_t index);\r
         void AddCardSetting(uint8_t index);\r
         const CardInfo *GetCardInfo(CardId card) const;\r
-        const DialInfo *GetDialInfo(uint8_t dial) const; // 获取在线表盘配置\r
-        uint8_t GetDialInfoNum() const; // 获取在线表盘的数量\r
-        void AddDialSetting(const DialSetting &setting);\r
+        const DialInfo *GetDialInfo(DialId dial) const;\r
+        void AddDialSetting(const DialSetting &setting, const int id);\r
         void InitDialSettings(void);\r
         DialSetting &GetDialSetting();\r
         bool IsFromSetCardView(void) const;\r
         void SetFromSetCardView(bool isFrom);\r
         void SetFromCardId(uint8_t cardId);\r
         uint8_t GetFromCardId(void);\r
-        bool IsAodEnabled();\r
+        void printCardSettings();\r
+        const char *getCardNameFromMap(uint8_t cardId) const;\r
+        const bool GetCardInfoSet(uint8_t index) const;\r
+\r
+        void setDialState(DialState state, bool value);\r
+        DialState getHighestPriorityActiveState();\r
+        bool getMessageActiveState();\r
+        void printDialStates();\r
+        void UpdateDialState();\r
+        void InitDialState();\r
+        bool getVideostate();\r
+        void setVideostate(bool state);\r
+               bool IsAodEnabled();\r
         void EnableAod(bool enable);\r
 \r
     private:\r
-        void InitDialSettingDefault(void);\r
+        void InitDialSettingDefault(int Id);\r
         MainModel();\r
         MainModel(const MainModel &);\r
         MainModel &operator=(const MainModel &);\r
         virtual ~MainModel();\r
 \r
-        CardId cardSettings[CARD_SETTING_COUNT_MAX] = { MAX_CARD };\r
+        CardId cardSettings[CARD_SETTING_COUNT_MAX] = {MAX_CARD};\r
         uint8_t cardSettingCount{0};\r
         DialSetting dialSetting;\r
         bool isFromSetCardView{false};\r
         uint8_t fromCardId{MAX_CARD};\r
-        bool isAodEnabled{false};\r
+        bool video_state{false};\r
+               bool isAodEnabled{false};\r
     };\r
 }\r
 \r
-#endif
\ No newline at end of file
+#endif\r
index aa2f465..39e323e 100644 (file)
@@ -8,18 +8,19 @@
 #ifndef MAIN_PRESENTER_SAMPLE_H
 #define MAIN_PRESENTER_SAMPLE_H
 
-#include "Presenter.h"
+#include "HeartRateView.h"
+#include "KeyInputListener.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 "drag_event.h"
-#include "MainViewSample.h"
-#include "MainModel.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 {
@@ -27,12 +28,31 @@ 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_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 *DROPDOWN_CLICK_DONOTDISTURB = "dropdownclickdonotdisturb";
-static constexpr const char *DROPDOWN_CLICK_BRIGHTENSCREEN = "dropdownclickbrightscreen";
-static constexpr const char *DROPDOWN_CLICK_FINDMYPHONE = "dropdownclickfindmyphone";
-static constexpr const char *DROPDOWN_CLICK_ALARM = "dropdownclickalarm";
-static constexpr const char *DROPDOWN_CLICK_SETTING = "dropdownclicksetting";
 constexpr uint16_t VERTICAL_STATUS = 1;
 constexpr uint16_t HORIZONTAL_STATUS = 0;
 enum class MainPresenterState {
@@ -62,26 +82,50 @@ public:
     void SetPage(int8_t id, bool loadAdjacent = true);
     void SetTaskPeroid(CardId cardId);
 
-    void InitCardSettings(void);
-    uint8_t GetCardSettingCount(void);
-    CardId *GetCardSettings(void);
-    void InitDialSettings(void);
-    DialSetting& GetDialSetting();
-    bool IsFromSetCardView(void) const;
-    void SetFromSetCardView(bool isFrom);
-    uint8_t GetFromCardId(void);
-    MainPresenterState GetMainPresenterState();
+  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();
+
+  bool IsFromSetCardView(void) const;
+  void SetFromSetCardView(bool isFrom);
+  uint8_t GetFromCardId(void);
+  MainPresenterState GetMainPresenterState();
 
 private:
-    void ProcessDataNotify(void);
-    void SetCircleProgress(void);
-    void SetCompassRotate(void);
-    uint8_t state_ = UICheckBox::UICheckBoxState::MAX_STATUS_NUM;
-    int64_t playerCurrentTime_{0};
-    int64_t playerMusicDuration_{0};
-    int64_t playerProgressValue_{0};
-    bool isCompassSensorOpened_{false};
-    MainPresenterState mainPresenterState_ = MainPresenterState::STOP;
+  void LogCardTransition(CardId previous, CardId current);
+  void ResetSleepCardView();
+  void ResetWeatherCardView();
+  void ResetgoalCardView();
+  void StartHeartRateDetection();
+  void UpdateWatchFace();
+  void UpdateWeather();
+  void Updategoal();
+  void UpdateSleep();
+  void ProcessDataNotify(void);
+  void SetCircleProgress(void);
+  void SetCompassRotate(void);
+  void OpenCompassSensor(void);
+  void CloseCompassSensor(void);
+  KeyInputListener *keyActListener_{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};
+
+  int isPullDownPageView{false};//�Ƿ��Ѿ�������������
+  MainPresenterState mainPresenterState_ = MainPresenterState::STOP;
 };
 }
 
index c482d03..1d9741a 100644 (file)
@@ -10,6 +10,7 @@
 
 #include <string>
 #include "View.h"
+#include "window/window.h"
 #include "components/root_view.h"
 #include "swipe_effect/zoom_effect.h"
 #include "ChangeSliceListener.h"
 #include "CompassControlView.h"
 #include "DialViewGroup.h"
 #include "MainClockView.h"
-#include "PlayersView.h"
+#include "player/include/PlayersView.h"
 #include "MainPresenterSample.h"
 #include "HeartRateView.h"
 #include "components/ui_card_page.h"
-#include "main/include/PullUpDownView.h"
+#include "PullUpDownView.h"
 #include "components/ui_cross_view.h"
+#include "uicomponents/UIComponents.h"
+
 #include "SetCardModel.h"
+// #include "heart_blood/BloodCardView.h"
+// #include "traing/training_card/include/Training_CardView.h"
+// #include "ApplistCardView.h"
+#include "weather/include/WeatherControlView.h"
+#include "goal/include/goalControlView.h"
 
-namespace OHOS {
-class MainPresenterSample;
-class MainViewSample : public View<MainPresenterSample> {
-public:
-    MainViewSample();
-    ~MainViewSample() override;
-    static MainViewSample *GetInstance(void);
-    void OnStart() override;
-    void OnStop() override;
-    UICardPage *InitWatchFacePage(void);
-    UICardPage *InitHeartRatePage(void);
-    UICardPage *InitActivityPage(void);
-    UICardPage *InitCompassPage(void);
-    UICardPage *InitMusicPlayerPage(void);
-    void AnimatorStart(int pageIndex);
-    void AnimatorStop(void);
-    CardId GetHorCurrentCard() const;
-    UIView* GetMainViewGroup(void) const
+// #include "message/include/MessageControlView.h"
+// #include "sleep/include/SleepCardView.h"
+#include "set_card/include/SetMainView.h"
+// #include "heartrate/include/HeartRateCardView.h"
+namespace OHOS
+{
+    class MainPresenterSample;
+    class MainViewSample : public View<MainPresenterSample>
     {
-        return mainSwipeGroup;
-    }
+    public:
+        MainViewSample();
+        ~MainViewSample() override;
+        static MainViewSample *GetInstance(void);
+        void OnStart() override;
+        
 
-    UICardPage* GetViewById(int16_t id) const
-    {
-        return recordCard[id];
-    }
+        UICardPage *InitWatchFacePage(void);
+        UICardPage *InitHeartRatePage(void);
+        UICardPage *InitActivityPage(void);
+        UICardPage *InitCompassPage(void);
+        UICardPage *InitMusicPlayerPage(void);
+        UICardPage *InitBloodOxygenPage(void);
+        UICardPage *InitWeatherPage(void);
+        UICardPage *InitGoalPage(void);
 
-    void SwitchToClockPage(bool loadAdjacent = true)
-    {
-        if (mainClockView != nullptr) {
-            SetPage(mainClockView->GetViewIndex(), loadAdjacent);
+        UICardPage *InitSleepPage(void);
+        UICardPage *InitTrainingPage(void);
+        UICardPage *InitApplistPage(void);
+        UICardPage *InitSetMainPage(void);
+
+        void AnimatorStart(int pageIndex);
+        void AnimatorStop(void);
+        CardId GetHorCurrentCard() const;
+        PullUpDownView *GetPullUpView();
+        void SetDisturbState(bool state); 
+        // UICrossView::VPage GetVerCurrentCard() const;
+        UIView *GetMainViewGroup(void) const
+        {
+            return mainSwipeGroup;
+        }
+        UICardPage *GetViewById(int16_t id) const
+        {
+            return recordCard[id];
         }
-    }
-    void SwitchToCard(uint8_t cardId, bool loadAdjacent = true);
-    bool IsMainClockPage(void);
-    void SetDragFg(bool continFg);
-    bool GetDragFg(void);
-    void SetPage(int16_t page, bool loadAdjacent = true);
+        void SwitchToClockPage(void)
+        {
+            if (mainClockView != nullptr)
+            {
+                SetPage(mainClockView->GetViewIndex());
+            }
+        }
+        void SwitchToCard(uint8_t cardId);
+        bool IsMainClockPage(void);
+        int IsPullUpViewPage(void);
+        void SetDragFg(bool continFg);
+        bool GetDragFg(void);
+        void SetPage(int16_t page, bool loadAdjacent = true);
+        void UpdateStateShow(UIImageView *&messageicon,UIImageView *&dialstateicon);
+        void HandOnKeyEventSwitchMainPullDownView(void);
+        void UpdateStateShow(void);
+
+    private:
+        PullUpDownView *dropDownView{nullptr};
+        UICardPage *mainClockView{nullptr};
+
+        UILabel *MessageLable = nullptr;
+        ActivityWeekView *activityWeekView{nullptr};
+        PlayersView *playersView{nullptr};
+        CompassControlView *compassControlView{nullptr};
+
+        // HeartRateCardView *heartRateView{nullptr};
+        // BloodCardView *bloodView{nullptr};
+        // SleepCardView *sleepView{nullptr};
+        // Training_CardView *traingView{nullptr};
+        // MessageControlView *messageView{nullptr};
+        SetMainView *setmainView{nullptr};
+
+        WeatherControlView *weatherControlView{nullptr};
+        goalControlView *GoalControlView{nullptr};
+        // ApplistCardView *applistCardView{nullptr};
+        UIButton *changebut{nullptr};
 
-private:
-    PullUpDownView *dropDownView{nullptr};
-    UICardPage *messageView{nullptr};
-    UILabel *messageLable{nullptr};
-    UICardPage *mainClockView{nullptr};
-    ActivityWeekView *activityWeekView{nullptr};
-    PlayersView *playersView{nullptr};
-    CompassControlView *compassControlView{nullptr};
-    HeartRateView *heartRateView{nullptr};
-    UICardPage *recordCard[MAX_CARD]{nullptr};
-    bool pageStatus[MAX_CARD]{false};
-    UICrossView *mainSwipeGroup{nullptr};
-    ZoomEffect* callback{nullptr};
+        // UIImageView *dialstateicon_{nullptr}; 
+        // UIImageView *messageicon_{nullptr};    
+        /* -------------------------------------------------------------------------- */
+        UICardPage *recordCard[MAX_CARD]{nullptr};
+        bool pageStatus[MAX_CARD]{false};
+        UICrossView *mainSwipeGroup{nullptr};
+        ZoomEffect *callback{nullptr};
 
     bool HorizontalViewInit(void);
     void VerticalViewInit(void);
index 9f330a3..e48d328 100644 (file)
@@ -20,7 +20,7 @@
 #include "components/ui_box_progress.h"
 #include "components/ui_image_animator.h"
 #include "components/ui_swipe_view.h"
-#include "battery_hal.h"
+// #include "battery_hal.h"
 #include "main/include/ConnectedStatusView.h"
 #include "main/include/dropdown/DropDownCardPage1.h"
 #include "main/include/dropdown/DropDownCardPage2.h"
index 5218095..2143ad5 100644 (file)
 #include "kv_store.h"\r
 #include "securec.h"\r
 #include "wearable_log.h"\r
-#include "DialBinTypesV2.h"\r
+#include "ConfigModel.h"\r
+#include <array>\r
+#include <stdexcept>\r
+#include "MainViewSample.h"\r
+#include "ui_service.h"\r
+#include "SetDialModel.h"\r
+#include "dnotdisturb/include/DnotDisturbModel.h"\r
+#include "custom_utils.h"\r
+#include "DialViewGroup.h"\r
+\r
+#ifdef SUPPORT_POWER_MANAGER\r
 #include "power_display_service.h"\r
+#endif\r
+\r
+extern "C" void uapi_dev_runtime_set_lock_status(uint8_t status);\r
 \r
-namespace OHOS {\r
+namespace OHOS\r
+{\r
     static const int CARD_SETTING_VALUE_LEN = 32;\r
     static const int DIAL_SETTING_VALUE_LEN = 64;\r
+    /*默认卡片:心率,睡眠,快速训练*/\r
+    // 更新主界面卡片需要更新Map\r
     const CardInfo cardInfoMap[] = {\r
-        { HEART_RATE, PNG_SET_CARD_HEART },\r
-        { COMPASS, PNG_SET_CARD_COMPASS },\r
-        // { ACTIVITY, PNG_SET_CARD_ACTIVITY },\r
-        { MUSIC_PLAYER, PNG_SET_CARD_PLAYER },\r
+        {HEART_RATE, PNG_SET_CARD_HEART, true,STR_HEART_RATE},\r
+        {TRAINING, PNG_SET_CARD_TRAIN, true,STR_TRAINING},\r
+        {COMPASS, PNG_SET_CARD_COMPASS, false,STR_COMPASS},\r
+        {SLEEP, PNG_SET_CARD_SLEEP, true,STR_SLEEP},\r
+        {BLOODOXGEN, PNG_SET_CARD_BLOOD, false,STR_BLOOD_OXYGEN},\r
+        {GOAL, PNG_SET_CARD_ACTIVITY, false,STR_ACTIVITY},\r
+        {WEATHER, PNG_SET_CARD_WEATHER, false,STR_WEATHER},\r
+        {MUSIC_PLAYER, PNG_SET_CARD_PLAYER, false,STR_MUSIC},\r
     };\r
-\r
+    /*维护卡片*/\r
+    CardInfoSet cardInfoSet[] = {\r
+        {HEART_RATE, true},\r
+        {TRAINING, true},\r
+        {COMPASS, false},\r
+        {SLEEP, true},\r
+        {BLOODOXGEN, false},\r
+        {GOAL, false},\r
+        {WEATHER, false},\r
+        {MUSIC_PLAYER, false},\r
+    };\r
+    /*自定义map配置*/\r
     const DialInfo dialInfoMap[] = {\r
-        { 0, "扫秒表盘", PNG_SET_DIAL_CLOCK, DEFAULT_TASK_PERIOD, DIAL_DISPLAY_CAPABILITY_NORMAL_ONLY},\r
-        { 1, "aod扫秒表盘", PNG_SET_DIAL_CLOCK, DEFAULT_TASK_PERIOD, DIAL_DISPLAY_CAPABILITY_AMBITIENT_ONLY},\r
+#ifdef CUSTOM_Z1\r
+        {DIAL_CLOCK, "Z1", DEFAULT_DIALPER_PATH, DEFAULT_TASK_PERIOD},\r
+#else\r
+        {DIAL_CLOCK, "KUMI", DEFAULT_DIALPER_PATH, DEFAULT_TASK_PERIOD}, // 默认表盘 Id 0\r
+#endif\r
+        {DIAL_CLOCK_1, "Custom_1", CUSTOM_CLOCK1_DIALPER_PATH, DEFAULT_TASK_PERIOD}, // 表盘 Id 1\r
+        {DIAL_CLOCK_2, "Custom_2", CUSTOM_CLOCK2_DIALPER_PATH, DEFAULT_TASK_PERIOD}, // 表盘 Id 2\r
+        {DIAL_CLOCK_3, "Custom_3", CUSTOM_CLOCK3_DIALPER_PATH, DEFAULT_TASK_PERIOD}, // 表盘 Id 3\r
+        {DIAL_CLOCK_4, "Custom_4", CUSTOM_CLOCK4_DIALPER_PATH, DEFAULT_TASK_PERIOD}, // 表盘 Id 4\r
+        {DIAL_CLOCK_5, "Custom_5", CUSTOM_CLOCK5_DIALPER_PATH, DEFAULT_TASK_PERIOD}, // 表盘 Id 4\r
     };\r
-\r
-    MainModel::MainModel()\r
-    {\r
-        power_display_gui_enable_aod(IsAodEnabled());\r
-    }\r
-\r
+    //默认表盘\r
+    static const char* DEFAULT_CUSTOM_DIAL_PATH = "/user/dial/res_dial/obsidianrhythm.bin";\r
+    //卡片map\r
+    const CardInfo printfMap[] = {\r
+        {HEART_RATE, "心率卡片"},\r
+        {COMPASS, "指南针"},\r
+        {MUSIC_PLAYER, "音乐"},\r
+        {BLOODOXGEN, "血氧"},\r
+        {WEATHER, "天气"},\r
+        {TRAINING, "训练"},\r
+        {GOAL, "每日目标"},\r
+        {SLEEP, "睡眠"},\r
+    };\r
+    /*表盘显示状态map*/\r
+    std::array<DialStateInfo, STATE_COUNT> dialstateInfo = {{\r
+        {DialState::DO_NOT_DISTURB, false},\r
+        {DialState::SLEEP, false},\r
+        {DialState::LOCK, false},\r
+    }};\r
+    MainModel::MainModel() {}\r
     MainModel::~MainModel() {}\r
-\r
     MainModel &MainModel::GetInstance()\r
     {\r
         static MainModel instance;\r
         return instance;\r
     }\r
+    /*\r
+        ###卡片配置###\r
 \r
-    const CardInfo *MainModel::GetCardInfo(CardId card) const\r
+        -卡片Id\r
+        -卡片默认map\r
+        -卡片维护map\r
+    */\r
+    void MainModel::printCardSettings(void)\r
     {\r
-        for (uint8_t i = 0; i < (sizeof(cardInfoMap) / sizeof(cardInfoMap[0])); i++) {\r
-            if (card == cardInfoMap[i].id) {\r
-                return &cardInfoMap[i];\r
-            }\r
+        uint8_t i;\r
+        WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "_____________________________________________________\r\n");\r
+        for (i = 0; i < cardSettingCount; i++)\r
+        {\r
+            uint8_t cardId = cardSettings[i];\r
+            const char *cardname = getCardNameFromMap(cardId);\r
+            WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "cardSettings[%d]:Id: %d, CardName: %s\r\n", i, cardId, cardname);\r
         }\r
-        return nullptr;\r
+\r
+        for (uint8_t m = 0; m < (sizeof(cardInfoSet) / sizeof(cardInfoSet[0])); m++)\r
+        {\r
+            WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "cardInfoSet[%d]:Id %d, Visible: %s\n", m, cardInfoSet[m].id, cardInfoSet[m].isVisible ? "true" : "false");\r
+        }\r
+        WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "_____________________________________________________\r\n");\r
     }\r
 \r
-    const DialInfo *MainModel::GetDialInfo(uint8_t dialId) const\r
+    const char *MainModel::getCardNameFromMap(uint8_t cardId) const\r
     {\r
-        for (uint8_t i = 0; i < (sizeof(dialInfoMap) / sizeof(dialInfoMap[0])); i++) {\r
-            if (dialId == dialInfoMap[i].id) {\r
-                return &dialInfoMap[i];\r
+        for (uint8_t i = 0; i < (sizeof(printfMap) / sizeof(printfMap[0])); i++)\r
+        {\r
+            if (cardId == printfMap[i].id)\r
+            {\r
+                return printfMap[i].cardImg;\r
+            }\r
+        }\r
+        return "Unknown";\r
+    }\r
+    const CardInfo *MainModel::GetCardInfo(CardId card) const\r
+    {\r
+        for (uint8_t i = 0; i < (sizeof(cardInfoMap) / sizeof(cardInfoMap[0])); i++)\r
+        {\r
+            if (card == cardInfoMap[i].id)\r
+            {\r
+                WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "cardInfoMap[%d]:%d\n", i, cardInfoMap[i].id);\r
+                return &cardInfoMap[i];\r
             }\r
         }\r
         return nullptr;\r
     }\r
-\r
-    uint8_t MainModel::GetDialInfoNum() const\r
+    const bool MainModel::GetCardInfoSet(uint8_t index) const\r
     {\r
-        return sizeof(dialInfoMap) / sizeof(dialInfoMap[0]);\r
+        return cardInfoSet[index].isVisible;\r
     }\r
-\r
+    /*初始化卡片设置*/\r
     void MainModel::InitCardSettings(void)\r
     {\r
-        char temp[CARD_SETTING_VALUE_LEN] = { 0 };\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "InitCardSettings");\r
+        char temp[CARD_SETTING_VALUE_LEN] = {0};\r
         int len;\r
         int index = 0;\r
 \r
         memset_s(cardSettings, CARD_SETTING_COUNT_MAX, 0, CARD_SETTING_COUNT_MAX);\r
         len = UtilsGetValue("card_setting", temp, CARD_SETTING_VALUE_LEN);\r
-        if (len >= 0 && strlen(temp) > 0) {\r
-            /* 读取用户card配置 */\r
+        if (len >= 0)\r
+        {\r
+            // 更新用户卡片配置及更新卡片可见性\r
             char *setBuffer = nullptr;\r
             char *setValue = strtok_s(temp, ",", &setBuffer);\r
-            while (setValue != nullptr) {\r
-                if (index >= CARD_SETTING_COUNT_MAX) {\r
+            index = 0; // 重置 index\r
+            while (setValue != nullptr)\r
+            {\r
+                if (index >= CARD_SETTING_COUNT_MAX)\r
+                {\r
                     break;\r
                 }\r
                 cardSettings[index++] = (CardId)atoi(setValue);\r
                 setValue = strtok_s(nullptr, ",", &setBuffer);\r
             }\r
             cardSettingCount = index;\r
-        } else {\r
-            /* 使用默认card配置 */\r
-            cardSettings[index++] = WATCH_FACE;\r
-            cardSettings[index++] = HEART_RATE;\r
-            cardSettings[index++] = COMPASS;\r
-            // cardSettings[index++] = ACTIVITY;\r
-            cardSettings[index++] = MUSIC_PLAYER;\r
+\r
+            // 更新卡片可见性\r
+            for (size_t i = 0; i < sizeof(cardInfoSet) / sizeof(cardInfoSet[0]); i++)\r
+            {\r
+                bool visible = false;\r
+                for (size_t j = 0; j < cardSettingCount; j++)\r
+                {\r
+                    if (cardInfoSet[i].id == cardSettings[j])\r
+                    {\r
+                        //  WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "CardSettings:cardInfoSet[%d] is set cardSettings[%d]\r\n", i, j);\r
+                        visible = true;\r
+                        break;\r
+                    }\r
+                }\r
+                cardInfoSet[i].isVisible = visible;\r
+            }\r
+        }\r
+        else\r
+        {\r
+            for (uint8_t i = 0; i < (sizeof(cardInfoMap) / sizeof(cardInfoMap[0])); i++)\r
+            {\r
+                if (index == 0)\r
+                {\r
+                    /* 表盘卡片[不被卡片管理,必须设置] */\r
+                    cardSettings[index++] = WATCH_FACE;\r
+                }\r
+                if (cardInfoMap[i].isVisible)\r
+                {\r
+                    cardSettings[index++] = cardInfoMap[i].id;\r
+                }\r
+                // 配置维护卡片的可见 与默认 保持一致 {没有kv文件}\r
+                cardInfoSet[i].isVisible = cardInfoMap[i].isVisible;\r
+            }\r
+\r
+            /*设置卡片[不被卡片管理,必须设置] */\r
+            cardSettings[index++] = SETCARD;\r
+\r
             cardSettingCount = index;\r
         }\r
-    }\r
 \r
+        // printCardSettings();\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "InitCardSettings");\r
+    }\r
     void MainModel::DeleteCardSetting(uint8_t index)\r
     {\r
-        char temp[CARD_SETTING_VALUE_LEN] = { 0 };\r
-        for (uint8_t i = 0; i < cardSettingCount; i++) {\r
-            if (i == index + 1) {\r
-                uint8_t j = i;\r
-                for (; j < cardSettingCount - 1; j++) {\r
-                    cardSettings[j] = cardSettings[j + 1];\r
-                }\r
-                cardSettings[j] = MAX_CARD;\r
-                cardSettingCount--;\r
+        /*设置卡片类型为false cardsetting 重新遍历map里面为ture的卡片{表盘必须存在}*/\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DeleteCardSetting");\r
+\r
+        if (cardSettingCount > CARD_SETTING_COUNT_MAX)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "cardSettingCount %d is error", cardSettingCount);\r
+            return;\r
+        }\r
+        // 检查要插入的位置是否有效\r
+        int count = sizeof(cardInfoSet) / sizeof(cardInfoSet[0]);\r
+        if (index < 0 || index > count)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "index %d is error or count %d is error", index, count);\r
+            return;\r
+        }\r
+        // 删除的卡片\r
+        cardInfoSet[index].isVisible = false;\r
+#if 0\r
+        int count = sizeof(cardInfoSet) / sizeof(cardInfoSet[0]);\r
+        WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "count:%d\r\n", count);\r
+        // 设置map里面的属性\r
+        for (uint8_t i = 0; i < count; i++)\r
+        {\r
+            // 需要被删除的卡片\r
+            if (cardInfoMap[index].id == cardInfoSet[i].id)\r
+            {\r
+                cardInfoSet[i].isVisible = false;\r
+                WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "删除卡片:cardSettings[%d] is %d \r\n", index + 1, cardSettings[index + 1]);\r
+                WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "设置删除卡片属性:cardInfoSet[%d] is %d \r\n", i, cardInfoSet[i].isVisible);\r
             }\r
+            WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "cardInfoSet[%d]:id%d\r\n", i, cardInfoSet[i].id);\r
         }\r
+#endif\r
+        int mapindex = 0;\r
+        // 重新生成cardSettings\r
+        for (uint8_t i = 0; i < CARD_SETTING_COUNT_MAX; i++)\r
+        {\r
+            cardSettings[i] = MAX_CARD;\r
+        }\r
+        // printCardSettings();\r
+        for (uint8_t i = 0; i < (sizeof(cardInfoSet) / sizeof(cardInfoSet[0])); i++)\r
+        {\r
+            if (mapindex == 0)\r
+            {\r
+                /* 表盘卡片[不被卡片管理,必须设置] */\r
+                cardSettings[mapindex++] = WATCH_FACE;\r
+            }\r
+            // 设置其他卡片\r
+            if (cardInfoSet[i].isVisible)\r
+            {\r
+                //  WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "cardSettings[%d]\r\n", i);\r
+                cardSettings[mapindex++] = cardInfoSet[i].id;\r
+            }\r
+        }\r
+        /*设置卡片[不被卡片管理,必须设置] */\r
+        cardSettings[mapindex++] = SETCARD;\r
 \r
-        for (uint8_t i = 0; i < cardSettingCount; i++) {\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "cardSettings[%d] = %d", i, cardSettings[i]);\r
-            (void)sprintf_s(temp + strlen(temp), CARD_SETTING_VALUE_LEN, "%d,", cardSettings[i]);\r
+        cardSettingCount = mapindex;\r
+\r
+        // 更新存储内容\r
+        char temp[CARD_SETTING_VALUE_LEN] = {0};\r
+        for (uint8_t k = 0; k < cardSettingCount; k++)\r
+        {\r
+            (void)sprintf_s(temp + strlen(temp), CARD_SETTING_VALUE_LEN, "%d,", cardSettings[k]);\r
         }\r
         (void)UtilsSetValue("card_setting", temp);\r
+\r
+        // printCardSettings();\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DeleteCardSetting");\r
     }\r
 \r
     void MainModel::AddCardSetting(uint8_t index)\r
     {\r
-        char temp[CARD_SETTING_VALUE_LEN] = { 0 };\r
-        if (cardSettingCount >= CARD_SETTING_COUNT_MAX) {\r
+        /*设置卡片类型为ture cardsetting 重新遍历map里面为ture的卡片{表盘必须存在}*/\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AddCardSetting");\r
+\r
+        if (cardSettingCount > CARD_SETTING_COUNT_MAX)\r
+        {\r
             return;\r
         }\r
-        for (int i = 0; i < cardSettingCount; i++) {\r
-            if (cardSettings[i] == cardInfoMap[index].id) {\r
-                return;\r
+\r
+        // 检查要插入的位置是否有效\r
+        int count = sizeof(cardInfoSet) / sizeof(cardInfoSet[0]);\r
+        if (index < 0 || index > count)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "index %d is error or count %d is error", index, count);\r
+            return;\r
+        }\r
+        // 设置map里面的属性\r
+        cardInfoSet[index].isVisible = true;\r
+#if 0\r
+        int count = sizeof(cardInfoSet) / sizeof(cardInfoSet[0]);\r
+        for (uint8_t i = 0; i < count; i++)\r
+        {\r
+            // 需要被添加的卡片 因为添加是显示所有卡片,所以是使用map\r
+            if (cardInfoMap[index].id == cardInfoSet[i].id)\r
+            {\r
+                cardInfoSet[i].isVisible = true;\r
+                WEARABLE_LOGE(WEARABL_LOG_MODULE_APP, "添加卡片:cardSettings[%d] is %d \r\n", index, cardInfoMap[index].id);\r
+                WEARABLE_LOGE(WEARABL_LOG_MODULE_APP, "设置添加卡片属性:cardInfoSet[%d] is %d \r\n", i, cardInfoSet[i].isVisible);\r
+                break;\r
             }\r
+            WEARABLE_LOGE(WEARABL_LOG_MODULE_APP, "cardInfoSet[%d]:id%d\r\n", i, cardInfoSet[i].id);\r
         }\r
-        cardSettings[cardSettingCount++] = cardInfoMap[index].id;\r
-        for (uint8_t i = 0; i < cardSettingCount; i++) {\r
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "cardSettings[%d] = %d", i, cardSettings[i]);\r
-            (void)sprintf_s(temp + strlen(temp), CARD_SETTING_VALUE_LEN, "%d,", cardSettings[i]);\r
+#endif\r
+\r
+        // 设置map里面的属性\r
+        int mapindex = 0;\r
+        for (uint8_t i = 0; i < (sizeof(cardInfoSet) / sizeof(cardInfoSet[0])); i++)\r
+        {\r
+            if (mapindex == 0)\r
+            {\r
+                /* 表盘卡片[不被卡片管理,必须设置] */\r
+                cardSettings[mapindex++] = WATCH_FACE;\r
+            }\r
+            // 设置其他卡片\r
+            if (cardInfoSet[i].isVisible)\r
+            {\r
+                cardSettings[mapindex++] = cardInfoSet[i].id;\r
+                WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "set cardInfoSet[%d]\r\n", i);\r
+            }\r
+        }\r
+        /*设置卡片[不被卡片管理,必须设置] */\r
+        cardSettings[mapindex++] = SETCARD;\r
+\r
+        cardSettingCount = mapindex;\r
+\r
+        // 更新存储内容\r
+        char temp[CARD_SETTING_VALUE_LEN] = {0};\r
+        for (uint8_t j = 0; j < cardSettingCount; j++)\r
+        {\r
+            (void)sprintf_s(temp + strlen(temp), CARD_SETTING_VALUE_LEN, "%d,", cardSettings[j]);\r
         }\r
         (void)UtilsSetValue("card_setting", temp);\r
-    }\r
 \r
+        // printCardSettings();\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "AddCardSetting");\r
+    }\r
     uint8_t MainModel::GetCardSettingCount(void)\r
     {\r
         return cardSettingCount;\r
@@ -146,92 +362,338 @@ namespace OHOS {
     {\r
         return cardSettings;\r
     }\r
+    bool MainModel::IsFromSetCardView(void) const\r
+    {\r
+        return isFromSetCardView;\r
+    }\r
+\r
+    void MainModel::SetFromSetCardView(bool isFrom)\r
+    {\r
+        isFromSetCardView = isFrom;\r
+    }\r
+\r
+    void MainModel::SetFromCardId(uint8_t cardId)\r
+    {\r
+        fromCardId = cardId;\r
+    }\r
+\r
+    uint8_t MainModel::GetFromCardId(void)\r
+    {\r
+        return fromCardId;\r
+    }\r
+\r
+    /*\r
+        ###表盘配置###\r
 \r
-    void MainModel::InitDialSettingDefault(void)\r
+        -表盘名称\r
+        -表盘列表\r
+        -表盘Id\r
+    */\r
+    const DialInfo *MainModel::GetDialInfo(DialId dialId) const\r
     {\r
+        for (uint8_t i = 0; i < (sizeof(dialInfoMap) / sizeof(dialInfoMap[0])); i++)\r
+        {\r
+            if (dialId == dialInfoMap[i].id)\r
+            {\r
+                return &dialInfoMap[i];\r
+            }\r
+        }\r
+        return nullptr;\r
+    }\r
+\r
+    void MainModel::InitDialSettingDefault(int id)\r
+    {\r
+        //黑耀表盘\r
+        if(id == DEFAULT_DIAL_ID)\r
+        {\r
+            dialSetting.dialFlag = 1;\r
+            dialSetting.dialId = id;\r
+            dialSetting.dialFullName = DEFAULT_CUSTOM_DIAL_PATH; \r
+            return;\r
+        }\r
+        //自定义表盘\r
+        if (id < DIAL_CLOCK || id >= DIAL_MAX)\r
+            id = DIAL_CLOCK;\r
+\r
         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "InitDialSettingDefault");\r
         dialSetting.dialFlag = 0;\r
-        dialSetting.dialId = 0;\r
-        dialSetting.dialFullName = "";\r
+        dialSetting.dialId = id;\r
+        dialSetting.dialFullName.clear(); // 用 clear() 替代空字符串\r
     }\r
 \r
-    void MainModel::AddDialSetting(const DialSetting &setting)\r
+    /* 更新表盘设置 */\r
+    void MainModel::AddDialSetting(const DialSetting &setting, const int id)\r
     {\r
-        std::string tmp;\r
-        tmp += std::to_string(setting.dialFlag);\r
-        tmp += ",";\r
-        tmp += std::to_string(setting.dialId);\r
-        tmp += ",";\r
-        tmp += setting.dialFullName;\r
-        tmp += ",";\r
-        (void)UtilsSetValue("dial_setting", tmp.c_str());\r
+        std::string tmp = std::to_string(setting.dialFlag) + "," + std::to_string(setting.dialId) + "," + setting.dialFullName + ",";\r
+\r
+        (void)UtilsSetValue("dial_setting", tmp.c_str());           // 存储表盘配置\r
+        (void)UtilsSetValue("dial_id", std::to_string(id).c_str()); // 存储当前表盘Id\r
     }\r
 \r
+    /* 加载 kvstore 里面的 dial */\r
     void MainModel::InitDialSettings(void)\r
     {\r
-        char temp[DIAL_SETTING_VALUE_LEN] = { 0 };\r
-        int32_t len = UtilsGetValue("dial_setting", temp, DIAL_SETTING_VALUE_LEN);\r
-        if (len >= 0) {\r
-            char *setBuffer = nullptr;\r
-            char *setValue = strtok_s(temp, ",", &setBuffer);\r
-            if (setValue != nullptr) {\r
-                dialSetting.dialFlag = atoi(setValue);\r
-            } else {\r
-                InitDialSettingDefault();\r
-                return;\r
+        char temp[DIAL_SETTING_VALUE_LEN] = {0}; // 创建一个临时字符数组用于存储拨号设置的字符串\r
+        int len = UtilsGetValue("dial_setting", temp, DIAL_SETTING_VALUE_LEN);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Attempting to load dial settings from kvstore. Length: %d\r\n", len);\r
+\r
+        if (len < 0)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Failed to retrieve dial settings. Initializing to default settings.\r\n");\r
+            //判断黑耀表盘是否存在\r
+            if(SetDialModel::GetInstance().IsDialInstalled(DEFAULT_DIAL_ID))\r
+            {\r
+                InitDialSettingDefault(DEFAULT_DIAL_ID);\r
+            }\r
+            else\r
+            {\r
+                InitDialSettingDefault(DIAL_CLOCK);\r
             }\r
+            return;\r
+        }\r
 \r
-            setValue = strtok_s(nullptr, ",", &setBuffer);\r
-            if (setValue != nullptr) {\r
-                dialSetting.dialId = atoi(setValue);\r
-            } else {\r
-                InitDialSettingDefault();\r
-                return;\r
+        char *setBuffer = nullptr; // 字符指针用于 strtok_s 的存储\r
+        char *setValue;\r
+\r
+        // 从字符串中读取三个值\r
+        // 1.读取表盘标志位\r
+        setValue = strtok_s(temp, ",", &setBuffer);\r
+        if (setValue)\r
+        {\r
+            dialSetting.dialFlag = atoi(setValue); // 将字符串转换为整数\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Dial flag loaded: %d\r\n", dialSetting.dialFlag);\r
+        }\r
+        else\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: First value is empty. Initializing to default settings.\r\n");\r
+             //判断黑耀表盘是否存在\r
+            if(SetDialModel::GetInstance().IsDialInstalled(DEFAULT_DIAL_ID))\r
+            {\r
+                InitDialSettingDefault(DEFAULT_DIAL_ID);\r
+            }\r
+            else\r
+            {\r
+                InitDialSettingDefault(DIAL_CLOCK);\r
             }\r
+            return;\r
+        }\r
 \r
-            setValue = strtok_s(nullptr, ",", &setBuffer);\r
-            if (setValue != nullptr) {\r
-                dialSetting.dialFullName = setValue;\r
-                if (!((dialSetting.dialFullName.length() > 0) &&\r
-                    (access(dialSetting.dialFullName.c_str(), F_OK) == 0))) {\r
-                    InitDialSettingDefault();\r
-                    return;\r
-                }\r
-            } else {\r
-                InitDialSettingDefault();\r
-                return;\r
+        // 读取表盘Id\r
+        setValue = strtok_s(nullptr, ",", &setBuffer);\r
+        if (setValue)\r
+        {\r
+            dialSetting.dialId = atoi(setValue); // 将字符串转换为整数\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Dial ID loaded: %d\r\n", dialSetting.dialId);\r
+        }\r
+        else\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Second value is empty. Initializing to default settings.\r\n");\r
+            //判断黑耀表盘是否存在\r
+            if(SetDialModel::GetInstance().IsDialInstalled(DEFAULT_DIAL_ID))\r
+            {\r
+                InitDialSettingDefault(DEFAULT_DIAL_ID);\r
             }\r
-        } else {\r
-            InitDialSettingDefault();\r
+            else\r
+            {\r
+                InitDialSettingDefault(DIAL_CLOCK);\r
+            }\r
+            return;\r
+        }\r
+\r
+        // 读取表盘名\r
+        setValue = strtok_s(nullptr, ",", &setBuffer);\r
+        if (setValue)\r
+        {\r
+            dialSetting.dialFullName = setValue; // 将完整名称赋值\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Dial full name loaded: %s\r\n", dialSetting.dialFullName.c_str());\r
+\r
+            if (dialSetting.dialFullName.empty() || access(dialSetting.dialFullName.c_str(), F_OK) != 0)\r
+            {\r
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Error: Dial full name is invalid or file does not exist. Initializing to default settings.\r\n");\r
+                InitDialSettingDefault(dialSetting.dialId);\r
+            }\r
+        }\r
+        else\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Error: Third value is empty. Initializing to default settings.\r\n");\r
+            InitDialSettingDefault(dialSetting.dialId);\r
         }\r
     }\r
 \r
-    DialSetting& MainModel::GetDialSetting()\r
+    DialSetting &MainModel::GetDialSetting()\r
     {\r
         return dialSetting;\r
     }\r
 \r
-    bool MainModel::IsFromSetCardView(void) const\r
+    /*\r
+        ###表盘状态###\r
+\r
+        接口 1 设置某个项的属性为ture or false\r
+        接口 2 获取最高优先级为ture的状态为哪一个 并且返回\r
+        接口 3 打印状态\r
+\r
+        管理状态:勿扰 睡眠 密码锁\r
+    */\r
+\r
+    // 开机读取手表配置  \r
+    void MainModel::InitDialState(void) {  \r
+        // 获取加锁状态  \r
+        int lockstate = OHOS::ConfigModel::GetInstance()->get_configData_int(OHOS::ConfigModel::CONFIGMODEL_ITEM_PASSWORD_SWITCH);  \r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "lockstate = %d", lockstate);  \r
+\r
+        // 判断加锁状态  \r
+        if (lockstate == 1) {  \r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Device is locked (lock state == 1)");  \r
+            uapi_dev_runtime_set_lock_status(1); // 上锁  \r
+            dialstateInfo[static_cast<int>(DialState::LOCK)].active = true; // 设置锁定状态为真  \r
+        }  \r
+\r
+        // 判断勿扰模式  \r
+        dialstateInfo[static_cast<int>(DialState::DO_NOT_DISTURB)].active = DnotDisturbModel::GetInstance().GetDoNotDisturbModeEnabled();  \r
+\r
+        // 判断睡眠状态 \r
+    }\r
+\r
+    // 接口 1: 设置某个状态的属性\r
+    void MainModel::setDialState(DialState state, bool value)\r
     {\r
-        return isFromSetCardView;\r
+        // // 将 state 转换为整数以进行比较\r
+        // int stateIndex = static_cast<int>(state);\r
+        // if (stateIndex >= 0 && stateIndex < STATE_COUNT) // 确保 index 在有效范围\r
+        // {\r
+        //     // 检查当前状态是否与要设置的状态一致\r
+        //     if (dialstateInfo[stateIndex].active != value)\r
+        //     {\r
+        //         dialstateInfo[stateIndex].active = value; // 使用转换后的索引\r
+        //         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Set dialstateInfo[%d].active = %d", stateIndex, value);\r
+        //         SendMsgToUIService(UI_UPDATE_DIALSTATE_DATA, 0, nullptr, 0); // 发送更新消息\r
+        //     }\r
+        //     else\r
+        //     {\r
+        //         WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "State %d is unchanged, no update needed.", stateIndex);\r
+        //     }\r
+        // }\r
+        // else\r
+        // {\r
+        //     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "state %d is error", stateIndex);\r
+        // }\r
     }\r
 \r
-    void MainModel::SetFromSetCardView(bool isFrom)\r
+    // 接口 2: 获取最高优先级为 true 的状态\r
+    DialState MainModel::getHighestPriorityActiveState()\r
     {\r
-        isFromSetCardView = isFrom;\r
+        for (int i = STATE_COUNT - 1; i >= 0; i--)\r
+        {\r
+            if (dialstateInfo[i].active)\r
+            {\r
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "high dialstateInfo[%d].active", i);\r
+                return dialstateInfo[i].state; // 返回活跃状态中优先级最高的\r
+            }\r
+        }\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "no have high dialstateInfo.active");\r
+        return DialState::INVALID; // 如果没有找到活跃状态,返回无效状态\r
     }\r
 \r
-    void MainModel::SetFromCardId(uint8_t cardId)\r
+    // 接口 3: 打印所有状态及其是否激活\r
+    void MainModel::printDialStates()\r
     {\r
-        fromCardId = cardId;\r
+        for (int i = 0; i < STATE_COUNT; ++i)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dialstateInfo[%d].active = %d", i, dialstateInfo[i].active);\r
+        }\r
     }\r
 \r
-    uint8_t MainModel::GetFromCardId(void)\r
+    // 未读状态判断\r
+    bool MainModel::getMessageActiveState()\r
     {\r
-        return fromCardId;\r
+        bool unread_state = ConfigModel::GetInstance()->get_configData_bool(ConfigModel::CONFIGMODEL_ITEM_MESSAGE_UNREAD);\r
+        return unread_state;\r
+    }\r
+\r
+    void MainModel::UpdateDialState()\r
+    {\r
+        /*进行主界面UI更新通知 如果在主界面*/\r
+        if (MainViewSample::GetInstance() != nullptr)\r
+            MainViewSample::GetInstance()->UpdateStateShow();\r
+    }\r
+    //主界面获取视频频率\r
+    bool MainModel::getVideostate() {\r
+      return video_state;\r
+    }\r
+    void MainModel::setVideostate(bool state) {\r
+      video_state = state;\r
+    }\r
+\r
+\r
+#if 0\r
+    void MainModel::DeleteCardSetting(uint8_t index)\r
+    {\r
+        char temp[CARD_SETTING_VALUE_LEN] = {0};\r
+        for (uint8_t i = 0; i < cardSettingCount; i++)\r
+        {\r
+            if (i == index + 1)\r
+            {\r
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "i:%d index:%d", i, index);\r
+                uint8_t j = i;\r
+                for (; j < cardSettingCount - 1; j++)\r
+                {\r
+                    cardSettings[j] = cardSettings[j + 1];\r
+                }\r
+                cardSettings[j] = MAX_CARD;\r
+                cardSettingCount--;\r
+            }\r
+        }\r
+\r
+        for (uint8_t i = 0; i < cardSettingCount; i++)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "cardSettings[%d] = %d", i, cardSettings[i]);\r
+            (void)sprintf_s(temp + strlen(temp), CARD_SETTING_VALUE_LEN, "%d,", cardSettings[i]);\r
+        }\r
+        (void)UtilsSetValue("card_setting", temp);\r
+\r
+         WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "\r\n***************DeleteCardSetting********************\r\n");\r
+        printCardSettings();\r
+         WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "\r\n_____________________________________________________\r\n");\r
+    }\r
+\r
+    void MainModel::AddCardSetting(uint8_t index)\r
+    {\r
+        char temp[CARD_SETTING_VALUE_LEN] = {0};\r
+        if (cardSettingCount >= CARD_SETTING_COUNT_MAX)\r
+        {\r
+            return;\r
+        }\r
+        for (int i = 0; i < cardSettingCount; i++)\r
+        {\r
+            if (cardSettings[i] == cardInfoMap[index].id)\r
+            {\r
+                return;\r
+            }\r
+        }\r
+        cardSettings[cardSettingCount++] = cardInfoMap[index].id;\r
+        for (uint8_t i = 0; i < cardSettingCount; i++)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "cardSettings[%d] = %d", i, cardSettings[i]);\r
+            (void)sprintf_s(temp + strlen(temp), CARD_SETTING_VALUE_LEN, "%d,", cardSettings[i]);\r
+        }\r
+        (void)UtilsSetValue("card_setting", temp);\r
+\r
+         WEARABLE_LOGD(WEARABL_LOG_MODULE_APP, "\r\n***************AddCardSetting********************\r\n");\r
+        printCardSettings();\r
+        else\r
+        {\r
+            /* 使用默认card配置 */\r
+            cardSettings[index++] = WATCH_FACE;\r
+            cardSettings[index++] = HEART_RATE;\r
+            cardSettings[index++] = COMPASS;\r
+            cardSettings[index++] = MUSIC_PLAYER;\r
+            cardSettings[index++] = SETCARD; // 默认卡片增加设置卡片\r
+            cardSettingCount = index;\r
+        }\r
     }\r
+#endif\r
 \r
-    bool MainModel::IsAodEnabled()\r
+ bool MainModel::IsAodEnabled()\r
     {\r
         char temp[DIAL_SETTING_VALUE_LEN] = { 0 };\r
         int32_t len = UtilsGetValue("enable_aod", temp, DIAL_SETTING_VALUE_LEN);\r
index 93585ef..17021a1 100644 (file)
@@ -10,9 +10,8 @@
 #include "HeartRateView.h"
 #include "PlayersModel.h"
 #include "PlayersPresenter.h"
-#include "MainCompassPresenter.h"
-#include "NativeRegisterManager.h"
-#include "CompassModel.h"
+#include "CompassPresenter.h"
+#include "compass/include/CompassModel.h"
 #include "CompassCalibrationView.h"
 #include "drag_event.h"
 #include "graphic_service.h"
 #include <map>
 #include "ModelDialDataFactory.h"
 #include "DialModelTime.h"
+#include "DialModelPower.h"
+#include "heartrate/include/HeartModel.h"
+#include "gfx_utils/mem_check.h"
+#include "custom_utils.h"
+// #include "traing/training_card/include/Training_CardView.h"
+// #include "dnotdisturb/include/DnotDisturbModel.h"
+#include "weather/include/WeatherModel.h"
+// #include "heart_blood/health_service/health_service.h"
+// #include "sleep/include/SleepControlView.h"
+// #include "sleep/include/SleepCardView.h"
+// #include "sleep/include/SleepModel.h"
+#include "MainModel.h"
+// #include "../../../../../../../drivers/peripheral/utils/custom_runtime.h"
+// #include "rebootandshutdown/include/RebootAndShutdownModelC.h"
+
+#if USE_OFFLINE_DIAL
 #include "DialViewGroup.h"
+#endif
 #include "ui_service.h"
-#include "PageTransitionMgr.h"
-
-namespace OHOS {
+#include "time.h"
+#define TESTCHECK 0
+//心率弹窗
+#define HEART_RATE_CHECK_TIMEOUT 0
 
+#include "NativeRegisterManager.h"
+#ifdef SUPPORT_POWER_MANAGER
+#include "power_display_service.h"
+#endif
+namespace OHOS
+{
 REGIST_SLICE(VIEW_MAIN, MainViewSample, MainPresenterSample);
 
-std::map<std::string, AppViewId> g_jumpView = { { MAIN_CLICK_WEATHER, VIEW_MAIN },            // 天气界面
-                                                { MAIN_CLICK_ACTIVITY, VIEW_MAIN_ACTIVITY },         // 活动记录界面
-                                                { MAIN_CLICK_MESSAGE, VIEW_MAIN },            // 消息app
-                                                { MAIN_CLICK_HEARTRATE, VIEW_MAIN },          // 心率界面
-                                                { DROPDOWN_CLICK_ALARM, VIEW_MAIN_ALARM },           // 闹钟app
-                                                { DROPDOWN_CLICK_SETTING, VIEW_SETTING } };          // 设置界面
-
-// std::map<std::string, int> g_chanColor = { { DROPDOWN_CLICK_FINDMYPHONE, DROPDOWN_DROPDOWN_FIND_PHONE_B },
-//                                            { DROPDOWN_CLICK_ALARM, DROPDOWN_DROPDOWN_ALARM_B },
-//                                            { DROPDOWN_CLICK_SETTING, DROPDOWN_DROPDOWN_SETTING_B } };
-
-static MainPresenterSample *g_pMainPresenterSample = nullptr;
+    std::map<std::string, AppViewId> g_jumpView = {
+        {MAIN_CLICK_BLOOD, VIEW_BLOOD_CHECK},              // 血氧检查
+        {MAIN_CLICK_SETCARD, VIEW_ADD_CARD},               // 卡片管理
+    };
 
-static constexpr uint16_t DROP_X_MAX = 360;
-static constexpr uint16_t PROGRESS_PERCENTAGE = 100;
-static constexpr uint16_t HORIZONTAL_SWIPE = 1;
-static constexpr uint16_t PLAYER_PERIOD = 500;
-static constexpr uint16_t MAX_PERIOD = 1000;
+    static MainPresenterSample *g_pMainPresenterSample = nullptr;
 
-MainPresenterSample::MainPresenterSample()
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainPresenterSample :%p", this);
-    g_pMainPresenterSample = this;
-}
-
-MainPresenterSample::~MainPresenterSample()
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~MainPresenterSample");
-}
+    static constexpr uint16_t DROP_X_MAX = 360;
+    static constexpr uint16_t PROGRESS_PERCENTAGE = 100;
+    static constexpr uint16_t HORIZONTAL_SWIPE = 1;
+    static constexpr uint16_t PLAYER_PERIOD = 500;
+    static constexpr uint16_t MAX_PERIOD = 1000;
 
-MainPresenterSample *MainPresenterSample::GetInstance(void)
-{
-    return g_pMainPresenterSample;
-}
+    MainPresenterSample::MainPresenterSample()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainPresenterSample :%p", this);
+        g_pMainPresenterSample = this;
+    }
 
-void MainPresenterSample::OnStart()
-{
-    mainPresenterState_ = MainPresenterState::START;
-}
+    MainPresenterSample::~MainPresenterSample()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "~MainPresenterSample");
+        g_pMainPresenterSample = nullptr;
+        // /*从主界面退出,关闭心率检测*/
+        // HeartModel::GetInstance()->Heart_Stop();
+        // HeartModel::GetInstance()->Heart_Control(HeartState::End,
+        //                                        HeartCheck::CARDCHECK);
+    }
 
-void MainPresenterSample::OnPause()
-{
-    Presenter<MainViewSample>::OnPause();
-    // Save watchface content for slide back
-    UIView* watchFace = view_->GetViewById(WATCH_FACE)->GetParent();
-    uint8_t opaScale = watchFace->GetOpaScale();
-    watchFace->SetOpaScale(OPA_OPAQUE);
-    PageTransitionMgr::GetInstance().SaveSlideBackSnapShotIfNecessary(watchFace);
-    watchFace->SetOpaScale(opaScale);
-
-    mainPresenterState_ = MainPresenterState::PAUSE;
-}
+    MainPresenterSample *MainPresenterSample::GetInstance(void)
+    {
+        return g_pMainPresenterSample;
+    }
+    
+    void MainPresenterSample::OnStart()
+    {
+        mainPresenterState_ = MainPresenterState::START;
+    }
+    
+    void MainPresenterSample::OnPause()
+    {
+        Presenter<MainViewSample>::OnPause();
+        // Save watchface content for slide back
+        UIView* watchFace = view_->GetViewById(WATCH_FACE)->GetParent();
+        uint8_t opaScale = watchFace->GetOpaScale();
+        watchFace->SetOpaScale(OPA_OPAQUE);
+        PageTransitionMgr::GetInstance().SaveSlideBackSnapShotIfNecessary(watchFace);
+        watchFace->SetOpaScale(opaScale);
+    
+        mainPresenterState_ = MainPresenterState::PAUSE;
+
+        //进行视频表盘的暂停
+        // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "暂停视频") ;
+        // DialSetting &setting = GetDialSetting();
+        // if (setting.dialFlag) {
+        //     DialModelTime::GetInstance()->UpdateTime();
+        //     dynamic_cast<DialViewGroup *>(view_->GetViewById(WATCH_FACE))->StopDial();
+        // }
+    }
+    
+    void MainPresenterSample::OnResume(void)
+    {
+        Presenter::OnResume();
+        mainPresenterState_ = MainPresenterState::RESUME;
+        // Set current page again to invoke OnActive method.
+        uint8_t curCardId = view_->GetHorCurrentCard();
+        view_->SwitchToCard(curCardId);
+
+    #if IS_SUPPORT_BIND_VOTE
+if (ConfigModel::GetInstance()->GetisFirstTimeStart() == true) {
+        uapi_remove_bind_vote(); //页面已经展示后的调用逻辑。取消绑定投票
+        ConfigModel::GetInstance()->SetisFirstTimeStart(false);
+    }
+#endif
+    // //进行视频表盘的恢复
+    // DialSetting &setting = GetDialSetting();
+    // if (setting.dialFlag) {
+    //     DialModelTime::GetInstance()->UpdateTime();
+    //     dynamic_cast<DialViewGroup *>(view_->GetViewById(WATCH_FACE))->StartDial();
+    // }
+    }
+    
+    void MainPresenterSample::OnStop(void)
+    {
+        mainPresenterState_ = MainPresenterState::STOP;
+        if (isCompassSensorOpened_) {
+            CompassModel::GetInstance()->CloseCompassSensor();
+        }
 
-void MainPresenterSample::OnResume(void)
-{
-    Presenter::OnResume();
-    mainPresenterState_ = MainPresenterState::RESUME;
-    // Set current page again to invoke OnActive method.
-    uint8_t curCardId = view_->GetHorCurrentCard();
-    view_->SwitchToCard(curCardId);
-}
+        PullUpDown_StopTimer();
+        CloseCompassSensor(); //切换Slice时要关闭指南针传感器
+    }
 
-void MainPresenterSample::OnStop(void)
-{
-    mainPresenterState_ = MainPresenterState::STOP;
-    if (isCompassSensorOpened_) {
-        CompassModel::GetInstance()->CloseCompassSensor();
+    MainPresenterState MainPresenterSample::GetMainPresenterState(void)
+    {
+        return mainPresenterState_;
     }
-}
 
-MainPresenterState MainPresenterSample::GetMainPresenterState(void)
-{
-    return mainPresenterState_;
-}
 
-bool MainPresenterSample::OnClick(UIView &view, const ClickEvent &event)
-{
-    // UNUSED(event);
-    // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StatusButtonClickListener: %s", view.GetViewId());
-    // std::string curViewId = view.GetViewId();
-
-    // UIImageView *imgView = static_cast<UIImageView *>(&view);
-    // if (HealthModel::GetInstance() == nullptr) {
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "health model nullptr");
-    //     return false;
-    // }
-    // if (curViewId == DROPDOWN_CLICK_DONOTDISTURB) {
-    //     if (HealthModel::GetInstance()->GetDntDistStatus() == 0) {
-    //         ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, imgView, DROPDOWN_DROPDOWN_DN_DISTURB_B);
-    //         HealthModel::GetInstance()->UpdateDntDistStatus(1);
-    //     } else {
-    //         ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, imgView, DROPDOWN_DROPDOWN_DN_DISTURB);
-    //         HealthModel::GetInstance()->UpdateDntDistStatus(0);
-    //     }
-    // }
-    // if (curViewId == DROPDOWN_CLICK_BRIGHTENSCREEN) {
-    //     if (HealthModel::GetInstance()->GetBriScrStatus() == 0) {
-    //         ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, imgView, DROPDOWN_DROPDOWN_BRI_SCREEN_B);
-    //         HealthModel::GetInstance()->UpdateBriScrStatus(1);
-    //         ScreenOffEnable(0);
-    //     } else {
-    //         ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, imgView, DROPDOWN_DROPDOWN_BRI_SCREEN);
-    //         HealthModel::GetInstance()->UpdateBriScrStatus(0);
-    //         ScreenOffEnable(1);
-    //     }
-    // }
+   
+    bool MainPresenterSample::OnClick(UIView &view, const ClickEvent &event)
+    {
+        UNUSED(event);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "StatusButtonClickListener: %s", view.GetViewId());
+        std::string curViewId = view.GetViewId();
+
+        // UIImageView *imgView = static_cast<UIImageView *>(&view);
+        // if (HealthModel::GetInstance() == nullptr)
+        // {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "health model nullptr");
+        //     return false;
+        // }
+
+        // /*发生点击进入密码锁*/
+        // if (uapi_dev_runtime_get_lock_status())
+        // {
+        //     /*进入密码锁*/
+        //     NativeAbility::GetInstance().ChangeSlice(VIEW_CODED_LOCK);
+        //     return true;
+        // }
+
+        // if (curViewId == CONNECTEDSTATUSBACKGROUNDBUTTON)
+        // {
+        //     PullUpDownView::GetInstance()->ChangeView(DROPDOWNVIEW, CONNECTEDSTATUSVIEW);
+        //     PullUpDown_StopTimer(); // 切换到连接状态视图时停止定时器
+        //     return true;
+        // }
+        // else if (curViewId == CONNECTEDSTATUSVIEWCLOSEBUTTON)
+        // {
+        //     PullUpDownView::GetInstance()->ChangeView(CONNECTEDSTATUSVIEW, DROPDOWNVIEW);
+        //     PullUpDown_StartTimer(1000); // 切回下拉控制中心视图开启定时器
+        //     return true;
+        // }
+        // // 设置血氧进入
+        // else if (curViewId == MAIN_CLICK_BLOOD)
+        // {
+        //     MainModel::GetInstance().SetFromSetCardView(true);
+        //     MainModel::GetInstance().SetFromCardId(BLOODOXGEN);
+        //     // 如果正在充电进入提醒界面
+        //     if (get_charge_stat())
+        //     {
+        //         HealthState highHealthState;
+        //         highHealthState.checkType = CHARGE;
+        //         HealthService::GetInstance()->SetHealthCurrent(highHealthState);
+        //         NativeAbility::GetInstance().ChangeSlice(VIEW_CHECK_INVALID, TransitionType::TRANSITION_ZOOM);
+        //     }
+        // }
+        // 设置卡片管理进入
+         if (curViewId == MAIN_CLICK_SETCARD)
+        {
+            MainModel::GetInstance().SetFromSetCardView(true);
+            MainModel::GetInstance().SetFromCardId(SETCARD);
+        }
+        if (g_jumpView.count(curViewId) != 0)
+        {
+            NativeAbility::GetInstance().EnterSlice(g_jumpView[curViewId]);
+        }
+        return true;
+    }
 
-    // if (g_jumpView.count(curViewId) != 0) {
-    //     if (g_jumpView[curViewId] == VIEW_SETTING) {
-    //         NativeAbility::GetInstance().ChangeSlice(g_jumpView[curViewId], TransitionType::TRANSITION_INVALID,
-    //             gSliceDefaultPriority, true);
-    //     } else {
-    //         NativeAbility::GetInstance().ChangeSlice(g_jumpView[curViewId]);
-    //     }
-    // }
-    return true;
-}
+    bool MainPresenterSample::OnLongPress(UIView &view, const LongPressEvent &event)
+    {
+        UNUSED(event);
+        UNUSED(view);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainPresenterSample OnLongPress");
+        uint8_t cardId = view_->GetHorCurrentCard();
+        /*
+            卡片进入管理卡片界面
+            if (cardId != WATCH_FACE)
+            {
+                SetCardModel::GetInstance().SetSelectedCard(cardId);
+                NativeAbility::GetInstance().ChangeSlice(VIEW_ADD_CARD);
+            }
+        */
+        if (cardId == WATCH_FACE)
+        {
+            // if (uapi_dev_runtime_get_lock_status())
+            // {
+            //     /*进入密码锁*/
+            //     NativeAbility::GetInstance().ChangeSlice(VIEW_CODED_LOCK);
+            // }
+            // else
+            // {
+                /*进入表盘设置*/
+                NativeAbility::GetInstance().ChangeSlice(VIEW_SET_DIAL);
+            // }
+        }
+        return true;
+    }
 
-bool MainPresenterSample::OnLongPress(UIView& view, const LongPressEvent& event)
-{
-    UNUSED(event);
-    UNUSED(view);
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainPresenterSample OnLongPress");
-    uint8_t cardId = view_->GetHorCurrentCard();
-    if (cardId != WATCH_FACE) {
-        SetCardModel::GetInstance().SetSelectedCard(cardId);
-        NativeAbility::GetInstance().ChangeSlice(VIEW_SET_CARD);
-    } else {
-        NativeAbility::GetInstance().ChangeSlice(VIEW_SET_DIAL);
-    }
-    return true;
-}
 
-void MainPresenterSample::SetPage(int8_t id, bool loadAdjacent)
-{
-    if (view_ != nullptr) {
-        view_->SetPage(id, loadAdjacent);
+    void MainPresenterSample::SetPage(int8_t id, bool loadAdjacent)
+    {
+        if (view_ != nullptr) {
+            view_->SetPage(id, loadAdjacent);
+        }
     }
-}
 
-void MainPresenterSample::SetTaskPeroid(CardId cardId)
-{
-    if (cardId == COMPASS) {
-        SetPeriod(DEFAULT_TASK_PERIOD);
-    } else if (cardId == WATCH_FACE) {
-        uint32_t time;
-        DialSetting &setting = GetDialSetting();
-        if (setting.dialFlag) {
-            time = dynamic_cast<DialViewGroup*>(view_->GetViewById(WATCH_FACE))->GetPeriod();
-        } else {
-            time = DEFAULT_TASK_PERIOD;
+    void MainPresenterSample::SetTaskPeroid(CardId cardId)
+    {
+        if (cardId == COMPASS)
+        {
+            SetPeriod(DEFAULT_TASK_PERIOD);
+        }
+        else if (cardId == WATCH_FACE)
+        {
+            uint32_t time;
+            DialSetting &setting = GetDialSetting();
+            if (setting.dialFlag)
+            {
+                time = dynamic_cast<DialViewGroup *>(view_->GetViewById(WATCH_FACE))->GetPeriod();
+            }
+            else
+            {
+                time = DEFAULT_TASK_PERIOD;
+            }
+            SetPeriod(time);
+        }
+        else if (cardId == MUSIC_PLAYER)
+        {
+            SetPeriod(PLAYER_PERIOD);
+        }
+        else
+        {
+            SetPeriod(MAX_PERIOD);
         }
-        SetPeriod(time);
-    } else if (cardId == MUSIC_PLAYER) {
-        SetPeriod(PLAYER_PERIOD);
-    } else {
-        SetPeriod(MAX_PERIOD);
     }
-}
 
-void MainPresenterSample::OnSwipe(UISwipeView &view)
-{
-    UNUSED(view);
-    CardId cardId = view_->GetHorCurrentCard();
-    SetTaskPeroid(cardId);
-    if (cardId == COMPASS) {
-        if (!isCompassSensorOpened_) {
-            CompassModel::GetInstance()->OpenCompassSensor();
-            isCompassSensorOpened_ = true;
+    void MainPresenterSample::ResetgoalCardView()
+    {
+        if(goalControlView::GetInstance())
+        {
+            auto goalSwipView = goalControlView::GetInstance()->GetGoalControlSwipView();
+            if (goalSwipView->GetCurrentPage() != 0)
+            {
+                goalSwipView->SetCurrentPage(0);
+            }
         }
-    } else if (isCompassSensorOpened_) {
-        CompassModel::GetInstance()->CloseCompassSensor();
-        isCompassSensorOpened_ = false;
     }
 
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnSwipe OnSwipe");
-    return;
-}
+    void MainPresenterSample::OnSwipe(UISwipeView &view)
+    {
+        // UNUSED(view);
+        /* -------------------------------------------------------------------------- */
+        /*
+         * @brief 如果当前是下拉界面,先更新一次下拉窗口的数据包括,电池电量,时间,信号强度等等数据,
+         *        然后开启一个每2秒更新数据的定时器。
+         *        如果不在下拉界面了停止定时器
+         */
+        if (MainViewSample::GetInstance()->IsPullUpViewPage() == PULLUP) {  
+            if (!isPullDownPageView) {   
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始下拉更新");  
+                isPullDownPageView = true;  
+                UpdataBaseData();  
+                PullUpDownView::GetInstance()->UpdateSignalStrengthStatusAndBatteryPosition();  
+                PullUpDown_StartTimer(2000);  
+            }  
+        } else if (MainViewSample::GetInstance()->IsPullUpViewPage() == DROPDOWN) {  
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "开始上拉更新");  
+            isPullDownPageView = false;  
+            PullUpDown_StopTimer();  
+        } else {  
+            isPullDownPageView = false;  
+            PullUpDown_StopTimer();  
+        }
+        /* -------------------------------------------------------------------------- */
 
-void MainPresenterSample::ProcessDataNotify(void)
-{
-    HealthMsg healthMsg;
-    uint16_t len;
+        CardId cardId = view_->GetHorCurrentCard();
+        SetTaskPeroid(cardId);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "OnSwipe OnSwipe");
+        return;
+    }
 
-    while ((HealthModel::GetInstance()->FetchedHealthData(&healthMsg))) {
-        switch (healthMsg.type) {
+    void MainPresenterSample::ProcessDataNotify(void)
+    {
+        HealthMsg healthMsg;
+        uint16_t len;
+
+        while ((HealthModel::GetInstance()->FetchedHealthData(&healthMsg) == true))
+        {
+            switch (healthMsg.type)
+            {
             case BATTERY_LIFE:
                 break;
             default:
                 break;
+            }
         }
     }
-}
 
-void MainPresenterSample::SetCircleProgress()
-{
-    PlayersView *playersView = dynamic_cast<PlayersView*>(view_->GetViewById(MUSIC_PLAYER));
-    if (playersView == nullptr) {
-        return;
+    void MainPresenterSample::SetCircleProgress()
+    {
+        #if 0
+        PlayersView *playersView = dynamic_cast<PlayersView *>(view_->GetViewById(MUSIC_PLAYER));
+        if (playersView == nullptr)
+        {
+            return;
+        }
+        UICircleProgress *playbackProgress = playersView->GetPlaybackProgress();
+        if (playbackProgress == nullptr)
+        {
+            return;
+        }
+        if(PlayersModel::GetInstance()->GetMusicSource() == false) {
+        int32_t playerState;
+        PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);
+        state_ = playersView->GetPlayerButtonState();
+        if ((playerState != PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::SELECTED))
+        {
+            playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);
+        }
+        else if ((playerState == PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::UNSELECTED))
+        {
+            playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);
+        }
+        }
+        if (state_ == UICheckBox::UICheckBoxState::SELECTED)
+        {
+            PlayersModel::GetInstance()->GetPlayerCtr()->GetCurrentTime(playerCurrentTime_);
+            PlayersModel::GetInstance()->GetDuration(playerMusicDuration_);
+            if (playerMusicDuration_ != 0)
+            {
+                playerProgressValue_ = (playerCurrentTime_ * PROGRESS_PERCENTAGE) / playerMusicDuration_;
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerProgressValue_ %lld", playerProgressValue_);
+            }
+            else
+            {
+                playerProgressValue_ = 100; // 100: max progress value
+            }
+            PlayersModel::GetInstance()->SetCircleProgress(playerProgressValue_);
+            PlayersPresenter::GetInstance()->SetPlaybackProgress(playerProgressValue_);
+        }
+        #endif
     }
-    UICircleProgress *playbackProgress = playersView->GetPlaybackProgress();
-    if (playbackProgress == nullptr) {
-        return;
+
+    void MainPresenterSample::SetCompassRotate()
+    {
+        bool status = CompassModel::GetInstance()->GetCalibrationStatus();
+        dynamic_cast<CompassControlView *>(view_->GetViewById(COMPASS))->SetCalibrationView(status);
+        if (!status)
+        {
+            DetermineToRotate();
+        }
     }
-    int32_t playerState;
-    PlayersModel::GetInstance()->GetPlayerCtr()->GetPlayerState(playerState);
-    state_ = playersView->GetPlayerButtonState();
-    if ((playerState != PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::SELECTED)) {
-        playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::UNSELECTED);
-    } else if ((playerState == PLAYER_STARTED) && (state_ == UICheckBox::UICheckBoxState::UNSELECTED)) {
-        playersView->SetPlayerButtonState(UICheckBox::UICheckBoxState::SELECTED);
-    }
-    if (state_ == UICheckBox::UICheckBoxState::SELECTED) {
-        PlayersModel::GetInstance()->GetPlayerCtr()->GetCurrentTime(playerCurrentTime_);
-        PlayersModel::GetInstance()->GetDuration(playerMusicDuration_);
-        if (playerMusicDuration_ != 0) {
-            playerProgressValue_ = (playerCurrentTime_ * PROGRESS_PERCENTAGE) / playerMusicDuration_;
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "playerProgressValue_ %lld", playerProgressValue_);
-        } else {
-            playerProgressValue_ = 100; // 100: max progress value
-        }
-        PlayersModel::GetInstance()->SetCircleProgress(playerProgressValue_);
-        PlayersPresenter::GetInstance()->SetPlaybackProgress(playerProgressValue_);
+
+    // 滑动到指南针卡片开启指南针传感器
+    void MainPresenterSample::OpenCompassSensor(void)
+    {
+        if (!isCompassSensorOpened_)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OpenCompassSensor");
+            isCompassSensorOpened_ = true;
+            CompassModel::GetInstance()->OpenCompassSensor();
+            ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON); //滑动到指南针页面时开启屏幕常亮
+        }
     }
-}
+    // 关闭指南针传感器
+    void MainPresenterSample::CloseCompassSensor(void)
+    {
+        if(isCompassSensorOpened_)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CloseCompassSensor");
+            isCompassSensorOpened_ = false;
+            CompassModel::GetInstance()->CloseCompassSensor();
+            ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON); //滑动到指南针页面时取消屏幕常亮
+        }
+    }
+    /* --------------------------------- 主界面卡片功能 -------------------------------- */
+    void MainPresenterSample::Notify(void)
+    {
+        CardId currentCardId = view_->GetHorCurrentCard();
+
+        // 从心率卡片变为其他卡片时关闭心率检测
+        if (previousCardId == HEART_RATE && currentCardId != HEART_RATE)
+        {
+            LogCardTransition(previousCardId, currentCardId);
+            // HeartModel::GetInstance()->Heart_Stop();
+            // HeartModel::GetInstance()->Heart_Control(HeartState::End,HeartCheck::CARDCHECK); //主动检测心率
+        }
+        // 从指南针卡片跳转到其他卡片时切换到关闭长亮屏
+        if (previousCardId == COMPASS && currentCardId != COMPASS)
+        {
+            CloseCompassSensor();
+        }
 
-void MainPresenterSample::SetCompassRotate()
-{
-    bool status = CompassModel::GetInstance()->GetCalibrationStatus();
-    dynamic_cast<CompassControlView*>(view_->GetViewById(COMPASS))->SetCalibrationView(status);
-    if (!status) {
-        DetermineToRotate();
+        // 从睡眠卡片跳转到其他卡片时切换到睡眠卡片主界面
+        if (previousCardId == SLEEP && currentCardId != SLEEP)
+        {
+            LogCardTransition(previousCardId, currentCardId);
+            ResetSleepCardView();
+        }
+        if (previousCardId == WEATHER && currentCardId != WEATHER)
+        {
+            LogCardTransition(previousCardId, currentCardId);
+            ResetWeatherCardView();
+        }
+        if (previousCardId == GOAL && currentCardId != GOAL)
+        {
+            LogCardTransition(previousCardId, currentCardId);
+            ResetgoalCardView();
+        }
+
+            
+        // 更新上一个卡片的值
+        previousCardId = currentCardId;
+
+        switch (currentCardId)
+        {
+        case HEART_RATE:
+            StartHeartRateDetection();
+            break;
+
+        case COMPASS:
+            OpenCompassSensor();
+            SetCompassRotate();
+            break;
+
+        case MUSIC_PLAYER:
+            // PlayersModel::GetInstance()->SetCircleProgress();
+            break;
+
+        case WATCH_FACE:
+            UpdateWatchFace();
+            break;
+
+        case WEATHER:
+            UpdateWeather();
+            break;
+
+        case GOAL:
+            // Updategoal();
+            break;
+
+        case SLEEP:
+            UpdateSleep();
+            break;
+
+        }
+    }
+    /*打印日志*/
+    void MainPresenterSample::LogCardTransition(CardId previous, CardId current)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "[MainCard slide]previousCardId:%d cardId:%d", previous, current);
+    }
+    /*睡眠卡片*/
+    void MainPresenterSample::ResetSleepCardView()
+    {
+        // if (SleepCardView::GetInstance() != nullptr)
+        // {
+        //     auto sleepCardView = SleepCardView::GetInstance()->GetSleepCardView();
+        //     if (sleepCardView->GetCurrentPage() != 0)
+        //     {
+        //         sleepCardView->SetCurrentPage(0);
+        //     }
+        // }
+
+        // SleepModel::GetInstance().msg_save_sleep_data();
+    }
+    /*天气卡片*/
+    void MainPresenterSample::ResetWeatherCardView()
+    {
+        if(WeatherControlView::GetInstance())
+        {
+            auto weatherSwipView = WeatherControlView::GetInstance()->GetWeatherSwipView();
+            if (weatherSwipView->GetCurrentPage() != 0)
+            {
+                weatherSwipView->SetCurrentPage(0);
+            }
+        }
     }
-}
 
-void MainPresenterSample::Notify(void)
-{
-    CardId cardId = view_->GetHorCurrentCard();
-    if (cardId == COMPASS) {
-        SetCompassRotate();
-    } else if (cardId == MUSIC_PLAYER) {
-        SetCircleProgress();
-    } else if (cardId == WATCH_FACE) {
+
+    /*心率卡片*/
+    void MainPresenterSample::StartHeartRateDetection()
+    {
+      // HeartModel::GetInstance()->Heart_Control(HeartState::End, HeartCheck::PASSIVITY);
+#if HEART_RATE_CHECK_TIMEOUT
+    HeartModel::GetInstance()->Heart_Control(HeartState::Start,HeartCheck::CARDCHECK);
+#else
+    // HeartModel::GetInstance()->Heart_Start(HeartCheck::CARDCHECK);
+#endif
+    }
+    /*主表盘*/
+    void MainPresenterSample::UpdateWatchFace()
+    {
         DialSetting &setting = GetDialSetting();
-        if (setting.dialFlag) {
+        if (setting.dialFlag)
+        {
             DialModelTime::GetInstance()->UpdateTime();
-            DialViewGroup* group = dynamic_cast<DialViewGroup*>(view_->GetViewById(WATCH_FACE));
-            if (group != nullptr) {
-                group->UpdateViewsByPeriodicUpdateData();
+            dynamic_cast<DialViewGroup *>(view_->GetViewById(WATCH_FACE))->UpdateViewsByPeriodicUpdateData();
+        }
+        else
+        {
+            dynamic_cast<MainClockView *>(view_->GetViewById(WATCH_FACE))->UpdateTime();
+        }
+    }
+
+    void MainPresenterSample::Updategoal()
+    {
+        if(GoalView::GetInstance())
+        {
+            GoalView::GetInstance()->GoalViewrefresh();
+        }
+        if(GoalotherView::GetInstance())
+        {
+            GoalotherView::GetInstance()->GoalViewrefresh();
+        }
+    }
+
+    /*睡眠*/
+    void MainPresenterSample::UpdateSleep()
+    {
+        // GraphicService::GetInstance()->PostGraphicEvent(
+        //     std::bind(&OHOS::SleepModel::UpdateSleepView, &OHOS::SleepModel::GetInstance()));
+    }
+
+    /*天气*/
+    void MainPresenterSample::UpdateWeather()
+    {
+        if (WeatherModel::GetInstance().GetWeatherDataIsValid())
+        {
+            WeatherModel::GetInstance().UpdateWeatherCurTime();
+        }
+    }
+    /* -------------------------------------------------------------------------- */
+    void MainPresenterSample::InitCardSettings(void)
+    {
+        MainModel::GetInstance().InitCardSettings();
+    }
+
+    uint8_t MainPresenterSample::GetCardSettingCount(void)
+    {
+        return MainModel::GetInstance().GetCardSettingCount();
+    }
+
+    CardId *MainPresenterSample::GetCardSettings(void)
+    {
+        return MainModel::GetInstance().GetCardSettings();
+    }
+
+    void MainPresenterSample::InitDialSettings(void)
+    {
+        return MainModel::GetInstance().InitDialSettings();
+    }
+    DialSetting &MainPresenterSample::GetDialSetting()
+    {
+        return MainModel::GetInstance().GetDialSetting();
+    }
+
+    static const char *weekDays_ch[] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
+    static const char *weekDays_other[] = {"Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat"};
+    uint32_t MainPresenterSample::GetWeekStr(char *p_week)
+    {
+        time_t currtime;
+        struct tm *timeinfo;
+        time(&currtime);
+        timeinfo = localtime(&currtime);
+
+        // 获取星期信息
+        int language = ConfigModel::GetInstance()->GetLanguage();
+        if (language == 0)
+        {
+            strcpy(p_week, weekDays_ch[timeinfo->tm_wday]);
+        }
+        else
+        {
+            strcpy(p_week, weekDays_other[timeinfo->tm_wday]);
+        }
+
+        return ERRCODE_SUCC; // 假设成功获取星期信息
+    }
+
+    void MainPresenterSample::UpdataBaseData()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdataBaseData");
+        // 解析日期信息
+        char *dateStr = (char *)malloc(9);
+        if (uapi_get_YYMMDD_Time(dateStr, '/') != ERRCODE_SUCC)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get start date");
+            free(dateStr);
+            return;
+        }
+        // 获取当前时间
+        char *timeStr = (char *)malloc(9);
+        if (uapi_get_HHMMSS_Time(timeStr, ':', false) != ERRCODE_SUCC)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get start time");
+            free(dateStr);
+            free(timeStr);
+            return;
+        }
+        // 解析星期信息
+        char *weekStr = (char *)malloc(10);
+        if (GetWeekStr(weekStr) != ERRCODE_SUCC)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get week information");
+            free(dateStr);
+            free(timeStr);
+            free(weekStr);
+            return;
+        }
+
+        // 获取电池电量信息
+        float voltage = 0.0F;
+        uint8_t value = 0;
+        // value = battery_get_voltage(&voltage);
+        value = 0;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "battery_get_voltage = %d", value);
+        std::string dateAndweek = std::string(dateStr) + " " + std::string(weekStr);
+        if (PullUpDownView::GetInstance() != nullptr)
+        {
+            PullUpDownView::GetInstance()->GetProgress()->SetValue(value);
+            PullUpDownView::GetInstance()->GetDateAndWeekLabel()->SetText(dateAndweek.c_str());
+        }
+
+        // 释放动态分配的内存
+        free(dateStr);
+        free(timeStr);
+        free(weekStr);
+
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ALLData are refresh!\n");
+    }
+    void MainPresenterSample::get_memcheck()
+    {
+        MemCheck::GetInstance()->DumpMemInfo();
+    }
+    /* -------------------------------------------------------------------------- */
+    // 声明定时器变量
+    static osTimerId_t g_timer = nullptr;
+    static uint8_t UPDATETIME = 20; // 20秒
+    uint8_t MainPresenterSample::g_PullUpDownTimes = UPDATETIME;
+
+    /*定时器到期时的处理*/
+    static void PullUpDown_TimerCallbackProc(int data)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDown_TimerCallbackProc");
+        if (uapi_get_screen_state() == 1) // 息屏状态下若停留在下拉界面,20s后无操作停止更新数据
+        {
+            MainPresenterSample::g_PullUpDownTimes -= 2;
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%d", MainPresenterSample::g_PullUpDownTimes);
+            if (MainPresenterSample::g_PullUpDownTimes <= 0) {
+                GraphicService::GetInstance()->PostGraphicEvent(std::bind(&MainPresenterSample::PullUpDown_StopTimer, MainPresenterSample::GetInstance()));
             }
-        } else {
-            MainClockView* clock = dynamic_cast<MainClockView*>(view_->GetViewById(WATCH_FACE));
-            if (clock != nullptr) {
-                clock->UpdateTime();
+        }
+        else //亮屏状态下每2s刷新一次下拉数据
+        {
+            if (PullUpDownView::GetInstance() != nullptr)
+            {
+                PullUpDownView::GetInstance()->UpdateSignalStrengthStatusAndBatteryPosition();
             }
+            if (MainPresenterSample::g_PullUpDownTimes != UPDATETIME) // 如果是亮屏后息屏再亮屏(此时息屏时间没超过 UPDATETIME)则恢复
+                    MainPresenterSample::g_PullUpDownTimes = UPDATETIME;
         }
+        return;
     }
-}
 
-void MainPresenterSample::InitCardSettings(void)
-{
-    MainModel::GetInstance().InitCardSettings();
-}
+    /*
+     * @brief 回调函数
+     */
+    static void PullUpDown_TimerCallback(int data)
+    {
+        GraphicService::GetInstance()->PostGraphicEvent(std::bind(PullUpDown_TimerCallbackProc, data));
+    }
 
-uint8_t MainPresenterSample::GetCardSettingCount(void)
-{
-    return MainModel::GetInstance().GetCardSettingCount();
-}
+    /*
+     *  @brief 开启定时器函数
+     *  @param interval 时间间隔,单位ms
+     */
+    void MainPresenterSample::PullUpDown_StartTimer(uint32_t interval)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::PullUpDown_StartTimer");
+        /* -------------------------- 1.检查定时器是否已经存在,如果存在则返回 ------------------------- */
+        if (g_timer != nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::PullUpDown_StartTimer Timer already exists!!");
+            return;
+        }
 
-CardId *MainPresenterSample::GetCardSettings(void)
-{
-    return MainModel::GetInstance().GetCardSettings();
-}
+        /* --------------------------------- 2.创建定时器 -------------------------------- */
+        g_timer = osTimerNew((osTimerFunc_t)PullUpDown_TimerCallback, osTimerPeriodic, nullptr, nullptr);
+        // 检查定时器创建是否成功
+        if (g_timer == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::PullUpDown_StartTimer Timer create failed!!");
+            return;
+        }
 
-void MainPresenterSample::InitDialSettings(void)
-{
-    return MainModel::GetInstance().InitDialSettings();
-}
-DialSetting& MainPresenterSample::GetDialSetting()
-{
-    return MainModel::GetInstance().GetDialSetting();
-}
+        /* ----------------------------- 3.将毫秒转换为系统时钟节拍数 ---------------------------- */
+        int tick = osMs2Tick(interval);
+        /* --------------------------------- 4.启动定时器 -------------------------------- */
+        osStatus_t ret = osTimerStart(g_timer, tick);
+        /* -------------------- 5.检查定时器启动是否成功,如果启动失败,删除定时器并置为 nullptr -------------------- */
+        if (ret != osOK)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "[PullUpDown_StartTimer] osTimerDelete failed, ret = %lx!!", ret);
+            if (g_timer != nullptr)
+            {
+                ret = osTimerDelete(g_timer);
+            }
+            g_timer = nullptr;
+            return;
+        }
+        return;
+    }
 
-bool MainPresenterSample::IsFromSetCardView(void) const
-{
-    return MainModel::GetInstance().IsFromSetCardView();
-}
+    /*
+     * @brief 停止定时器
+     */
+    void MainPresenterSample::PullUpDown_StopTimer(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::PullUpDown_StopTimer");
+        // 检查定时器是否存在
+        if (g_timer != nullptr)
+        {
+            osTimerStop(g_timer);
+            // 删除定时器并置为 nullptr
+            osStatus_t ret = osTimerDelete(g_timer);
+            if (ret != osOK)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "osTimerDelete failed, ret = %lx!!", ret);
+            }
+            g_timer = nullptr;
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "g_timer stop success");
+        }
+    }
 
-void MainPresenterSample::SetFromSetCardView(bool isFrom)
-{
-    MainModel::GetInstance().SetFromSetCardView(isFrom);
-}
+    bool MainPresenterSample::IsFromSetCardView(void) const
+    {
+        return MainModel::GetInstance().IsFromSetCardView();
+    }
 
-uint8_t MainPresenterSample::GetFromCardId(void)
-{
-    return MainModel::GetInstance().GetFromCardId();
-}
+    void MainPresenterSample::SetFromSetCardView(bool isFrom)
+    {
+        MainModel::GetInstance().SetFromSetCardView(isFrom);
+    }
+
+    uint8_t MainPresenterSample::GetFromCardId(void)
+    {
+        return MainModel::GetInstance().GetFromCardId();
+    }
 
 }
index fa88864..ffdfe04 100644 (file)
 #include "wearable_log.h"
 #include "MainViewSample.h"
 #include "graphic_service.h"
+// #include "dialupdate/include/DialUpdateModel.h"
+#include "uicomponents/UIComponents.h"
+#include "ui_service.h"
+// extern DialInfo_1 dialInfo_1[MAX_DIALNUM_1];
 
-namespace OHOS {
-static MainViewSample *g_pMainView = nullptr;
-static constexpr uint16_t MESLABLE_X_TMP = 177;
-static constexpr uint16_t MESLABLE_Y_TMP = 212;
-static constexpr uint16_t MESLABLE_WIDTH_TMP = 100;
-static constexpr uint16_t MESLABLE_HEIGHT_TMP = 30;
-static constexpr uint8_t FONT_SIZE_TMP = 24;
-static constexpr uint8_t PULL_MIDDLE_VIEW_OPA = 0;
-
-struct MainViewMapper {
-    CardId id;
-    UICardPage *(MainViewSample::*func)(void);
-};
-
-static const MainViewMapper CardMapper[] = {
-    {WATCH_FACE, &MainViewSample::InitWatchFacePage},
-    {HEART_RATE, &MainViewSample::InitHeartRatePage},
-    {COMPASS, &MainViewSample::InitCompassPage},
-    // {ACTIVITY, &MainViewSample::InitActivityPage},
-    {MUSIC_PLAYER, &MainViewSample::InitMusicPlayerPage},
-};
-
-MainViewSample::MainViewSample()
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::MainViewSample");
-    g_pMainView = this;
-}
+extern "C" uint8_t uapi_dev_runtime_get_lock_status(void);
 
-MainViewSample::~MainViewSample()
+namespace OHOS
 {
-    dropDownView->ClearBackgroundBlur();
-    messageView->ClearBackgroundBlur();
-
-    for (int32_t i = 0; i < MAX_CARD; i++) {
-        recordCard[i] = nullptr;
-        pageStatus[i] = false;
-    }
-
-    if (mainSwipeGroup != nullptr) {
-        delete mainSwipeGroup;
-        mainSwipeGroup = nullptr;
-    }
-
-    if (mainClockView != nullptr) {
-        delete mainClockView;
-        mainClockView = nullptr;
-    }
 
-    if (activityWeekView != nullptr) {
-        delete activityWeekView;
-        activityWeekView = nullptr;
+    static MainViewSample *g_pMainView = nullptr;
+    static constexpr uint16_t MESLABLE_X_TMP = 177;
+    static constexpr uint16_t MESLABLE_Y_TMP = 212;
+    static constexpr uint16_t MESLABLE_WIDTH_TMP = 100;
+    static constexpr uint16_t MESLABLE_HEIGHT_TMP = 30;
+    static constexpr uint8_t FONT_SIZE_TMP = 24;
+    static constexpr uint8_t PULL_MIDDLE_VIEW_OPA = 0;
+
+#define DIALSTATE 1
+
+    struct MainViewMapper
+    {
+        CardId id;
+        UICardPage *(MainViewSample::*func)(void);
+    };
+    // 严格按照Id对应
+    static const MainViewMapper CardMapper[] = {
+        {WATCH_FACE, &MainViewSample::InitWatchFacePage},
+        // {HEART_RATE, &MainViewSample::InitHeartRatePage},
+        {TRAINING, &MainViewSample::InitTrainingPage},
+        {COMPASS, &MainViewSample::InitCompassPage},
+        // {SLEEP, &MainViewSample::InitSleepPage},
+        // {BLOODOXGEN, &MainViewSample::InitBloodOxygenPage},
+        {GOAL, &MainViewSample::InitGoalPage},
+        {WEATHER, &MainViewSample::InitWeatherPage},
+        {MUSIC_PLAYER, &MainViewSample::InitMusicPlayerPage},
+        {SETCARD, &MainViewSample::InitSetMainPage},
+
+#if 0
+        {ACTIVITY, &MainViewSample::InitActivityPage},
+#endif
+    };
+    MainViewSample::MainViewSample()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::MainViewSample");
+        g_pMainView = this;
     }
 
-    if (playersView != nullptr) {
-        delete playersView;
-        playersView = nullptr;
-    }
-
-    if (heartRateView != nullptr) {
-        delete heartRateView;
-        heartRateView = nullptr;
-    }
+    MainViewSample::~MainViewSample()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainViewSample::~MainViewSample");
+        mainSwipeGroup->RemoveAll();
 
-    if (dropDownView != nullptr) {
-        delete dropDownView;
-        dropDownView = nullptr;
-    }
+        for (int32_t i = 0; i < MAX_CARD; i++)
+        {
+            recordCard[i] = nullptr;
+            pageStatus[i] = false;
+        }
+        if (activityWeekView != nullptr)
+        {
+            activityWeekView->RemoveAll();
+            delete activityWeekView;
+            activityWeekView = nullptr;
+        }
 
-    if (messageView != nullptr) {
-        messageView->RemoveAll();
-        delete messageView;
-        messageView = nullptr;
-    }
+        if (playersView != nullptr)
+        {
+            playersView->RemoveAll();
+            delete playersView;
+            playersView = nullptr;
+        }
 
-    if (messageLable != nullptr) {
-        delete messageLable;
-        messageLable = nullptr;
-    }
+        // if (heartRateView != nullptr)
+        // {
+        //     heartRateView->RemoveAll();
+        //     delete heartRateView;
+        //     heartRateView = nullptr;
+        // }
+        if (dropDownView != nullptr)
+        {
+            dropDownView->ClearBackgroundBlur();
+            delete dropDownView;
+            dropDownView = nullptr;
+        }
 
-    if (compassControlView != nullptr) {
-        delete compassControlView;
-        compassControlView = nullptr;
+        if (activityWeekView != nullptr)
+        {
+            activityWeekView->RemoveAll();
+            delete activityWeekView;
+            activityWeekView = nullptr;
+        }
+        // if (messageView != nullptr)
+        // {
+        //     messageView->ClearBackgroundBlur();
+        //     messageView->RemoveAll();
+        //     delete messageView;
+        //     messageView = nullptr;
+        // }
+        // if (MessageLable != nullptr)
+        // {
+        //     delete MessageLable;
+        //     MessageLable = nullptr;
+        // }
+        // if (dialstateicon != nullptr)
+        // {
+        //     mainClockView->Remove(dialstateicon);
+        //     delete dialstateicon;
+        //     dialstateicon = nullptr;
+        // }
+        // if (messageicon != nullptr)
+        // {
+        //     mainClockView->Remove(messageicon);
+        //     delete messageicon;
+        //     messageicon = nullptr;
+        // }
+        if (compassControlView != nullptr)
+        {
+            compassControlView->RemoveAll();
+            delete compassControlView;
+            compassControlView = nullptr;
+        }
+        if (mainClockView != nullptr)
+        {
+            mainClockView->RemoveAll();
+            delete mainClockView;
+            mainClockView = nullptr;
+        }
+        // if (bloodView != nullptr)
+        // {
+        //     bloodView->RemoveAll();
+        //     delete bloodView;
+        //     bloodView = nullptr;
+        // }
+        if (setmainView != nullptr)
+        {
+            setmainView->RemoveAll();
+            delete setmainView;
+            setmainView = nullptr;
+        }
+        // if (sleepView != nullptr)
+        // {
+        //     sleepView->RemoveAll();
+        //     delete sleepView;
+        //     sleepView = nullptr;
+        // }
+        // if (traingView != nullptr)
+        // {
+        //     traingView->RemoveAll();
+        //     delete traingView;
+        //     traingView = nullptr;
+        // }
+        if (weatherControlView != nullptr)
+        {
+            delete weatherControlView;
+            weatherControlView = nullptr;
+        }
+        if (GoalControlView != nullptr)
+        {
+            GoalControlView->RemoveAll();
+            delete GoalControlView;
+            GoalControlView = nullptr;
+        }
+        // if (applistCardView != nullptr)
+        // {
+        //     delete applistCardView;
+        //     applistCardView = nullptr;
+        // }
+        if (mainSwipeGroup != nullptr)
+        {
+            delete mainSwipeGroup;
+            mainSwipeGroup = nullptr;
+        }
+        if (callback != nullptr)
+        {
+            delete callback;
+            callback = nullptr;
+        }
+        g_pMainView = nullptr;
     }
-
-    if (callback != nullptr) {
-        delete callback;
-        callback = nullptr;
+    MainViewSample *MainViewSample::GetInstance(void)
+    {
+        return g_pMainView;
     }
 
-    g_pMainView = nullptr;
-}
+    void MainViewSample::OnStart()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainViewSample::OnStart");
 
-MainViewSample *MainViewSample::GetInstance(void)
-{
-    return g_pMainView;
-}
+        if (mainSwipeGroup == nullptr) {
+            mainSwipeGroup = new UICrossView();
+            if (mainSwipeGroup == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainSwipeGroup new fail");
+                return;
+            }
+        }
 
-void MainViewSample::OnStart()
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::OnStart");
-    View<MainPresenterSample>::OnStart();
+        // UIView::OnDragListener *listener = static_cast<UIView::OnDragListener *>(MainPresenterSample::GetInstance());
+        // if (listener == nullptr)
+        // {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "AlarmSetWeekView:: new alarmDragListener fail");
+        //     return;
+        // }
+        // mainSwipeGroup->SetOnDragListener(listener);
+
+        if (callback == nullptr)
+        {
+            callback = new ZoomEffect();
+            if (callback == nullptr)
+            {
+                delete mainSwipeGroup;
+                mainSwipeGroup = nullptr;
+                GRAPHIC_LOGE("SwipeCallback new fail\n");
+                return;
+            }
+        }
+        callback->isNeedClip_ = true;
+               callback->SetContainer(mainSwipeGroup);
+        HorizontalViewInit();
+        HorViewLoad();
+        VerticalViewInit(); // 初始化上下拉界面
+        VertViewLoad();     // 添加上下拉界面
+        mainSwipeGroup->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+        mainSwipeGroup->SetAnimatorTime(50);
+        mainSwipeGroup->SetLoopState(false);             // 主界面循环
+        mainSwipeGroup->EnableScreenCap(true);           // 主界面截屏滑动
+        mainSwipeGroup->RegisterSwipeCallback(callback); // 主界面动画回调
+        // /*密码锁上锁*/
+        // if (uapi_dev_runtime_get_lock_status())
+        // {
+        //     // 回到表盘
+        //     SwitchToClockPage();
+        //     // printf("密码锁\r\n");
+        //     mainClockView->SetIntercept(true);
+        //     mainSwipeGroup->SetDraggable(false);
+        //     mainSwipeGroup->SetOnSwipeListener(nullptr);
+        //     mainSwipeGroup->SetOnClickListener(presenter_);
+        // }
+        // else
+        // {
+            // 判断是否为从主界面前往的其他Slice
+            if (presenter_->IsFromSetCardView())
+            {
+                // 回退标志位
+                presenter_->SetFromSetCardView(false);
+                // 设置Id为主界面显示索引
+                SwitchToCard(presenter_->GetFromCardId());
+            }
+            else
+            {
+                // 回到表盘
+                SwitchToClockPage();
+            }
+        // }
 
-    mainSwipeGroup = new UICrossView();
-    if (mainSwipeGroup == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "mainSwipeGroup new fail");
-        return;
+        AddViewToRootContainer(mainSwipeGroup);
     }
 
-    if (callback == nullptr) {
-        callback = new ZoomEffect();
-        if (callback == nullptr) {
-            delete mainSwipeGroup;
-            mainSwipeGroup = nullptr;
-            GRAPHIC_LOGE("SwipeCallback new fail\n");
-            return;
+    void MainViewSample::UpdateStateShow() {
+        DialSetting &setting = presenter_->GetDialSetting();
+        //离线表盘
+        if (setting.dialFlag) {
+          if (mainClockView != nullptr) {
+                // dynamic_cast<DialViewGroup *>(mainClockView)->UpdateStateShow();
+            }
+        }
+        //在线表盘
+        else {
+          if (mainClockView != nullptr) {
+                dynamic_cast<MainClockView *>(mainClockView)->UpdateStateShow();
+            }
+          
         }
     }
-    callback->SetContainer(mainSwipeGroup);
-
-    HorizontalViewInit();
-    HorViewLoad();
-    VerticalViewInit();
-    VertViewLoad();
-    mainSwipeGroup->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
-    mainSwipeGroup->SetAnimatorTime(50); // 50: animator drag time(ms);
-    mainSwipeGroup->SetLoopState(true);
-    mainSwipeGroup->EnableScreenCap(true);
-    mainSwipeGroup->RegisterSwipeCallback(callback);
-    if (presenter_->IsFromSetCardView()) {
-        presenter_->SetFromSetCardView(false);
-        SwitchToCard(presenter_->GetFromCardId(), false);
-    } else {
-        SwitchToClockPage(false);
-    }
-    AddViewToRootContainer(mainSwipeGroup);
-}
-
-bool MainViewSample::HorizontalViewInit(void)
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::HorizontalViewInit");
-    presenter_->InitDialSettings();
-    presenter_->InitCardSettings();
-    uint8_t cardSettingNum = presenter_->GetCardSettingCount();
-    CardId *cardSettings = presenter_->GetCardSettings();
-    uint8_t cardMapNumber = sizeof(CardMapper) / sizeof(CardMapper[0]);
-    for (int16_t i = 0; i < cardSettingNum; i++) {
-        for (uint8_t j = 0; j < cardMapNumber; j++) {
-            if (cardSettings[i] == CardMapper[j].id) {
-                recordCard[j] = (this->*(CardMapper[j].func))();
-                if (recordCard[j] == nullptr) {
-                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
-                                  "MainViewSample:: recordCard %d error", j);
-                    return false;
+    
+    bool MainViewSample::HorizontalViewInit(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::HorizontalViewInit");
+        /*读取kvstore里面的配置*/
+        presenter_->InitDialSettings();
+        presenter_->InitCardSettings();
+        uint8_t cardSettingNum = presenter_->GetCardSettingCount();
+        CardId *cardSettings = presenter_->GetCardSettings();
+        uint8_t cardMapNumber = sizeof(CardMapper) / sizeof(CardMapper[0]);
+        for (int16_t i = 0; i < cardSettingNum; i++)
+        {
+            for (uint8_t j = 0; j < cardMapNumber; j++)
+            {
+                if (cardSettings[i] == CardMapper[j].id)
+                {
+                    recordCard[j] = (this->*(CardMapper[j].func))();
+                    if (recordCard[j] == nullptr)
+                    {
+                        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                                      "MainViewSample:: recordCard %d error", j);
+                        return false;
+                    }
+                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
+                                  "MainViewSample:: recordCard[%d]:%p", j, recordCard[j]);
+                    break;
                 }
-                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,
-                              "MainViewSample:: recordCard[%d]:%p", j, recordCard[j]);
-                break;
             }
         }
+        
+        mainSwipeGroup->SetOnSwipeListener(presenter_);
+        mainSwipeGroup->SetOnLongPressListener(presenter_);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitPage over");
+        return true;
     }
-    mainSwipeGroup->SetOnSwipeListener(presenter_);
-    mainSwipeGroup->SetOnLongPressListener(presenter_);
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitPage over");
-    return true;
-}
 
-void MainViewSample::HorViewLoad(void)
-{
-    uint8_t cardSettingNum = presenter_->GetCardSettingCount();
-    CardId *cardSettings = presenter_->GetCardSettings();
-    for (int16_t i = 0; i < cardSettingNum; i++) {
-        CardId cardId = cardSettings[i];
-        if (recordCard[cardId] != nullptr) {
-            mainSwipeGroup->HorAdd(recordCard[cardId]);
-            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample:: HorViewLoad cardid = %d ViewIndex = %d",
-                          cardId, recordCard[cardId]->GetViewIndex());
+    void MainViewSample::HorViewLoad(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::HorViewLoad");
+        uint8_t cardSettingNum = presenter_->GetCardSettingCount();
+        CardId *cardSettings = presenter_->GetCardSettings();
+        for (int16_t i = 0; i < cardSettingNum; i++)
+        {
+            CardId cardId = cardSettings[i];
+            if (recordCard[cardId] != nullptr)
+            {
+                mainSwipeGroup->HorAdd(recordCard[cardId]);
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample:: HorViewLoad cardid = %d ViewIndex = %d",
+                              cardId, recordCard[cardId]->GetViewIndex());
+            }
         }
     }
-}
 
-void MainViewSample::VerticalViewInit(void)
-{
-    dropDownView = new PullUpDownView();
-    if (dropDownView == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropDownView new fail");
-        return;
+    void MainViewSample::VerticalViewInit(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::VerticalViewInit");
+#ifdef FD230
+        if (dropDownView == nullptr) {
+            dropDownView = new PullUpDownView();
+            if (dropDownView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropDownView new fail");
+                return;
+            }
+          }
+        dropDownView->PreLoad();
+        dropDownView->SetViewId("dropDownView");
+        dropDownView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+        dropDownView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
+        /* -------------------------------------------------------------------------- */
+        // if (messageView == nullptr) {
+        //     messageView = new MessageControlView();
+        //     if (messageView == nullptr)
+        //     {
+        //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageView new fail");
+        //         return;
+        //     }
+        // }
+
+        // messageView->SetViewId("messageView");
+        // messageView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+        // messageView->PreLoad();
+        // messageView->SetDraggable(false);
+        // // messageView->SetIntercept(true);
+        // messageView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
+#endif
     }
-    dropDownView->PreLoad();
-    dropDownView->SetViewId("dropDownView");
-    dropDownView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
-    dropDownView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
-
-    messageView = new UICardPage();
-    if (messageView == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageView new fail");
-        return;
+
+    PullUpDownView *MainViewSample::GetPullUpView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::GetPullUpView");
+        return dropDownView;
     }
-    messageView->SetPosition(0, 0);
-    messageView->SetWidth(Screen::GetInstance().GetWidth());
-    messageView->SetHeight(Screen::GetInstance().GetHeight());
-    messageView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
-    messageView->SetViewId("messageView");
-    messageView->SetTouchable(true);
-    messageView->SetIntercept(true);
-    messageLable = new UILabel();
-    if (messageLable == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "messageLable new fail");
-        return;
+
+    void MainViewSample::VertViewLoad(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::VertViewLoad");
+        mainSwipeGroup->VerAdd(dropDownView, UICrossView::VPage::UP_PAGE);
+        // mainSwipeGroup->VerAdd(messageView, UICrossView::VPage::DOWN_PAGE);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::PullViewLoad::Pull View Load complete");
     }
-    messageLable->SetPosition(MESLABLE_X_TMP, MESLABLE_Y_TMP, MESLABLE_WIDTH_TMP, MESLABLE_HEIGHT_TMP);
-    messageLable->SetText("无消息");
-    messageLable->SetAlign(TEXT_ALIGNMENT_CENTER);
-    messageLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_SIZE_TMP);
-    messageLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
-    messageView->Add(messageLable);
-}
+    
+    UICardPage *MainViewSample::InitWatchOffDial(DialSetting &setting)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitWathOffDial");
+        DialViewGroup *dial = new DialViewGroup();
+        dial->SetDial(setting.dialFullName);
+        // dial->SetDial(DEFAULT_DIAL_PATH);
+        return dial;
+    }
+    /*初始化自定义表盘*/
+    UICardPage *MainViewSample::InitWatchDial(DialSetting &setting)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitWathDial");
+
+        MainClockView *clock = new MainClockView();
+        clock->SetCustomId(setting.dialId);
+        return clock;
+    }
+    UICardPage *MainViewSample::InitWatchFacePage(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitWatchFacePage");
+        DialSetting &setting = presenter_->GetDialSetting();
+        if (setting.dialFlag)
+        {
+            mainClockView = InitWatchOffDial(setting);
+        }
+        else
+        {
+            mainClockView = InitWatchDial(setting);
+        }
+        if (mainClockView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainClockView new fail");
+            return nullptr;
+        }
 
-void MainViewSample::VertViewLoad(void)
-{
-    mainSwipeGroup->VerAdd(dropDownView, UICrossView::VPage::UP_PAGE);
-    mainSwipeGroup->VerAdd(messageView, UICrossView::VPage::DOWN_PAGE);
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::PullViewLoad::Pull View Load complete");
-}
+        mainClockView->SetViewId("mainClockView");
+        return mainClockView;
+    }
+    // 指南针卡片
+    UICardPage *MainViewSample::InitCompassPage(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitCompassPage");
+        compassControlView = new CompassControlView();
+        if (compassControlView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "compassControlView new fail");
+            return nullptr;
+        }
+        return compassControlView;
+    }
+    // 音乐卡片
+    UICardPage *MainViewSample::InitMusicPlayerPage(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitMusicPlayerPage");
+        playersView = new PlayersView();
+        if (playersView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView new fail");
+            return nullptr;
+        }
+        return playersView;
+    }
 
-void MainViewSample::OnStop()
-{
-    messageView->RemoveAll();
-    return;
-}
+    // 主界面血氧卡片
+    UICardPage *MainViewSample::InitBloodOxygenPage(void)
+    {
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitBloodOxygenPage");
+        // bloodView = new BloodCardView();
+        // if (bloodView == nullptr)
+        // {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "BloodView new fail");
+        //     return nullptr;
+        // }
+        // return bloodView;
+        return nullptr;
+    }
 
-UICardPage *MainViewSample::InitWatchOffDial(DialSetting &setting)
-{
-    DialViewGroup *dial = new DialViewGroup();
-    dial->SetDial(setting.dialFullName);
-    return dial;
-}
+    // 主界面训练卡片
+    UICardPage *MainViewSample::InitTrainingPage(void)
+    {
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitTrainingPage");
+        // traingView = new Training_CardView();
+        // if (traingView == nullptr)
+        // {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "traingView new fail");
+        //     return nullptr;
+        // }
+        // return traingView;
+        return nullptr;
+    }
 
-UICardPage *MainViewSample::InitWatchDial(DialSetting &setting)
-{
-    switch (setting.dialId) {
-        case DIAL_CLOCK:
-            return new MainClockView();
-        default:
+    // 主界面天气卡片
+    UICardPage *MainViewSample::InitWeatherPage(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitWeatherPage");
+        weatherControlView = new WeatherControlView();
+        if (weatherControlView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "weatherControlView new fail");
             return nullptr;
+        }
+        return weatherControlView;
     }
-}
 
-UICardPage *MainViewSample::InitWatchFacePage(void)
-{
-    DialSetting &setting = presenter_->GetDialSetting();
-    if (setting.dialFlag) {
-        mainClockView = InitWatchOffDial(setting);
-    } else {
-        mainClockView = InitWatchDial(setting);
+    // 主界面每日目标卡片
+    UICardPage *MainViewSample::InitGoalPage(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitGoalPage");
+        GoalControlView = new goalControlView();
+        if (GoalControlView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "GoalControlView new fail");
+            return nullptr;
+        }
+        return GoalControlView;
     }
 
-    if (mainClockView == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainClockView new fail");
-        return nullptr;
+    // 主界面心率卡片
+    UICardPage *MainViewSample::InitHeartRatePage(void){
+    // {
+    //     WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitHeartRatePage");
+    //     heartRateView = new HeartRateCardView();
+    //     if (heartRateView == nullptr)
+    //     {
+    //         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heartRateView new fail");
+    //         return nullptr;
+    //     }
+    //     return heartRateView;
+           return nullptr;
     }
-    return mainClockView;
-}
 
-UICardPage *MainViewSample::InitHeartRatePage(void)
-{
-    heartRateView = new HeartRateView();
-    if (heartRateView == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "heartRateView new fail");
-        return nullptr;
+    // 主界面运动卡片
+    UICardPage *MainViewSample::InitActivityPage(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitActivityPage");
+        activityWeekView = new ActivityWeekView();
+        if (activityWeekView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "activityWeekView new fail");
+            return nullptr;
+        }
+        return activityWeekView;
     }
-    return heartRateView;
-}
 
-UICardPage *MainViewSample::InitActivityPage(void)
-{
-    activityWeekView = new ActivityWeekView();
-    if (activityWeekView == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "activityWeekView new fail");
-        return nullptr;
+    /*主界面设置卡片*/
+    UICardPage *MainViewSample::InitSetMainPage(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitSetMainPage");
+        setmainView = new SetMainView();
+        if (setmainView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "setmainView new fail");
+            return nullptr;
+        }
+        return setmainView;
     }
-    return activityWeekView;
-}
 
-UICardPage *MainViewSample::InitCompassPage(void)
-{
-    compassControlView = new CompassControlView();
-    if (compassControlView == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "compassControlView new fail");
+    /*主界面睡眠卡片*/
+    UICardPage *MainViewSample::InitSleepPage(void)
+    {
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::InitSetMainPage");
+        // sleepView = new SleepCardView();
+        // if (sleepView == nullptr)
+        // {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "sleepView new fail");
+        //     return nullptr;
+        // }
+        // return sleepView;
         return nullptr;
     }
-    return compassControlView;
-}
 
-UICardPage *MainViewSample::InitMusicPlayerPage(void)
-{
-    playersView = new PlayersView();
-    if (playersView == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "playersView new fail");
-        return nullptr;
+    void MainViewSample::SetPage(int16_t page, bool loadAdjacent)
+    {
+        if (mainSwipeGroup != nullptr) {
+            mainSwipeGroup->SetHorCurrentPage(page, loadAdjacent);
+        }
+    
+        if (presenter_ != nullptr) {
+            CardId *cardSettings = presenter_->GetCardSettings();
+            /* page 与CardId 没有对应关系,需要一次转换 */
+            presenter_->SetTaskPeroid(cardSettings[page]);
+        }
     }
-    return playersView;
-}
 
-void MainViewSample::SetPage(int16_t page, bool loadAdjacent)
-{
-    if (mainSwipeGroup != nullptr) {
-        mainSwipeGroup->SetHorCurrentPage(page, loadAdjacent);
+    bool MainViewSample::IsMainClockPage(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::IsMainClockPage");
+        if (mainSwipeGroup->GetCurrentPageId(0) == mainClockView->GetViewIndex() &&
+            mainSwipeGroup->GetCurrentPageId(1) == 1)
+        { // 0: horizontal; 1: vertical
+            return true;
+        }
+        else
+        {
+            return false;
+        }
     }
-
-    if (presenter_ != nullptr) {
+    int MainViewSample::IsPullUpViewPage(void) {
+        //主界面->下拉界面
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "MainViewSample::IsPullUpViewPage");
+        if (mainSwipeGroup->GetCurrentPageId(0) == mainClockView->GetViewIndex() &&
+            mainSwipeGroup->GetCurrentPageId(1) == 0)
+        {
+            return PULLUP;
+        }
+        //主界面->上拉界面
+        else if(mainSwipeGroup->GetCurrentPageId(0) == mainClockView->GetViewIndex() &&
+            mainSwipeGroup->GetCurrentPageId(1) == 2)
+        {
+            return DROPDOWN;
+        }
+        //其他狀態
+        return UNKOWNPAG;
+    }
+    CardId MainViewSample::GetHorCurrentCard() const
+    {
         CardId *cardSettings = presenter_->GetCardSettings();
-        /* page 与CardId 没有对应关系,需要一次转换 */
-        presenter_->SetTaskPeroid(cardSettings[page]);
+        int pageId = mainSwipeGroup->GetCurrentPageId(UISwipeView::HORIZONTAL); // 0: horizontal; 1: vertical
+        /* pageId 与CardId 没有对应关系,需要一次转换 */
+        return cardSettings[pageId];
     }
-}
 
-bool MainViewSample::IsMainClockPage(void)
-{
-    if (mainSwipeGroup->GetCurrentPageId(0) == mainClockView->GetViewIndex() &&
-        mainSwipeGroup->GetCurrentPageId(1) == 1) { // 0: horizontal; 1: vertical
-        return true;
-    } else {
-        return false;
+    void MainViewSample::SwitchToCard(uint8_t cardId)
+    {
+        if ((cardId < MAX_CARD) && (recordCard[cardId] != nullptr))
+        {
+            SetPage(recordCard[cardId]->GetViewIndex());
+        }
+        else
+        {
+            SwitchToClockPage();
+        }
     }
-}
-
-CardId MainViewSample::GetHorCurrentCard() const
-{
-    CardId *cardSettings = presenter_->GetCardSettings();
-    int pageId = mainSwipeGroup->GetCurrentPageId(UISwipeView::HORIZONTAL); // 0: horizontal; 1: vertical
-    /* pageId 与CardId 没有对应关系,需要一次转换 */
-    return cardSettings[pageId];
-}
 
-void MainViewSample::SwitchToCard(uint8_t cardId, bool loadAdjacent)
-{
-    if ((cardId < MAX_CARD) && (recordCard[cardId] != nullptr)) {
-        SetPage(recordCard[cardId]->GetViewIndex(), loadAdjacent);
-    } else {
-        SwitchToClockPage(loadAdjacent);
+    void MainViewSample::HandOnKeyEventSwitchMainPullDownView(void)
+    {
+        if(dropDownView)
+        {
+            dropDownView->HandOnKeyEventSwitchMainPullDownView();
+        }
     }
 }
-
-}
index a55c3ea..c6606f1 100644 (file)
@@ -894,7 +894,8 @@ namespace OHOS
             return;
         }
 
-        bool isCharging = get_charge_stat(); // 获取充电状态
+        // bool isCharging = get_charge_stat(); // 获取充电状态
+           bool isCharging = true; 
 
         if (isCharging)
         {