下拉界面和连接状态界面合并提交
authorluozheng <1732036298@qq.com>
Thu, 27 Mar 2025 06:33:19 +0000 (14:33 +0800)
committerluozheng <1732036298@qq.com>
Thu, 27 Mar 2025 06:33:19 +0000 (14:33 +0800)
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/ConnectedStatusView.h [new file with mode: 0644]
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/include/dropdown/DropDownCardPage1.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage2.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/ConnectedStatusView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/PullUpDownView.cpp
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage1.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage2.cpp [new file with mode: 0644]

diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/ConnectedStatusView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/ConnectedStatusView.h
new file mode 100644 (file)
index 0000000..cb0b68c
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-04-26 17:58:00
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-06-17 16:33:42
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/ConnectedStatusView.h
+ */
+#ifndef CONNECTED_STATUS_VIEW_H
+#define CONNECTED_STATUS_VIEW_H
+
+#include "components/ui_view_group.h"
+#include "components/ui_image_view.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+namespace OHOS
+{
+    typedef enum : uint8_t
+    {
+        PHONECONNECTEDSTATUS_ID = 0,
+        EARPHONECONNECTESTATUS_ID,
+        BLUETOOTHCONNECTEDSTATUS,
+        MAX_CONNECTEDSTATUS_ID,
+    } CONNECTEDSTATUS_ID;
+
+    class ConnectedStatusView
+    {
+
+    public:
+        ConnectedStatusView();
+        ~ConnectedStatusView();
+        static ConnectedStatusView *GetInstance(void);
+        UIViewGroup *ConnectedStatusViewInit(void);
+        UIButton *GetCloseButton();
+        void UpdatePhoneConnectedStatus(int status);
+        void UpdateEarPhoneConnectedStatus(int status);
+        void UpdateBlueToothConnectedStatus(int status);
+
+        struct LabelConfig
+        {
+            int x;
+            int y;
+            int width;
+            int height;
+            int fontSize;
+            int lineHeight;
+            // const char *text;
+            uint16_t textId;
+        };
+
+        typedef struct
+        {
+            int x;
+            int y;
+            int width;
+            int height;
+            uint32_t connectedImage;
+            uint32_t disconnectedImage;
+            bool isConnected;
+        } StatusImageParams;
+
+        typedef struct
+        {
+            UIImageView *statusImage;
+            UILabelExt *statusLabel;
+            int status;
+            uint32_t connectedImage;
+            uint32_t disconnectedImage;
+            uint16_t connectedText;
+            uint16_t disconnectedText;
+            OHOS::ColorType connectedColor;
+            OHOS::ColorType disconnectedColor;
+        } ConnectionStatusParams;
+
+    private:
+        UILabelExt *InitLabel(const LabelConfig &config);
+        UIImageView *InitStatusImage(const StatusImageParams& params);
+        void updateConnectionStatus(const ConnectionStatusParams &params);
+        bool initGroupView(void);
+        bool initTitle(void);
+        bool initBackground();
+        bool initConnectedStatus(void);
+        bool initCloseButton(void);
+        void ClearAll(void);
+        UIViewGroup *group{nullptr};
+        UILabelExt *Title{nullptr};
+        UIImageView *background[MAX_CONNECTEDSTATUS_ID]{nullptr};
+
+        UIImageView *PhoneConnectedStatusImage{nullptr};     // 显示手机连接状态
+        UIImageView *EarPhoneConnectedStatusImage{nullptr};  // 显示耳机连接状态
+        UIImageView *BluetoothConnectedStatusImage{nullptr}; // 显示蓝牙连接状态
+        UILabelExt *ConnectedStatusLabel[MAX_CONNECTEDSTATUS_ID]{nullptr};
+
+        UILabelExt *PhoneAndEarAndBluetooth[MAX_CONNECTEDSTATUS_ID]{nullptr};
+
+        UIButton *CloseButton{nullptr}; // 关闭按钮
+        UILabel *CloseLabel{nullptr};   // 关闭标签
+    };
+
+}
+
+#endif
\ No newline at end of file
index 3b33904..c482d03 100644 (file)
@@ -25,7 +25,7 @@
 #include "MainPresenterSample.h"
 #include "HeartRateView.h"
 #include "components/ui_card_page.h"
-#include "PullUpDownView.h"
+#include "main/include/PullUpDownView.h"
 #include "components/ui_cross_view.h"
 #include "SetCardModel.h"
 
index e511ecc..9f330a3 100644 (file)
-/*\r
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.\r
- * Description: WeekStep\r
- * Author:\r
- * Create: 2021-09-11\r
- */\r
-\r
-#ifndef PULL_UP_DOWN_VIEW_H\r
-#define PULL_UP_DOWN_VIEW_H\r
-\r
-#include "graphic_types.h"\r
-#include "wearable_log.h"\r
-#include "components/ui_card_page.h"\r
-#include "components/ui_view_group.h"\r
-#include "components/ui_image_view.h"\r
-#include "components/ui_label.h"\r
-#include "components/ui_label_button.h"\r
-\r
-namespace OHOS {\r
-class PullUpDownView : public UICardPage {\r
-public:\r
-    PullUpDownView();\r
-    ~PullUpDownView() override;\r
-    static PullUpDownView *GetInstance(void);\r
-    bool InitView();\r
-    void PreLoad(void) override;\r
-    void UpdateBlueToothStatus(int status);\r
-private:\r
-    UIImageView *dnotDisturb{nullptr};\r
-    UIImageView *briScreen{nullptr};\r
-    UIImageView *finPhone{nullptr};\r
-    UIImageView *droAlarm{nullptr};\r
-    UIImageView *droSetting{nullptr};\r
-    UILabel *dnotDisturbLable{nullptr};\r
-    UILabel *briScreenLable{nullptr};\r
-    UILabel *finPhoneLable{nullptr};\r
-    UILabel *droAlarmLable{nullptr};\r
-    UILabel *droSettingLable{nullptr};\r
-    UIImageView *bluetooth{nullptr};\r
-    UIImageView *battery{nullptr};\r
-    UILabel *batteryLable{nullptr};\r
-    UILabel *dateLable{nullptr};\r
-    bool viewiInitStatus{false};\r
-\r
-    void InitSubViewImg(void);\r
-    void InitViewImg(void);\r
-    void InitViewLable(void);\r
-    void InitViewInfo(void);\r
-\r
-    UIView::OnClickListener *clickListener{nullptr};\r
-};\r
-}\r
-#endif\r
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-04-17 15:26:49
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-10-30 18:27:12
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/PullUpDownView.h
+ */
+
+#ifndef PULL_UP_DOWN_VIEW_H
+#define PULL_UP_DOWN_VIEW_H
+
+#include "graphic_types.h"
+#include "wearable_log.h"
+#include "components/ui_card_page.h"
+#include "components/ui_view_group.h"
+#include "components/ui_image_view.h"
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_label_button.h"
+#include "components/ui_box_progress.h"
+#include "components/ui_image_animator.h"
+#include "components/ui_swipe_view.h"
+#include "battery_hal.h"
+#include "main/include/ConnectedStatusView.h"
+#include "main/include/dropdown/DropDownCardPage1.h"
+#include "main/include/dropdown/DropDownCardPage2.h"
+
+extern uint8_t battery_get_voltage(float *voltage);
+
+namespace OHOS
+{
+    static constexpr int16_t SETTING_INDEX = 0;
+    static constexpr int16_t LIGHTING_INDEX = 1;
+    static constexpr int16_t DNOTDISTURB_INDEX = 2;
+    static constexpr int16_t SAVEPOWER_INDEX = 3;
+    static constexpr int16_t FINDPHONE_INDEX = 4;
+    static constexpr int16_t MAX_INDEX = 5;
+
+    typedef enum : uint8_t
+    {
+        DROPDOWNVIEW = 0,
+        CONNECTEDSTATUSVIEW,
+        MAX_DROPDOWNVIEWID,
+    } DROPDOWNVIEWID;
+
+    class PullUpDownView : public UICardPage, public UISwipeView::OnSwipeListener
+    {
+    public:
+        PullUpDownView();
+        ~PullUpDownView() override;
+        static PullUpDownView *GetInstance(void);
+        void PreLoad(void) override;
+        void UnLoad(void) override;
+        void UpdateDnotDisturbStatus(int status);
+        bool ChangeDropDownView(int16_t thisView);        // 切换到"下拉控制中心"视图
+        bool ChangeConnectedStatusView(int16_t thisView); // 切换到"连接状态"视图
+        bool ClickFunc(int16_t interface);
+        void ChangeView(int16_t hideView, int16_t showView);
+        ConnectedStatusView *GetConnectedStatusView(void);
+        void HandOnKeyEventSwitchMainPullDownView(void);
+
+    private:
+        void OnSwipe(UISwipeView &view) override;
+        bool PullUpDownViewInit();
+        void ClearAll();
+        UIViewGroup *group[MAX_DROPDOWNVIEWID]{nullptr};
+        ConnectedStatusView *connectedStatusView{nullptr};
+        bool viewiInitStatus{false};
+        uint8_t curView{0};
+
+        /* ---------------------------------- 1.连接状态 ---------------------------------- */
+    public:
+        bool GetPhoneConnectedStatus(void);
+        bool GetEarPhoneConnectedStatus(void);
+        bool GetBlueToothConnectedStatus(void);
+        void UpdatePhoneStatus(int status);
+        void UpdateEarPhoneStatus(int status);
+        void UpdateBlueToothStatus(int status);
+        void SetPhoneConnectedIsVisible(bool state);
+
+    private:
+        UIImageView *DropDownConnectedStatusImageViweInit(int16_t x, int16_t y, int16_t w, int16_t h);
+        void CreateDropDownConnectionStatusImageViwe(void);
+        void ClearAll_1(void);
+        UIButton *connectedStatusBackgroundButton{nullptr}; // 放置连接状态icon的背景按钮
+        UIImageView *showPhoneConnectedStatus{nullptr};     // 显示手机连接状态
+        UIImageView *showEarPhoneConnectedStatus{nullptr};  // 显示耳机连接状态
+        UIImageView *showBluetoothConnectedStatus{nullptr}; // 显示蓝牙连接状态
+        /* --------------------------------- 2.基本数据显示-------------------------------- */
+    public:
+        UIBoxProgress *GetProgress();
+        UILabel *GetDateAndWeekLabel(void);
+        void UpdateSignalStrengthStatusAndBatteryPosition();
+        void UpdateBatteryProcess();
+
+    private:
+        void InitBaseData();
+        void ClearAll_2(void);
+        int GetSignalStrength(void);
+        int CalculateSignalBars(int signalStrength);
+        void UpdateSignalBarDisplay(int signalBars, bool state);
+        void updateSignalDisplay();
+        void UpdateCat1NoSignalisplay(bool state);
+        void UpdateCat14GDisplay(bool state);
+        void UpdateHDDisplay(bool state);
+        void UpdateCat1MobileDataDisplay(bool state);
+        void UpdateXPosition(void);
+        UIViewGroup *group1{nullptr};
+        UIImageView *showSignalStrength[4]{nullptr}; // 信号强度
+        UILabel *Singal_4{nullptr};                  // 4G图标
+        UIImageView *NoSignal{nullptr};              // 无信号
+        UIImageView *MobileData{nullptr};            // 移动数据
+        UIImageView *HD{nullptr};                    // HD
+        UIImageView *batteryimage{nullptr};          // 电池图片
+        UIBoxProgress *progress{nullptr};            // 电池进度条
+        UILabel *showDateAndWeekLabel{nullptr};      // 显示日期和星期
+        UIImageView *chargeBatteryicon{nullptr};     //充电图标
+        bool isChargeBatteryIconVisible{false};     // 充电图标是否可见
+        /* ---------------------------------- 3.滑动列表 ---------------------------------- */
+    public:
+        AppGroupView *DropDownCardPage1Init(void);
+        AppGroupView *DropDownCardPage2Init(void);
+
+    private:
+        AppGroupView *CreatePage(int32_t WeatherPageId);
+        void CreateDropDownswipeViewListView(void);
+        void ClearAll_3(void);
+        UISwipeView *dropDownswipeViewList{nullptr}; // 滑动列表
+        AppGroupView *recordCard[2]{nullptr};
+        DropDownCardPage1 *dropDownCardPage1{nullptr};
+        DropDownCardPage2 *dropDownCardPage2{nullptr};
+        /* ------------------------------------ 4 ----------------------------------- */
+    public:
+        void UpdateSwipviewSelect(bool value);
+    private:
+        void CreateView4();
+        void ClearAll_4(void);
+        UIImageView *swipviewSelect{nullptr};
+        UIImageView *line{nullptr};
+    };
+}
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage1.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage1.h
new file mode 100644 (file)
index 0000000..2989d3b
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-21 11:54:00
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-09-11 15:28:39
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/dropdown/DropDownCardPage1.h
+ */
+#ifndef __DROPDOWN_CARD_PAGE1_H__
+#define __DROPDOWN_CARD_PAGE1_H__
+#include "AppGroupView.h"
+#include "components/ui_toggle_button.h"
+
+namespace OHOS
+{
+    class DropDownCardPage1 : public AppGroupView,
+                              public UIView::OnClickListener
+    {
+    public:
+        struct ToggleButtonConfig
+        {
+            int16_t left;
+            int16_t top;
+            int16_t width;
+            int16_t height;
+            const char *viewId;
+            const char *selectImg;
+            const char *unselectImg;
+            bool isTouchable;
+            bool state;
+        };
+        enum toggleButtonid : uint8_t
+        {
+            toggleButton_BT = 0,      // 蓝牙开关
+            toggleButton_4G,          // 4G开关
+            toggleButton_ALIPAY,      // 支付宝
+            toggleButton_SAVEPOWER,   // 省电模式开关
+            toggleButton_SLEEP,       // 睡眠开关
+            toggleButton_DNOTDISTURB, // 勿扰开关
+            toggleButton_SETTING,     // 设置
+            toggleButton_MAX,
+        };
+
+        DropDownCardPage1();
+        ~DropDownCardPage1();
+        static DropDownCardPage1 *GetInstance(void);
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool InitPage(void);
+        bool InitView(void *caller) override;
+        void ClearAll();
+
+        UIToggleButton *GetDropDownCardPage1_ToggleButton(int index);
+        void UpdateBTState(bool state);
+        void Updat4GState(bool state);
+        void UpdateDnotdisturbState(bool state);
+        void UpdateSleepModelState(bool state);
+        void Refresh4GState();
+
+    private:
+        UIToggleButton *ToggleButtonInit(ToggleButtonConfig &toggleButtonConfig);
+        UIToggleButton *toggleButton[toggleButton_MAX]{nullptr};
+    };
+
+}
+
+#endif
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage2.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/include/dropdown/DropDownCardPage2.h
new file mode 100644 (file)
index 0000000..d67569c
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-21 11:54:00
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-21 16:42:29
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/include/dropdown/DropDownCardPage2.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+#ifndef __DROPDOWN_CARD_PAGE2_H__
+#define __DROPDOWN_CARD_PAGE2_H__
+#include "AppGroupView.h"
+#include "components/ui_toggle_button.h"
+
+namespace OHOS
+{
+    class DropDownCardPage2 : public AppGroupView,
+                              public UIView::OnClickListener
+    {
+    public:
+        struct ToggleButtonConfig
+        {
+            int16_t left;
+            int16_t top;
+            int16_t width;
+            int16_t height;
+            const char *viewId;
+            const char *selectImg;
+            const char *unselectImg;
+            bool isTouchable;
+        };
+        DropDownCardPage2();
+        ~DropDownCardPage2();
+        static DropDownCardPage2 *GetInstance(void);
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool InitPage(void);
+        bool InitView(void *caller) override;
+        void ClearAll();
+
+        UIToggleButton *GetDropDownCardPage2_ToggleButton(int index);
+
+    private:
+        UIToggleButton *ToggleButtonInit(ToggleButtonConfig &toggleButtonConfig);
+        UIToggleButton *toggleButton[2]{nullptr};
+    };
+
+}
+
+#endif
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/ConnectedStatusView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/ConnectedStatusView.cpp
new file mode 100644 (file)
index 0000000..51cf384
--- /dev/null
@@ -0,0 +1,394 @@
+#include "main/include/ConnectedStatusView.h"
+#include "main/include/PullUpDownView.h"
+#include "wearable_log.h"
+#include "SettingModel.h"
+#include <ui_resource_image.h>
+#include "screensetting/include/ScreenModels.h"
+#include "main/include/MainPresenterSample.h"
+#include "ui_resource_string.h"
+#include "UiConfig.h"
+namespace OHOS
+{
+    static OHOS::ColorType connectedColor[MAX_CONNECTEDSTATUS_ID] = {
+        Color::GetColorFromRGBA(0xff, 0x8f, 0x00, 0xff),
+        Color::GetColorFromRGBA(0x4f, 0xc3, 0x4c, 0xff),
+        Color::GetColorFromRGBA(0x01, 0x76, 0xff, 0xff),
+    };
+    static OHOS::ColorType disconnectedColor = Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff);
+
+    static ConnectedStatusView *g_pConnectedStatusView = nullptr;
+    ConnectedStatusView::ConnectedStatusView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::ConnectedStatusView");
+        g_pConnectedStatusView = this;
+    }
+
+    ConnectedStatusView::~ConnectedStatusView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::~ConnectedStatusView");
+        ClearAll();
+        g_pConnectedStatusView = nullptr;
+    }
+
+    ConnectedStatusView *ConnectedStatusView::GetInstance()
+    {
+        return g_pConnectedStatusView;
+    }
+
+    void ConnectedStatusView::ClearAll(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::ClearAll");
+        if (group != nullptr)
+        {
+            group->RemoveAll();
+
+            delete Title;
+            Title = nullptr;
+
+            for (int i = 0; i < MAX_CONNECTEDSTATUS_ID; i++)
+            {
+                delete background[i];
+                background[i] = nullptr;
+
+                delete PhoneAndEarAndBluetooth[i];
+                PhoneAndEarAndBluetooth[i] = nullptr;
+
+                delete ConnectedStatusLabel[i];
+                ConnectedStatusLabel[i] = nullptr;
+            }
+
+            delete PhoneConnectedStatusImage;
+            PhoneConnectedStatusImage = nullptr;
+
+            delete EarPhoneConnectedStatusImage;
+            EarPhoneConnectedStatusImage = nullptr;
+
+            delete BluetoothConnectedStatusImage;
+            BluetoothConnectedStatusImage = nullptr;
+
+            delete CloseButton;
+            CloseButton = nullptr;
+
+            delete CloseLabel;
+            CloseLabel = nullptr;
+
+            delete group;
+            group = nullptr;
+        }
+    }
+
+    UILabelExt *ConnectedStatusView::InitLabel(const LabelConfig &config)
+    {
+        UILabelExt *Label = new UILabelExt();
+        if (Label == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Label new fail!!");
+            return nullptr;
+        }
+
+        Label->SetPosition(config.x, config.y, config.width, config.height);
+        Label->SetStyle(STYLE_TEXT_FONT, config.fontSize);
+        Label->SetStyle(STYLE_LINE_HEIGHT, config.lineHeight);
+        Label->SetTextId(config.textId);
+        Label->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+        Label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        // Label->SetRollSpeed(40);系统默认为35
+        Label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, config.fontSize);
+
+        return Label;
+    }
+
+    UIImageView *ConnectedStatusView::InitStatusImage(const StatusImageParams &params)
+    {
+        UIImageView *statusImage = new UIImageView();
+        if (statusImage == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s new fail");
+            return nullptr;
+        }
+        statusImage->SetPosition(params.x, params.y, params.width, params.height);
+        statusImage->SetAutoEnable(false);
+        statusImage->SetResizeMode(UIImageView::CENTER);
+        statusImage->SetStyle(STYLE_BORDER_RADIUS, 30);
+
+        if (params.isConnected)
+        {
+            ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, statusImage, params.connectedImage);
+        }
+        else
+        {
+            ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, statusImage, params.disconnectedImage);
+        }
+
+        return statusImage;
+    }
+
+    void ConnectedStatusView::updateConnectionStatus(const ConnectionStatusParams &params)
+    {
+        if (params.statusImage == nullptr || params.statusLabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "UpdateConnectionStatus fail!!");
+            return;
+        }
+
+        ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, params.statusImage, (params.status ? params.connectedImage : params.disconnectedImage));
+        params.statusLabel->SetTextId(params.status ? params.connectedText : params.disconnectedText);
+        params.statusLabel->SetTextColor(params.status ? params.connectedColor : params.disconnectedColor);
+
+        params.statusImage->Invalidate();
+        params.statusLabel->Invalidate();
+    }
+
+    bool ConnectedStatusView::initGroupView(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::initGroupView");
+        group = new UIViewGroup();
+        if (group == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group new fail!!");
+            return false;
+        }
+        group->SetPosition(0, 0, 466, 466);
+        group->SetViewIndex(1);
+        group->SetTouchable(true);
+        group->SetDraggable(true);
+        group->SetIntercept(true);
+
+        return true;
+    }
+
+    bool ConnectedStatusView::initTitle(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::initTitle");
+        LabelConfig titleConfig = {93, 53, 280, 35, 30, 35, STR_CONNECTION_STATUS}; // 连接状态
+        Title = InitLabel(titleConfig);
+        if (Title == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Title new fail!!");
+            return false;
+        }
+        group->Add(Title);
+
+        return true;
+    }
+
+    bool ConnectedStatusView::initBackground(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::initBackground");
+        int background_position_x = 33;
+        for (int i = 0; i < MAX_CONNECTEDSTATUS_ID; i++)
+        {
+            background[i] = new UIImageView();
+            if (background[i] == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "background[%d] new fail!!", i);
+                return false;
+            }
+            background[i]->SetPosition(background_position_x + i * 140, 113, 120, 200);
+            background[i]->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+            background[i]->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+            background[i]->SetStyle(STYLE_BORDER_RADIUS, 40);
+            group->Add(background[i]);
+        }
+
+        return true;
+    }
+
+    bool ConnectedStatusView::initConnectedStatus(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::initConnectedStatus");
+        PullUpDownView *pullUpDownView = PullUpDownView::GetInstance();
+        if (pullUpDownView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetInstance() fail");
+            return false;
+        }
+
+        StatusImageParams params = {
+            .x = 63,
+            .y = 135,
+            .width = 60,
+            .height = 60,
+            .connectedImage = DROPDOWN_PHONECONNECTED,
+            .disconnectedImage = DROPDOWN_PHONEDISCONNECTED,
+            .isConnected = pullUpDownView->GetPhoneConnectedStatus(),
+        };
+        PhoneConnectedStatusImage = InitStatusImage(params);
+        group->Add(PhoneConnectedStatusImage);
+
+        params = {
+            .x = 203,
+            .y = 135,
+            .width = 60,
+            .height = 60,
+            .connectedImage = DROPDOWN_EARPHONESCONNECTED,
+            .disconnectedImage = DROPDOWN_EARPHONESDISCONNECTED,
+            .isConnected = pullUpDownView->GetEarPhoneConnectedStatus(),
+        };
+        EarPhoneConnectedStatusImage = InitStatusImage(params);
+        group->Add(EarPhoneConnectedStatusImage);
+
+        params = {
+            .x = 343,
+            .y = 135,
+            .width = 60,
+            .height = 60,
+            .connectedImage = DROPDOWN_BLUETOOTHCONNECTED,
+            .disconnectedImage = DROPDOWN_BLUETOOTHDISCONNECTED,
+            .isConnected = pullUpDownView->GetBlueToothConnectedStatus(),
+        };
+        BluetoothConnectedStatusImage = InitStatusImage(params);
+        group->Add(BluetoothConnectedStatusImage);
+
+        uint16_t deviceName[MAX_CONNECTEDSTATUS_ID] = {
+            STR_PHONE,     // 手机
+            STR_HEADSET,   // 耳机
+            STR_BLUETOOTH, // 蓝牙
+        }; // 初始化设备名称数组
+
+        int PhoneAndEarAndBluetooth_position_x = 53;
+        int ConnectedStatusLabel_position_x = 59;
+
+        for (int i = 0; i < MAX_CONNECTEDSTATUS_ID; i++)
+        {
+            LabelConfig titleConfig = {PhoneAndEarAndBluetooth_position_x + i * 140, 220, 80, 35, 30, 35, deviceName[i]};
+            PhoneAndEarAndBluetooth[i] = InitLabel(titleConfig);
+            group->Add(PhoneAndEarAndBluetooth[i]);
+
+            ConnectedStatusLabel[i] = new UILabelExt();
+            if (ConnectedStatusLabel[i] == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ConnectedStatusLabel[%d] new fail!!", i);
+                return false;
+            }
+            ConnectedStatusLabel[i]->SetPosition(ConnectedStatusLabel_position_x + i * 140, 258, 70, 27);
+            ConnectedStatusLabel[i]->SetStyle(STYLE_TEXT_FONT, 23);
+            ConnectedStatusLabel[i]->SetStyle(STYLE_LINE_HEIGHT, 27);
+            ConnectedStatusLabel[i]->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+            ConnectedStatusLabel[i]->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+            ConnectedStatusLabel[i]->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 23);
+            group->Add(ConnectedStatusLabel[i]);
+        }
+        UpdatePhoneConnectedStatus(pullUpDownView->GetPhoneConnectedStatus());
+        UpdateEarPhoneConnectedStatus(pullUpDownView->GetEarPhoneConnectedStatus());
+        UpdateBlueToothConnectedStatus(pullUpDownView->GetBlueToothConnectedStatus());
+
+        return true;
+    }
+
+    bool ConnectedStatusView::initCloseButton(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::initCloseButton");
+        CloseButton = new UIButton();
+        if (CloseButton == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CloseButton new fail!");
+            return false;
+        }
+        CloseButton->SetPosition(118, 340, 230, 80);
+#ifdef FD230_650
+        CloseButton->SetViewId(CONNECTEDSTATUSVIEWCLOSEBUTTON);
+#endif
+        CloseButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+        CloseButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);
+        UIView::OnClickListener *listener = static_cast<UIView::OnClickListener *>(MainPresenterSample::GetInstance());
+        if (listener == nullptr)
+        {
+            return false;
+        }
+        CloseButton->SetOnClickListener(listener);
+        LabelConfig titleConfig = {143, 363, 180, 35, 26, 35, STR_CLOSE}; // 关闭
+        CloseLabel = InitLabel(titleConfig);
+        if (CloseLabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "CloseLabel new fail!!");
+            return false;
+        }
+        group->Add(CloseButton);
+        group->Add(CloseLabel);
+
+        return true;
+    }
+
+    UIViewGroup *ConnectedStatusView::ConnectedStatusViewInit()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ConnectedStatusViewInit");
+        if (group != nullptr)
+        {
+            return group;
+        }
+
+        if (!initGroupView() || !initTitle() || !initBackground() || !initConnectedStatus() || !initCloseButton())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ConnectedStatusViewInit fail!!");
+            return nullptr;
+        }
+
+        return group;
+    }
+
+    // 更新手机连接状态
+    void ConnectedStatusView::UpdatePhoneConnectedStatus(int status)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::UpdatePhoneConnectedStatus");
+
+        ConnectionStatusParams params = {
+            .statusImage = PhoneConnectedStatusImage,
+            .statusLabel = ConnectedStatusLabel[PHONECONNECTEDSTATUS_ID],
+            .status = status,
+            .connectedImage = DROPDOWN_PHONECONNECTED,
+            .disconnectedImage = DROPDOWN_PHONEDISCONNECTED,
+            .connectedText = STR_CONNECTED,
+            .disconnectedText = STR_DISCONNECTED,
+            .connectedColor = connectedColor[PHONECONNECTEDSTATUS_ID],
+            .disconnectedColor = disconnectedColor,
+        };
+
+        updateConnectionStatus(params);
+    }
+
+    // 更新蓝牙耳机连接状态
+    void ConnectedStatusView::UpdateEarPhoneConnectedStatus(int status)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::UpdateEarPhoneConnectedStatus");
+
+        ConnectionStatusParams params = {
+            .statusImage = EarPhoneConnectedStatusImage,
+            .statusLabel = ConnectedStatusLabel[EARPHONECONNECTESTATUS_ID],
+            .status = status,
+            .connectedImage = DROPDOWN_EARPHONESCONNECTED,
+            .disconnectedImage = DROPDOWN_EARPHONESDISCONNECTED,
+            .connectedText = STR_CONNECTED,
+            .disconnectedText = STR_DISCONNECTED,
+            .connectedColor = connectedColor[EARPHONECONNECTESTATUS_ID],
+            .disconnectedColor = disconnectedColor,
+        };
+
+        updateConnectionStatus(params);
+    }
+
+    // 更新蓝牙连接状态
+    void ConnectedStatusView::UpdateBlueToothConnectedStatus(int status)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "ConnectedStatusView::UpdateBlueToothConnectedStatus");
+
+        ConnectionStatusParams params = {
+            .statusImage = BluetoothConnectedStatusImage,
+            .statusLabel = ConnectedStatusLabel[BLUETOOTHCONNECTEDSTATUS],
+            .status = status,
+            .connectedImage = DROPDOWN_BLUETOOTHCONNECTED,
+            .disconnectedImage = DROPDOWN_BLUETOOTHDISCONNECTED,
+            .connectedText = STR_CONNECTED,
+            .disconnectedText = STR_DISCONNECTED,
+            .connectedColor = connectedColor[BLUETOOTHCONNECTEDSTATUS],
+            .disconnectedColor = disconnectedColor,
+        };
+
+        updateConnectionStatus(params);
+    }
+
+    UIButton *ConnectedStatusView::GetCloseButton()
+    {
+        return CloseButton;
+    }
+}
\ No newline at end of file
index d2e8bf9..a55c3ea 100644 (file)
 /*
- * Copyright (c) CompanyNameMagicTag 2021-2021. All rights reserved.
- * Description: WeekStep
- * Author:
- * Create: 2021-09-11
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-06-26 18:14:24
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2025-02-06 09:59:53
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/PullUpDownView.cpp
  */
 
 #include "PullUpDownView.h"
 #include "wearable_log.h"
 #include "UiConfig.h"
 #include "common/screen.h"
-#include "MainPresenterSample.h"
-#include "ScreenModels.h"
-#include "SettingModel.h"
+#include "main/include/MainPresenterSample.h"
+#include "screensetting/include/ScreenModels.h"
+#include "settings/include/SettingModel.h"
 #include "ui_resource_image.h"
-
-namespace OHOS {
-
-static PullUpDownView *g_pPullUpDownView = nullptr;
-
-constexpr int16_t DISTURB_IMG_X = 117;
-constexpr int16_t DISTURB_IMG_Y = 50;
-constexpr int16_t SCREEN_IMG_X = 251;
-constexpr int16_t SCREEN_IMG_Y = 50;
-constexpr int16_t PHONE_IMG_X = 49;
-constexpr int16_t PHONE_IMG_Y = 184;
-constexpr int16_t ALARM_IMG_X = 184;
-constexpr int16_t ALARM_IMG_Y = 184;
-constexpr int16_t SETTING_IMG_X = 319;
-constexpr int16_t SETTING_IMG_Y = 184;
-
-constexpr int16_t BLUETOOTH_IMG_X = 145;
-constexpr int16_t BLUETOOTH_IMG_Y = 335;
-constexpr int16_t BATTERY_IMG_X = 195;
-constexpr int16_t BATTERY_IMG_Y = 340;
-
-constexpr int16_t DISTURB_LABEL_X = 136;
-constexpr int16_t DISTURB_LABEL_Y = 145;
-constexpr int16_t SCREEN_LABEL_X = 270;
-constexpr int16_t SCREEN_LABEL_Y = 145;
-constexpr int16_t PHONE_LABEL_X = 68;
-constexpr int16_t PHONE_LABEL_Y = 279;
-constexpr int16_t ALARM_LABEL_X = 203;
-constexpr int16_t ALARM_LABEL_Y = 279;
-constexpr int16_t SETTING_LABEL_X = 338;
-constexpr int16_t SETTING_LABEL_Y = 279;
-
-constexpr int16_t BATTERY_LABEL_X = 247;
-constexpr int16_t BATTERY_LABEL_Y = 335;
-constexpr int16_t DATE_LABEL_X = 173;
-constexpr int16_t DATE_LABEL_Y = 374;
-
-constexpr int16_t FONT_DEFAULT_SIZE = 24;
-constexpr int16_t TEXT_WIDTH = 86;
-constexpr int16_t TEXT_HEIGHT = 30;
-
-constexpr int16_t NONOTICE_LABLE_X = 141;
-constexpr int16_t NONOTICE_LABLE_Y = 212;
-
-PullUpDownView::PullUpDownView()
+#include "dnotdisturb/include/DnotDisturbModel.h"
+#include "custom_utils.h"
+#include "custom_runtime.h"
+#include "bluetooth/include/BluetoothModel.h"
+#include "phoneservice/include/PhoneService.h"
+#include "ConfigModel.h"
+namespace OHOS
 {
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::PullUpDownView");
-    g_pPullUpDownView = this;
-}
 
-PullUpDownView::~PullUpDownView()
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::~PullUpDownView");
-    RemoveAll();
-    delete dnotDisturb;
-    dnotDisturb = nullptr;
-    delete briScreen;
-    briScreen = nullptr;
-    delete finPhone;
-    finPhone = nullptr;
-    delete droAlarm;
-    droAlarm = nullptr;
-    delete droSetting;
-    droSetting = nullptr;
-    delete dnotDisturbLable;
-    dnotDisturbLable = nullptr;
-    delete briScreenLable;
-    briScreenLable = nullptr;
-    delete finPhoneLable;
-    finPhoneLable = nullptr;
-    delete droAlarmLable;
-    droAlarmLable = nullptr;
-    delete droSettingLable;
-    droSettingLable = nullptr;
-    delete bluetooth;
-    bluetooth = nullptr;
-    delete battery;
-    battery = nullptr;
-    delete batteryLable;
-    batteryLable = nullptr;
-    delete dateLable;
-    dateLable = nullptr;
-    g_pPullUpDownView = nullptr;
-}
+    /* ---------------------------------- 坐标位置 ---------------------------------- */
+    // 手机连接状态
+    static constexpr const char *DROPDOWN_PHONECONNECTED_IMAGE = "/user/res/dropdown/phone_connect.bin";
+    static constexpr const char *DROPDOWN_PHONEDISCONNECTED_IMAGE = "/user/res/dropdown/phone_disconnect.bin";
+    // 耳机连接状态
+    static constexpr const char *DROPDOWN_EARPHONESCONNECTED_IMAGE = "/user/res/dropdown/earphones_connect.bin";
+    static constexpr const char *DROPDOWN_EARPHONESDISCONNECTED_IMAGE = "/user/res/dropdown/earphones_disconnect.bin";
+    // 蓝牙连接状态
+    static constexpr const char *DROPDOWN_BLUETOOTHCONNECTED_IMAGE = "/user/res/dropdown/bluetooth_connect.bin";
+    static constexpr const char *DROPDOWN_BLUETOOTHDISCONNECTED_IMAGE = "/user/res/dropdown/bluetooth_disconnect.bin";
 
-PullUpDownView *PullUpDownView::GetInstance(void)
-{
-    return g_pPullUpDownView;
-}
+    static constexpr const char *DROPDOWN_NOSIGNAL_IMAGE = "/user/res/dropdown/DROPDOWN_NOSIGNAL.bin";
+    static constexpr const char *DROPDOWN_MOBILE_DATA_IMAGE = "/user/res/dropdown/DROPDOWN_MOBILE_DATA.bin";
+    static constexpr const char *DROPDOWN_HD_IMAGE = "/user/res/dropdown/DROPDOWN_HD.bin";
+    static constexpr const char *DROPDOWN_SELECT_1_IMAGE = "/user/res/dropdown/DROPDOWN_SELECT_1.bin";
+    static constexpr const char *DROPDOWN_SELECT_2_IMAGE = "/user/res/dropdown/DROPDOWN_SELECT_2.bin";
+    static constexpr const char *DROPDOWN_LINE_IMAGE = "/user/res/dropdown/DROPDOWN_LINE.bin";
+    static const int64_t COLOR_SIGNAL_ON = 0xffffffff;
+    static const int64_t COLOR_SIGNAL_OFF = 0xff383838;
+    /* -------------------------------------------------------------------------- */
+    static PullUpDownView *g_pPullUpDownView = nullptr;
+    PullUpDownView::PullUpDownView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::PullUpDownView");
+        g_pPullUpDownView = this;
+    }
 
-void PullUpDownView::InitSubViewImg(void)
-{
-    if (HealthModel::GetInstance() == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "health model nullptr");
-        return;
+    PullUpDownView::~PullUpDownView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::~PullUpDownView");
+        if (MainPresenterSample::GetInstance() != nullptr)
+        {
+#ifdef FD230_650
+            MainPresenterSample::GetInstance()->PullUpDown_StopTimer();
+#endif
+        }
+        ClearAll();
+        g_pPullUpDownView = nullptr;
     }
 
-    dnotDisturb = new UIImageView();
-    if (dnotDisturb == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dnotDisturb new fail");
-        return;
+    PullUpDownView *PullUpDownView::GetInstance(void)
+    {
+        return g_pPullUpDownView;
     }
-    dnotDisturb->SetPosition(DISTURB_IMG_X, DISTURB_IMG_Y);
-    // if (HealthModel::GetInstance()->GetDntDistStatus() == 0) {
-    //     ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, dnotDisturb, DROPDOWN_DROPDOWN_DN_DISTURB);
-    // } else {
-    //     ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, dnotDisturb, DROPDOWN_DROPDOWN_DN_DISTURB_B);
-    // }
-    dnotDisturb->SetViewId(DROPDOWN_CLICK_DONOTDISTURB);
-    dnotDisturb->SetTouchable(true);
-    dnotDisturb->SetOnClickListener(clickListener); // 进入勿扰模式
-
-    briScreen = new UIImageView();
-    if (briScreen == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "briScreen new fail");
+
+    void PullUpDownView::OnSwipe(UISwipeView &view)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::OnSwipe,current tab index = %d", view.GetCurrentPage());
+        if (view.GetCurrentPage() == 0)
+        {
+            UpdateSwipviewSelect(true);
+        }
+        else
+        {
+            UpdateSwipviewSelect(false);
+        }
         return;
     }
-    briScreen->SetPosition(SCREEN_IMG_X, SCREEN_IMG_Y);
-    // if (HealthModel::GetInstance()->GetBriScrStatus() == 0) {
-    //     ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, briScreen, DROPDOWN_DROPDOWN_BRI_SCREEN);
-    // } else {
-    //     ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, briScreen, DROPDOWN_DROPDOWN_BRI_SCREEN_B);
-    // }
-    briScreen->SetViewId(DROPDOWN_CLICK_BRIGHTENSCREEN);
-    briScreen->SetTouchable(true);
-    briScreen->SetOnClickListener(clickListener); // 进入亮屏模式
-}
 
-void PullUpDownView::InitViewImg(void)
-{
-    // InitSubViewImg();
-
-    // finPhone = new UIImageView();
-    // if (finPhone == nullptr) {
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "finPhone new fail");
-    //     return;
-    // }
-    // finPhone->SetPosition(PHONE_IMG_X, PHONE_IMG_Y);
-    // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, finPhone, DROPDOWN_DROPDOWN_FIND_PHONE);
-    // finPhone->SetViewId(DROPDOWN_CLICK_FINDMYPHONE); // 找手机界面 DROP_DOWN_FIND_PHONE
-    // finPhone->SetTouchable(true);
-    // finPhone->SetOnClickListener(clickListener);
-
-    // droAlarm = new UIImageView();
-    // if (droAlarm == nullptr) {
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "droAlarm new fail");
-    //     return;
-    // }
-    // droAlarm->SetPosition(ALARM_IMG_X, ALARM_IMG_Y);
-    // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, droAlarm, DROPDOWN_DROPDOWN_ALARM);
-    // droAlarm->SetViewId(DROPDOWN_CLICK_ALARM); // 进入闹钟App DROP_DOWN_ALARM
-    // droAlarm->SetTouchable(true);
-    // droAlarm->SetOnClickListener(clickListener);
-
-    // droSetting = new UIImageView();
-    // if (droSetting == nullptr) {
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "droSetting new fail");
-    //     return;
-    // }
-    // droSetting->SetPosition(SETTING_IMG_X, SETTING_IMG_Y);
-    // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, droSetting, DROPDOWN_DROPDOWN_SETTING);
-    // droSetting->SetViewId(DROPDOWN_CLICK_SETTING); // 进入设置界面 DROP_DOWN_SETTING
-    // droSetting->SetTouchable(true);
-    // droSetting->SetOnClickListener(clickListener);
-}
+    void PullUpDownView::ClearAll()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll");
+        RemoveAll();
+        if (group[DROPDOWNVIEW] != nullptr)
+        {
+            group[DROPDOWNVIEW]->RemoveAll();
+            /* -------------------------------------------------------------------------- */
+            ClearAll_1();
+            ClearAll_2();
+            ClearAll_3();
+            ClearAll_4();
+            /* -------------------------------------------------------------------------- */
+            delete group[DROPDOWNVIEW];
+            group[DROPDOWNVIEW] = nullptr;
+        }
+        if (connectedStatusView != nullptr)
+        {
+            delete connectedStatusView;
+            connectedStatusView = nullptr;
+        }
+        for (int i = DROPDOWNVIEW; i < MAX_DROPDOWNVIEWID; i++)
+        {
+            group[i] = nullptr;
+        }
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll end!!");
+    }
+    /* --------------------------------- 1.连接状态相关 --------------------------------- */
+    // 获取手机连接状态
+    bool PullUpDownView::GetPhoneConnectedStatus(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetPhoneConnectedStatus");
+        // uint8_t ret = uapi_dev_runtime_get_ble_connect_stat();
+        // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "ble phone connect stat = %d", ret);
+        // if (ret == 1)
+        //     return true;
+        // else
+        return false;
 
-void PullUpDownView::InitViewLable(void)
-{
-    // dnotDisturbLable = new UILabel();
-    // if (dnotDisturbLable == nullptr) {
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dnotDisturbLable new fail");
-    //     return;
-    // }
-    // dnotDisturbLable->SetPosition(DISTURB_LABEL_X, DISTURB_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
-    // dnotDisturbLable->SetText("勿扰");
-    // dnotDisturbLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
-    // dnotDisturbLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
-    // briScreenLable = new UILabel();
-    // if (briScreenLable == nullptr) {
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "briScreenLable new fail");
-    //     return;
-    // }
-    // briScreenLable->SetPosition(SCREEN_LABEL_X, SCREEN_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
-    // briScreenLable->SetText("亮屏");
-    // briScreenLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
-    // briScreenLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
-    // finPhoneLable = new UILabel();
-    // if (finPhoneLable == nullptr) {
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "finPhoneLable new fail");
-    //     return;
-    // }
-    // finPhoneLable->SetPosition(PHONE_LABEL_X, PHONE_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
-    // finPhoneLable->SetText("找手机");
-    // finPhoneLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
-    // finPhoneLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
-    // droAlarmLable = new UILabel();
-    // if (finPhoneLable == nullptr) {
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "finPhoneLable new fail");
-    //     return;
-    // }
-    // droAlarmLable->SetPosition(ALARM_LABEL_X, ALARM_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
-    // droAlarmLable->SetText("闹钟");
-    // droAlarmLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
-    // droAlarmLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
-    // droSettingLable = new UILabel();
-    // if (droSettingLable == nullptr) {
-    //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "droSettingLable new fail");
-    //     return;
-    // }
-    // droSettingLable->SetPosition(SETTING_LABEL_X, SETTING_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
-    // droSettingLable->SetText("设置");
-    // droSettingLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
-    // droSettingLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
-}
+#ifdef FD230_650
+        return SettingModel::GetInstance().GetPhoneConnectStatus();
+#endif
+    }
+    // 获取蓝牙耳机连接状态
+    bool PullUpDownView::GetEarPhoneConnectedStatus(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetEarPhoneConnectedStatus");
+        // uint8_t ret = uapi_dev_runtime_get_earphone_connect_stat();
+        // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "earphone connect stat = %d", ret);
+        // if (ret == 1)
+        //     return true;
+        // else
+        return false;
+#ifdef FD230_650
+        return SettingModel::GetInstance().GetEarPhoneConnectStatus();
+#endif
+    }
+    // 获取蓝牙连接状态
+    bool PullUpDownView::GetBlueToothConnectedStatus(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetBlueToothConnectedStatus");
+        // uint8_t ret = uapi_dev_runtime_get_br_connect_stat();
+        // WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "br connect stat = %d [0 no connect, 1 a2dp, 2 hfp, 3 both]", ret);
+        // if (ret != 0)
+        //     return true;
+        // else
+        return false;
 
-void PullUpDownView::InitViewInfo(void)
-{
-    bluetooth = new UIImageView(); // 蓝牙状态显示
-    if (bluetooth == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetooth new fail");
-        return;
+#ifdef FD230_650
+        return SettingModel::GetInstance().GetBlueToothConnectStatus();
+#endif
     }
-    bluetooth->SetPosition(BLUETOOTH_IMG_X, BLUETOOTH_IMG_Y);
-    if (BluetoothModel::GetInstance() == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetooth model nullptr");
-        return;
+
+    // 设置蓝牙连接状态是否显示
+    void PullUpDownView::SetPhoneConnectedIsVisible(bool state)
+    {
+        if (connectedStatusBackgroundButton && showPhoneConnectedStatus && showEarPhoneConnectedStatus && showBluetoothConnectedStatus)
+        {
+            if (!state)
+            {
+                connectedStatusBackgroundButton->SetPosition(153, 10, 160, 50);
+                int x = connectedStatusBackgroundButton->GetX();
+                int y = connectedStatusBackgroundButton->GetY();
+                showPhoneConnectedStatus->SetVisible(true);
+                showEarPhoneConnectedStatus->SetPosition(x + 68, y + 13);
+                showBluetoothConnectedStatus->SetPosition(x + 110, y + 13);
+            }
+            else
+            {
+                connectedStatusBackgroundButton->SetPosition(178, 10, 110, 50);
+                int x = connectedStatusBackgroundButton->GetX();
+                int y = connectedStatusBackgroundButton->GetY();
+                showPhoneConnectedStatus->SetVisible(false);
+                showEarPhoneConnectedStatus->SetPosition(x + 22, y + 13);
+                showBluetoothConnectedStatus->SetPosition(showEarPhoneConnectedStatus->GetX() + showEarPhoneConnectedStatus->GetWidth() + 18, y + 13);
+            }
+            connectedStatusBackgroundButton->Invalidate();
+            showPhoneConnectedStatus->Invalidate();
+            showEarPhoneConnectedStatus->Invalidate();
+            showBluetoothConnectedStatus->Invalidate();
+        }
     }
 
-    // if (SettingModel::GetInstance().GetBlueToothConnectStatus()) {
-    //     ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH_B);
-    // } else {
-    //     ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH);
-    // }
+    // 更新手机连接状态
+    void PullUpDownView::UpdatePhoneStatus(int status)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdatePhoneStatus");
+        if (showPhoneConnectedStatus == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showPhoneConnectedStatus nullptr");
+            return;
+        }
+        // showPhoneConnectedStatus->SetSrc(status ? DROPDOWN_PHONECONNECTED_IMAGE : DROPDOWN_PHONEDISCONNECTED_IMAGE);
+        // showPhoneConnectedStatus->Invalidate();
+
+        showPhoneConnectedStatus->SetSrc(DROPDOWN_PHONEDISCONNECTED_IMAGE);
+        SetPhoneConnectedIsVisible(status);
+
+        if (GetConnectedStatusView() != nullptr)
+            GetConnectedStatusView()->UpdatePhoneConnectedStatus(status);
 
-    battery = new UIImageView(); // 电量状态显示
-    if (battery == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "battery new fail");
         return;
     }
-    battery->SetPosition(BATTERY_IMG_X, BATTERY_IMG_Y);
-    // ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, battery, DROPDOWN_DROPDOWN_BATTERY);
-    batteryLable = new UILabel();
-    if (batteryLable == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryLable new fail");
+    // 更新蓝牙耳机连接状态
+    void PullUpDownView::UpdateEarPhoneStatus(int status)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateEarPhoneStatus");
+        if (showEarPhoneConnectedStatus == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showEarPhoneConnectedStatus nullptr");
+            return;
+        }
+        showEarPhoneConnectedStatus->SetSrc(status ? DROPDOWN_EARPHONESCONNECTED_IMAGE : DROPDOWN_EARPHONESDISCONNECTED_IMAGE);
+        showEarPhoneConnectedStatus->Invalidate();
+
+        if (GetConnectedStatusView() != nullptr)
+            GetConnectedStatusView()->UpdateEarPhoneConnectedStatus(status);
+
         return;
     }
-    batteryLable->SetPosition(BATTERY_LABEL_X, BATTERY_LABEL_Y, TEXT_WIDTH, TEXT_HEIGHT);
-    batteryLable->SetText("90%");
-    batteryLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
-    batteryLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
-    dateLable = new UILabel();
-    if (dateLable == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dateLable new fail");
+    // 更新蓝牙连接状态
+    void PullUpDownView::UpdateBlueToothStatus(int status)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateBlueToothStatus");
+        if (showBluetoothConnectedStatus == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showBluetoothConnectedStatus nullptr");
+            return;
+        }
+        showBluetoothConnectedStatus->SetSrc(status ? DROPDOWN_BLUETOOTHCONNECTED_IMAGE : DROPDOWN_BLUETOOTHDISCONNECTED_IMAGE);
+        showBluetoothConnectedStatus->Invalidate();
+
+        if (GetConnectedStatusView() != nullptr)
+            GetConnectedStatusView()->UpdateBlueToothConnectedStatus(status);
+
         return;
     }
-    dateLable->SetPosition(DATE_LABEL_X, DATE_LABEL_Y, 192, TEXT_HEIGHT); // TEXT_WIDTH = 192
-    dateLable->SetText("10/23 星期五");
-    dateLable->SetFont(DEFAULT_VECTOR_FONT_FILENAME, FONT_DEFAULT_SIZE);
-    dateLable->SetStyle(STYLE_BACKGROUND_COLOR, OPA_TRANSPARENT);
-}
+    UIImageView *PullUpDownView::DropDownConnectedStatusImageViweInit(int16_t x, int16_t y, int16_t w, int16_t h)
+    {
+        UIImageView *img = new UIImageView();
+        if (img == nullptr)
+        {
+            return nullptr;
+        }
+        img->SetPosition(x, y, w, h);
+        img->SetAutoEnable(false);
+        img->SetResizeMode(UIImageView::CENTER);
+        img->SetStyle(STYLE_BORDER_RADIUS, 100);
 
-bool PullUpDownView::InitView()
-{
-    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitDropDownView");
-    clickListener = (UIView::OnClickListener *)OHOS::MainPresenterSample::GetInstance();
-
-    // InitViewImg();
-    // InitViewLable();
-    // InitViewInfo();
-
-    Add(dnotDisturb);
-    Add(dnotDisturbLable);
-    Add(briScreen);
-    Add(briScreenLable);
-    Add(finPhone);
-    Add(finPhoneLable);
-    Add(droAlarm);
-    Add(droAlarmLable);
-    Add(droSetting);
-    Add(droSettingLable);
-    Add(bluetooth);
-    Add(battery);
-    Add(batteryLable);
-    Add(dateLable);
-
-    SetTouchable(true);
-    SetIntercept(true);
-
-    return true;
-}
+        return img;
+    }
+    /// @brief 创建与连接状态相关组件
+    void PullUpDownView::CreateDropDownConnectionStatusImageViwe(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::CreateDropDownConnectionStatusImageViwe");
+        if (connectedStatusBackgroundButton == nullptr)
+        {
+            connectedStatusBackgroundButton = new UIButton();
+            if (connectedStatusBackgroundButton == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "connectedStatusBackgroundButton new fail");
+                return;
+            }
+        }
+        connectedStatusBackgroundButton->SetPosition(153, 10, 160, 50);
+#ifdef FD230_650
+        connectedStatusBackgroundButton->SetViewId(CONNECTEDSTATUSBACKGROUNDBUTTON);
+#endif
+        connectedStatusBackgroundButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+        connectedStatusBackgroundButton->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+        connectedStatusBackgroundButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff383838, UIButton::PRESSED);
+        UIView::OnClickListener *clickListener = (UIView::OnClickListener *)OHOS::MainPresenterSample::GetInstance();
+        if (clickListener == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MainPresenterSample::GetInstance fail!!");
+            return;
+        }
+        connectedStatusBackgroundButton->SetOnClickListener(clickListener);
+        int x = connectedStatusBackgroundButton->GetX();
+        int y = connectedStatusBackgroundButton->GetY();
+        /* -------------------------------- 显示手机连接状态 -------------------------------- */
+        if (showPhoneConnectedStatus == nullptr)
+        {
+            showPhoneConnectedStatus = DropDownConnectedStatusImageViweInit(x + 26, y + 13, 24, 24);
+            if (showPhoneConnectedStatus == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showPhoneConnectedStatus new fail");
+                return;
+            }
+        }
+        /* -------------------------------- 显示耳机连接状态 -------------------------------- */
+        if (showEarPhoneConnectedStatus == nullptr)
+        {
+            showEarPhoneConnectedStatus = DropDownConnectedStatusImageViweInit(x + 68, y + 13, 24, 24);
+            if (showEarPhoneConnectedStatus == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showEarPhoneConnectedStatus new fail");
+                return;
+            }
+        }
+        /* -------------------------------- 显示蓝牙连接状态 -------------------------------- */
+        if (showBluetoothConnectedStatus == nullptr)
+        {
+            showBluetoothConnectedStatus = DropDownConnectedStatusImageViweInit(x + 110, y + 13, 24, 24);
+            if (showBluetoothConnectedStatus == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showBluetoothConnectedStatus new fail");
+                return;
+            }
+        }
+        /* -------------------------------------------------------------------------- */
+        UpdatePhoneStatus(GetPhoneConnectedStatus());
+        UpdateEarPhoneStatus(GetEarPhoneConnectedStatus());
+        UpdateBlueToothStatus(GetBlueToothConnectedStatus());
+        /* -------------------------------------------------------------------------- */
+        group[DROPDOWNVIEW]->Add(connectedStatusBackgroundButton);
+        group[DROPDOWNVIEW]->Add(showPhoneConnectedStatus);
+        group[DROPDOWNVIEW]->Add(showEarPhoneConnectedStatus);
+        group[DROPDOWNVIEW]->Add(showBluetoothConnectedStatus);
+    }
 
-void PullUpDownView::PreLoad(void)
-{
-    if (!viewiInitStatus) {
-        InitView();
-        viewiInitStatus = true;
+    void PullUpDownView::ClearAll_1(void)
+    {
+        if (connectedStatusBackgroundButton != nullptr)
+        {
+            delete connectedStatusBackgroundButton;
+            connectedStatusBackgroundButton = nullptr;
+        }
+        if (showPhoneConnectedStatus != nullptr)
+        {
+            delete showPhoneConnectedStatus;
+            showPhoneConnectedStatus = nullptr;
+        }
+        if (showEarPhoneConnectedStatus != nullptr)
+        {
+            delete showEarPhoneConnectedStatus;
+            showEarPhoneConnectedStatus = nullptr;
+        }
+        if (showBluetoothConnectedStatus != nullptr)
+        {
+            delete showBluetoothConnectedStatus;
+            showBluetoothConnectedStatus = nullptr;
+        }
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAllConnectedStatusComponentsView");
     }
-}
+    /* -------------------------------------------------------------------------- */
+    /***
+     * @brief 初始化时间,日期,星期,电池,信号强度
+     */
+    void PullUpDownView::InitBaseData()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitBaseData");
+        if (group1 == nullptr)
+        {
+            group1 = new UIViewGroup();
+            if (group1 == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group1 new fail");
+                return;
+            }
+        }
+        group1->SetPosition(132, 80, 202, 40);
+        group1->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        /* -------------------------------- NoSignal -------------------------------- */
+        if (NoSignal == nullptr)
+        {
+            NoSignal = new UIImageView();
+            if (NoSignal == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "NoSignal new fail");
+                return;
+            }
+        }
+        NoSignal->SetPosition(0, (group1->GetHeight() - 38) / 2, 36, 38);
+        NoSignal->SetAutoEnable(false);
+        NoSignal->SetResizeMode(UIImageView::CENTER);
+        NoSignal->SetSrc(DROPDOWN_NOSIGNAL_IMAGE);
+        NoSignal->SetVisible(false);
+        group1->Add(NoSignal);
+        /* ------------------------------- MobileData ------------------------------- */
+        if (MobileData == nullptr)
+        {
+            MobileData = new UIImageView();
+            if (MobileData == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MobileData new fail");
+                return;
+            }
+        }
+        MobileData->SetPosition(1, 4, 13, 15);
+        MobileData->SetAutoEnable(false);
+        MobileData->SetResizeMode(UIImageView::CENTER);
+        MobileData->SetSrc(DROPDOWN_MOBILE_DATA_IMAGE);
+        MobileData->SetVisible(false);
+        group1->Add(MobileData);
+        /* -------------------------------------------------------------------------- */
+        // 定义一个结构体,用于存储 ImageView 的信息
+        struct ImageViewInfo
+        {
+            int posX;
+            int posY;
+            int width;
+            int height;
+        };
+        // 待添加的 ImageView 信息列表
+        std::vector<ImageViewInfo> imageViewList = {
+            {0, 28, 6, 6},
+            {10, 20, 6, 14},
+            {20, 12, 6, 22},
+            {30, 4, 6, 30},
+        };
 
-void PullUpDownView::UpdateBlueToothStatus(int status)
-{
-    if (bluetooth == nullptr) {
-        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "bluetooth nullptr");
-        return;
+        // 循环添加 ImageView 到相应的容器中
+        for (int i = 0; i < 4; i++)
+        {
+            if (showSignalStrength[i] == nullptr)
+            {
+                showSignalStrength[i] = new UIImageView();
+                if (showSignalStrength[i] == nullptr)
+                {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d] new fail", i);
+                    return;
+                }
+            }
+            showSignalStrength[i]->SetPosition(imageViewList[i].posX, imageViewList[i].posY, imageViewList[i].width, imageViewList[i].height);
+            showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+            showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+            showSignalStrength[i]->SetStyle(STYLE_BORDER_RADIUS, 10);
+            group1->Add(showSignalStrength[i]);
+            showSignalStrength[i]->SetVisible(false);
+        }
+        /* -------------------------------- Singal_4 -------------------------------- */
+        if (Singal_4 == nullptr)
+        {
+            Singal_4 = new UILabel();
+        }
+        Singal_4->SetPosition(0, 0, 40, 47);
+        Singal_4->SetStyle(STYLE_TEXT_FONT, 34);
+        Singal_4->SetStyle(STYLE_LINE_HEIGHT, 40);
+        Singal_4->SetText("4G");
+        Singal_4->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        Singal_4->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        Singal_4->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 34);
+        Singal_4->SetVisible(false);
+        group1->Add(Singal_4);
+        /* ----------------------------------- HD ----------------------------------- */
+        if (HD == nullptr)
+        {
+            HD = new UIImageView();
+            if (HD == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HD new fail");
+                return;
+            }
+        }
+        HD->SetPosition(88 + 10, (group1->GetHeight() - 30) / 2, 46, 30);
+        HD->SetAutoEnable(false);
+        HD->SetResizeMode(UIImageView::CENTER);
+        HD->SetSrc(DROPDOWN_HD_IMAGE);
+        HD->SetVisible(false);
+        group1->Add(HD);
+        /* ----------------------------------- 电池 ----------------------------------- */
+        batteryimage = new UIImageView();
+        if (batteryimage == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "batteryimage new fail");
+            return;
+        }
+        batteryimage->SetPosition(HD->GetX() + HD->GetWidth() + 10, (group1->GetHeight() - 30) / 2, 48, 30);
+        std::string batteryimagesPath = "/user/res/Battery/Battery_White.bin";
+        batteryimage->SetSrc(batteryimagesPath.c_str());
+        group1->Add(batteryimage);
+        /* -------------------------------------------------------------------------- */
+        progress = new UIBoxProgress();
+        if (progress == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "progress new fail");
+            return;
+        }
+        progress->SetPosition(batteryimage->GetX() + 7, batteryimage->GetY() + 6, 30, 18);
+        progress->SetValidWidth(30);
+        progress->SetValidHeight(18);
+        progress->SetRange(100, 0);
+        progress->SetStyle(STYLE_BORDER_RADIUS, 3);
+        progress->SetBackgroundStyle(STYLE_BACKGROUND_OPA, 0x00);
+        progress->SetBackgroundStyle(STYLE_TEXT_COLOR, 0xff000000);
+        progress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+        progress->SetForegroundStyle(STYLE_TEXT_COLOR, 0xff000000);
+        progress->SetForegroundStyle(STYLE_LINE_COLOR, 0xff45A5FF);
+        group1->Add(progress);
+        /* -------------------------------------------------------------------------- */
+        chargeBatteryicon = new UIImageView();
+        if (!chargeBatteryicon)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "chargeBatteryicon creation failed");
+            return;
+        }
+        chargeBatteryicon->SetPosition(progress->GetX() + 6, batteryimage->GetY() + 2, 17, 26);
+        chargeBatteryicon->SetSrc("/user/res/Battery/Icon.bin");
+        chargeBatteryicon->SetAutoEnable(false);
+        chargeBatteryicon->SetResizeMode(UIImageView::CONTAIN);
+        chargeBatteryicon->SetVisible(false);
+        group1->Add(chargeBatteryicon);
+        /* -------------------------------------------------------------------------- */
+        group[DROPDOWNVIEW]->Add(group1);
+        /* --------------------------------- 显示日期和星期 -------------------------------- */
+        showDateAndWeekLabel = new UILabel();
+        if (showDateAndWeekLabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "showDateAndWeekLabel new fail");
+            return;
+        }
+        showDateAndWeekLabel->SetPosition(83, 130, 300, 35);
+        showDateAndWeekLabel->SetStyle(STYLE_TEXT_FONT, 30);
+        showDateAndWeekLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+        showDateAndWeekLabel->SetTextColor(Color::GetColorFromRGBA(0xaa, 0xaa, 0xaa, 0xff));
+        showDateAndWeekLabel->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+        showDateAndWeekLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        showDateAndWeekLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, 30);
+        group[DROPDOWNVIEW]->Add(showDateAndWeekLabel);
+        /* -------------------------------------------------------------------------- */
+        UpdateSignalStrengthStatusAndBatteryPosition();
+/* -------------------------------------------------------------------------- */
+#ifdef FD230_650
+        MainPresenterSample::GetInstance()->UpdataBaseData();
+#endif
+        /* -------------------------------------------------------------------------- */
+        UpdateBatteryProcess();
+    }
+    void PullUpDownView::ClearAll_2(void)
+    {
+        if (group1 != nullptr)
+        {
+            group1->RemoveAll();
+            for (int i = 0; i < 4; i++)
+            {
+                if (showSignalStrength[i] != nullptr)
+                {
+                    delete showSignalStrength[i];
+                    showSignalStrength[i] = nullptr;
+                }
+            }
+            if (Singal_4 != nullptr)
+            {
+                delete Singal_4;
+                Singal_4 = nullptr;
+            }
+            if (NoSignal != nullptr)
+            {
+                delete NoSignal;
+                NoSignal = nullptr;
+            }
+            if (MobileData != nullptr)
+            {
+                delete MobileData;
+                MobileData = nullptr;
+            }
+            if (HD != nullptr)
+            {
+                delete HD;
+                HD = nullptr;
+            }
+            if (batteryimage != nullptr)
+            {
+                delete batteryimage;
+                batteryimage = nullptr;
+            }
+            if (progress != nullptr)
+            {
+                delete progress;
+                progress = nullptr;
+            }
+            if (chargeBatteryicon != nullptr)
+            {
+                delete chargeBatteryicon;
+                chargeBatteryicon = nullptr;
+            }
+            delete group1;
+            group1 = nullptr;
+        }
+        if (showDateAndWeekLabel != nullptr)
+        {
+            delete showDateAndWeekLabel;
+            showDateAndWeekLabel = nullptr;
+        }
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll_2 over!!");
+    }
+
+    // 获取信号强度
+    int PullUpDownView::GetSignalStrength(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::GetSignalStrength");
+        int SignalStrength = uapi_dev_runtime_get_cat1_signal(); // 信号强度
+        return CalculateSignalBars(SignalStrength);
     }
-    // if (status == 1) {
-    //     ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH_B);
-    // } else {
-    //     ScreenModels::GetInstance()->LoadAppImages(DROPDOWN_IAMGES, bluetooth, DROPDOWN_DROPDOWN_BLUETOOTH);
-    // }
-    bluetooth->Invalidate();
-    return;
-}
 
+    // 计算信号格
+    int PullUpDownView::CalculateSignalBars(int signalStrength)
+    {
+#if 0
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::CalculateSignalBars");
+        if (signalStrength < 0 || signalStrength > 31 || signalStrength == 0)
+            return 99; // 无信号 or Invalid signal strength
+
+        // if (signalStrength == 32)
+        //     return 4; // Edge case where signalStrength is exactly at the upper boundary
+
+        return (signalStrength / 8) + 1;
+#else
+        if (signalStrength >= 1 && signalStrength <= 8) // 0信号
+        {
+            return 0;
+        }
+        else if (signalStrength >= 9 && signalStrength <= 16) // 1格信号,信号很弱偶尔可以接打电话,很容易失败
+        {
+            return 1;
+        }
+        else if (signalStrength >= 17 && signalStrength <= 21) // 2格信号,信号一般
+        {
+            return 2;
+        }
+        else if (signalStrength >= 22 && signalStrength <= 26) // 3格信号,信号较强
+        {
+            return 3;
+        }
+        else if (signalStrength >= 27 && signalStrength <= 31) // 4格信号,信号很强
+        {
+            return 4;
+        }
+        else
+        {
+            return 99; // Invalid signal strength
+        }
+#endif
+    }
+
+    // 函数用于更新信号显示的UI
+    void PullUpDownView::updateSignalDisplay()
+    {
+        int sim = uapi_dev_runtime_get_cat1_simstat();
+        int cat1_powerOn = uapi_dev_runtime_get_cat1_powerstat();
+        int signal = uapi_dev_runtime_get_cat1_signal();
+        int network_on = uapi_dev_runtime_get_cat1_networkstat();
+        int cat1_network_type = uapi_dev_runtime_get_cat1_networtype();
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "sim = %d", sim);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "cat1_powerOn = %d", cat1_powerOn);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "signal = %d", signal);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "network_on = %d", network_on);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "cat1_network_type = %d", cat1_network_type);
+
+        const int SIGNAL_NO_SIGNAL = 99;
+        const int NETWORK_TYPE_NO_NETWORK = 0;
+        const int NETWORK_TYPE_4G = 4;
+
+        if (sim == 0 || cat1_powerOn == 0)
+        {
+            // 无信号,无4G图标
+            UpdateCat1NoSignalisplay(true);
+            UpdateCat14GDisplay(false);
+            UpdateSignalBarDisplay(CalculateSignalBars(signal), false);
+            UpdateCat1MobileDataDisplay(false);
+        }
+        else if (cat1_powerOn == 1 && sim == 1)
+        {
+            if (signal == SIGNAL_NO_SIGNAL) // 计算信号强度
+            {
+                // 无信号UI显示
+                // UpdateCat1NoSignalisplay(true);
+                // UpdateCat14GDisplay(false);
+                UpdateSignalBarDisplay(CalculateSignalBars(signal), false);
+            }
+            else
+            {
+                // 信号强度显示
+                UpdateCat1NoSignalisplay(false);
+                // UpdateCat14GDisplay(true);
+                UpdateSignalBarDisplay(CalculateSignalBars(signal), true);
+            }
+
+            if (network_on == 0)
+            {
+                // 无信号,无4G图标 显示
+                // UpdateCat1NoSignalisplay(true);
+                UpdateCat14GDisplay(false);
+                UpdateCat1MobileDataDisplay(false);
+                // UpdateSignalBarDisplay(CalculateSignalBars(signal), false);
+            }
+            else
+            {
+                if (cat1_network_type == NETWORK_TYPE_NO_NETWORK)
+                {
+                    // 无信号,无4G图标 显示
+                    // UpdateCat1NoSignalisplay(true);
+                    UpdateCat14GDisplay(false);
+                    UpdateCat1MobileDataDisplay(false);
+                    // UpdateSignalBarDisplay(CalculateSignalBars(signal), false);
+                }
+                else if (cat1_network_type == NETWORK_TYPE_4G)
+                {
+                    // 有4G图标,正常显示信号
+                    // UpdateCat1NoSignalisplay(false);
+                    UpdateCat14GDisplay(true);
+                    UpdateCat1MobileDataDisplay(true);
+                    // UpdateSignalBarDisplay(CalculateSignalBars(signal), true);
+                }
+                else
+                {
+                    // 无4G图标,正常显示信号
+                    // UpdateCat1NoSignalisplay(false);
+                    UpdateCat14GDisplay(false);
+                    UpdateCat1MobileDataDisplay(true);
+                    // UpdateSignalBarDisplay(CalculateSignalBars(signal), true);
+                }
+            }
+        }
+        /*4g开关的状态刷新*/
+        if (DropDownCardPage1::GetInstance())
+        {
+            DropDownCardPage1::GetInstance()->Refresh4GState();
+        }
+    }
+    // 更新信号强度显示
+    void PullUpDownView::UpdateSignalBarDisplay(int signalBars, bool state)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateSignalBarDisplay");
+        for (int i = 0; i < 4; i++)
+        {
+            showSignalStrength[i]->SetStyle(STYLE_BACKGROUND_COLOR, (i < signalBars) ? COLOR_SIGNAL_ON : COLOR_SIGNAL_OFF);
+            showSignalStrength[i]->Invalidate();
+            showSignalStrength[i]->SetVisible(state);
+        }
+    }
+
+    // 更新无信号图标显示
+    void PullUpDownView::UpdateCat1NoSignalisplay(bool state)
+    {
+        if (NoSignal != nullptr)
+        {
+            NoSignal->SetVisible(state);
+        }
+    }
+
+    // 更新4G图标显示
+    void PullUpDownView::UpdateCat14GDisplay(bool state)
+    {
+        if (Singal_4 != nullptr)
+        {
+            Singal_4->SetVisible(state);
+        }
+        UpdateHDDisplay(state && ConfigModel::GetInstance()->GetVoLTE_Call());
+    }
+
+    // 有HD一定有4G
+    void PullUpDownView::UpdateHDDisplay(bool state)
+    {
+        if (HD != nullptr)
+        {
+            HD->SetVisible(state);
+        }
+    }
+
+    /*更新移动数据图标显示*/
+    void PullUpDownView::UpdateCat1MobileDataDisplay(bool state)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateCat1MobileDataDisplay %d", state);
+        if (MobileData != nullptr)
+        {
+            MobileData->SetVisible(state);
+        }
+    }
+
+    void PullUpDownView::UpdateXPosition(void)
+    {
+        // 判断相关组件是否有效
+        if (MobileData && HD && Singal_4 && NoSignal && batteryimage && progress && chargeBatteryicon)
+        {
+            // 获取各个组件的可见状态
+            bool mobileDataVisible = MobileData->IsVisible(); // 移动数据
+            bool hdVisible = HD->IsVisible();                 // HD [VoLTE开关]
+            bool signal4Visible = Singal_4->IsVisible();      // 4G
+            bool noSignalVisible = NoSignal->IsVisible();     // 无信号
+
+            int x;
+            int signalWidth = NoSignal->GetWidth();
+            int batteryWidth = batteryimage->GetWidth();
+            int spacing = 10;
+
+            if (noSignalVisible) // 无信号时的处理
+            {
+                x = (group1->GetWidth() - (signalWidth + batteryWidth + spacing)) / 2;
+                NoSignal->SetX(x);
+                batteryimage->SetX(x + signalWidth + spacing);
+                progress->SetX(batteryimage->GetX() + 7);
+            }
+            else // 有信号时的处理
+            {
+                if (!signal4Visible) // 无 4G
+                {
+                    x = (group1->GetWidth() - (signalWidth + batteryWidth + spacing)) / 2;
+                    for (int i = 0; i < 4; i++)
+                    {
+                        if (showSignalStrength[i] != nullptr)
+                        {
+                            if (i != 0)
+                            {
+                                showSignalStrength[i]->SetX(showSignalStrength[i - 1]->GetX() + 10);
+                                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d]", showSignalStrength[i]->GetX());
+                            }
+                            else
+                            {
+                                showSignalStrength[i]->SetX(x);
+                            }
+                        }
+                    }
+                    batteryimage->SetX(showSignalStrength[3]->GetX() + spacing);
+                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d]", batteryimage->GetX());
+                    progress->SetX(batteryimage->GetX() + 7);
+                }
+                else // 有 4G
+                {
+                    int additionalWidth = hdVisible ? HD->GetWidth() : 0;
+                    x = (group1->GetWidth() - (signalWidth + Singal_4->GetWidth() + additionalWidth + batteryWidth + spacing * (2 + hdVisible))) / 2;
+                    for (int i = 0; i < 4; i++)
+                    {
+                        if (showSignalStrength[i] != nullptr)
+                        {
+                            if (i != 0)
+                            {
+                                showSignalStrength[i]->SetX(showSignalStrength[i - 1]->GetX() + 10);
+                                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d]", showSignalStrength[i]->GetX());
+                            }
+                            else
+                            {
+                                showSignalStrength[i]->SetX(x);
+                            }
+                        }
+                    }
+                    Singal_4->SetX(showSignalStrength[3]->GetX() + spacing);
+                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "showSignalStrength[%d]", batteryimage->GetX());
+                    if (hdVisible) // 有 HD
+                    {
+                        HD->SetX(Singal_4->GetX() + Singal_4->GetWidth() + spacing);
+                        batteryimage->SetX(HD->GetX() + HD->GetWidth() + spacing);
+                        progress->SetX(batteryimage->GetX() + 7);
+                    }
+                    else // 无 HD
+                    {
+                        batteryimage->SetX(Singal_4->GetX() + Singal_4->GetWidth() + spacing);
+                        progress->SetX(batteryimage->GetX() + 7);
+                    }
+                }
+                if (mobileDataVisible) // 如果有移动数据图标,设置其位置
+                {
+                    MobileData->SetX(showSignalStrength[0]->GetX());
+                }
+            }
+            chargeBatteryicon->SetPosition(progress->GetX() + 6, batteryimage->GetY() + 2);
+            // 使相关组件无效化以触发重绘
+            MobileData->Invalidate();
+            HD->Invalidate();
+            Singal_4->Invalidate();
+            NoSignal->Invalidate();
+            batteryimage->Invalidate();
+            progress->Invalidate();
+            chargeBatteryicon->Invalidate();
+        }
+    }
+
+    // 更新信号强度和电池位置
+    void PullUpDownView::UpdateSignalStrengthStatusAndBatteryPosition()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateSignalStrengthStatusAndBatteryPosition");
+        updateSignalDisplay(); // 函数用于更新信号显示的UI
+        UpdateXPosition();
+
+#ifdef FD230_650
+        /*更新蓝牙连接状态*/
+        int a2dp = uapi_a2dp_snk_get_device_connect_state();
+        int hfp = uapi_hfp_connect_state();
+        bool bluetoothstatus = (a2dp == 0 && hfp == 0) ? false : true;
+        UpdateBlueToothStatus(bluetoothstatus);
+#endif
+    }
+
+    // 更新是否是充电状态
+    void PullUpDownView::UpdateBatteryProcess()
+    {
+        if (!chargeBatteryicon || !progress)
+        {
+            return;
+        }
+
+        bool isCharging = get_charge_stat(); // 获取充电状态
+
+        if (isCharging)
+        {
+            if (!isChargeBatteryIconVisible)
+            {
+                chargeBatteryicon->SetVisible(true);
+                isChargeBatteryIconVisible = true;
+            }
+            progress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, Color::Green().full); // 充电状态为绿色
+            return;
+        }
+        else
+        {
+            if (isChargeBatteryIconVisible)
+            {
+                chargeBatteryicon->SetVisible(false);
+                isChargeBatteryIconVisible = false;
+            }
+            progress->SetForegroundStyle(STYLE_BACKGROUND_COLOR, Color::White().full); // 充电状态为绿色
+            return;
+        }
+    }
+
+    UILabel *PullUpDownView::GetDateAndWeekLabel(void)
+    {
+        return showDateAndWeekLabel;
+    }
+    /* -------------------------------------------------------------------------- */
+    AppGroupView *PullUpDownView::DropDownCardPage1Init(void)
+    {
+        if (dropDownCardPage1 == nullptr)
+        {
+            dropDownCardPage1 = new DropDownCardPage1();
+            if (dropDownCardPage1 == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropDownCardPage1 new fail!!");
+                return nullptr;
+            }
+        }
+        return dropDownCardPage1;
+    }
+    AppGroupView *PullUpDownView::DropDownCardPage2Init(void)
+    {
+        if (dropDownCardPage2 == nullptr)
+        {
+            dropDownCardPage2 = new DropDownCardPage2();
+            if (dropDownCardPage2 == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropDownCardPage2 new fail!!");
+                return nullptr;
+            }
+        }
+        return dropDownCardPage2;
+    }
+    struct DropDownSwipViewMapper
+    {
+        const int16_t viewId;
+        AppGroupView *(PullUpDownView::*func)(void);
+    };
+    static const DropDownSwipViewMapper g_pageMapper[] = {
+        {0, &PullUpDownView::DropDownCardPage1Init},
+        {1, &PullUpDownView::DropDownCardPage2Init},
+    };
+    AppGroupView *PullUpDownView::CreatePage(int32_t PageId)
+    {
+        uint16_t i;
+        AppGroupView *view = nullptr;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreatePage %d", PageId);
+
+        for (i = 0; i < sizeof(g_pageMapper) / sizeof(g_pageMapper[0]); i++)
+        {
+            if (g_pageMapper[i].viewId == PageId)
+            {
+                view = (this->*(g_pageMapper[i].func))();
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "CreatePage view:%p", view);
+                return view;
+            }
+        }
+        return nullptr; // 如果没有找到匹配的视图ID,返回 nullptr
+    }
+    void PullUpDownView::ClearAll_3(void)
+    {
+        if (dropDownswipeViewList != nullptr)
+        {
+            dropDownswipeViewList->RemoveAll();
+
+            delete dropDownswipeViewList;
+            dropDownswipeViewList = nullptr;
+        }
+        if (dropDownCardPage1 != nullptr)
+        {
+            delete dropDownCardPage1;
+            dropDownCardPage1 = nullptr;
+        }
+        if (dropDownCardPage2 != nullptr)
+        {
+            delete dropDownCardPage2;
+            dropDownCardPage2 = nullptr;
+        }
+        for (int i = 0; i < sizeof(g_pageMapper) / sizeof(g_pageMapper[0]); i++)
+        {
+            recordCard[i] = nullptr;
+        }
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll_3 over!!");
+    }
+    // 创建与滑动列表相关组件
+    void PullUpDownView::CreateDropDownswipeViewListView(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::CreateDropDownswipeViewListView start!!");
+        dropDownswipeViewList = new UISwipeView(UISwipeView::HORIZONTAL); // 水平方向
+        if (nullptr == dropDownswipeViewList)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dropDownswipeViewList new fail!!");
+            return;
+        }
+        dropDownswipeViewList->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+        dropDownswipeViewList->SetPosition(18, 180, 430, 210); // 0 : X; 0 : Y
+        dropDownswipeViewList->SetAnimatorTime(200);           // 200:animator drag time(ms)
+        dropDownswipeViewList->SetDraggable(true);
+        dropDownswipeViewList->SetTouchable(true);
+        for (uint16_t i = 0; i < 2; i++)
+        {
+            recordCard[i] = CreatePage(i);
+            if (nullptr == recordCard[i])
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "recordCard[%d] is nullptr!!", i);
+                return;
+            }
+            recordCard[i]->InitView(this);
+            dropDownswipeViewList->Add(recordCard[i]);
+        }
+        dropDownswipeViewList->SetOnSwipeListener(this);
+        group[DROPDOWNVIEW]->Add(dropDownswipeViewList);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::CreateDropDownswipeViewListView over!!");
+    }
+    /* ------------------------------------ 4 ----------------------------------- */
+    void PullUpDownView::UpdateSwipviewSelect(bool value)
+    {
+        if (swipviewSelect)
+        {
+            swipviewSelect->SetSrc(value ? DROPDOWN_SELECT_1_IMAGE : DROPDOWN_SELECT_2_IMAGE);
+            swipviewSelect->Invalidate();
+        }
+    }
+
+    void PullUpDownView::CreateView4()
+    {
+        /* ----------------------------- swipviewSelect ----------------------------- */
+        if (swipviewSelect == nullptr)
+        {
+            swipviewSelect = new UIImageView();
+            if (swipviewSelect == nullptr)
+            {
+                return;
+            }
+        }
+        swipviewSelect->SetPosition(217, 410, 33, 12);
+        swipviewSelect->SetSrc(DROPDOWN_SELECT_1_IMAGE);
+        group[DROPDOWNVIEW]->Add(swipviewSelect);
+        /* ---------------------------------- line ---------------------------------- */
+        if (line == nullptr)
+        {
+            line = new UIImageView();
+            if (line == nullptr)
+            {
+                return;
+            }
+        }
+        line->SetPosition(193, 440, 80, 8);
+        line->SetSrc(DROPDOWN_LINE_IMAGE);
+        group[DROPDOWNVIEW]->Add(line);
+    }
+
+    void PullUpDownView::ClearAll_4(void)
+    {
+        if (swipviewSelect != nullptr)
+        {
+            delete swipviewSelect;
+            swipviewSelect = nullptr;
+        }
+        if (line != nullptr)
+        {
+            delete line;
+            line = nullptr;
+        }
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ClearAll_4 over!!");
+    }
+
+    /* -------------------------------------------------------------------------- */
+    // 下拉视图初始化
+    bool PullUpDownView::PullUpDownViewInit()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::InitView");
+
+        group[DROPDOWNVIEW] = new UIViewGroup();
+        if (group[DROPDOWNVIEW] == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "group[DROPDOWNVIEW] new fail!!");
+            return false;
+        }
+        group[DROPDOWNVIEW]->SetPosition(0, 0, 466, 466);
+        group[DROPDOWNVIEW]->SetStyle(STYLE_BACKGROUND_OPA, OPA_OPAQUE);
+        group[DROPDOWNVIEW]->SetViewIndex(0);
+        group[DROPDOWNVIEW]->SetFullScreenBlur(false); /*设置高斯模式*/
+        /* ----------------------------------- 1 ----------------------------------- */
+        CreateDropDownConnectionStatusImageViwe();
+        /* ------------------------------------ 2 ----------------------------------- */
+        InitBaseData();
+        /* ------------------------------------ 3 ----------------------------------- */
+        CreateDropDownswipeViewListView();
+        /* ------------------------------------ 4 ----------------------------------- */
+        CreateView4();
+        /* -------------------------------------------------------------------------- */
+
+        SetTouchable(true);
+        SetIntercept(true);
+        Add(group[DROPDOWNVIEW]);
+        return true;
+    }
+
+    void PullUpDownView::PreLoad(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::PreLoad");
+        if (!viewiInitStatus)
+        {
+            PullUpDownViewInit();
+            viewiInitStatus = true;
+        }
+    }
+
+    void PullUpDownView::UnLoad(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UnLoad");
+    }
+
+    /*更新勿扰模式状态*/
+    void PullUpDownView::UpdateDnotDisturbStatus(int status)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::UpdateDnotDisturbStatus");
+    }
+
+    UIBoxProgress *PullUpDownView::GetProgress()
+    {
+        return progress;
+    }
+    /* ------------------------------ 下拉界面切换到连接状态视图 ----------------------------- */
+    // 切换到"下拉控制中心"视图
+    bool PullUpDownView::ChangeDropDownView(int16_t thisView)
+    {
+        if (group[thisView] == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeDropDownView");
+            Add(group[thisView]);
+        }
+        return true;
+    }
+
+    // 切换到"连接状态"视图
+    bool PullUpDownView::ChangeConnectedStatusView(int16_t thisView)
+    {
+        if (group[thisView] == nullptr)
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeConnectedStatusView");
+            connectedStatusView = new ConnectedStatusView();
+            if (connectedStatusView == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView:: new scrollView[%d] fail", thisView);
+                return false;
+            }
+            group[thisView] = connectedStatusView->ConnectedStatusViewInit();
+            Add(group[thisView]);
+        }
+        return true;
+    }
+
+    struct PullUpDownViewMapper
+    {
+        const int16_t viewId;
+        bool (PullUpDownView::*func)(int16_t thisView);
+    };
+
+    static const PullUpDownViewMapper ViewMapper[] = {
+        {DROPDOWNVIEW, &PullUpDownView::ChangeDropDownView},
+        {CONNECTEDSTATUSVIEW, &PullUpDownView::ChangeConnectedStatusView},
+    };
+
+    bool PullUpDownView::ClickFunc(int16_t interface)
+    {
+        int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[0]);
+        for (int i = 0; i < funcSize; i++)
+        {
+            if (interface == ViewMapper[i].viewId)
+            {
+                bool jug = (this->*(ViewMapper[i].func))(interface);
+                if (jug == false)
+                {
+                    return false;
+                }
+                return true;
+            }
+        }
+        return false;
+    }
+
+    void PullUpDownView::ChangeView(int16_t hideView, int16_t showView)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::ChangeView");
+        if (hideView > MAX_DROPDOWNVIEWID)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PullUpDownView:: SystemViewId Overstep ones bounds");
+            return;
+        }
+        group[hideView]->SetVisible(false);
+        ClickFunc(showView);
+        group[showView]->SetVisible(true);
+        curView = showView;
+        Invalidate();
+    }
+
+    /*获取连接状态视图*/
+    ConnectedStatusView *PullUpDownView::GetConnectedStatusView(void)
+    {
+        return connectedStatusView;
+    }
+
+    // 处理按键事件回到下拉主页面
+    void PullUpDownView::HandOnKeyEventSwitchMainPullDownView(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "PullUpDownView::HandOnKeyEventSwitchMainPullDownView");
+        if (curView == CONNECTEDSTATUSVIEW) /*当前是连接状态视图*/
+        {
+            ChangeView(curView, DROPDOWNVIEW); /*切换到下拉主页面*/
+        }
+        if (nullptr != dropDownswipeViewList && dropDownswipeViewList->GetCurrentPage() != 0)
+        {
+            dropDownswipeViewList->SetCurrentPage(0);
+        }
+        Invalidate();
+    }
+    /* -------------------------------------------------------------------------- */
 }
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage1.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage1.cpp
new file mode 100644 (file)
index 0000000..8b81b19
--- /dev/null
@@ -0,0 +1,306 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-21 11:54:00
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-05 15:09:04
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/dropdown/DropDownCardPage1.cpp
+ */
+#include "main/include/dropdown/DropDownCardPage1.h"
+#include "wearable_log.h"
+#include "iostream"
+#include "string"
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+#include "main/include/MainModel.h"
+#include <custom_runtime.h>
+#include <custom_utils.h>
+#include "ConfigModel.h"
+
+#ifdef FD230_650
+#include "dnotdisturb/include/DnotDisturbModel.h"
+#include "sleepmode/include/SleepModeModel.h"
+#include "../../../../../../../drivers/peripheral/slip/cat1Service/cat1_ctl.h"
+#include "alipay_feature.h"
+#endif
+
+namespace OHOS
+{
+    // viewId
+    static constexpr const char *DROPDOWN_BT_TOGGLEBUTTON_VIEWID = "dropdown_bt";                   // 蓝牙
+    static constexpr const char *DROPDOWN_4G_TOGGLEBUTTON_VIEWID = "dropdown_4g";                   // 4g
+    static constexpr const char *DROPDOWN_ALIPAY_TOGGLEBUTTON_VIEWID = "dropdown_ALIPAY";           // 支付宝
+    static constexpr const char *DROPDOWN_SAVEPOWER_TOGGLEBUTTON_VIEWID = "dropdown_savepower";     // 省电模式
+    static constexpr const char *DROPDOWN_SLEEP_TOGGLEBUTTON_VIEWID = "dropdown_sleep";             // 睡眠模式
+    static constexpr const char *DROPDOWN_DNOTDISTURB_TOGGLEBUTTON_VIEWID = "dropdown_dnotdisturb"; // 勿扰模式
+    static constexpr const char *DROPDOWN_SETTING_TOGGLEBUTTON_VIEWID = "dropdown_setting";         // 设置
+
+    // Image src
+    static constexpr const char *DROPDOWN_BT_CONNECT_IMAGE = "/user/res/dropdown/DROPDOWN_BT_CONNECT.bin";
+    static constexpr const char *DROPDOWN_BT_DISCONNECT_IMAGE = "/user/res/dropdown/DROPDOWN_BT_DISCONNECT.bin";
+    static constexpr const char *DROPDOWN_BT_IMAGE = "/user/res/dropdown/DROPDOWN_BT.bin";
+
+    static constexpr const char *DROPDOWN_4G_ON_IMAGE = "/user/res/dropdown/DROPDOWN_4G_ON.bin";
+    static constexpr const char *DROPDOWN_4G_OFF_IMAGE = "/user/res/dropdown/DROPDOWN_4G_OFF.bin";
+
+    static constexpr const char *DROPDOWN_ALIPAY_IMAGE = "/user/res/dropdown/DROPDOWN_ALIPAY.bin";
+
+    static constexpr const char *DROPDOWN_SAVEPOWER_ON_IMAGE = "/user/res/dropdown/DROPDOWN_SAVEPOWER_ON.bin";
+    static constexpr const char *DROPDOWN_SAVEPOWER_OFF_IMAGE = "/user/res/dropdown/DROPDOWN_SAVEPOWER_OFF.bin";
+
+    static constexpr const char *DROPDOWN_SLEEP_ON_IMAGE = "/user/res/dropdown/DROPDOWN_SLEEP_ON.bin";
+    static constexpr const char *DROPDOWN_SLEEP_OFF_IMAGE = "/user/res/dropdown/DROPDOWN_SLEEP_OFF.bin";
+
+    static constexpr const char *DROPDOWN_DNOTDISTURB_ON_IMAGE = "/user/res/dropdown/DROPDOWN_DNOTDISTURB_ON.bin";
+    static constexpr const char *DROPDOWN_DNOTDISTURB_OFF_IMAGE = "/user/res/dropdown/DROPDOWN_DNOTDISTURB_OFF.bin";
+
+    static constexpr const char *DROPDOWN_SETTING_IMAGE = "/user/res/dropdown/DROPDOWN_SETTING.bin";
+
+    static DropDownCardPage1 *g_pDropDownCardPage1{nullptr};
+    DropDownCardPage1::DropDownCardPage1()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::DropDownCardPage1");
+        SetPosition(0, 0, 430, 210);
+        g_pDropDownCardPage1 = this;
+    }
+
+    DropDownCardPage1::~DropDownCardPage1()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::~DropDownCardPage1");
+        ClearAll();
+        g_pDropDownCardPage1 = nullptr;
+    }
+
+    DropDownCardPage1 *DropDownCardPage1::GetInstance(void)
+    {
+        return g_pDropDownCardPage1;
+    }
+
+    bool DropDownCardPage1::OnClick(UIView &view, const ClickEvent &event)
+    {
+        std::string viewId = view.GetViewId();
+        bool state;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::OnClick %s ", view.GetViewId());
+        if (viewId == DROPDOWN_BT_TOGGLEBUTTON_VIEWID) // 蓝牙开关
+        {
+            NativeAbility::GetInstance().EnterSlice(VIEW_CLASSIC_BLUETOOTH);
+        }
+        else if (viewId == DROPDOWN_4G_TOGGLEBUTTON_VIEWID) // 4G开关
+        {
+            if (ConfigModel::GetInstance()->GetCat1_4Gability() == false)
+            {
+                NativeAbility::GetInstance().EnterSlice(VIEW_NETWORKANDCALL);
+            }
+            else
+            {
+#if defined(A5133_DEMO_CLIENT) || defined(A5133_DEMO_SERVER)
+                uapi_set4GCapability(true);
+#else
+                uapi_set4GCapability(false);
+#endif
+                state = toggleButton[DropDownCardPage1::toggleButton_4G]->GetState();
+#ifdef FD230_650
+                Updat4GState(uapi_cat1_get_power_stat());
+                ConfigModel::GetInstance()->SetCat1_4Gability(uapi_cat1_get_power_stat());
+#endif
+            }
+        }
+        else if (viewId == DROPDOWN_ALIPAY_TOGGLEBUTTON_VIEWID) // 支付宝
+        {
+#ifdef FD230_650
+#ifdef SUPPORT_ALIPAY_SEC
+            if (Alipay_is_init() == false)
+            {
+                return false;
+            }
+            NativeAbility::GetInstance().EnterSlice(VIEW_MAIN_ALIPAY);
+#endif
+#endif
+        }
+        else if (viewId == DROPDOWN_SAVEPOWER_TOGGLEBUTTON_VIEWID) // 省电模式开关
+        {
+#ifdef FD230_650
+            state = toggleButton[DropDownCardPage1::toggleButton_SAVEPOWER]->GetState();
+            NativeAbility::GetInstance().EnterSlice(VIEW_SAVEELE);
+#endif
+        }
+        else if (viewId == DROPDOWN_SLEEP_TOGGLEBUTTON_VIEWID) // 睡眠开关
+        {
+#ifdef FD230_650
+            if (uapi_sleep_mode_flag_get())
+            {
+                state = toggleButton[DropDownCardPage1::toggleButton_SLEEP]->GetState();
+                SleepModeModel::GetInstance().SetSleepModeDisabled();
+            }
+            else
+            {
+                NativeAbility::GetInstance().EnterSlice(VIEW_SLEEPMODE);
+            }
+#endif
+        }
+        else if (viewId == DROPDOWN_DNOTDISTURB_TOGGLEBUTTON_VIEWID) // 勿扰开关
+        {
+#ifdef FD230_650
+            if (DnotDisturbModel::GetInstance().GetDoNotDisturbModeEnabled() == false)
+            {
+                NativeAbility::GetInstance().EnterSlice(VIEW_DNOTDISTURB);
+            }
+            else
+            {
+                state = toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB]->GetState();
+                UpdateDnotdisturbState(state);
+                DnotDisturbModel::GetInstance().SetDoNotDisturbModeEnabled(state);
+            }
+#endif
+        }
+        else if (viewId == DROPDOWN_SETTING_TOGGLEBUTTON_VIEWID) // 设置
+        {
+            NativeAbility::GetInstance().EnterSlice(VIEW_SETTING);
+        }
+        return true;
+    }
+
+    void DropDownCardPage1::ClearAll()
+    {
+        RemoveAll();
+        int size = sizeof(toggleButton) / sizeof(toggleButton[0]);
+        for (int i = 0; i < size; i++)
+        {
+            if (toggleButton[i] != nullptr)
+            {
+                delete toggleButton[i];
+                toggleButton[i] = nullptr;
+            }
+        }
+    }
+
+    UIToggleButton *DropDownCardPage1::ToggleButtonInit(ToggleButtonConfig &toggleButtonConfig)
+    {
+        UIToggleButton *toggleButton = new UIToggleButton();
+        if (toggleButton == nullptr)
+        {
+            return nullptr;
+        }
+        toggleButton->SetPosition(toggleButtonConfig.left, toggleButtonConfig.top, toggleButtonConfig.width, toggleButtonConfig.height);
+        toggleButton->SetViewId(toggleButtonConfig.viewId);
+        toggleButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+        toggleButton->SetStyle(STYLE_BORDER_RADIUS, 200);
+        toggleButton->SetImages(toggleButtonConfig.selectImg, toggleButtonConfig.unselectImg);
+        toggleButton->SetState(toggleButtonConfig.state);
+
+        toggleButton->SetTouchable(toggleButtonConfig.isTouchable);
+        toggleButton->SetOnClickListener(this);
+        return toggleButton;
+    }
+
+    bool DropDownCardPage1::InitPage(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::InitPage");
+        bool state_bt = true;
+        bool state_4g = true;
+        bool state_savepower = true;
+        bool state_sleep = true;
+        bool state_dnotdisturb = true;
+#ifdef FD230_650
+        bool state_bt = ConfigModel::GetInstance()->GetClassicBlueToothState(); // 传统蓝牙开关
+        bool state_4g = uapi_cat1_get_power_stat();
+        bool state_savepower = uapi_dev_runtime_get_saveele_status();
+        bool state_sleep = uapi_sleep_mode_flag_get();
+        bool state_dnotdisturb = DnotDisturbModel::GetInstance().GetDoNotDisturbModeEnabled();
+#endif
+
+        ToggleButtonConfig toggleButtonConfig[] = {
+            // {0, 0, 100, 100, DROPDOWN_BT_TOGGLEBUTTON_VIEWID, state_bt ? DROPDOWN_BT_CONNECT_IMAGE : DROPDOWN_BT_DISCONNECT_IMAGE, state_bt ? DROPDOWN_BT_CONNECT_IMAGE : DROPDOWN_BT_DISCONNECT_IMAGE, true, state_bt},
+            {0, 0, 100, 100, DROPDOWN_BT_TOGGLEBUTTON_VIEWID, DROPDOWN_BT_IMAGE, DROPDOWN_BT_IMAGE, true, state_bt},
+            {110, 0, 100, 100, DROPDOWN_4G_TOGGLEBUTTON_VIEWID, state_4g ? DROPDOWN_4G_ON_IMAGE : DROPDOWN_4G_OFF_IMAGE, state_4g ? DROPDOWN_4G_ON_IMAGE : DROPDOWN_4G_OFF_IMAGE, true, state_4g},
+            {220, 0, 100, 100, DROPDOWN_ALIPAY_TOGGLEBUTTON_VIEWID, DROPDOWN_ALIPAY_IMAGE, DROPDOWN_ALIPAY_IMAGE, true, true},
+            {330, 0, 100, 100, DROPDOWN_SAVEPOWER_TOGGLEBUTTON_VIEWID, state_savepower ? DROPDOWN_SAVEPOWER_ON_IMAGE : DROPDOWN_SAVEPOWER_OFF_IMAGE, state_savepower ? DROPDOWN_SAVEPOWER_ON_IMAGE : DROPDOWN_SAVEPOWER_OFF_IMAGE, true, state_savepower},
+            {55, 100, 100, 100, DROPDOWN_SLEEP_TOGGLEBUTTON_VIEWID, state_sleep ? DROPDOWN_SLEEP_ON_IMAGE : DROPDOWN_SLEEP_OFF_IMAGE, state_sleep ? DROPDOWN_SLEEP_ON_IMAGE : DROPDOWN_SLEEP_OFF_IMAGE, true, state_sleep},
+            {165, 100, 100, 100, DROPDOWN_DNOTDISTURB_TOGGLEBUTTON_VIEWID, state_dnotdisturb ? DROPDOWN_DNOTDISTURB_ON_IMAGE : DROPDOWN_DNOTDISTURB_OFF_IMAGE, state_dnotdisturb ? DROPDOWN_DNOTDISTURB_ON_IMAGE : DROPDOWN_DNOTDISTURB_OFF_IMAGE, true, state_dnotdisturb},
+            {275, 100, 100, 100, DROPDOWN_SETTING_TOGGLEBUTTON_VIEWID, DROPDOWN_SETTING_IMAGE, DROPDOWN_SETTING_IMAGE, true, true},
+        };
+
+        for (int i = 0; i < toggleButton_MAX; i++)
+        {
+            if (toggleButton[i] == nullptr)
+            {
+                toggleButton[i] = ToggleButtonInit(toggleButtonConfig[i]);
+                if (toggleButton[i] == nullptr)
+                {
+                    return false;
+                }
+                Add(toggleButton[i]);
+            }
+        }
+        return true;
+    }
+
+    bool DropDownCardPage1::InitView(void *caller)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::InitView %p", caller);
+        if (InitPage() == false)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DropDownCardPage1::InitPage fail");
+            return false;
+        }
+        SetDraggable(true);
+        SetTouchable(true);
+        return true;
+    }
+
+    UIToggleButton *DropDownCardPage1::GetDropDownCardPage1_ToggleButton(int index)
+    {
+        return toggleButton[index];
+    }
+
+    void DropDownCardPage1::UpdateBTState(bool state)
+    {
+        if (toggleButton[DropDownCardPage1::toggleButton_BT] != nullptr)
+        {
+            const char *ImageSrc = state ? DROPDOWN_BT_CONNECT_IMAGE : DROPDOWN_BT_DISCONNECT_IMAGE;
+            toggleButton[DropDownCardPage1::toggleButton_BT]->SetImages(ImageSrc, ImageSrc);
+        }
+    }
+
+    void DropDownCardPage1::Updat4GState(bool state)
+    {
+        if (toggleButton[DropDownCardPage1::toggleButton_4G] != nullptr)
+        {
+            const char *ImageSrc = state ? DROPDOWN_4G_ON_IMAGE : DROPDOWN_4G_OFF_IMAGE;
+            toggleButton[DropDownCardPage1::toggleButton_4G]->SetImages(ImageSrc, ImageSrc);
+        }
+    }
+
+    // 刷新4g开关显示
+    void DropDownCardPage1::Refresh4GState()
+    {
+#ifdef FD230_650
+        Updat4GState(uapi_cat1_get_power_stat());
+#endif
+    }
+
+    void DropDownCardPage1::UpdateDnotdisturbState(bool state)
+    {
+        if (toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB] != nullptr)
+        {
+            const char *ImageSrc = state ? DROPDOWN_DNOTDISTURB_ON_IMAGE : DROPDOWN_DNOTDISTURB_OFF_IMAGE;
+            toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB]->SetImages(ImageSrc, ImageSrc);
+        }
+    }
+
+    // 更新睡眠模式开关
+    void DropDownCardPage1::UpdateSleepModelState(bool state)
+    {
+        // 睡眠icon
+        if (toggleButton[DropDownCardPage1::toggleButton_SLEEP] != nullptr)
+        {
+            const char *ImageSrc = state ? DROPDOWN_SLEEP_ON_IMAGE : DROPDOWN_SLEEP_OFF_IMAGE;
+            toggleButton[DropDownCardPage1::toggleButton_SLEEP]->SetImages(ImageSrc, ImageSrc);
+        }
+        // //勿扰icon
+        // if (toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB] != nullptr)
+        // {
+        //     const char *ImageSrc = state ? DROPDOWN_DNOTDISTURB_ON_IMAGE : DROPDOWN_DNOTDISTURB_OFF_IMAGE;
+        //     toggleButton[DropDownCardPage1::toggleButton_DNOTDISTURB]->SetImages(ImageSrc, ImageSrc);
+        // }
+    }
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage2.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/main/src/dropdown/DropDownCardPage2.cpp
new file mode 100644 (file)
index 0000000..c14c51c
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-21 11:54:00
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-05 15:09:26
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/main/src/dropdown/DropDownCardPage2.cpp
+ */
+#include "main/include/dropdown/DropDownCardPage2.h"
+#include "wearable_log.h"
+#include "iostream"
+#include "string"
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+namespace OHOS
+{
+    // viewId
+    static constexpr const char *DROPDOWN_FINDPHONE_TOGGLEBUTTON_VIEWID = "dropdown_bt"; // 查找手机
+    static constexpr const char *DROPDOWN_LIGHTING_TOGGLEBUTTON_VIEWID = "dropdown_4g";  // 手电筒
+
+    // Image src
+    static constexpr const char *DROPDOWN_FINDPHONE_IMAGE = "/user/res/dropdown/DROPDOWN_FINDPHONE.bin";
+
+    static constexpr const char *DROPDOWN_LIGHTING_IMAGE = "/user/res/dropdown/DROPDOWN_LIGHTING.bin";
+
+    static DropDownCardPage2 *g_pDropDownCardPage2{nullptr};
+    DropDownCardPage2::DropDownCardPage2()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage2::DropDownCardPage2");
+        SetPosition(0, 0, 430, 210);
+        g_pDropDownCardPage2 = this;
+    }
+
+    DropDownCardPage2::~DropDownCardPage2()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage2::~DropDownCardPage2");
+        ClearAll();
+        g_pDropDownCardPage2 = nullptr;
+    }
+
+    DropDownCardPage2 *DropDownCardPage2::GetInstance(void)
+    {
+        return g_pDropDownCardPage2;
+    }
+
+    bool DropDownCardPage2::OnClick(UIView &view, const ClickEvent &event)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage2::OnClick");
+        std::string viewId = view.GetViewId();
+        if (viewId == DROPDOWN_FINDPHONE_TOGGLEBUTTON_VIEWID) 
+        {
+            NativeAbility::GetInstance().EnterSlice(VIEW_FIND_PHONE);
+        }
+        else if (viewId == DROPDOWN_LIGHTING_TOGGLEBUTTON_VIEWID)
+        {
+            NativeAbility::GetInstance().EnterSlice(VIEW_FLASHLIGHT);
+        }
+        return true;
+    }
+
+    void DropDownCardPage2::ClearAll()
+    {
+        RemoveAll();
+        int size = sizeof(toggleButton) / sizeof(toggleButton[0]);
+        for (int i = 0; i < size; i++)
+        {
+            if (toggleButton[i] != nullptr)
+            {
+                delete toggleButton[i];
+                toggleButton[i] = nullptr;
+            }
+        }
+    }
+
+    UIToggleButton *DropDownCardPage2::ToggleButtonInit(ToggleButtonConfig &toggleButtonConfig)
+    {
+        UIToggleButton *toggleButton = new UIToggleButton();
+        if (toggleButton == nullptr)
+        {
+            return nullptr;
+        }
+        toggleButton->SetPosition(toggleButtonConfig.left, toggleButtonConfig.top, toggleButtonConfig.width, toggleButtonConfig.height);
+        toggleButton->SetViewId(toggleButtonConfig.viewId);
+        toggleButton->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+        toggleButton->SetStyle(STYLE_BORDER_RADIUS, 200);
+        toggleButton->SetImages(toggleButtonConfig.selectImg, toggleButtonConfig.unselectImg);
+
+        toggleButton->SetTouchable(toggleButtonConfig.isTouchable);
+        toggleButton->SetOnClickListener(this);
+        return toggleButton;
+    }
+
+    bool DropDownCardPage2::InitPage(void)
+    {
+        int size = sizeof(toggleButton) / sizeof(toggleButton[0]);
+        ToggleButtonConfig toggleButtonConfig[] = {
+            {0, 0, 100, 100, DROPDOWN_FINDPHONE_TOGGLEBUTTON_VIEWID, DROPDOWN_FINDPHONE_IMAGE, DROPDOWN_FINDPHONE_IMAGE, true},
+            {110, 0, 100, 100, DROPDOWN_LIGHTING_TOGGLEBUTTON_VIEWID, DROPDOWN_LIGHTING_IMAGE, DROPDOWN_LIGHTING_IMAGE, true},
+        };
+
+        for (int i = 0; i < size; i++)
+        {
+            if (toggleButton[i] == nullptr)
+            {
+                toggleButton[i] = ToggleButtonInit(toggleButtonConfig[i]);
+                if (toggleButton[i] == nullptr)
+                {
+                    return false;
+                }
+                Add(toggleButton[i]);
+            }
+        }
+        return true;
+    }
+
+    bool DropDownCardPage2::InitView(void *caller)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "DropDownCardPage2::InitView %p", caller);
+        if (InitPage() == false)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "DropDownCardPage2::InitPage fail");
+            return false;
+        }
+        SetDraggable(true);
+        SetTouchable(true);
+        return true;
+    }
+
+    UIToggleButton *DropDownCardPage2::GetDropDownCardPage2_ToggleButton(int index)
+    {
+        return toggleButton[index];
+    }
+}
\ No newline at end of file