【系统】UI
authorCaisking <Casiking@zhihuishixun.com>
Mon, 28 Apr 2025 09:31:29 +0000 (17:31 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Mon, 28 Apr 2025 09:31:29 +0000 (17:31 +0800)
22 files changed:
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemAboutTheWatchView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemFactoryResetView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemLogModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemLogModelC.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemPresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemPresenterC.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemRestart.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemShutdown.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemSuperviseView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/Systemupgrade.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemAboutTheWatchView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemFactoryResetView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemLogModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemPresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemRestart.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemShutdown.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemSuperviseView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemView.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/Systemupgrade.cpp [new file with mode: 0644]

diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemAboutTheWatchView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemAboutTheWatchView.h
new file mode 100644 (file)
index 0000000..1f943bd
--- /dev/null
@@ -0,0 +1,74 @@
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-03-30 09:14:38\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-10-10 14:48:08\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemAboutTheWatchView.h\r
+ */\r
+#ifndef SYSTEM_ABOUT_VIEW_H\r
+#define SYSTEM_ABOUT_VIEW_H\r
+\r
+\r
+#include "View.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_image_view.h"\r
+#include <iostream>\r
+namespace OHOS\r
+{\r
+    static constexpr const char *SYSTEMABOUTTHEWATCHVIEWID = "SystemAboutTheWatchView";   // 关于手表\r
+    class SystemAboutTheWatchView\r
+    {\r
+\r
+    public:\r
+        SystemAboutTheWatchView();\r
+        virtual ~SystemAboutTheWatchView();\r
+        static SystemAboutTheWatchView *GetInstance(void);\r
+        struct LabelConfig\r
+        {\r
+            int16_t left;\r
+            int16_t top;\r
+            int16_t width;\r
+            int16_t height;\r
+            int16_t fontSize;      // 字体大小\r
+            int16_t lineHeigh;     // 行高\r
+            std::string text;      // 文本\r
+            uint16_t textId;      \r
+            uint8_t lineBreakMode; // 断行模式。\r
+        };\r
+        UIScrollView *SystemAbouTheWatchtInitIView(void);\r
+        void ClearAll(void);\r
+        UILabelExt *InitLabel_Ext(LabelConfig &labelConfig);\r
+        UILabel *InitLabel(LabelConfig &labelConfig);\r
+\r
+    private:\r
+        bool SetSystemAboutTheWatchScrollView(void);\r
+        UIScrollView *SystemAboutTheWatchScrollView{nullptr};\r
+        UILabelExt *SystemAboutTheWatchTitle{nullptr}; // "关于"\r
+        UILabelExt *WatchNameTitle{nullptr};           // "手表名称Title"\r
+        UILabel *WatchName{nullptr};                   // "手表名称"\r
+        UILabelExt *FirmwareVersionTitle{nullptr};     // "固件版本Title"\r
+        UILabel *FirmwareVersion{nullptr};             // "固件版本"\r
+        UILabelExt *BluetoothNameTitle{nullptr};       // "蓝牙名称Title"\r
+        UILabel *BluetoothName{nullptr};               // "蓝牙名称"\r
+        UILabelExt *BluetoothAddressTitle{nullptr};    // "蓝牙地址Title"\r
+        UILabel *BluetoothAddress{nullptr};            // "蓝牙地址"\r
+        UILabel *Network4GTitle{nullptr};           // "4G ModemTitle"\r
+        UILabel *Network4G{nullptr};                   // "4G Modem"\r
+        UILabel *PyVerTitle{nullptr};               // "pyVerTitle"\r
+        UILabel *PyVer{nullptr};                       // "pyVer"\r
+        UILabel *IMELTitle{nullptr};                // "IMELTitle"\r
+        UILabel *IMEL{nullptr};                        // "IMELTitle"\r
+        UILabel *FONTTitle = nullptr;\r
+        UILabel *FONT = nullptr;\r
+        UILabel *HWVERTitle = nullptr;\r
+        UILabel *HWVER = nullptr;\r
+        UILabel *CyweeVersionTitle = nullptr;\r
+        UILabel *CyweeVersion = nullptr;\r
+        UILabel *APNprotocolTitle = nullptr;     //APN协议\r
+        UILabel * APNprotocol = nullptr;\r
+        bool initViewStatus{false};\r
+    };\r
+}\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemFactoryResetView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemFactoryResetView.h
new file mode 100644 (file)
index 0000000..071d271
--- /dev/null
@@ -0,0 +1,42 @@
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-01-29 15:37:44\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-10-26 11:47:49\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemFactoryResetView.h\r
+ */\r
+#ifndef SYSTEM_FACTORYRESET_VIEW_H\r
+#define SYSTEM_FACTORYRESET_VIEW_H\r
+\r
+\r
+#include "View.h"\r
+\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_label_ext.h"\r
+namespace OHOS\r
+{\r
+    class SystemFactoryResetView\r
+    {\r
+\r
+    public:\r
+        SystemFactoryResetView();\r
+        virtual ~SystemFactoryResetView();\r
+        static SystemFactoryResetView *GetInstance(void);\r
+\r
+        UIScrollView *SystemFactoryResetViewInit(void);\r
+        void ClearAll(void);\r
+\r
+    private:\r
+        UIScrollView *scrollView{nullptr};\r
+        UILabelExt *Title{nullptr};\r
+        UIImageView *FactoryResetImage{nullptr};\r
+        UILabelExt *FactoryResetNote{nullptr};\r
+        UIButton *FactoryResetButtonCheckOn{nullptr};  // 重置确认\r
+        UIButton *FactoryResetButtonCheckOff{nullptr}; // 重置否定\r
+        UIImageView *temp{nullptr};\r
+        bool initViewStatus{false};\r
+    };\r
+} // namespace OHOS\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemLogModel.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemLogModel.h
new file mode 100644 (file)
index 0000000..0368b7f
--- /dev/null
@@ -0,0 +1,132 @@
+#ifndef SYSTEM_LOG_MODEL_H  
+#define SYSTEM_LOG_MODEL_H  
+
+#include <cstddef>
+#include <cstdint>  
+#include <deque>  
+#include <string>  
+#include <memory>  
+
+#define TOTAL_MUSIC_SPACE (53 * 1024 * 1024) // 53M
+#define TOTAL_MUSIC_SPACE_PATH "/user/music/user_music"
+
+#define TOTAL_RECORDING_SPACE (10 * 1024 * 1024) // 10M
+#define TOTAL_RECORDING_SPACE_PATH "/user/music/recording"
+
+#define TOTAL_RING_SPACE (2 * 1024 * 1024) // 2M
+#define TOTAL_RING_SPACE_PATH "/user/music/ring"
+
+#define TOTAL_DIAL_SPACE (5 * 1024 * 1024) // 5M
+#define TOTAL_DIAL_SPACE_PATH "/user/dial/offline_dial"
+
+#define TOTAL_RES_DIAL_SPACE (5 * 1024 * 1024) // 5M
+#define TOTAL_RES_DIAL_SPACE_PATH "/user/dial/res_dial"
+
+#define TOTAL_CUSTOM_DAIL_SPACE (1 * 1024 * 1024) // 1M
+#define TOTAL_CUSTOM_DAIL_SPACE_PATH "/user/dial/custom_dial"
+
+#define TOTAL_SYSTEM_SPACE (5 * 1024 * 1024) // 5M
+#define TOTAL_SYSTEM_SPACE_PATH "/user/system"
+
+#define TOTAL_RES_SPACE (40 * 1024 * 1024) // 40M
+#define TOTAL_RES_SPACE_PATH "/user/user/res"
+
+#define TOTAL_USERDATA_SPACE (5 * 1024 * 1024) // 5M
+#define TOTAL_USERDATA_SPACE_PATH "/user/user/userdata"
+
+#define TOTAL_UPDATE_SPACE (15 * 1024 * 1024) // 15M
+#define TOTAL_UPDATE_SPACE_PATH "/user/update"
+
+#define TOTAL_SPACE_SIZE (TOTAL_MUSIC_SPACE + TOTAL_RECORDING_SPACE + TOTAL_RING_SPACE + TOTAL_DIAL_SPACE + TOTAL_RES_DIAL_SPACE + TOTAL_CUSTOM_DAIL_SPACE + TOTAL_SYSTEM_SPACE + TOTAL_RES_SPACE + TOTAL_USERDATA_SPACE + TOTAL_UPDATE_SPACE) // 总空间大小
+
+#define TOTAL_SYSTEM_SIZE (128 * 1024 * 1024) // 系统空间大小
+
+namespace OHOS {  
+
+enum class SystemLogType {  
+    POWER_ON = 0,    // 开机  
+    POWER_OFF,       // 关机  
+    RESTART,         // 重启  
+    FACTORY_RESET,   // 恢复出厂设置  
+    SOFTWARE_UPDATE, // 更新  
+};  
+
+struct SystemLogData {  
+    SystemLogType type; // 日志类型  
+    uint32_t timestamp; // 时间戳  
+};
+
+enum class nextday_type {
+  NEXTDAY_BEGAN = 0,
+  NEXTDAY_END,
+};
+
+struct nextday_log_data {
+  nextday_type type;
+  uint32_t timestamp;
+};
+
+enum class popup_windows_type // 弹窗类型
+{
+    MOTION_RECOGNITION = 0,     // 运动识别
+    DRINK_WATER_REMINDER,       // 喝水提醒
+    SEDENTARY_REMINDER,         // 久坐提醒
+};
+
+struct popup_windows_log_data {
+    popup_windows_type type; // 弹窗类型
+    uint32_t timestamp;      // 时间戳
+};
+class SystemLogModel {  
+public:  
+    // 获取单例实例  
+    static SystemLogModel *GetInstance(void);
+
+    /* ---------------------------------- 系统日志 ---------------------------------- */  
+    bool saveLog(SystemLogData data); // 保存日志  
+    bool loadLog(); // 加载日志  
+    const std::deque<SystemLogData> &getLogData() const; // 获取日志记录(常量引用)  
+    size_t getLogSize() const; // 获取日志数量  
+    uint32_t GetCurrentTime(); // 获取当前时间  
+    /* ---------------------------------- 系统内存 ---------------------------------- */  
+    std::string get_system_mem_info(); // 获取系统内存信息
+    long long getFolderSize(const char* folderPath);
+    bool canSyncFile(std::string path,uint32_t path_max_size,uint32_t download_size); // 获取文件占用空间大小  
+    long long getResRealSize(void)
+    {
+        return getFolderSize(TOTAL_RES_SPACE_PATH);
+    }
+    /* ------------------------------- nextday日志记录 ------------------------------ */  
+    bool save_nextday_log(nextday_log_data data); // 保存nextday日志  
+    bool load_nextday_log(); // 加载nextday日志  
+    const std::deque<nextday_log_data> &get_nextday_log() const; // 获取nextday日志记录(常量引用)  
+    size_t get_nextday_log_size() const;//获取日志大小
+    /* ------------------------------ popup_windows 日志记录----------------------------- */
+    bool save_popup_windows_log(popup_windows_log_data data);                // 保存popup_windows日志
+    void save_popup_windows_log_type(int type);                              // 保存popup_windows日志
+    bool load_popup_windows_log();                                           // 加载popup_windows日志
+    const std::deque<popup_windows_log_data> &get_popup_windows_log() const; // 获取popup_windows日志记录(常量引用)
+    size_t get_popup_windows_log_size() const;                               // 获取日志大小
+    void clear_popup_windows_log(); // 清空popup_windows日志记录
+    /* ---------------------------------- 串口控制 ---------------------------------- */
+    void init_uart();
+    void set_uart_status(bool status);
+    bool get_uart_status();
+
+private:  
+    SystemLogModel() = default; // 私有构造函数
+    ~SystemLogModel() = default; // 默认析构函数
+  
+    // 禁止拷贝和赋值  
+    SystemLogModel(const SystemLogModel &) = delete;  
+    SystemLogModel &operator=(const SystemLogModel &) = delete;  
+
+    std::deque<SystemLogData> logData;          // 存储日志数据  
+    std::deque<nextday_log_data> nextday_log;           // 存储nextday时间戳
+    std::deque<popup_windows_log_data> popup_windows_log; // 存储popup_windows时间戳
+
+    bool uart_status{false};
+};  
+} // namespace OHOS  
+
+#endif // SYSTEM_LOG_MODEL_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemLogModelC.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemLogModelC.h
new file mode 100644 (file)
index 0000000..cbcbc4b
--- /dev/null
@@ -0,0 +1,26 @@
+#ifndef SYSTEMLOGC_H
+#define SYSTEMLOGC_H
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif
+#endif
+
+void start_report_log(void);
+void stop_report_log(void);
+void resume_report_log(void);
+void update_version_report_log(void);
+void start_report_nextday_log_start(void);
+void start_report_nextday_log_end(void);
+void nextday_clear_popup_windows_log(void);
+void save_popup_windows_log_c(int type);
+void system_init_uart(void);
+
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+#endif
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemModel.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemModel.h
new file mode 100644 (file)
index 0000000..0ef20be
--- /dev/null
@@ -0,0 +1,22 @@
+
+#ifndef SYSTEM_MODEL_H
+#define SYSTEM_MODEL_H
+
+namespace OHOS
+{
+    int start_report_timer(void);
+    class SystemModel
+    {
+    public:
+        static SystemModel *GetInstance(void);
+
+    private:
+        SystemModel() = default;
+        ~SystemModel(){}
+        SystemModel(const SystemModel &) = delete;
+        SystemModel &operator=(const SystemModel &) = delete;
+        
+    };
+}
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemPresenter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemPresenter.h
new file mode 100644 (file)
index 0000000..e628ae3
--- /dev/null
@@ -0,0 +1,59 @@
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-03-30 18:29:43\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-08-28 19:55:18\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemPresenter.h\r
+ */\r
+\r
+#ifndef SYSTEM_PRESENTER_H\r
+#define SYSTEM_PRESENTER_H\r
+\r
+#include "Presenter.h"\r
+#include "SystemView.h"\r
+#include "system/include/SystemModel.h"\r
+#include "components/ui_radio_button.h"\r
+#include "KeyInputListener.h"\r
+  #include "cat1_ctl.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    /* ---------------------------- 恢复出厂设置界面按钮的VIEWID --------------------------- */\r
+    static const char *FACTORYRESET_CHECKON = "factoryresetButtonCheckOn";   // 确认\r
+    static const char *FACTORYRESET_CHECKOFF = "factoryresetButtonCheckOff"; // 取消\r
+\r
+    class SystemView;\r
+    class SystemPresenter : public Presenter<SystemView>,\r
+                            public UIView::OnClickListener,\r
+                            public RootView::OnKeyActListener,\r
+                            public UIView::OnDragListener,\r
+                            public UIView::OnTouchListener\r
+    {\r
+    public:\r
+        SystemPresenter();\r
+        virtual ~SystemPresenter();\r
+\r
+        void OnStart() override;\r
+        void OnPause() override;\r
+        void OnResume() override;\r
+        void OnStop() override;\r
+\r
+        static SystemPresenter *GetInstance();\r
+\r
+    private:\r
+        // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承;\r
+        bool OnClick(UIView &view, const ClickEvent &event) override;\r
+        bool OnDrag(UIView &view, const DragEvent &event) override;\r
+        bool OnDragEnd(UIView &view, const DragEvent &event) override;\r
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件\r
+        bool OnPress(UIView &view, const PressEvent &event) override;\r
+\r
+    private:\r
+        SystemModel *systemModel;\r
+        bool X_DRAG_FLAG{false};\r
+        bool isShutDownImageAnimatorStart{false};\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemPresenterC.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemPresenterC.h
new file mode 100644 (file)
index 0000000..d48a446
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-06-07 11:18:25
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-07-02 11:07:00
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemPresenterC.h
+ * @Description: 
+ * 
+ * Copyright (c) 2024 by ${git_name_email}, All Rights Reserved. 
+ */
+#ifndef SYSTEM_PRESENTER_H
+#define SYSTEM_PRESENTER_H
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif
+#endif
+    void factorytest_enter_test_view(int cmd);
+    
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+#endif
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemRestart.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemRestart.h
new file mode 100644 (file)
index 0000000..2b66ade
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-28 17:29:39
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-28 19:09:57
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemRestart.h
+ */
+#ifndef _RESTARTVIEW_VIEW_H_
+#define _RESTARTVIEW_VIEW_H_
+
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+#include "components/ui_image_view.h"
+#include "components/ui_scroll_view.h"
+namespace OHOS
+{
+    static const char *RESTARTVIEW_CHECKON = "RestartButtonCheckOn";   // 确认
+    static const char *RESTARTVIEW_CHECKOFF = "RestartButtonCheckOff"; // 取消
+    class SystemRestart
+    {
+    public:
+        SystemRestart();
+        ~SystemRestart();
+        UIScrollView *SystemRestartViewInit(void);
+
+    private:
+        void ClearAll(void);
+        UIScrollView *SystemRestartScrollView = nullptr;
+        UILabelExt *title{nullptr};
+        UILabelExt *note{nullptr};
+        UIImageView *image = nullptr;
+        UIButton *button_ensure = nullptr;
+        UIButton *button_cancel = nullptr;
+    };
+
+}
+#endif
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemShutdown.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemShutdown.h
new file mode 100644 (file)
index 0000000..45fb2dc
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-28 17:29:39
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-28 18:08:10
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemShutdown.h
+ */
+#ifndef _SHUTDOWN_VIEW_H_
+#define _SHUTDOWN_VIEW_H_
+
+#include "components/ui_label_ext.h"
+#include "components/ui_button.h"
+#include "components/ui_image_view.h"
+#include "components/ui_scroll_view.h"
+namespace OHOS
+{
+    static const char *SHUTDOWN_CHECKON = "ShoutDownButtonCheckOn";   // 确认
+    static const char *SHUTDOWN_CHECKOFF = "ShoutDownButtonCheckOff"; // 取消
+    class SystemShutdown
+    {
+    public:
+        SystemShutdown();
+        ~SystemShutdown();
+        UIScrollView *SystemShutdownViewInit(void);
+
+    private:
+        void ClearAll(void);
+        UIScrollView *SystemShutdownScrollView = nullptr;
+        UILabelExt *title{nullptr};
+        UILabelExt *note{nullptr};
+        UIImageView *image = nullptr;
+        UIButton *button_ensure = nullptr;
+        UIButton *button_cancel = nullptr;
+    };
+
+}
+#endif
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemSuperviseView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemSuperviseView.h
new file mode 100644 (file)
index 0000000..30e6b70
--- /dev/null
@@ -0,0 +1,32 @@
+#ifndef SYSTEM_SUPERVISE_VIEW_H\r
+#define SYSTEM_SUPERVISE_VIEW_H\r
+\r
+\r
+#include "View.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_label.h"\r
+#include "components/ui_label_ext.h"\r
+namespace OHOS\r
+{\r
+\r
+    class SystemSuperviseView\r
+    {\r
+    public:\r
+        SystemSuperviseView();\r
+        virtual ~SystemSuperviseView();\r
+        static SystemSuperviseView *GetInstance(void);\r
+        UILabel *InitLabel(int left, int top, int width, int height, const char *text, const char *viewId, int fontSize, int fontlineHeigh, uint16_t speed);\r
+        UIScrollView *SystemSuperviseViewInit(void);\r
+        void ClearAll(void);\r
+\r
+    private:\r
+        UIScrollView *SystemSuperviseViewScrollView = nullptr;\r
+        UILabel *Title = nullptr;\r
+        UILabel *ProductModel = nullptr;\r
+        UILabel *ProductModelName = nullptr;\r
+        UILabel *CMIT = nullptr;\r
+        UILabel *CMITName = nullptr;\r
+        bool initViewStatus{false};\r
+    };\r
+} // namespace OHOS\r
+#endif // SLEEPDETAIL_PRESENTER_H
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/SystemView.h
new file mode 100644 (file)
index 0000000..93a73ca
--- /dev/null
@@ -0,0 +1,123 @@
+/*\r
+ * @Author: luozheng 1732036298@qq.com\r
+ * @Date: 2024-03-30 18:29:39\r
+ * @LastEditors: luozheng 1732036298@qq.com\r
+ * @LastEditTime: 2024-11-14 18:32:02\r
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/include/SystemView.h\r
+ */\r
+#ifndef SYSTEM_VIEW_H\r
+#define SYSTEM_VIEW_H\r
+\r
+\r
+#include "View.h"\r
+\r
+#include "components/ui_view_group.h"\r
+#include "components/ui_scroll_view.h"\r
+#include "components/ui_label_ext.h"\r
+#include "components/ui_image_view.h"\r
+#include "components/ui_button.h"\r
+#include "components/ui_label_button_ext.h"\r
+#include "system/include/SystemAboutTheWatchView.h"\r
+// #include "system/include/SystemSuperviseView.h"\r
+#include "system/include/SystemFactoryResetView.h"\r
+// #include "system/include/Systemupgrade.h"\r
+#include "components/ui_toggle_button.h"\r
+#include "system/include/SystemShutdown.h"\r
+#include "system/include/SystemRestart.h"\r
+#include "rebootandshutdown/include/ShutDownImageAnimatorView.h"\r
+namespace OHOS\r
+{\r
+    static constexpr const char *ABOUT_THE_WATCH = "AboutTheWatchButton";       // 关于手表\r
+    static constexpr const char *SYSTEM_UPGRADE = "SystemUpgradeButtonExt";     // 系统升级\r
+    static constexpr const char *SYSTEM_UPGRADE_t = "SystemUpgradeButtonExt_t"; // 点击系统升级\r
+    static constexpr const char *WATCH_QR_CODE = "WatchqrcodeButton";           // 手表二维码\r
+    static constexpr const char *SYSTEM_LANGUAGE = "SystemLanguageButton";      // 系统语言\r
+    static constexpr const char *RESTART = "RestartButton";                     // 重启\r
+    static constexpr const char *SHUTDOWN = "ShutdownButton";                   // 关机\r
+    static constexpr const char *FACTORY_RESET = "FactoryResetButton";          // 恢复出厂设置\r
+    static constexpr const char *SET_TIME_FORMAT = "SetTimeFormatButton";       // 设置时间格式\r
+\r
+    typedef enum\r
+    {\r
+        SYSTEMVIEW = 0,       // 系统视图(slice)\r
+        ABOUTTHEWATCHVIEW,    // 关于手表视图(subView)\r
+        RESTARTVIEW,          // 重启视图(subView)\r
+        SHUTDOWNVIEW,         // 关机视图(subView)\r
+        FACTORYRESETVIEW,     // 恢复出厂设置视图(subView)\r
+        SHUTDOWNANIMATIONVIEW, // 关机动画(subView)\r
+        MAX_SYSTEMVIEWID,\r
+    } SYSTEMVIEWID;\r
+\r
+    class SystemPresenter;\r
+    class SystemView : public View<SystemPresenter>\r
+    {\r
+\r
+    public:\r
+        struct LabelConfig\r
+        {\r
+            int16_t left;\r
+            int16_t top;\r
+            int16_t width;\r
+            int16_t height;\r
+            int16_t fontSize;\r
+            int16_t lineHeigh;\r
+            uint16_t textId;\r
+            uint8_t lineBreakMode;\r
+        };\r
+\r
+        SystemView();\r
+        ~SystemView();\r
+        static SystemView *GetInstance(void);\r
+\r
+        void OnStart() override;\r
+      \r
+\r
+        struct ButtonConfig\r
+        {\r
+            int16_t x;\r
+            int16_t y;\r
+            int16_t w;\r
+            int16_t h;\r
+            const char *viewId;\r
+        };\r
+\r
+        bool ChangeToSystemView(int16_t thisView);\r
+        bool ChangeToSystemAboutView(int16_t thisView);\r
+        bool ChangeToSystemFactoryResetView(int16_t thisView);\r
+        bool ChangeToSystemRestartView(int16_t thisView);\r
+        bool ChangeToSystemShutdownView(int16_t thisView);\r
+        bool ChangeToSystemShutdownAnimatorView(int16_t thisView);\r
+        bool ClickFunc(int16_t interface);\r
+        bool CheckViewParam(int16_t hideView, int16_t showView);\r
+        void ChangeView(int16_t hideView, int16_t showView);\r
+        UIScrollView *GetSystemScrollView(int ViewId);\r
+\r
+    private:\r
+        SystemAboutTheWatchView *p_SystemAboutTheWatchView{nullptr};     // 关于手表\r
+        SystemFactoryResetView *p_SystemFactoryResetView{nullptr};       // 恢复出厂设置\r
+        SystemRestart *p_SystemRestart{nullptr};                         // 重启\r
+        SystemShutdown *p_SystemShutdown{nullptr};                       // 关机\r
+        ShutDownImageAnimatorView *p_ShutDownImageAnimatorView{nullptr}; // 关机动画\r
+\r
+    private:\r
+        UILabelButtonExt *SystemViewLabelButtonInit(ButtonConfig &buttonconfig);\r
+        UILabelExt *SystemViewLabelInit(LabelConfig &labelconfig);\r
+        bool CreateSystemViewLabel(void);\r
+        bool CreateSystemViewLabelButton(void);\r
+        bool CreateSystemScrollView(void);\r
+        void CreateSystemView(void);\r
+        void ClearAll(void);\r
+        void NeedToUpdateImageinit(void);\r
+        UILabelExt *Title{nullptr}; // 标题\r
+        UIScrollView *SystemScrollView[MAX_SYSTEMVIEWID]{nullptr};\r
+        UILabelButtonExt *SystemViewLabelButton[10]{nullptr};\r
+        UILabelExt *SystemViewLabel[10]{nullptr};\r
+        int SystemViewLabelNum{0};\r
+        int SystemViewButtonNum{0};\r
+        UIImageView *NeedToUpdateImage{nullptr}; // 提示需要系统更新的icon图片\r
+        UIImageView *temp{nullptr};\r
+        bool viewInitStatus{false};\r
+    };\r
+} // namespace OHOS\r
+\r
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/Systemupgrade.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/include/Systemupgrade.h
new file mode 100644 (file)
index 0000000..b476a30
--- /dev/null
@@ -0,0 +1,135 @@
+#ifndef SYSTEM_UPGRADE_VIEW_H
+#define SYSTEM_UPGRADE_VIEW_H
+
+
+#include "View.h"
+
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_label_button_ext.h"
+#include "cat1_ctl.h"
+#include "upg_common_porting.h"
+
+#if USE_THISIOT
+#define HTTP_JSON_SERVER_NAME "test.iot.api.thisiot.com"//"test.app.api.thisiot.com"//获取升级服务器
+#define HTTP_FWPGK_SERVER_NAME "r-oss.thisiot.com"//"//升级包服务器
+#define PORT (80)//(443)//http端口号
+#define POST_URL "http://test.iot.api.thisiot.com/ota/update-result"//上报url
+#define JSON_URL "http://test.iot.api.thisiot.com/ota/task?deviceId=%s&sourceVersion=%s"//获取升级url
+#else
+
+/**
+ * http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver=V1.1_20240316_115535&imei=864430010001091
+查看 返回的"UptoDate" == False,即可根据"url"地址下载,文件校验可以后面再加。
+{ "UptoDate": false ,
+
+ "OtaPackageVersion" : "V1.1_20240316_130929", 
+"SystemVersion" : "V1.1_20240316_115535", 
+"description" : " update to checkota version 3 ",
+ "md5sum" : "f51486072dc3d81f30610d6d5a58d717", 
+"AutoUpdate" : true }
+*/
+#define HTTP_JSON_SERVER_NAME "snicker.com.cn"//"test.app.api.thisiot.com"//获取升级服务器
+#define HTTP_FWPGK_SERVER_NAME "snicker.com.cn"//"//升级包服务器
+#define PORT (8089)//(443)//http端口号
+#define POST_URL "http://snicker.com.cn:8089"//上报url
+#define JSON_URL "http://snicker.com.cn:8089/fd230otanew.jsp?product=FD230&imei=%s&pkgver=%s"//获取升级url
+#endif
+
+#ifdef SINGLE_USER_PARTITION
+
+#define UPDATAJSONPATH "/user/update/ota_start_.json"//获取升级的得到的json
+#define UPDATAREPORT "/user/update/ota_start_reported_.json"//点升级后保存下来的json
+#define UPDATAFWPKGPATH  UPG_FILE_NAME //升级包
+#define UPDATAREPORT_  "/user/update/ota_report_.json"//上报升级得到的json
+
+#else
+
+#define UPDATAJSONPATH "/update/ota_start_.json"//获取升级的得到的json
+#define UPDATAREPORT "/update/ota_start_reported_.json"//点升级后保存下来的json
+#define UPDATAFWPKGPATH  UPG_FILE_NAME //升级包
+#define UPDATAREPORT_  "/update/ota_report_.json"//上报升级得到的json
+
+#endif
+
+namespace OHOS
+{
+    // typedef enum {
+    // IOT_CODE_0,
+    // IOT_CODE_IS_NEW=20006,//已是最新版本
+    // IOT_CODE_SUCCESS=20007,//有新版本,唯一成功id,不是这个都表示没有升级版本data为NULL
+    // IOT_CODE_FAIL_1=50000,//设备源版本不能为空
+    // IOT_CODE_FAIL_2=50012,//设备未注册
+    // } iot_code;
+
+    
+    class SystemupgradeView
+    {
+
+    public:
+        SystemupgradeView();
+        virtual ~SystemupgradeView();
+        static SystemupgradeView *GetInstance(void);
+
+        UIScrollView *SystemupgradeViewInit(void);
+        void ClearAll(void);
+        void set_string_value(char *str,bool);
+        void cat1_up_success(void);
+        struct LabelConfig
+        {
+            int16_t left;
+            int16_t top;
+            int16_t width;
+            int16_t height;
+            int16_t fontSize;      // 字体大小
+            int16_t lineHeigh;     // 行高
+            char *text;      // 文本
+            uint8_t lineBreakMode; // 断行模式。
+        };
+        UILabel *InitLabel(LabelConfig &labelConfig);
+
+        UILabel *newVersionTitle{nullptr}; //  "最新软件版本"
+        UILabel *newVersion{nullptr};
+
+        void detection_update(void);
+
+        void statr_down_fwpkg(void);
+
+        void statr_upgrade(void);
+
+        UILabel *FirmwareVersionTitle{nullptr}; //  "固件版本"
+        UILabel *FirmwareVersion{nullptr};
+        UILabel *new_label{nullptr};
+
+        UILabel *cat1Version{nullptr};
+        UILabel *cat1label{nullptr};
+
+        void init_fail(uint8_t);
+    private:
+        UIScrollView *scrollView{nullptr};
+        //UIImageView *FactoryResetImage{nullptr};       // 恢复出厂设置背景图片
+        //UIButton *FactoryResetButtonCheckOn{nullptr};  // 重置确认
+       // UIButton *FactoryResetButtonCheckOff{nullptr}; // 重置否定
+        UILabelButtonExt * SystemUpgradeButton_;
+        UILabel *systemupgrade{nullptr}; //  "固件版本"
+        UILabel  *label_updating{nullptr}; 
+        UILabel  *label1_fail{nullptr};
+
+        UIViewGroup *container_updating{nullptr}; 
+        UIViewGroup *container_fail{nullptr}; 
+        UILabelButtonExt *labelButton1_exit=NULL;
+        void init_updating(); 
+        
+        bool is_new_version=false;
+        bool is_new_cat1_version=false;
+
+        bool is_fwpkg_ready=false;
+        
+
+        bool initViewStatus{false};
+    };
+} // namespace OHOS
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemAboutTheWatchView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemAboutTheWatchView.cpp
new file mode 100644 (file)
index 0000000..a90eb16
--- /dev/null
@@ -0,0 +1,682 @@
+#include "system/include/SystemAboutTheWatchView.h"\r
+#include "system/include/SystemPresenter.h"\r
+#include "wearable_log.h"\r
+#include "custom_utils.h"\r
+#include "ConfigModel.h"\r
+#include "ui_resource_string.h"\r
+\r
+#define WATCH_ABOUT_TITLE_HEIGHT 50\r
+#define WATCH_ABOUT_VALUE_HEIGHT 80\r
+#define WATCH_NAME_POS_TOP 140\r
+#define WATCH_NAME_VALUE_POS_TOP (WATCH_NAME_POS_TOP + WATCH_ABOUT_TITLE_HEIGHT)\r
+#define WATCH_FIRMWARE_POS_TOP (WATCH_NAME_VALUE_POS_TOP + WATCH_ABOUT_VALUE_HEIGHT)\r
+#define WATCH_FIRMWARE_VALUE_POS_TOP (WATCH_FIRMWARE_POS_TOP + WATCH_ABOUT_TITLE_HEIGHT)\r
+#define WATCH_HWVER_TOP (WATCH_FIRMWARE_VALUE_POS_TOP + WATCH_ABOUT_VALUE_HEIGHT)\r
+#define WATCH_HWVER_VALUE_TOP (WATCH_HWVER_TOP + WATCH_ABOUT_TITLE_HEIGHT)\r
+#define WATCH_BT_NAME_TOP (WATCH_HWVER_VALUE_TOP + WATCH_ABOUT_VALUE_HEIGHT)\r
+#define WATCH_BT_NAME_VALUE_TOP (WATCH_BT_NAME_TOP + WATCH_ABOUT_TITLE_HEIGHT)\r
+#define WATCH_BT_ADDR_TOP (WATCH_BT_NAME_VALUE_TOP + WATCH_ABOUT_VALUE_HEIGHT)\r
+#define WATCH_BT_ADDR_VALUE_TOP (WATCH_BT_ADDR_TOP + WATCH_ABOUT_TITLE_HEIGHT)\r
+#define WATCH_MODEM_VERSION_TOP (WATCH_BT_ADDR_VALUE_TOP + WATCH_ABOUT_VALUE_HEIGHT)\r
+#define WATCH_MODEM_VERSION_VALUE_TOP (WATCH_MODEM_VERSION_TOP + WATCH_ABOUT_TITLE_HEIGHT)\r
+#define WATCH_MODEM_APP_VERSION_TOP (WATCH_MODEM_VERSION_VALUE_TOP + WATCH_ABOUT_VALUE_HEIGHT)\r
+#define WATCH_MODEM_APP_VERSION_VALUE_TOP (WATCH_MODEM_APP_VERSION_TOP + WATCH_ABOUT_TITLE_HEIGHT)\r
+#define WATCH_APN_PROTOCOL_TOP (WATCH_MODEM_APP_VERSION_VALUE_TOP + WATCH_ABOUT_VALUE_HEIGHT)\r
+#define WATCH_APN_PROTOCOL_VALUE_TOP (WATCH_APN_PROTOCOL_TOP + WATCH_ABOUT_TITLE_HEIGHT)\r
+#define WATCH_IMEI_TOP (WATCH_APN_PROTOCOL_VALUE_TOP + WATCH_ABOUT_VALUE_HEIGHT)\r
+#define WATCH_IMEI_VALUE_TOP (WATCH_IMEI_TOP + WATCH_ABOUT_TITLE_HEIGHT)\r
+#define WATCH_FONT_TOP (WATCH_IMEI_VALUE_TOP + WATCH_ABOUT_VALUE_HEIGHT)\r
+#define WATCH_FONT_VALUE_TOP (WATCH_FONT_TOP + WATCH_ABOUT_TITLE_HEIGHT)\r
+#define WATCH_CYWEEVER_TOP (WATCH_FONT_VALUE_TOP + WATCH_ABOUT_VALUE_HEIGHT)\r
+#define WATCH_CYWEEVER_TOP_VALUE_TOP (WATCH_CYWEEVER_TOP + WATCH_ABOUT_TITLE_HEIGHT)\r
+\r
+namespace OHOS\r
+{\r
+    static constexpr uint16_t SYSTEM_ABOUT_THEWATCH_TITLE_X = 83;\r
+    static constexpr uint16_t SYSTEM_ABOUT_THEWATCH_TITLE_Y = 50;\r
+    static constexpr uint16_t SYSTEM_ABOUT_THEWATCH_TITLE_W = 300;\r
+    static constexpr uint16_t SYSTEM_ABOUT_THEWATCH_TITLE_H = 35;\r
+    static constexpr uint16_t SYSTEM_ABOUT_THEWATCH_TITLE_FONTSIZE = 30;\r
+    static constexpr uint16_t SYSTEM_ABOUT_THEWATCH_TITLE_LINEHEIGHT = 35;\r
+\r
+    static constexpr uint16_t TITLE_LABEL_X = 53;\r
+    static constexpr uint16_t TITLE_LABEL_W = 360;\r
+    static constexpr uint16_t TITLE_LABEL_H = 35;\r
+    static constexpr uint16_t TITLE_LABEL_FONTSIZE = 30;\r
+    static constexpr uint16_t TITLE_LABEL_LINEHEIGHT = 35;\r
+\r
+    static constexpr uint16_t LABEL_X = 33;\r
+    static constexpr uint16_t LABEL_W = 400;\r
+    static constexpr uint16_t LABEL_H = 35;\r
+    static constexpr uint16_t LABEL_FONTSIZE = 30;\r
+    static constexpr uint16_t LABEL_LINEHEIGHT = 35;\r
+\r
+    static SystemAboutTheWatchView *g_pSystemAboutTheWatchView{nullptr};\r
+\r
+    SystemAboutTheWatchView::SystemAboutTheWatchView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::SystemAboutTheWatchView");\r
+        g_pSystemAboutTheWatchView = this;\r
+    }\r
+\r
+    SystemAboutTheWatchView::~SystemAboutTheWatchView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::~SystemAboutTheWatchView");\r
+        ClearAll();\r
+        g_pSystemAboutTheWatchView = nullptr;\r
+    }\r
+\r
+    SystemAboutTheWatchView *SystemAboutTheWatchView::GetInstance()\r
+    {\r
+        return g_pSystemAboutTheWatchView;\r
+    }\r
+\r
+    void SystemAboutTheWatchView::ClearAll()\r
+    {\r
+        if (initViewStatus == true)\r
+        {\r
+            SystemAboutTheWatchScrollView->RemoveAll();\r
+\r
+            delete SystemAboutTheWatchTitle;\r
+            SystemAboutTheWatchTitle = nullptr;\r
+\r
+            delete WatchNameTitle;\r
+            WatchNameTitle = nullptr;\r
+            delete WatchName;\r
+            WatchName = nullptr;\r
+\r
+            delete FirmwareVersionTitle;\r
+            FirmwareVersionTitle = nullptr;\r
+            delete FirmwareVersion;\r
+            FirmwareVersion = nullptr;\r
+\r
+            delete BluetoothNameTitle;\r
+            BluetoothNameTitle = nullptr;\r
+            delete BluetoothName;\r
+            BluetoothName = nullptr;\r
+\r
+            delete BluetoothAddressTitle;\r
+            BluetoothAddressTitle = nullptr;\r
+            delete BluetoothAddress;\r
+            BluetoothAddress = nullptr;\r
+\r
+            delete Network4GTitle;\r
+            Network4GTitle = nullptr;\r
+            delete Network4G;\r
+            Network4G = nullptr;\r
+\r
+            delete PyVerTitle;\r
+            PyVerTitle = nullptr;\r
+            delete PyVer;\r
+            PyVer = nullptr;\r
+\r
+            delete IMELTitle;\r
+            IMELTitle = nullptr;\r
+            delete IMEL;\r
+            IMEL = nullptr;\r
+\r
+            delete FONTTitle;\r
+            FONTTitle = nullptr;\r
+            delete FONT;\r
+            FONT = nullptr;\r
+\r
+            delete HWVERTitle;\r
+            HWVERTitle = nullptr;\r
+            delete HWVER;\r
+            HWVER = nullptr;\r
+\r
+            delete CyweeVersionTitle;\r
+            CyweeVersionTitle = nullptr;\r
+            delete CyweeVersion;\r
+            CyweeVersion = nullptr;\r
+\r
+            delete APNprotocolTitle;\r
+            APNprotocolTitle = nullptr;\r
+            delete APNprotocol;\r
+            APNprotocol = nullptr;\r
+\r
+            FocusManager::GetInstance()->ClearFocus();\r
+            delete SystemAboutTheWatchScrollView;\r
+            SystemAboutTheWatchScrollView = nullptr;\r
+        }\r
+    }\r
+\r
+    UILabelExt *SystemAboutTheWatchView::InitLabel_Ext(LabelConfig &labelConfig)\r
+    {\r
+        UILabelExt *label = new UILabelExt();\r
+        if (label == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        label->SetPosition(labelConfig.left, labelConfig.top, labelConfig.width, labelConfig.height); // 位置大小\r
+        label->SetStyle(STYLE_TEXT_FONT, labelConfig.fontSize);                                       // 字体大小\r
+        label->SetStyle(STYLE_LINE_HEIGHT, labelConfig.lineHeigh);                                    // 字体行高\r
+        // label->SetText(labelConfig.text.c_str());                                                  // 内容\r
+        label->SetTextId(labelConfig.textId);\r
+        label->SetLineBreakMode(labelConfig.lineBreakMode); // 断行模式。\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_TOP);\r
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelConfig.fontSize);\r
+        return label;\r
+    }\r
+\r
+    UILabel *SystemAboutTheWatchView::InitLabel(LabelConfig &labelConfig)\r
+    {\r
+        UILabel *label = new UILabel();\r
+        if (label == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        label->SetPosition(labelConfig.left, labelConfig.top, labelConfig.width, labelConfig.height); // 位置大小\r
+        label->SetStyle(STYLE_TEXT_FONT, labelConfig.fontSize);                                       // 字体大小\r
+        label->SetStyle(STYLE_LINE_HEIGHT, labelConfig.lineHeigh);                                    // 字体行高\r
+        label->SetText(labelConfig.text.c_str());                                                     // 内容\r
+        label->SetLineBreakMode(labelConfig.lineBreakMode);                                           // 断行模式。\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_TOP);\r
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME_EN, labelConfig.fontSize);\r
+        return label;\r
+    }\r
+\r
+    bool SystemAboutTheWatchView::SetSystemAboutTheWatchScrollView(void)\r
+    {\r
+        SystemAboutTheWatchScrollView = new UIScrollView();\r
+        if (SystemAboutTheWatchScrollView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::SystemAboutTheWatchScrollView new fail!");\r
+            return false;\r
+        }\r
+        SystemAboutTheWatchScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        SystemAboutTheWatchScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        SystemAboutTheWatchScrollView->SetStyle(STYLE_BORDER_RADIUS, 1294);\r
+        SystemAboutTheWatchScrollView->SetScrollBlankSize(30);\r
+        SystemAboutTheWatchScrollView->SetReboundSize(30);\r
+        SystemAboutTheWatchScrollView->SetDirection(1);\r
+        SystemAboutTheWatchScrollView->SetThrowDrag(true);\r
+        SystemAboutTheWatchScrollView->SetMaxScrollDistance(1000);\r
+        SystemAboutTheWatchScrollView->SetSwipeACCLevel(200); /*设置手指抬起屏幕后的补偿距离。*/\r
+        FocusManager::GetInstance()->RequestFocus(SystemAboutTheWatchScrollView);\r
+        FocusManager::GetInstance()->RequestFocusByDirection(FOCUS_DIRECTION_UP);\r
+        SystemAboutTheWatchScrollView->SetRotateFactor(1.0);\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(SystemPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::draglistener can not be nullptr!");\r
+            return false;\r
+        }\r
+        SystemAboutTheWatchScrollView->SetOnDragListener(draglistener);\r
+\r
+        SystemAboutTheWatchScrollView->SetTouchable(true);\r
+        SystemAboutTheWatchScrollView->SetDraggable(true);\r
+\r
+        SystemAboutTheWatchScrollView->SetViewId(SYSTEMABOUTTHEWATCHVIEWID);\r
+        UIView::OnClickListener *touch = static_cast<UIView::OnClickListener *>(SystemPresenter::GetInstance());\r
+        SystemAboutTheWatchScrollView->SetOnClickListener(touch);\r
+        return true;\r
+    }\r
+\r
+    UIScrollView *SystemAboutTheWatchView::SystemAbouTheWatchtInitIView()\r
+    {\r
+        if (!SetSystemAboutTheWatchScrollView())\r
+        {\r
+            return nullptr;\r
+        }\r
+        /* -------------------------------------------------------------------------- */\r
+        LabelConfig Config = {\r
+            .left = SYSTEM_ABOUT_THEWATCH_TITLE_X,\r
+            .top = SYSTEM_ABOUT_THEWATCH_TITLE_Y,\r
+            .width = SYSTEM_ABOUT_THEWATCH_TITLE_W,\r
+            .height = SYSTEM_ABOUT_THEWATCH_TITLE_H,\r
+            .fontSize = SYSTEM_ABOUT_THEWATCH_TITLE_FONTSIZE,\r
+            .lineHeigh = SYSTEM_ABOUT_THEWATCH_TITLE_LINEHEIGHT,\r
+            .text = "关于手表",\r
+            .textId = STR_ABOUT_WATCH,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        SystemAboutTheWatchTitle = InitLabel_Ext(Config);\r
+        if (SystemAboutTheWatchTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::SystemAboutTheWatchTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(SystemAboutTheWatchTitle);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = TITLE_LABEL_X,\r
+            .top = WATCH_NAME_POS_TOP,\r
+            .width = TITLE_LABEL_W,\r
+            .height = TITLE_LABEL_H,\r
+            .fontSize = TITLE_LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "手表名称",\r
+            .textId = STR_WATCH_NAME,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        WatchNameTitle = InitLabel_Ext(Config);\r
+        if (WatchNameTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::WatchNameTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(WatchNameTitle);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = LABEL_X,\r
+            .top = WATCH_NAME_VALUE_POS_TOP,\r
+            .width = LABEL_W,\r
+            .height = LABEL_H,\r
+            .fontSize = LABEL_FONTSIZE,\r
+            .lineHeigh = LABEL_LINEHEIGHT,\r
+        #ifdef CUSTOM_Z1\r
+            .text = "Z1",\r
+        #else\r
+            .text = "Watch Soar",\r
+        #endif\r
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+        };\r
+        WatchName = InitLabel(Config);\r
+        if (WatchName == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::WatchName new fail!");\r
+            return nullptr;\r
+        }\r
+        WatchName->SetTextColor(Color::GetColorFromRGBA(0x88, 0x88, 0x88, 0xff));\r
+        SystemAboutTheWatchScrollView->Add(WatchName);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = TITLE_LABEL_X,\r
+            .top = WATCH_FIRMWARE_POS_TOP,\r
+            .width = TITLE_LABEL_W,\r
+            .height = TITLE_LABEL_H,\r
+            .fontSize = TITLE_LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "固件版本",\r
+            .textId = STR_FIRMWARE_VERSION,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        FirmwareVersionTitle = InitLabel_Ext(Config);\r
+        if (FirmwareVersionTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::FirmwareVersionTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(FirmwareVersionTitle);\r
+        /* -------------------------------------------------------------------------- */\r
+        char version_buf[128] = {0};\r
+        uint32_t version_len = 128;\r
+        uapi_get_buildversion((uint8_t *)version_buf, version_len);\r
+        Config = {\r
+            .left = LABEL_X,\r
+            .top = WATCH_FIRMWARE_VALUE_POS_TOP,\r
+            .width = LABEL_W,\r
+            .height = LABEL_H,\r
+            .fontSize = LABEL_FONTSIZE,\r
+            .lineHeigh = LABEL_LINEHEIGHT,\r
+            #if defined(SUPPORT_CHINA_MOBILE_DMP) || defined(SUPPORT_TELECOM_DMP) //移动、电信入库软件要求 版本号固定\r
+            .text =  "Watch Soar V1.0",\r
+            #else\r
+            .text = (char *)version_buf,\r
+            #endif\r
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+        };\r
+        FirmwareVersion = InitLabel(Config);\r
+        if (FirmwareVersion == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::FirmwareVersion new fail!");\r
+            return nullptr;\r
+        }\r
+        FirmwareVersion->SetTextColor(Color::GetColorFromRGBA(0x88, 0x88, 0x88, 0xff));\r
+        SystemAboutTheWatchScrollView->Add(FirmwareVersion);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = TITLE_LABEL_X,\r
+            .top = WATCH_BT_NAME_TOP,\r
+            .width = TITLE_LABEL_W,\r
+            .height = TITLE_LABEL_H,\r
+            .fontSize = TITLE_LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "蓝牙名称",\r
+            .textId = STR_BLUETOOTH_NAME,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        BluetoothNameTitle = InitLabel_Ext(Config);\r
+        if (BluetoothNameTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::BluetoothNameTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(BluetoothNameTitle);\r
+        /* -------------------------------------------------------------------------- */\r
+        uint8_t ble_name[LABEL_FONTSIZE] = {0};\r
+        uint32_t ble_name_len = sizeof(ble_name);\r
+        errcode_t ret = uapi_get_nv_btname(ble_name, &ble_name_len);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "get btname %s ,ret 0x%X\n", ble_name, ret);\r
+\r
+        Config = {\r
+            .left = LABEL_X,\r
+            .top = WATCH_BT_NAME_VALUE_TOP,\r
+            .width = LABEL_W,\r
+            .height = LABEL_H,\r
+            .fontSize = LABEL_FONTSIZE,\r
+            .lineHeigh = LABEL_LINEHEIGHT,\r
+            .text = (char *)ble_name,\r
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+        };\r
+        BluetoothName = InitLabel(Config);\r
+        if (BluetoothName == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::BluetoothName new fail!");\r
+            return nullptr;\r
+        }\r
+        BluetoothName->SetTextColor(Color::GetColorFromRGBA(0x88, 0x88, 0x88, 0xff));\r
+        SystemAboutTheWatchScrollView->Add(BluetoothName);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = TITLE_LABEL_X,\r
+            .top = WATCH_BT_ADDR_TOP,\r
+            .width = TITLE_LABEL_W,\r
+            .height = TITLE_LABEL_H,\r
+            .fontSize = TITLE_LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "蓝牙地址",\r
+            .textId = STR_BLUETOOTH_ADDRESS,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        BluetoothAddressTitle = InitLabel_Ext(Config);\r
+        if (BluetoothAddressTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::BluetoothAddressTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(BluetoothAddressTitle);\r
+        /* -------------------------------------------------------------------------- */\r
+        uint8_t btaddr[6] = {0};\r
+        uint8_t btaddr_str[64] = {0};\r
+        uint32_t len = 6;\r
+        ret = uapi_get_nv_btaddr((uint8_t *)btaddr, &len);\r
+        sprintf((char *)btaddr_str, "%02X:%02X:%02X:%02X:%02X:%02X", btaddr[0], btaddr[1], btaddr[2], btaddr[3], btaddr[4], btaddr[5]);\r
+\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "get btaddr %s , ret 0x%X\n", btaddr_str, ret);\r
+        Config = {\r
+            .left = LABEL_X,\r
+            .top = WATCH_BT_ADDR_VALUE_TOP,\r
+            .width = LABEL_W,\r
+            .height = LABEL_H,\r
+            .fontSize = LABEL_FONTSIZE,\r
+            .lineHeigh = LABEL_LINEHEIGHT,\r
+            .text = (char *)btaddr_str,\r
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+        };\r
+        BluetoothAddress = InitLabel(Config);\r
+        if (BluetoothAddress == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::BluetoothAddress new fail!");\r
+            return nullptr;\r
+        }\r
+        BluetoothAddress->SetTextColor(Color::GetColorFromRGBA(0x88, 0x88, 0x88, 0xff));\r
+        SystemAboutTheWatchScrollView->Add(BluetoothAddress);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = TITLE_LABEL_X,\r
+            .top = WATCH_MODEM_VERSION_TOP,\r
+            .width = TITLE_LABEL_W,\r
+            .height = TITLE_LABEL_H,\r
+            .fontSize = TITLE_LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "4G Modem",\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        Network4GTitle = InitLabel(Config);\r
+        if (Network4GTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::Network4GTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(Network4GTitle);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = LABEL_X,\r
+            .top = WATCH_MODEM_VERSION_VALUE_TOP,\r
+            .width = LABEL_W,\r
+            .height = LABEL_H,\r
+            .fontSize = LABEL_FONTSIZE - 2,\r
+            .lineHeigh = LABEL_LINEHEIGHT,\r
+            .text = ConfigModel::GetInstance()->GetmoderVer(),\r
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+        };\r
+        Network4G = InitLabel(Config);\r
+        if (Network4G == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::Network4G new fail!");\r
+            return nullptr;\r
+        }\r
+        Network4G->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x87));\r
+        SystemAboutTheWatchScrollView->Add(Network4G);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = TITLE_LABEL_X,\r
+            .top = WATCH_MODEM_APP_VERSION_TOP,\r
+            .width = TITLE_LABEL_W,\r
+            .height = TITLE_LABEL_H,\r
+            .fontSize = TITLE_LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "pyVer",\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        PyVerTitle = InitLabel(Config);\r
+        if (PyVerTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::PyVerTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(PyVerTitle);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = LABEL_X,\r
+            .top = WATCH_MODEM_APP_VERSION_VALUE_TOP,\r
+            .width = LABEL_W,\r
+            .height = LABEL_H,\r
+            .fontSize = LABEL_FONTSIZE,\r
+            .lineHeigh = LABEL_LINEHEIGHT,\r
+            .text = ConfigModel::GetInstance()->GetpyVer(),\r
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+        };\r
+        PyVer = InitLabel(Config);\r
+        if (PyVer == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::PyVer new fail!");\r
+            return nullptr;\r
+        }\r
+        PyVer->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x87));\r
+        SystemAboutTheWatchScrollView->Add(PyVer);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = TITLE_LABEL_X,\r
+            .top = WATCH_APN_PROTOCOL_TOP,\r
+            .width = TITLE_LABEL_W,\r
+            .height = TITLE_LABEL_H,\r
+            .fontSize = TITLE_LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "APN protocol",\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        APNprotocolTitle = InitLabel(Config);\r
+        if (APNprotocolTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::APNprotocolTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(APNprotocolTitle);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = LABEL_X,\r
+            .top = WATCH_APN_PROTOCOL_VALUE_TOP,\r
+            .width = LABEL_W,\r
+            .height = LABEL_H,\r
+            .fontSize = LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "IPV4/IPV6",\r
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+        };\r
+        APNprotocol = InitLabel(Config);\r
+        if (APNprotocol == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::APNprotocol new fail!");\r
+            return nullptr;\r
+        }\r
+        APNprotocol->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x87));\r
+        SystemAboutTheWatchScrollView->Add(APNprotocol);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = TITLE_LABEL_X,\r
+            .top = WATCH_IMEI_TOP,\r
+            .width = TITLE_LABEL_W,\r
+            .height = TITLE_LABEL_H,\r
+            .fontSize = TITLE_LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "IMEI",\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        IMELTitle = InitLabel(Config);\r
+        if (IMELTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::IMELTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(IMELTitle);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = LABEL_X,\r
+            .top = WATCH_IMEI_VALUE_TOP,\r
+            .width = LABEL_W,\r
+            .height = LABEL_H,\r
+            .fontSize = LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = ConfigModel::GetInstance()->Getimei(),\r
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+        };\r
+        IMEL = InitLabel(Config);\r
+        if (IMEL == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::IMEL new fail!");\r
+            return nullptr;\r
+        }\r
+        IMEL->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x87));\r
+        SystemAboutTheWatchScrollView->Add(IMEL);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = TITLE_LABEL_X,\r
+            .top = WATCH_FONT_TOP,\r
+            .width = TITLE_LABEL_W,\r
+            .height = TITLE_LABEL_H,\r
+            .fontSize = TITLE_LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "OS Version",\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        FONTTitle = InitLabel(Config);\r
+        if (FONTTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::FONTTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(FONTTitle);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = LABEL_X,\r
+            .top = WATCH_FONT_VALUE_TOP,\r
+            .width = LABEL_W,\r
+            .height = LABEL_H,\r
+            .fontSize = LABEL_FONTSIZE,\r
+            .lineHeigh = LABEL_LINEHEIGHT,\r
+            .text = "OpenHarmony 3.2 Release",\r
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+        };\r
+        FONT = InitLabel(Config);\r
+        if (FONT == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::FONT new fail!");\r
+            return nullptr;\r
+        }\r
+        FONT->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x87));\r
+        SystemAboutTheWatchScrollView->Add(FONT);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = TITLE_LABEL_X,\r
+            .top = WATCH_HWVER_TOP,\r
+            .width = TITLE_LABEL_W,\r
+            .height = TITLE_LABEL_H,\r
+            .fontSize = TITLE_LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "HW Version",\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        HWVERTitle = InitLabel(Config);\r
+        if (HWVERTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::HWVERTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(HWVERTitle);\r
+        /* -------------------------------------------------------------------------- */\r
+        Config = {\r
+            .left = LABEL_X,\r
+            .top = WATCH_HWVER_VALUE_TOP,\r
+            .width = LABEL_W,\r
+            .height = LABEL_H,\r
+            .fontSize = LABEL_FONTSIZE,\r
+            .lineHeigh = LABEL_LINEHEIGHT,\r
+            .text = "FD230 V1.0",\r
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+        };\r
+        HWVER = InitLabel(Config);\r
+        if (HWVER == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::HWVER new fail!");\r
+            return nullptr;\r
+        }\r
+        HWVER->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x87));\r
+        SystemAboutTheWatchScrollView->Add(HWVER);\r
+        /* -------------------------------------------------------------------------- */ \r
+        Config = {\r
+            .left = TITLE_LABEL_X,\r
+            .top = WATCH_CYWEEVER_TOP,\r
+            .width = TITLE_LABEL_W,\r
+            .height = TITLE_LABEL_H,\r
+            .fontSize = TITLE_LABEL_FONTSIZE,\r
+            .lineHeigh = TITLE_LABEL_LINEHEIGHT,\r
+            .text = "Cywee Version",\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        CyweeVersionTitle = InitLabel(Config);\r
+        if (CyweeVersionTitle == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::CyweeVersionTitle new fail!");\r
+            return nullptr;\r
+        }\r
+        SystemAboutTheWatchScrollView->Add(CyweeVersionTitle);\r
+/* -------------------------------------------------------------------------- */\r
+        char cywee_version[20] = {0};\r
+        uapi_cywee_get_version(cywee_version, sizeof(cywee_version));\r
+        Config = {\r
+            .left = LABEL_X,\r
+            .top = WATCH_CYWEEVER_TOP_VALUE_TOP,\r
+            .width = LABEL_W,\r
+            .height = LABEL_H,\r
+            .fontSize = LABEL_FONTSIZE,\r
+            .lineHeigh = LABEL_LINEHEIGHT,\r
+            .text = cywee_version,\r
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,\r
+        };\r
+        CyweeVersion = InitLabel(Config);\r
+        if (CyweeVersion == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::CyweeVersion new fail!");\r
+            return nullptr;\r
+        }\r
+        CyweeVersion->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x87));\r
+        SystemAboutTheWatchScrollView->Add(CyweeVersion);\r
+\r
+        /* -------------------------------------------------------------------------- */\r
+        initViewStatus = true;\r
+        return SystemAboutTheWatchScrollView;\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemFactoryResetView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemFactoryResetView.cpp
new file mode 100644 (file)
index 0000000..e8553e7
--- /dev/null
@@ -0,0 +1,194 @@
+#include "system/include/SystemFactoryResetView.h"\r
+#include "system/include/SystemPresenter.h"\r
+#include "wearable_log.h"\r
+#include "UiConfig.h"\r
+#include "ui_resource_string.h"\r
+\r
+namespace OHOS\r
+{\r
+\r
+    static SystemFactoryResetView *g_pSystemFactoryResetView{nullptr};\r
+\r
+    SystemFactoryResetView::SystemFactoryResetView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::SystemFactoryResetView");\r
+        g_pSystemFactoryResetView = this;\r
+    }\r
+\r
+    SystemFactoryResetView::~SystemFactoryResetView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::~SystemFactoryResetView");\r
+        ClearAll();\r
+        g_pSystemFactoryResetView = nullptr;\r
+    }\r
+\r
+    SystemFactoryResetView *SystemFactoryResetView::GetInstance()\r
+    {\r
+        return g_pSystemFactoryResetView;\r
+    }\r
+\r
+    void SystemFactoryResetView::ClearAll()\r
+    {\r
+        if (initViewStatus == true)\r
+        {\r
+            scrollView->RemoveAll();\r
+\r
+            delete Title;\r
+            Title = nullptr;\r
+\r
+            delete FactoryResetImage;\r
+            FactoryResetImage = nullptr;\r
+\r
+            delete FactoryResetNote;\r
+            FactoryResetNote = nullptr;\r
+\r
+            delete FactoryResetButtonCheckOn;\r
+            FactoryResetButtonCheckOn = nullptr;\r
+\r
+            delete FactoryResetButtonCheckOff;\r
+            FactoryResetButtonCheckOff = nullptr;\r
+\r
+            delete temp;\r
+            temp = nullptr;\r
+\r
+            delete scrollView;\r
+            scrollView = nullptr;\r
+        }\r
+    }\r
+\r
+    UIScrollView *SystemFactoryResetView::SystemFactoryResetViewInit(void)\r
+    {\r
+        scrollView = new UIScrollView();\r
+        if (scrollView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::new scrollView fail!");\r
+            return nullptr;\r
+        }\r
+        scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        scrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        scrollView->SetStyle(STYLE_BORDER_RADIUS, 100);\r
+        // scrollView->SetScrollBlankSize(30);\r
+        // scrollView->SetReboundSize(30);\r
+        scrollView->SetMaxScrollDistance(1000);\r
+        scrollView->SetThrowDrag(true);\r
+        scrollView->RequestFocus();\r
+        scrollView->SetRotateFactor(2);\r
+        UIView::OnDragListener *dragListener = static_cast<UIView::OnDragListener *>(SystemPresenter::GetInstance());\r
+        if (dragListener == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemPresenter::GetInstance fail!!");\r
+            return nullptr;\r
+        }\r
+        scrollView->SetOnDragListener(dragListener);\r
+        /* ---------------------------------- Title --------------------------------- */\r
+        Title = new UILabelExt();\r
+        if (Title == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::new Title fail!");\r
+            return nullptr;\r
+        }\r
+        Title->SetPosition(83, 52, 300, 35);\r
+        Title->SetStyle(STYLE_TEXT_FONT, 30);\r
+        Title->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        Title->SetTextId(STR_FACTORY_RESET); /*恢复出厂*/\r
+        Title->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);\r
+        Title->SetRollSpeed(23);\r
+        Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        Title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        /* ---------------------------- FactoryResetImage --------------------------- */\r
+        FactoryResetImage = new UIImageView();\r
+        if (FactoryResetImage == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::new FactoryResetImage fail!");\r
+            return nullptr;\r
+        }\r
+        FactoryResetImage->SetPosition(193, 120);\r
+        FactoryResetImage->SetSrc(PNG_ATTENTION_IMAGE);\r
+        /* ---------------------------- FactoryResetNote ---------------------------- */\r
+        FactoryResetNote = new UILabelExt();\r
+        if (FactoryResetNote == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::new FactoryResetNote fail!");\r
+            return nullptr;\r
+        }\r
+        FactoryResetNote->SetPosition(53, 228, 360, 70);\r
+        FactoryResetNote->SetStyle(STYLE_TEXT_FONT, 30);\r
+        FactoryResetNote->SetStyle(STYLE_LINE_HEIGHT, 35);\r
+        FactoryResetNote->SetTextId(STR_RESET_CONFIRM_NOTE); /*该操作会清空并重置手表数据,是否确认继续?*/\r
+        FactoryResetNote->SetLineBreakMode(UILabel::LINE_BREAK_WRAP);\r
+        FactoryResetNote->SetTextColor(Color::GetColorFromRGBA(0xff, 0x8a, 0x36, 0xff));\r
+        FactoryResetNote->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        FactoryResetNote->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        /* ----------------------- FactoryResetButtonCheckOff ----------------------- */\r
+        FactoryResetButtonCheckOff = new UIButton();\r
+        if (FactoryResetButtonCheckOff == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::new FactoryResetButtonCheckOff fail!");\r
+            return nullptr;\r
+        }\r
+        FactoryResetButtonCheckOff->SetPosition(97, FactoryResetNote->GetY() + FactoryResetNote->GetTextHeight() + 30, 130, 130);\r
+        FactoryResetButtonCheckOff->SetViewId(FACTORYRESET_CHECKOFF);\r
+        FactoryResetButtonCheckOff->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+        FactoryResetButtonCheckOff->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+        FactoryResetButtonCheckOff->SetImagePosition(15, 15);\r
+        FactoryResetButtonCheckOff->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff191919, UIButton::PRESSED);\r
+        FactoryResetButtonCheckOff->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
+        FactoryResetButtonCheckOff->SetImageSrc(PNG_SYSTEM_CHECK_OFF_IMAGE, PNG_SYSTEM_CHECK_OFF_IMAGE);\r
+        UIView::OnClickListener *FactoryResetButtonCheckOffClick = static_cast<UIView::OnClickListener *>(SystemPresenter::GetInstance());\r
+        if (FactoryResetButtonCheckOffClick == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::FactoryResetButtonCheckOffClick is nullptr!");\r
+            return nullptr;\r
+        }\r
+        FactoryResetButtonCheckOff->SetOnClickListener(FactoryResetButtonCheckOffClick);\r
+        /* ------------------------ FactoryResetButtonCheckOn ----------------------- */\r
+        FactoryResetButtonCheckOn = new UIButton();\r
+        if (FactoryResetButtonCheckOn == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::new FactoryResetButtonCheckOn fail!");\r
+            return nullptr;\r
+        }\r
+        FactoryResetButtonCheckOn->SetPosition(240, FactoryResetButtonCheckOff->GetY(), 130, 130);\r
+        FactoryResetButtonCheckOn->SetViewId(FACTORYRESET_CHECKON);\r
+        FactoryResetButtonCheckOn->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);\r
+        FactoryResetButtonCheckOn->SetStyle(STYLE_BACKGROUND_OPA, 0x00);\r
+        FactoryResetButtonCheckOn->SetImagePosition(15, 15);\r
+        FactoryResetButtonCheckOn->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff191919, UIButton::PRESSED);\r
+        FactoryResetButtonCheckOn->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);\r
+        FactoryResetButtonCheckOn->SetImageSrc(PNG_SYSTEM_CHECK_ON_IMAGE, PNG_SYSTEM_CHECK_ON_IMAGE);\r
+        UIView::OnClickListener *FactoryResetButtonCheckOnClick = static_cast<UIView::OnClickListener *>(SystemPresenter::GetInstance());\r
+        if (FactoryResetButtonCheckOnClick == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::FactoryResetButtonCheckOnClick is nullptr!");\r
+            return nullptr;\r
+        }\r
+        FactoryResetButtonCheckOn->SetOnClickListener(FactoryResetButtonCheckOnClick);\r
+        /* -------------------------------------------------------------------------- */\r
+        if ((FactoryResetButtonCheckOn->GetY() + FactoryResetButtonCheckOn->GetHeight() > Screen::GetInstance().GetHeight()))\r
+        {\r
+            if (temp == nullptr)\r
+            {\r
+                temp = new UIImageView();\r
+                if (temp == nullptr)\r
+                {\r
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::new temp fail!");\r
+                    return nullptr;\r
+                }\r
+                temp->SetPosition(43, FactoryResetButtonCheckOn->GetY() + FactoryResetButtonCheckOn->GetHeight(), 380, 40);\r
+                temp->SetVisible(false);\r
+                scrollView->Add(temp);\r
+                scrollView->SetScrollBlankSize(30);\r
+                scrollView->SetReboundSize(30);\r
+            }\r
+        }\r
+        /* ----------------------------- Add to scroView ---------------------------- */\r
+        scrollView->Add(Title);\r
+        scrollView->Add(FactoryResetImage);\r
+        scrollView->Add(FactoryResetNote);\r
+        scrollView->Add(FactoryResetButtonCheckOff);\r
+        scrollView->Add(FactoryResetButtonCheckOn);\r
+        initViewStatus = true;\r
+        return scrollView;\r
+    }\r
+\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemLogModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemLogModel.cpp
new file mode 100644 (file)
index 0000000..dcbab5a
--- /dev/null
@@ -0,0 +1,484 @@
+#include "system/include/SystemLogModel.h"
+#include "cmsis_os.h"
+#include "custom_utils.h"
+#include "graphic_service.h"
+#include "iostream"
+#include "securec.h"
+#include "system/include/SystemLogModelC.h"
+#include "uicomponents/UIComponents.h"
+#include "wearable_log.h"
+#include <algorithm>
+#include <chrono>
+#include <cstdlib>
+#include <cstring>
+#include <ctime>
+#include <deque>
+#include <dirent.h>
+#include <fstream>
+#include <iomanip>
+#include <iostream>
+#include <sstream>
+#include <stdexcept>
+#include <stdio.h>
+#include <string>
+#include <sys/stat.h>
+#include <sys/statfs.h>
+#include <sys/time.h>
+#include <thread>
+#include <vector>
+#include "ConfigModel.h"
+#include "custom_save_runtime.h"
+#define SYSTEM_LOG_PATH "/user/system/"
+#define SYSTEM_LOG_FILE_PATH "/user/system/system_log.txt"
+#define SYSTEM_LOG_FILE_PATH_NEXTDAY "/user/system/system_log_nextday.txt"
+#define SYSTEM_LOG_FILE_PATH_POPUP_WINDOWS "/user/system/popup_windows_log.txt"
+
+extern "C" {
+// 通用日志记录功能
+void report_log(OHOS::SystemLogType type) {
+  OHOS::SystemLogData systemlog;
+  systemlog.timestamp = OHOS::SystemLogModel::GetInstance()->GetCurrentTime();
+  systemlog.type = type;
+#ifdef FD230_650
+  uapi_save_runtime_log_Time();
+#endif
+
+  // 存储日志
+  OHOS::SystemLogModel::GetInstance()->saveLog(systemlog);
+}
+
+// 关机保存
+void start_report_log(void) { report_log(OHOS::SystemLogType::POWER_OFF); }
+
+// 重启保存
+void stop_report_log(void) { report_log(OHOS::SystemLogType::RESTART); }
+
+// 恢复存储保存
+void resume_report_log(void) { report_log(OHOS::SystemLogType::FACTORY_RESET); }
+
+// 更新版本保存
+void update_version_report_log(void) {
+  report_log(OHOS::SystemLogType::SOFTWARE_UPDATE);
+}
+
+//保存nextday日志
+void start_report_nextday_log_start(void) {
+  OHOS::nextday_log_data data;
+  uint32_t timestamp = OHOS::SystemLogModel::GetInstance()->GetCurrentTime();
+  data.type = OHOS::nextday_type::NEXTDAY_BEGAN;
+  data.timestamp = timestamp;
+  OHOS::SystemLogModel::GetInstance()->save_nextday_log(data);
+}
+void start_report_nextday_log_end(void) {
+  OHOS::nextday_log_data data;
+  uint32_t timestamp = OHOS::SystemLogModel::GetInstance()->GetCurrentTime();
+  data.type = OHOS::nextday_type::NEXTDAY_END;
+  data.timestamp = timestamp;
+  OHOS::SystemLogModel::GetInstance()->save_nextday_log(data);
+}
+// 清空popup_windows日志
+void nextday_clear_popup_windows_log(void) {
+  // OHOS::SystemLogModel::GetInstance()->clear_popup_windows_log();
+}
+void save_popup_windows_log_c(int type)
+{
+  OHOS::SystemLogModel::GetInstance()->save_popup_windows_log_type(type);
+}
+//进行开机配置uart
+void system_init_uart(void)
+{
+  OHOS::SystemLogModel::GetInstance()->init_uart();
+}
+}
+
+namespace OHOS {
+SystemLogModel *SystemLogModel::GetInstance(void) {
+  static SystemLogModel instance;
+  return &instance;
+}
+
+uint32_t SystemLogModel::GetCurrentTime() {
+  uint32_t time;
+  if (uapi_get_timestampe_ss(&time) != ERRCODE_SUCC) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to get timestamp");
+    return 0;
+  }
+  return time;
+}
+
+// 保存日志
+bool SystemLogModel::saveLog(SystemLogData data) {
+
+  //记录开机,关机,重启,ota升级,恢复出厂事件
+  switch (data.type)
+  {
+  case SystemLogType::POWER_ON:
+      uapi_save_runtime_log(RUNTIME_LOG_POWER_ON);//TOOD*
+      break;
+  case SystemLogType::POWER_OFF:
+      uapi_save_runtime_log(RUNTIME_LOG_POWER_OFF);//TOOD*
+      break;
+  case SystemLogType::RESTART:
+      uapi_save_runtime_log(RUNTIME_LOG_REBOOT);//TOOD*
+      break;
+  case SystemLogType::FACTORY_RESET:
+      uapi_save_runtime_log(RUNTIME_LOG_FACTORY_RESET);//TOOD*
+      break;
+  case SystemLogType::SOFTWARE_UPDATE:
+      uapi_save_runtime_log(RUNTIME_LOG_OTA);//TOOD*
+      break;
+  default:
+      break;
+  }
+
+  // 将新日志添加到日志数据
+  logData.push_back(data);
+
+  // 如果超过限制,删除最早的日志
+  while (logData.size() > 50) {
+    logData.pop_front(); // 从前端删除最早的日志
+  }
+
+  //如果是4分区先创建文件夹
+  CreateDirectoryIfNotExists(SYSTEM_LOG_PATH);
+
+  // 将所有日志写入文件
+  std::ofstream ofs(SYSTEM_LOG_FILE_PATH, std::ios::trunc);
+  if (!ofs.is_open()) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Failed to open log file for writing");
+    return false;
+  }
+
+  for (const auto &log : logData) {
+    ofs << static_cast<int>(log.type) << " " << log.timestamp << std::endl;
+  }
+
+  return true;
+}
+
+// 加载日志
+bool SystemLogModel::loadLog() {
+  std::ifstream ifs(SYSTEM_LOG_FILE_PATH);
+  if (!ifs.is_open()) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Failed to open log file for reading");
+    return false;
+  }
+
+  logData.clear();
+  SystemLogData data;
+  int type;
+  while (ifs >> type >> data.timestamp) {
+    data.type = static_cast<OHOS::SystemLogType>(type);
+    logData.push_back(data);
+  }
+
+  // // 如果超过限制,删除最早的日志
+  // while (logData.size() > 50) {
+  //   logData.pop_front(); // 从前端删除最早的日志
+  // }
+
+  WEARABLE_LOGI(WEARABLE_LOG_MODULE_APP, "Loaded %d logs from file",
+                logData.size());
+
+  return true;
+}
+
+// 获取日志记录,返回deque
+const std::deque<SystemLogData> &SystemLogModel::getLogData() const {
+  return logData;
+}
+
+// 获取日志大小
+size_t SystemLogModel::getLogSize() const { return logData.size(); }
+
+long long SystemLogModel::getFolderSize(const char *folderPath) {
+  DIR *dir;
+  struct dirent *entry;
+  struct stat fileStat;
+  long long totalSize = 0;
+
+  dir = opendir(folderPath);
+  if (dir == NULL) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error opening directory");
+    return 0;
+  }
+
+  while ((entry = readdir(dir)) != NULL) {
+    char filePath[1024];
+    snprintf(filePath, sizeof(filePath), "%s/%s", folderPath, entry->d_name);
+
+    if (stat(filePath, &fileStat) == -1) {
+      WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error getting file status");
+      continue;
+    }
+
+    if (S_ISDIR(fileStat.st_mode)) {
+      if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0)
+        continue;
+      totalSize += getFolderSize(filePath);
+    } else {
+      totalSize += fileStat.st_size;
+    }
+  }
+
+  closedir(dir);
+  return totalSize;
+}
+
+//获取系统内存
+/*
+[FS INFO]total size=12416KB used size=8114KB free size=4302KB
+[FS INFO]/update/:
+[FS INFO]total size=12416KB used size=552KB free size=11864KB
+[FS INFO]/music/:
+[FS INFO]total size=12416KB used size=1270KB free size=11146KB
+[FS INFO]/user/:
+[FS INFO]total size=91264KB used size=64596KB free size=26668KB
+*/
+std::string SystemLogModel::get_system_mem_info() {
+  struct statfs file_buf = {0};
+  std::stringstream result;
+  std::string system_volume_name = "/user/";
+  if (statfs(system_volume_name.c_str(), &file_buf) != 0) {
+    result << "Error retrieving info for " << system_volume_name << std::endl;
+  } else {
+    // 计算总大小、已用大小和自由空间
+    uint64_t total_size =
+        static_cast<uint64_t>(file_buf.f_blocks) * file_buf.f_bsize;
+    uint64_t free_size =
+        static_cast<uint64_t>(file_buf.f_bfree) * file_buf.f_bsize;
+    uint64_t used_size = total_size - free_size;
+
+    // 按照所需格式输出
+    result << "[" << system_volume_name << "]" << std::endl;
+    result << "Total size = " << total_size / 1024 << " KB" << std::endl;
+    result << "Used size = " << used_size / 1024 << " KB" << std::endl;
+    result << "Free size = " << free_size / 1024 << " KB" << std::endl;
+    result << "====================" << std::endl; // 分隔线
+  }
+
+  std::vector<std::string> volume_names = {
+      "/user/dial/", "/user/music/",  "/user/update/",
+      "/user/res/",  "/user/system/", "/user/userdata/",
+  };
+
+  // 遍历每个目录,获取文件系统状态
+  for (const auto &volume_name : volume_names) {
+    // 获取文件系统状态
+    uint64_t total_size = getFolderSize(volume_name.c_str());
+    if (total_size == 0) {
+      result << "Error retrieving info for " << volume_name << std::endl;
+    } else {
+      // 计算总大小
+      result << "[" << volume_name << "]" << std::endl;
+      result << "Total size = " << total_size / 1024 << " KB" << std::endl;
+      result << "====================" << std::endl; // 分隔线
+    }
+  }
+
+  // 如果没有信息,则返回说明信息
+  return result.str().empty() ? "No volumes found or accessible."
+                              : result.str();
+}
+
+// 检查是否可以同步文件
+bool SystemLogModel::canSyncFile(std::string path, uint32_t path_max_size,
+                                 uint32_t download_size) {
+  // 获取文件夹的大小
+  long long usedSpace = getFolderSize(path.c_str());
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "usedSpace = %lld", usedSpace);
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "path_max_size = %lld", path_max_size);
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "download_size = %lld", download_size);
+
+  return (usedSpace + download_size) <= path_max_size;
+}
+// nextday相关
+
+bool SystemLogModel::save_nextday_log(nextday_log_data data) {
+  // 检查容量,最多存储7条日志
+  if (nextday_log.size() >= 7) {
+    nextday_log.pop_front(); // 超出限制,删除最旧的日志
+  }
+
+  // 保存新日志,将传入的完整日志数据添加到队列
+  nextday_log.push_back(data);
+
+  // 将nextday_log写入文件,覆盖写
+  std::ofstream outFile(SYSTEM_LOG_FILE_PATH_NEXTDAY, std::ios::trunc);
+  if (!outFile) {
+    return false; // 文件打开失败
+  }
+
+  // 遍历队列,将每条日志数据(包括类型和时间戳)写入文件
+  for (const auto &logData : nextday_log) {
+    // 将日志类型转换为整数写入
+    outFile << static_cast<int>(logData.type) << " ";
+    outFile << logData.timestamp << std::endl;
+  }
+
+  outFile.close();
+
+  return true;
+}
+
+// 加载下一日日志
+bool SystemLogModel::load_nextday_log() {
+  nextday_log.clear(); // 清空当前的日志
+
+  std::ifstream inFile(SYSTEM_LOG_FILE_PATH_NEXTDAY);
+  if (!inFile) {
+    return false; // 无法打开文件
+  }
+
+  std::string line;
+  while (std::getline(inFile, line)) {
+    std::istringstream ss(line);
+    nextday_log_data data;
+
+    // 先读取日志类型(转换为整数读取),再读取时间戳
+    int typeValue;
+    if (ss >> typeValue >> data.timestamp) {
+      data.type = static_cast<nextday_type>(typeValue);
+      nextday_log.push_back(data); // 读取时间戳并存储完整日志数据
+    }
+  }
+
+  inFile.close();
+
+  return true;
+}
+
+// 获取下一日日志
+const std::deque<nextday_log_data> &SystemLogModel::get_nextday_log() const {
+  return nextday_log; // 返回日志记录的常量引用
+}
+
+// 获取日志大小
+size_t SystemLogModel::get_nextday_log_size() const {
+  return nextday_log.size();
+}
+
+// 保存popup_windows日志
+bool SystemLogModel::save_popup_windows_log(popup_windows_log_data data) {
+  // 保存新日志
+  popup_windows_log.push_back(data);
+
+  // 如果超过限制,删除最早的日志
+  while (popup_windows_log.size() > 50) {
+    popup_windows_log.pop_front(); // 从前端删除最早的日志
+  }
+  // 将日志写入文件
+  std::ofstream outFile(SYSTEM_LOG_FILE_PATH_POPUP_WINDOWS, std::ios::trunc);
+  if (!outFile) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Failed to open log file for writing");
+    return false; // 文件打开失败
+  }
+
+  // 将结构体中的数据转换为字符串格式写入文件
+  for (const auto &log : popup_windows_log) {
+    outFile << static_cast<int>(log.type) << " " << log.timestamp << std::endl;
+  }
+  outFile.close();
+  return true;
+}
+
+void SystemLogModel::save_popup_windows_log_type(int type)
+{
+    popup_windows_log_data data;
+    data.timestamp = GetCurrentTime();
+    switch(type)
+    {
+      case 0:
+        data.type = popup_windows_type::MOTION_RECOGNITION;
+        break;
+      case 1:
+        data.type = popup_windows_type::DRINK_WATER_REMINDER;
+        break;
+      case 2:
+        data.type = popup_windows_type::SEDENTARY_REMINDER;
+        break;
+      default:
+        break;
+    }
+    save_popup_windows_log(data);
+}
+bool SystemLogModel::load_popup_windows_log() {
+  std::ifstream inFile(SYSTEM_LOG_FILE_PATH_POPUP_WINDOWS);
+  if (!inFile) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Failed to open log file for reading");
+    return false; // 无法打开文件
+  }
+
+  std::string line;
+  while (std::getline(inFile, line)) {
+    std::istringstream ss(line);
+    popup_windows_log_data data;
+    int typeInt;
+    if (ss >> typeInt >> data.timestamp) {
+      switch(typeInt)
+      {
+      case 0:
+        data.type = popup_windows_type::MOTION_RECOGNITION;
+        break;
+      case 1:
+        data.type = popup_windows_type::DRINK_WATER_REMINDER;
+        break;
+      case 2:
+        data.type = popup_windows_type::SEDENTARY_REMINDER;
+        break;
+      default:
+        break;
+      }
+      popup_windows_log.push_back(data);
+    }
+  }
+
+  inFile.close();
+  return true;
+}
+// 获取popup_windows日志记录(常量引用)
+const std::deque<popup_windows_log_data> &
+SystemLogModel::get_popup_windows_log() const {
+  return popup_windows_log;
+}
+// 获取日志大小
+size_t SystemLogModel::get_popup_windows_log_size() const {
+  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"log size:%d",popup_windows_log.size());
+  return popup_windows_log.size();
+}
+
+void SystemLogModel::clear_popup_windows_log() {
+  // 清空当前的日志
+  WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "clear_popup_windows_log");
+  popup_windows_log.clear();
+
+  std::ofstream outFile(SYSTEM_LOG_FILE_PATH_POPUP_WINDOWS, std::ios::trunc);
+  if (!outFile) {
+    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,
+                  "Failed to open log file for writing");
+    return;
+  }
+  outFile << "";
+  outFile.close();
+}
+/*串口控制*/
+void SystemLogModel::init_uart() {
+  //读取configmodle
+  uart_status = ConfigModel::GetInstance()->get_configData_bool(
+      ConfigModel::CONFIGMODEL_ITEM_URAT_AT_CONTROL_STATUS);
+  uapi_custom_set_uart_rx_enable_flag(uart_status);
+}
+//设置串口状态
+void SystemLogModel::set_uart_status(bool status) {
+  uart_status = status;
+  uapi_custom_set_uart_rx_enable_flag(uart_status);
+  ConfigModel::GetInstance()->set_condigData_Bool(
+      ConfigModel::CONFIGMODEL_ITEM_URAT_AT_CONTROL_STATUS,uart_status);
+}
+//获取串口状态
+bool SystemLogModel::get_uart_status() { return uart_status;}
+} // namespace OHOS
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemModel.cpp
new file mode 100644 (file)
index 0000000..dd49248
--- /dev/null
@@ -0,0 +1,34 @@
+
+#include "system/include/SystemModel.h"
+#include "system/include/Systemupgrade.h"
+#include "wearable_log.h"
+#include "UiConfig.h"
+#include "custom_utils.h"
+#include "stdio.h"
+#include <iostream>
+#include <fstream>
+#include "cJSON.h"
+#include "ConfigModel.h"
+#include "lwip/err.h"
+#include "power_display_service.h"
+#include "cmsis_os2.h"
+#include "los_memory.h"
+#include "thread_init.h"
+ #include "lwip/apps/http_client.h"
+ #include "tcxo.h"
+ #include "cat1_server.h"
+ #include "linux/delay.h"
+
+#define UPDATAREPORT_M UPDATAREPORT
+
+namespace OHOS
+{
+    
+
+    SystemModel *SystemModel::GetInstance(void)
+    {
+        static SystemModel instance;
+        return &instance;
+    }
+
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemPresenter.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemPresenter.cpp
new file mode 100644 (file)
index 0000000..aaf1c2c
--- /dev/null
@@ -0,0 +1,303 @@
+#include "AppViewIDs.h"\r
+#include "components/ui_label_ext.h"\r
+#include "ui_resource_string.h"\r
+#include "NativeAbility.h"\r
+#include "graphic_math.h"\r
+#include "string.h"\r
+#include "system/include/SystemPresenter.h"\r
+#include "font/font_global_manager.h"\r
+#include "font/ui_font.h"\r
+#include "languagecode/LanguageInit.h"\r
+\r
+#include "common/key_code.h"\r
+#include "custom_utils.h"\r
+#include "languagecode/LanguageInit.h"\r
+#include "ui_resource_string.h"\r
+#include "ConfigModel.h"\r
+#include "vibrator_service.h"\r
+#include "broadcast_feature.h"\r
+\r
+#include "UiConfig.h"\r
+\r
+#include "NativeRegisterManager.h"\r
+\r
+namespace OHOS\r
+{\r
+    REGIST_SLICE(VIEW_SYSTEM, SystemView, SystemPresenter);\r
+    \r
+    // 当前Presenter属性实例化的内存指针\r
+    static SystemPresenter *g_pSystemPresenter = nullptr;\r
+\r
+    SystemPresenter::SystemPresenter()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemPresenter::SystemPresenter");\r
+        g_pSystemPresenter = this;\r
+        systemModel = SystemModel::GetInstance();\r
+    }\r
+\r
+    SystemPresenter::~SystemPresenter()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemPresenter::~SystemPresenter");\r
+        g_pSystemPresenter = nullptr;\r
+    }\r
+\r
+    SystemPresenter *SystemPresenter::GetInstance()\r
+    {\r
+\r
+        return g_pSystemPresenter;\r
+    }\r
+\r
+    void SystemPresenter::OnStart()\r
+    {\r
+\r
+        Presenter<SystemView>::OnStart();\r
+    }\r
+\r
+    void SystemPresenter::OnPause(void)\r
+    {\r
+        Presenter<SystemView>::OnPause();\r
+    }\r
+\r
+    void SystemPresenter::OnResume(void)\r
+    {\r
+\r
+        Presenter<SystemView>::OnResume();\r
+    }\r
+\r
+    void SystemPresenter::OnStop(void)\r
+    {\r
+\r
+        Presenter<SystemView>::OnStop();\r
+    }\r
+\r
+    static uint32_t time = 0;\r
+    static uint32_t OnClick_num = 0;\r
+\r
+    bool SystemPresenter::OnPress(UIView &view, const PressEvent &event)\r
+    {\r
+        return true;\r
+    }\r
+\r
+    bool SystemPresenter::OnDrag(UIView &view, const DragEvent &event)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemPresenter::OnDrag");\r
+        if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动\r
+        {\r
+            SystemPresenter::X_DRAG_FLAG = true;\r
+        }\r
+        return true;\r
+    }\r
+\r
+    bool SystemPresenter::OnDragEnd(UIView &view, const DragEvent &event)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemPresenter::OnDragEnd");\r
+        SystemView *p_SystemView = SystemView::GetInstance();\r
+        if (p_SystemView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " SystemView::GetInstance fail!");\r
+            return false;\r
+        }\r
+\r
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && SystemPresenter::X_DRAG_FLAG)\r
+        {\r
+            if (&view == p_SystemView->GetSystemScrollView(SYSTEMVIEW))\r
+            {\r
+                NativeAbility::GetInstance().Back();\r
+            }\r
+            else if (&view == p_SystemView->GetSystemScrollView(ABOUTTHEWATCHVIEW))\r
+            {\r
+                p_SystemView->ChangeView(ABOUTTHEWATCHVIEW, SYSTEMVIEW);\r
+            }\r
+            else if (&view == p_SystemView->GetSystemScrollView(RESTARTVIEW))\r
+            {\r
+                p_SystemView->ChangeView(RESTARTVIEW, SYSTEMVIEW);\r
+            }\r
+            else if (&view == p_SystemView->GetSystemScrollView(SHUTDOWNVIEW))\r
+            {\r
+                p_SystemView->ChangeView(SHUTDOWNVIEW, SYSTEMVIEW);\r
+            }\r
+            else if (&view == p_SystemView->GetSystemScrollView(FACTORYRESETVIEW))\r
+            {\r
+                p_SystemView->ChangeView(FACTORYRESETVIEW, SYSTEMVIEW);\r
+            }\r
+            SystemPresenter::X_DRAG_FLAG = false;\r
+            return true;\r
+        }\r
+        return false;\r
+    }\r
+\r
+    // 该点击回调主要用于在系统视图界面进行跳转视图\r
+    bool SystemPresenter::OnClick(UIView &view, const ClickEvent &event)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemPresenter::OnClick");\r
+        SystemView *p_SystemView = SystemView::GetInstance();\r
+        if (p_SystemView == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " SystemView::GetInstance fail!");\r
+            return false;\r
+        }\r
+\r
+        if (strcmp(view.GetViewId(), SYSTEMABOUTTHEWATCHVIEWID) == 0) // 连续点击进入产测模式\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchTitle");\r
+            if (time == 0)\r
+            {\r
+                time = event.GetTimeStamp();\r
+                OnClick_num = 1;\r
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "222  %d", time);\r
+            }\r
+            else\r
+            {\r
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "111   %d", event.GetTimeStamp());\r
+                if (event.GetTimeStamp() - time < 2000)\r
+                {\r
+                    OnClick_num++;\r
+\r
+                    if (OnClick_num > 5)\r
+                    {\r
+                        // NativeAbility::GetInstance().ChangeSlice(VIEW_TEST);\r
+                        CustomEventPublish(TOPIC_EVENT_DEBUGOUTPUT, NULL, 0);\r
+                    }\r
+                }\r
+                else\r
+                {\r
+                    time = 0;\r
+                }\r
+            }\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), ABOUT_THE_WATCH) == 0) // 点击进入关于手表界面\r
+        {\r
+            p_SystemView->ChangeView(SYSTEMVIEW, ABOUTTHEWATCHVIEW);\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), SET_TIME_FORMAT) == 0) // 点击进入设置时间格式\r
+        {\r
+            NativeAbility::GetInstance().EnterSlice(VIEW_SET_TIME_FORMAT);\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), SYSTEM_UPGRADE) == 0) // 点击进入系统升级视图\r
+        {\r
+            NativeAbility::GetInstance().EnterSlice(VIEW_SYSTEM_UPDATE);\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), WATCH_QR_CODE) == 0) // 点击进入手表二维码视图\r
+        {\r
+            NativeAbility::GetInstance().EnterSlice(VIEW_WATCH_QR_CODE);\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), SYSTEM_LANGUAGE) == 0) // 点击进入系统语言界面\r
+        {\r
+            NativeAbility::GetInstance().EnterSlice(VIEW_LANGUAGE_SWITCH);\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), RESTART) == 0) // 点击进入重启界面\r
+        {\r
+            p_SystemView->ChangeView(SYSTEMVIEW, RESTARTVIEW);\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), SHUTDOWN) == 0) // 点击进入关机界面\r
+        {\r
+            p_SystemView->ChangeView(SYSTEMVIEW, SHUTDOWNVIEW);\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), FACTORY_RESET) == 0) // 点击进入恢复出厂设置界面\r
+        {\r
+            p_SystemView->ChangeView(SYSTEMVIEW, FACTORYRESETVIEW);\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), RESTARTVIEW_CHECKON) == 0) // 重启确认\r
+        {\r
+            p_SystemView->ChangeView(RESTARTVIEW, SHUTDOWNANIMATIONVIEW);\r
+\r
+            ShutDownImageAnimatorView::GetInstance()->ShutDownImageAnimator_Start(1);\r
+            isShutDownImageAnimatorStart = true;\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), RESTARTVIEW_CHECKOFF) == 0) // 重启取消\r
+        {\r
+            p_SystemView->ChangeView(RESTARTVIEW, SYSTEMVIEW);\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), SHUTDOWN_CHECKON) == 0) // 关机确认\r
+        {\r
+            p_SystemView->ChangeView(SHUTDOWNVIEW, SHUTDOWNANIMATIONVIEW);\r
+        \r
+\r
+            ShutDownImageAnimatorView::GetInstance()->ShutDownImageAnimator_Start(0);\r
+            isShutDownImageAnimatorStart = true;\r
+\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), SHUTDOWN_CHECKOFF) == 0) // 关机取消\r
+        {\r
+            p_SystemView->ChangeView(SHUTDOWNVIEW, SYSTEMVIEW);\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), FACTORYRESET_CHECKON) == 0) // 恢复出厂设置确认\r
+        {\r
+            ui_api_vibrate_once_func(); //恢复出厂增加震动\r
+            p_SystemView->ChangeView(FACTORYRESETVIEW, SHUTDOWNANIMATIONVIEW);\r
+            ShutDownImageAnimatorView::GetInstance()->ShutDownImageAnimator_Start(2);\r
+            isShutDownImageAnimatorStart = true;\r
+            return true;\r
+        }\r
+        else if (strcmp(view.GetViewId(), FACTORYRESET_CHECKOFF) == 0) // 恢复出厂设置取消\r
+        {\r
+            p_SystemView->ChangeView(FACTORYRESETVIEW, SYSTEMVIEW);\r
+            return true;\r
+        }\r
+\r
+        // if (strcmp(view.GetViewId(), SYSTEM_UPGRADE_t) == 0) //点击是否立即升级\r
+        // {\r
+        //     SystemupgradeView::GetInstance()->statr_down_fwpkg();\r
+        // }\r
+        // if (strcmp(view.GetViewId(), "labelButton1_exit") == 0) //稍后再说\r
+        // {\r
+        //     NativeAbility::GetInstance().ChangeSlice(VIEW_SETTING);\r
+        // }\r
+        return true;\r
+    }\r
+\r
+    bool SystemPresenter::OnKeyAct(UIView &view, const KeyEvent &event) // 增加按键事件\r
+    {\r
+        UNUSED(view);\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemPresenter::OnKeyAct");\r
+        uint16 keyID = event.GetKeyId();\r
+        uint16 keyState = event.GetState();\r
+        // 如果是power键,且是亮屏状态,按键释放就返回上一级\r
+        if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0)\r
+        {\r
+            if (!isShutDownImageAnimatorStart)\r
+            {\r
+                NativeAbility::GetInstance().Back();\r
+            }\r
+        }\r
+        return true;\r
+    }\r
+\r
+    // void SystemPresenter::set_key_falg(bool falg) // 增加按键事件\r
+    // {\r
+    //     isSystemUpgradeState = falg;\r
+    // }\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+    extern "C"\r
+    {\r
+#endif /* __cplusplus */\r
+#endif /* __cplusplus */\r
+\r
+        void factorytest_enter_test_view(int cmd)\r
+        {\r
+            if (cmd == 1)\r
+                NativeAbility::GetInstance().ChangeSlice(VIEW_TEST);\r
+            else\r
+                NativeAbility::GetInstance().ChangeSlice(VIEW_MAIN);\r
+        }\r
+\r
+#ifdef __cplusplus\r
+#if __cplusplus\r
+    }\r
+#endif /* __cplusplus */\r
+#endif /* __cplusplus */\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemRestart.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemRestart.cpp
new file mode 100644 (file)
index 0000000..4efd295
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-28 17:30:10
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-28 19:25:08
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemRestart.cpp
+ */
+#include "system/include/SystemRestart.h"
+#include "system/include/SystemPresenter.h"
+#include "ui_resource_string.h"
+#include "UiConfig.h"
+namespace OHOS
+{
+    SystemRestart::SystemRestart()
+    {
+    }
+
+    SystemRestart::~SystemRestart()
+    {
+        ClearAll();
+    }
+
+    void SystemRestart::ClearAll(void)
+    {
+        if (SystemRestartScrollView)
+        {
+            SystemRestartScrollView->RemoveAll();
+
+            if (title)
+            {
+                delete title;
+                title = nullptr;
+            }
+            if (note)
+            {
+                delete note;
+                note = nullptr;
+            }
+            if (image)
+            {
+                delete image;
+                image = nullptr;
+            }
+            if (button_ensure)
+            {
+                delete button_ensure;
+                button_ensure = nullptr;
+            }
+            if (button_cancel)
+            {
+                delete button_cancel;
+                button_cancel = nullptr;
+            }
+            delete SystemRestartScrollView;
+            SystemRestartScrollView = nullptr;
+        }
+    }
+    UIScrollView *SystemRestart::SystemRestartViewInit(void)
+    {
+        if (SystemRestartScrollView == nullptr)
+        {
+            SystemRestartScrollView = new UIScrollView();
+            if (SystemRestartScrollView == nullptr)
+            {
+                return nullptr;
+            }
+            SystemRestartScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+            SystemRestartScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+            UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(SystemPresenter::GetInstance());
+            if (draglistener == nullptr)
+            {
+                return nullptr;
+            }
+            SystemRestartScrollView->SetOnDragListener(draglistener);
+            SystemRestartScrollView->SetTouchable(true);
+            SystemRestartScrollView->SetDraggable(true);
+            /* -------------------------------------------------------------------------- */
+            if (title == nullptr)
+            {
+                title = new UILabelExt();
+                if (title == nullptr)
+                {
+                    return nullptr;
+                }
+                title->SetPosition(83, 50, 300, 35);    // 位置
+                title->SetStyle(STYLE_TEXT_FONT, 30);   // 字体大小
+                title->SetStyle(STYLE_LINE_HEIGHT, 35); // 字体行高
+                title->SetTextId(STR_RESTART);         // 内容
+                title->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+                title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+                title->SetRollSpeed(23);
+                title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+                SystemRestartScrollView->Add(title);
+            }
+            /* -------------------------------------------------------------------------- */
+            if (image == nullptr)
+            {
+                image = new UIImageView();
+                if (image == nullptr)
+                {
+                    return nullptr;
+                }
+                image->SetPosition(193, 120, 80, 80);
+                image->SetSrc("/user/res/settings/SETTTING_REBOOT.bin");
+            }
+            SystemRestartScrollView->Add(image);
+            /* -------------------------------------------------------------------------- */
+            if (note == nullptr)
+            {
+                note = new UILabelExt();
+                if (note == nullptr)
+                {
+                    return nullptr;
+                }
+                note->SetPosition(53, 232, 360, 35);   // 位置
+                note->SetStyle(STYLE_TEXT_FONT, 30);   // 字体大小
+                note->SetStyle(STYLE_LINE_HEIGHT, 35); // 字体行高
+                note->SetTextId(STR_RESET_CONFIRM);
+                note->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+                note->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+                note->SetRollSpeed(23);
+                note->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+                SystemRestartScrollView->Add(note);
+            }
+            /* -------------------------------------------------------------------------- */
+            button_cancel = new UIButton();
+            if (button_cancel == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemRestart::new button_cancel fail!");
+                return nullptr;
+            }
+            button_cancel->SetPosition(97, 299, 130, 130);
+            button_cancel->SetViewId(RESTARTVIEW_CHECKOFF);
+            button_cancel->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+            button_cancel->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+            button_cancel->SetImagePosition(15, 15);
+            button_cancel->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff191919, UIButton::PRESSED);
+            button_cancel->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);
+            button_cancel->SetImageSrc(PNG_SYSTEM_CHECK_OFF_IMAGE, PNG_SYSTEM_CHECK_OFF_IMAGE);
+            SystemRestartScrollView->Add(button_cancel);
+            /* ------------------------ button_ensure ----------------------- */
+            button_ensure = new UIButton();
+            if (button_ensure == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemRestart::new button_ensure fail!");
+                return nullptr;
+            }
+            button_ensure->SetPosition(240, 299, 130, 130);
+            button_ensure->SetViewId(RESTARTVIEW_CHECKON);
+            button_ensure->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+            button_ensure->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+            button_ensure->SetImagePosition(15, 15);
+            button_ensure->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff191919, UIButton::PRESSED);
+            button_ensure->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);
+            button_ensure->SetImageSrc(PNG_SYSTEM_CHECK_ON_IMAGE, PNG_SYSTEM_CHECK_ON_IMAGE);
+            SystemRestartScrollView->Add(button_ensure);
+            UIView::OnClickListener *ButtonOnClick = static_cast<UIView::OnClickListener *>(SystemPresenter::GetInstance());
+            if (ButtonOnClick == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemRestart::ButtonOnClick is nullptr!");
+                return nullptr;
+            }
+            button_cancel->SetOnClickListener(ButtonOnClick);
+            button_ensure->SetOnClickListener(ButtonOnClick);
+        }
+        return SystemRestartScrollView;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemShutdown.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemShutdown.cpp
new file mode 100644 (file)
index 0000000..3d407ca
--- /dev/null
@@ -0,0 +1,168 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-08-28 17:30:10
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-08-28 18:49:19
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/system/src/SystemShutdown.cpp
+ */
+#include "system/include/SystemShutdown.h"
+#include "UiConfig.h"
+#include "system/include/SystemPresenter.h"
+#include "ui_resource_string.h"
+namespace OHOS
+{
+    SystemShutdown::SystemShutdown()
+    {
+    }
+
+    SystemShutdown::~SystemShutdown()
+    {
+        ClearAll();
+    }
+
+    void SystemShutdown::ClearAll(void)
+    {
+        if (SystemShutdownScrollView)
+        {
+            SystemShutdownScrollView->RemoveAll();
+
+            if (title)
+            {
+                delete title;
+                title = nullptr;
+            }
+            if (note)
+            {
+                delete note;
+                note = nullptr;
+            }
+            if (image)
+            {
+                delete image;
+                image = nullptr;
+            }
+            if (button_ensure)
+            {
+                delete button_ensure;
+                button_ensure = nullptr;
+            }
+            if (button_cancel)
+            {
+                delete button_cancel;
+                button_cancel = nullptr;
+            }
+            delete SystemShutdownScrollView;
+            SystemShutdownScrollView = nullptr;
+        }
+    }
+    UIScrollView *SystemShutdown::SystemShutdownViewInit(void)
+    {
+        if (SystemShutdownScrollView == nullptr)
+        {
+            SystemShutdownScrollView = new UIScrollView();
+            if (SystemShutdownScrollView == nullptr)
+            {
+                return nullptr;
+            }
+            SystemShutdownScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+            SystemShutdownScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+            UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(SystemPresenter::GetInstance());
+            if (draglistener == nullptr)
+            {
+                return nullptr;
+            }
+            SystemShutdownScrollView->SetOnDragListener(draglistener);
+            SystemShutdownScrollView->SetTouchable(true);
+            SystemShutdownScrollView->SetDraggable(true);
+            /* -------------------------------------------------------------------------- */
+            if (title == nullptr)
+            {
+                title = new UILabelExt();
+                if (title == nullptr)
+                {
+                    return nullptr;
+                }
+                title->SetPosition(83, 50, 300, 35);    // 位置
+                title->SetStyle(STYLE_TEXT_FONT, 30);   // 字体大小
+                title->SetStyle(STYLE_LINE_HEIGHT, 35); // 字体行高
+                title->SetTextId(STR_SHUTDOWN);         // 内容
+                title->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+                title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+                title->SetRollSpeed(23);
+                title->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+                SystemShutdownScrollView->Add(title);
+            }
+            /* -------------------------------------------------------------------------- */
+            if (image == nullptr)
+            {
+                image = new UIImageView();
+                if (image == nullptr)
+                {
+                    return nullptr;
+                }
+                image->SetPosition(196, 120, 74, 80);
+                image->SetSrc("/user/res/settings/SETTTING_SHUTDOWN.bin");
+            }
+            SystemShutdownScrollView->Add(image);
+            /* -------------------------------------------------------------------------- */
+            if (note == nullptr)
+            {
+                note = new UILabelExt();
+                if (note == nullptr)
+                {
+                    return nullptr;
+                }
+                note->SetPosition(53, 232, 360, 35);      // 位置
+                note->SetStyle(STYLE_TEXT_FONT, 30);   // 字体大小
+                note->SetStyle(STYLE_LINE_HEIGHT, 35); // 字体行高
+                note->SetTextId(STR_SHUTDOWN_CONFIRM);
+                note->SetLineBreakMode(UILabel::LINE_BREAK_OSCILLATION);
+                note->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+                note->SetRollSpeed(23);
+                note->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+                SystemShutdownScrollView->Add(note);
+            }
+            /* -------------------------------------------------------------------------- */
+            button_cancel = new UIButton();
+            if (button_cancel == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemShutdown::new button_cancel fail!");
+                return nullptr;
+            }
+            button_cancel->SetPosition(97, 299, 130, 130);
+            button_cancel->SetViewId(SHUTDOWN_CHECKOFF);
+            button_cancel->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+            button_cancel->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+            button_cancel->SetImagePosition(15, 15);
+            button_cancel->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff191919, UIButton::PRESSED);
+            button_cancel->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);
+            button_cancel->SetImageSrc(PNG_SYSTEM_CHECK_OFF_IMAGE, PNG_SYSTEM_CHECK_OFF_IMAGE);
+            SystemShutdownScrollView->Add(button_cancel);
+            /* ------------------------ button_ensure ----------------------- */
+            button_ensure = new UIButton();
+            if (button_ensure == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemShutdown::new button_ensure fail!");
+                return nullptr;
+            }
+            button_ensure->SetPosition(240, 299, 130, 130);
+            button_ensure->SetViewId(SHUTDOWN_CHECKON);
+            button_ensure->SetStyle(STYLE_BACKGROUND_COLOR, 0xffffffff);
+            button_ensure->SetStyle(STYLE_BACKGROUND_OPA, 0x00);
+            button_ensure->SetImagePosition(15, 15);
+            button_ensure->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff191919, UIButton::PRESSED);
+            button_ensure->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);
+            button_ensure->SetImageSrc(PNG_SYSTEM_CHECK_ON_IMAGE, PNG_SYSTEM_CHECK_ON_IMAGE);
+            SystemShutdownScrollView->Add(button_ensure);
+            UIView::OnClickListener *ButtonOnClick = static_cast<UIView::OnClickListener *>(SystemPresenter::GetInstance());
+            if (ButtonOnClick == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemShutdown::ButtonOnClick is nullptr!");
+                return nullptr;
+            }
+            button_cancel->SetOnClickListener(ButtonOnClick);
+            button_ensure->SetOnClickListener(ButtonOnClick);
+        }
+        return SystemShutdownScrollView;
+    }
+}
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemSuperviseView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemSuperviseView.cpp
new file mode 100644 (file)
index 0000000..79cbfc0
--- /dev/null
@@ -0,0 +1,137 @@
+#include "system/include/SystemSuperviseView.h"\r
+#include "system/include/SystemPresenter.h"\r
+#include "wearable_log.h"\r
+namespace OHOS\r
+{\r
+\r
+    static SystemSuperviseView *g_pSystemSuperviseView{nullptr};\r
+\r
+    SystemSuperviseView::SystemSuperviseView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemSuperviseView::SystemSuperviseView");\r
+        g_pSystemSuperviseView = this;\r
+    }\r
+\r
+    SystemSuperviseView::~SystemSuperviseView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemSuperviseView::~SystemSuperviseView");\r
+        ClearAll();\r
+        g_pSystemSuperviseView = nullptr;\r
+    }\r
+\r
+    SystemSuperviseView *SystemSuperviseView::GetInstance()\r
+    {\r
+        return g_pSystemSuperviseView;\r
+    }\r
+\r
+    void SystemSuperviseView::ClearAll()\r
+    {\r
+        if (initViewStatus == true)\r
+        {\r
+            SystemSuperviseViewScrollView->RemoveAll();\r
+            delete Title;\r
+            Title = nullptr;\r
+            delete ProductModel;\r
+            ProductModel = nullptr;\r
+            delete ProductModelName;\r
+            ProductModelName = nullptr;\r
+            delete CMIT;\r
+            CMIT = nullptr;\r
+            delete CMITName;\r
+            CMITName = nullptr;\r
+            delete SystemSuperviseViewScrollView;\r
+            SystemSuperviseViewScrollView = nullptr;\r
+        }\r
+    }\r
+\r
+    UILabel *SystemSuperviseView::InitLabel(int left, int top, int width, int height, const char *text, const char *viewId, int fontSize, int fontlineHeigh, uint16_t speed)\r
+    {\r
+        UILabel *label = new UILabel();\r
+        label->SetPosition(left, top);                     // 位置\r
+        label->Resize(width, height);                      // 大小\r
+        label->SetViewId(viewId);                          // id\r
+        label->SetStyle(STYLE_TEXT_FONT, fontSize);        // 字体大小\r
+        label->SetStyle(STYLE_LINE_HEIGHT, fontlineHeigh); // 字体行高\r
+        label->SetText(text);                              // 内容\r
+        label->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);\r
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        label->SetRollSpeed(speed);\r
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, fontSize);\r
+\r
+        return label;\r
+    }\r
+\r
+    UIScrollView *SystemSuperviseView::SystemSuperviseViewInit()\r
+    {\r
+        if (SystemSuperviseViewScrollView == nullptr)\r
+        {\r
+            SystemSuperviseViewScrollView = new UIScrollView();\r
+        }\r
+        SystemSuperviseViewScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        SystemSuperviseViewScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        SystemSuperviseViewScrollView->SetStyle(STYLE_BORDER_RADIUS, 1294);\r
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(SystemPresenter::GetInstance());\r
+        if (draglistener == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        SystemSuperviseViewScrollView->SetOnDragListener(draglistener);\r
+        SystemSuperviseViewScrollView->SetTouchable(true);\r
+        SystemSuperviseViewScrollView->SetDraggable(true);\r
+        /* -------------------------------------------------------------------------- */\r
+        if (Title == nullptr)\r
+        {\r
+            Title = InitLabel(203, 52, 60, 35, "监管", "Title", 30, 35, 6);\r
+        }\r
+        SystemSuperviseViewScrollView->Add(Title);\r
+        /* -------------------------------------------------------------------------- */\r
+        if (ProductModel == nullptr)\r
+        {\r
+            ProductModel = InitLabel(203, 164, 60, 35, "型号", "ProductModel", 30, 35, 6);\r
+        }\r
+        SystemSuperviseViewScrollView->Add(ProductModel);\r
+        /* -------------------------------------------------------------------------- */\r
+        ProductModelName = new UILabel();\r
+        if (ProductModelName == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        ProductModelName->SetPosition(37, 221, 400, 30);                  // 位置大小\r
+        ProductModelName->SetStyle(STYLE_TEXT_FONT, 26);                  // 字体大小\r
+        ProductModelName->SetStyle(STYLE_LINE_HEIGHT, 30);                // 字体行高\r
+        #ifdef CUSTOM_Z1\r
+        ProductModelName->SetText("Z1");                          // 内容\r
+        #else\r
+        ProductModelName->SetText("Watch Soar");                          // 内容\r
+        #endif\r
+        ProductModelName->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); // 断行模式。\r
+        ProductModelName->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        ProductModelName->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        ProductModelName->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x87));\r
+        SystemSuperviseViewScrollView->Add(ProductModelName);\r
+        /* -------------------------------------------------------------------------- */\r
+        if (CMIT == nullptr)\r
+        {\r
+            CMIT = InitLabel(198, 310, 71, 35, "CMIT", "CMIT", 30, 35, 6);\r
+        }\r
+        SystemSuperviseViewScrollView->Add(CMIT);\r
+        /* -------------------------------------------------------------------------- */\r
+        CMITName = new UILabel();\r
+        if (CMITName == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        CMITName->SetPosition(37, 367, 400, 30);                  // 位置大小\r
+        CMITName->SetStyle(STYLE_TEXT_FONT, 26);                  // 字体大小\r
+        CMITName->SetStyle(STYLE_LINE_HEIGHT, 30);                // 字体行高\r
+        CMITName->SetText("V1.0");                                // 内容\r
+        CMITName->SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS); // 断行模式。\r
+        CMITName->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        CMITName->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);\r
+        CMITName->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x87));\r
+        SystemSuperviseViewScrollView->Add(CMITName);\r
+        initViewStatus = true;\r
+        return SystemSuperviseViewScrollView;\r
+    }\r
+\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/SystemView.cpp
new file mode 100644 (file)
index 0000000..779e1dc
--- /dev/null
@@ -0,0 +1,533 @@
+#include "system/include/SystemView.h"\r
+#include "system/include/SystemPresenter.h"\r
+#include "wearable_log.h"\r
+\r
+#ifdef SUPPORT_BLE_SERVICE\r
+#include <bleEvent.h>\r
+#include "bleService.h"\r
+#endif\r
+\r
+// #include "battery_hal.h"\r
+// extern uint8_t battery_get_voltage(float *voltage);\r
+\r
+#include "UiConfig.h"\r
+\r
+\r
+\r
+#include "ui_resource_string.h"\r
+\r
+#include "systemupdate/include/SystemUpdateModel.h"\r
+namespace OHOS\r
+{\r
+    static SystemView *g_pSystemView{nullptr};\r
+\r
+    SystemView::SystemView()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::SystemView");\r
+        g_pSystemView = this;\r
+    }\r
+\r
+    SystemView::~SystemView()\r
+    {\r
+        ClearAll();\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::~SystemView");\r
+        g_pSystemView = nullptr;\r
+    }\r
+\r
+    SystemView *SystemView::GetInstance()\r
+    {\r
+        return g_pSystemView;\r
+    }\r
+\r
+    void SystemView::ClearAll()\r
+    {\r
+       \r
+        \r
+        if (viewInitStatus)\r
+        {\r
+            if (SystemScrollView[SYSTEMVIEW] != nullptr)\r
+            {\r
+                SystemScrollView[SYSTEMVIEW]->RemoveAll();\r
+                if (Title != nullptr)\r
+                {\r
+                    delete Title;\r
+                    Title = nullptr;\r
+                }\r
+                for (int i = 0; i < sizeof(SystemViewLabelButton) / sizeof(SystemViewLabelButton[0]); i++)\r
+                {\r
+                    if (SystemViewLabelButton[i] != nullptr)\r
+                    {\r
+                        delete SystemViewLabelButton[i];\r
+                        SystemViewLabelButton[i] = nullptr;\r
+                    }\r
+\r
+                    if (SystemViewLabel[i] != nullptr)\r
+                    {\r
+                        delete SystemViewLabel[i];\r
+                        SystemViewLabel[i] = nullptr;\r
+                    }\r
+                }\r
+                if (NeedToUpdateImage != nullptr)\r
+                {\r
+                    delete NeedToUpdateImage;\r
+                    NeedToUpdateImage = nullptr;\r
+                }\r
+                if (temp != nullptr)\r
+                {\r
+                    delete temp;\r
+                    temp = nullptr;\r
+                }\r
+                delete SystemScrollView[SYSTEMVIEW];\r
+                SystemScrollView[SYSTEMVIEW] = nullptr;\r
+            }\r
+        }\r
+        if (p_SystemAboutTheWatchView != nullptr)\r
+        {\r
+            delete p_SystemAboutTheWatchView;\r
+            p_SystemAboutTheWatchView = nullptr;\r
+        }\r
+        if (p_SystemRestart != nullptr)\r
+        {\r
+            delete p_SystemRestart;\r
+            p_SystemRestart = nullptr;\r
+        }\r
+        if (p_SystemShutdown != nullptr)\r
+        {\r
+            delete p_SystemShutdown;\r
+            p_SystemShutdown = nullptr;\r
+        }\r
+        if (p_SystemFactoryResetView != nullptr)\r
+        {\r
+            delete p_SystemFactoryResetView;\r
+            p_SystemFactoryResetView = nullptr;\r
+        }\r
+        if (p_ShutDownImageAnimatorView != nullptr)\r
+        {\r
+            delete p_ShutDownImageAnimatorView;\r
+            p_ShutDownImageAnimatorView = nullptr;\r
+        }\r
+        for (int i = SYSTEMVIEW; i < MAX_SYSTEMVIEWID; i++)\r
+        {\r
+            SystemScrollView[i] = nullptr;\r
+        }\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::ClearAll end!!");\r
+    }\r
+\r
+    UILabelButtonExt *SystemView::SystemViewLabelButtonInit(ButtonConfig &buttonconfig)\r
+    {\r
+        UILabelButtonExt *labelButton = new UILabelButtonExt();\r
+        if (labelButton == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        labelButton->SetPosition(buttonconfig.x, buttonconfig.y, buttonconfig.w, buttonconfig.h);\r
+        labelButton->SetViewId(buttonconfig.viewId);\r
+        labelButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);\r
+        labelButton->SetImageSrc(PNG_SETTING_NEXT_IMAGE, PNG_SETTING_NEXT_IMAGE);\r
+        labelButton->SetImagePosition(326, 37);\r
+        labelButton->SetStyleForState(STYLE_BACKGROUND_COLOR, 0xff000000, UIButton::PRESSED);\r
+        labelButton->SetOnClickListener(presenter_);\r
+\r
+        return labelButton;\r
+    }\r
+\r
+    UILabelExt *SystemView::SystemViewLabelInit(LabelConfig &labelconfig)\r
+    {\r
+        UILabelExt *label = new UILabelExt();\r
+        if (label == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        label->SetPosition(labelconfig.left, labelconfig.top, labelconfig.width, labelconfig.height);\r
+        label->SetStyle(STYLE_TEXT_FONT, labelconfig.fontSize);\r
+        label->SetStyle(STYLE_LINE_HEIGHT, labelconfig.lineHeigh);\r
+        label->SetTextId(labelconfig.textId);\r
+        label->SetLineBreakMode(labelconfig.lineBreakMode);\r
+        label->SetRollSpeed(23);\r
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelconfig.fontSize);\r
+        return label;\r
+    }\r
+\r
+    bool SystemView::CreateSystemViewLabel(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemViewLabel");\r
+        LabelConfig labelConfig = {\r
+            .left = 83,\r
+            .top = 50,\r
+            .width = 300,\r
+            .height = 35,\r
+            .fontSize = 30,\r
+            .lineHeigh = 35,\r
+            .textId = STR_SYSTEM, /*系统*/\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        Title = SystemViewLabelInit(labelConfig);\r
+        if (Title == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::Title");\r
+            return false;\r
+        }\r
+        Title->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);\r
+        SystemScrollView[SYSTEMVIEW]->Add(Title);\r
+        /* -------------------------------------------------------------------------- */\r
+        struct LabelSetup\r
+        {\r
+            int16_t y;\r
+            const int16_t textId;\r
+        };\r
+\r
+        LabelSetup labelSetups[] = {\r
+            {153, STR_ABOUT_WATCH},\r
+            // {273, STR_SYSTEM_UPDATE},\r
+            {273, STR_TIME_FORMAT_SET},\r
+            {393, STR_WATCH_QR_CODE},\r
+            {513, STR_SYSTEM_LANGUAGE},\r
+            {633, STR_RESTART},\r
+            {753, STR_SHUTDOWN},\r
+            {873, STR_FACTORY_RESET},\r
+        };\r
+        labelConfig = {\r
+            .left = 90,\r
+            .top = 153,\r
+            .width = 240,\r
+            .height = 35,\r
+            .fontSize = 30,\r
+            .lineHeigh = 35,\r
+            .textId = STR_ABOUT_WATCH,\r
+            .lineBreakMode = UILabel::LINE_BREAK_OSCILLATION,\r
+        };\r
+        int pos_y = 153;\r
+        SystemViewLabelNum = sizeof(labelSetups) / sizeof(labelSetups[0]);\r
+        for (int i = 0; i < SystemViewLabelNum; ++i)\r
+        {\r
+\r
+            labelConfig.top = pos_y + 120*i;\r
+            labelConfig.textId = labelSetups[i].textId;\r
+            SystemViewLabel[i] = SystemViewLabelInit(labelConfig);\r
+            if (SystemViewLabel[i] == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SoundAndVibrationView::SystemViewLabel[%d] new fail!", i);\r
+                return false;\r
+            }\r
+            SystemScrollView[SYSTEMVIEW]->Add(SystemViewLabel[i]);\r
+        }\r
+\r
+        return true;\r
+    }\r
+\r
+    bool SystemView::CreateSystemViewLabelButton(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemViewLabelButton");\r
+        struct ButtonSetup\r
+        {\r
+            int y;\r
+            const char *viewId;\r
+        };\r
+        ButtonSetup buttonSetups[] = {\r
+            {120, ABOUT_THE_WATCH},\r
+            // {240, SYSTEM_UPGRADE},\r
+            {300, SET_TIME_FORMAT},\r
+            {360, WATCH_QR_CODE},\r
+            {480, SYSTEM_LANGUAGE},\r
+            {600, RESTART},\r
+            {720, SHUTDOWN},\r
+            {840, FACTORY_RESET},\r
+        };\r
+\r
+        int pos_y = 120;\r
+        SystemViewButtonNum = sizeof(buttonSetups) / sizeof(buttonSetups[0]);\r
+        for (int i = 0; i < SystemViewButtonNum; ++i)\r
+        {\r
+            ButtonConfig buttonconfig = {\r
+                .x = 43,\r
+                // .y = buttonSetups[i].y,\r
+                .y = pos_y + 120*i,\r
+                .w = 380,\r
+                .h = 100,\r
+                .viewId = buttonSetups[i].viewId,\r
+            };\r
+            SystemViewLabelButton[i] = SystemViewLabelButtonInit(buttonconfig);\r
+            if (SystemViewLabelButton[i] == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SoundAndVibrationView::Button[%d] new fail!", i);\r
+                return false;\r
+            }\r
+            SystemScrollView[SYSTEMVIEW]->Add(SystemViewLabelButton[i]);\r
+        }\r
+\r
+        return true;\r
+    }\r
+\r
+    bool SystemView::CreateSystemScrollView(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemScrollView");\r
+        SystemScrollView[SYSTEMVIEW] = new UIScrollView();\r
+        if (SystemScrollView[SYSTEMVIEW] == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::SystemScrollView new fail!");\r
+            return false;\r
+        }\r
+        SystemScrollView[SYSTEMVIEW]->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());\r
+        SystemScrollView[SYSTEMVIEW]->SetStyle(STYLE_BACKGROUND_OPA, 0xff);\r
+        SystemScrollView[SYSTEMVIEW]->SetScrollBlankSize(30);\r
+        SystemScrollView[SYSTEMVIEW]->SetReboundSize(30);\r
+        SystemScrollView[SYSTEMVIEW]->SetDirection(1);\r
+        SystemScrollView[SYSTEMVIEW]->SetThrowDrag(true);         // 设置手指抬起屏幕后是否继续滚动。\r
+        SystemScrollView[SYSTEMVIEW]->SetMaxScrollDistance(1000); // 设置手指抬起屏幕后的最大滚动距离。\r
+        SystemScrollView[SYSTEMVIEW]->SetSwipeACCLevel(200);      /*设置手指抬起屏幕后的补偿距离。*/\r
+        FocusManager::GetInstance()->RequestFocus(SystemScrollView[SYSTEMVIEW]);\r
+        FocusManager::GetInstance()->RequestFocusByDirection(FOCUS_DIRECTION_UP);\r
+        SystemScrollView[SYSTEMVIEW]->SetRotateFactor(1.0);\r
+        SystemScrollView[SYSTEMVIEW]->SetOnDragListener(presenter_);\r
+        SystemScrollView[SYSTEMVIEW]->SetTouchable(true);\r
+        SystemScrollView[SYSTEMVIEW]->SetDraggable(true);\r
+\r
+        return true;\r
+    }\r
+\r
+    /*需要更新的红点图片初始化*/\r
+    void SystemView::NeedToUpdateImageinit(void)\r
+    {\r
+        if (NeedToUpdateImage == nullptr)\r
+        {\r
+            NeedToUpdateImage = new UIImageView();\r
+            if (NeedToUpdateImage == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::SystemView");\r
+                return;\r
+            }\r
+            NeedToUpdateImage->SetPosition(323, 280, 20, 20);\r
+            NeedToUpdateImage->SetStyle(STYLE_BORDER_RADIUS, 200);\r
+            const char *imagesPath = "/user/res/system/SYSTEM_UPDATE_FLAG.bin";\r
+            NeedToUpdateImage->SetSrc(imagesPath);\r
+\r
+            SystemScrollView[SYSTEMVIEW]->Add(NeedToUpdateImage);\r
+        }\r
+    }\r
+\r
+    void SystemView::CreateSystemView(void)\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemView");\r
+        if (!CreateSystemScrollView() || !CreateSystemViewLabelButton() || !CreateSystemViewLabel())\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::CreateSystemView fail!!");\r
+            return;\r
+        }\r
+        /* ------------------- 该组件的使用是为了解决不能单独设置滚动视图底部空白大小问题,用一个不可见组件占位置 ------------------ */\r
+        /* ---------------------------- 因为使用SetScrollBlankSize设置过大后,下拉后无法恢复到原位置,有明显的向下偏移 --------------------------- */\r
+        if (temp == nullptr)\r
+        {\r
+            temp = new UIImageView();\r
+            if (temp == nullptr)\r
+            {\r
+                return;\r
+            }\r
+            temp->SetPosition(43, (SystemViewButtonNum + 1) * 120, 380, 40);\r
+            temp->SetVisible(false);\r
+            SystemScrollView[SYSTEMVIEW]->Add(temp);\r
+        }\r
+        viewInitStatus = true;\r
+    }\r
+\r
+    void SystemView::OnStart()\r
+    {\r
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::OnStart");\r
+       \r
+\r
+        if (!viewInitStatus)\r
+        {\r
+            CreateSystemView();\r
+        }\r
+\r
+       RootView::GetInstance()->SetOnKeyActListener(presenter_);\r
+\r
+        if (SystemScrollView[SYSTEMVIEW] == nullptr)\r
+        {\r
+            return;\r
+        }\r
+        if (SystemUpdateModel::GetInstance().IsLatestVersion() == false) // 如果不是最新系统版本出现小圆点\r
+        {\r
+            NeedToUpdateImageinit();\r
+        }\r
+        AddViewToRootContainer(SystemScrollView[SYSTEMVIEW]);\r
+    }\r
+\r
+   \r
+\r
+\r
+    // 0.跳转到系统视图,其他视图都市通过这个视图跳转\r
+    bool SystemView::ChangeToSystemView(int16_t thisView)\r
+    {\r
+        if (SystemScrollView[thisView] == nullptr)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::ChangeToSystemView");\r
+            AddViewToRootContainer(SystemScrollView[thisView]);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    // 1.跳转到关于手表\r
+    bool SystemView::ChangeToSystemAboutView(int16_t thisView)\r
+    {\r
+        if (SystemScrollView[thisView] == nullptr)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::ChangeToSystemAboutView");\r
+            p_SystemAboutTheWatchView = new SystemAboutTheWatchView();\r
+            if (p_SystemAboutTheWatchView == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView:: new scrollView[%d] fail", thisView);\r
+                return false;\r
+            }\r
+            SystemScrollView[thisView] = p_SystemAboutTheWatchView->SystemAbouTheWatchtInitIView();\r
+            AddViewToRootContainer(SystemScrollView[thisView]);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    // 3.跳转到恢复出厂设置界面\r
+    bool SystemView::ChangeToSystemFactoryResetView(int16_t thisView)\r
+    {\r
+        if (SystemScrollView[thisView] == nullptr)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::ChangeToSystemFactoryResetView");\r
+            p_SystemFactoryResetView = new SystemFactoryResetView();\r
+            if (p_SystemFactoryResetView == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView:: new scrollView[%d] fail", thisView);\r
+                return false;\r
+            }\r
+            SystemScrollView[thisView] = p_SystemFactoryResetView->SystemFactoryResetViewInit();\r
+            AddViewToRootContainer(SystemScrollView[thisView]);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    // 重启\r
+    bool SystemView::ChangeToSystemRestartView(int16_t thisView)\r
+    {\r
+        if (SystemScrollView[thisView] == nullptr)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::ChangeToSystemRestartView");\r
+            p_SystemRestart = new SystemRestart();\r
+            if (p_SystemRestart == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView:: new scrollView[%d] fail", thisView);\r
+                return false;\r
+            }\r
+            SystemScrollView[thisView] = p_SystemRestart->SystemRestartViewInit();\r
+            AddViewToRootContainer(SystemScrollView[thisView]);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    // 关机\r
+    bool SystemView::ChangeToSystemShutdownView(int16_t thisView)\r
+    {\r
+        if (SystemScrollView[thisView] == nullptr)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::ChangeToSystemShutdownView");\r
+            p_SystemShutdown = new SystemShutdown();\r
+            if (p_SystemShutdown == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView:: new scrollView[%d] fail", thisView);\r
+                return false;\r
+            }\r
+            SystemScrollView[thisView] = p_SystemShutdown->SystemShutdownViewInit();\r
+            AddViewToRootContainer(SystemScrollView[thisView]);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    // 关机动画\r
+    bool SystemView::ChangeToSystemShutdownAnimatorView(int16_t thisView)\r
+    {\r
+        if (SystemScrollView[thisView] == nullptr)\r
+        {\r
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemView::ChangeToSystemShutdownAnimatorView");\r
+            p_ShutDownImageAnimatorView = new ShutDownImageAnimatorView();\r
+            if (p_ShutDownImageAnimatorView == nullptr)\r
+            {\r
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView:: new scrollView[%d] fail", thisView);\r
+                return false;\r
+            }\r
+            SystemScrollView[thisView] = static_cast<UIScrollView *>(p_ShutDownImageAnimatorView->ShutDownAnimatorViewInit());\r
+            AddViewToRootContainer(SystemScrollView[thisView]);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    struct SystemViewMapper\r
+    {\r
+        const int16_t viewId;\r
+        bool (SystemView::*func)(int16_t thisView);\r
+    };\r
+\r
+    static const SystemViewMapper ViewMapper[] = {\r
+        {SYSTEMVIEW, &SystemView::ChangeToSystemView},\r
+        {ABOUTTHEWATCHVIEW, &SystemView::ChangeToSystemAboutView},\r
+        {FACTORYRESETVIEW, &SystemView::ChangeToSystemFactoryResetView},\r
+        {RESTARTVIEW, &SystemView::ChangeToSystemRestartView},\r
+        {SHUTDOWNVIEW, &SystemView::ChangeToSystemShutdownView},\r
+        {SHUTDOWNANIMATIONVIEW, &SystemView::ChangeToSystemShutdownAnimatorView},\r
+    };\r
+\r
+    // 根据传入的interface参数执行相应视图ID关联的成员函数。\r
+    bool SystemView::ClickFunc(int16_t interface)\r
+    {\r
+        int funcSize = sizeof(ViewMapper) / sizeof(ViewMapper[SYSTEMVIEW]);\r
+        for (int i = 0; i < funcSize; i++)\r
+        {\r
+            if (interface == ViewMapper[i].viewId)\r
+            {\r
+                bool jug = (this->*(ViewMapper[i].func))(interface);\r
+                if (jug == false)\r
+                {\r
+                    return false;\r
+                }\r
+                return true;\r
+            }\r
+        }\r
+        return false;\r
+    }\r
+\r
+    /*检查传入的两个视图参数 hideView 和 showView 的有效性。*/\r
+    bool SystemView::CheckViewParam(int16_t hideView, int16_t showView)\r
+    {\r
+        if (showView < 0 || showView >= MAX_SYSTEMVIEWID)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::CheckViewParam showView err.");\r
+            return false;\r
+        }\r
+\r
+        if (hideView < 0 || hideView > MAX_SYSTEMVIEWID)\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::CheckViewParam hideView err.");\r
+            return false;\r
+        }\r
+\r
+        return true;\r
+    }\r
+\r
+    // 切换视图\r
+    void SystemView::ChangeView(int16_t hideView, int16_t showView)\r
+    {\r
+        if (!CheckViewParam(hideView, showView))\r
+        {\r
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::CheckViewParam failed.");\r
+            return;\r
+        }\r
+        SystemScrollView[hideView]->SetVisible(false);\r
+        ClickFunc(showView);\r
+        SystemScrollView[showView]->SetVisible(true);\r
+        Draw();\r
+    }\r
+\r
+    UIScrollView *SystemView::GetSystemScrollView(int ViewId)\r
+    {\r
+        if (SystemScrollView[ViewId] == nullptr)\r
+        {\r
+            return nullptr;\r
+        }\r
+        return SystemScrollView[ViewId];\r
+    }\r
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/Systemupgrade.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/system/src/Systemupgrade.cpp
new file mode 100644 (file)
index 0000000..0d3afcc
--- /dev/null
@@ -0,0 +1,952 @@
+#include "system/include/Systemupgrade.h"
+#include "system/include/SystemPresenter.h"
+#include "wearable_log.h"
+#include "UiConfig.h"
+#include "custom_utils.h"
+#include "stdio.h"
+#include <iostream>
+#include <fstream>
+#include "cJSON.h"
+#include "ConfigModel.h"
+#include "lwip/err.h"
+#include "power_display_service.h"
+#include "cmsis_os2.h"
+#include "los_memory.h"
+#include "thread_init.h"
+ #include "lwip/apps/http_client.h"
+ #include "tcxo.h"
+ #include "cat1_server.h"
+ #include "linux/delay.h"
+
+//http://r-oss.thisiot.com/device-ota/2024_05_06/1787425705369333762.fwpkg?Expires=1714998097&OSSAccessKeyId=LTAI5tJa2arDBmqSUsSTQJ1T&Signature=eLmtuPN10YXS8pNUtJO2E2vt%2FPM%3D
+
+
+//https://test.app.api.thisiot.com/ota/task?deviceId=deviceId&sourceVersion=sourceVersion
+
+//http://test.iot.api.thisiot.com/ota/task?deviceId=deviceId&sourceVersion=sourceVersion
+namespace OHOS
+{
+    
+
+    static SystemupgradeView *g_pSystemFactoryResetView{nullptr};
+    static osThreadId_t g_alipay_task_handle = NULL;
+    //static char * imei_str="864430010001091";
+//     osThreadAttr_t g_alipay_attr = {
+//     "alipay_task", 0, NULL, 0, NULL, ALIPAT_MSG_STACK_SIZE, TASK_PRIORITY_ALIPAY_APP, 0, 0
+// };
+    static char *Path=UPDATAJSONPATH;
+    static httpc_connection_t settings = {0};
+    static uint8_t uri[256] ={0};// (uint8_t*)
+    //"http://icfota.snicker.com.cn:8089/fd230ota.jsp?product=FD230&pkgver=V1.1_20240316_115535&imei=864430010001091";
+
+    static char *Path_ota_package= UPDATAFWPKGPATH;
+    static uint8_t uri_ota_package[256] ={0};
+    static const char *imei_str=NULL;
+    static char *report_jsonString=NULL;
+    static uint32_t file_total_len = 0;
+    static err_t httpc_download_headers_done_ui(httpc_state_t *connection, void *arg, struct pbuf *hdr, u16_t hdr_len, u32_t content_len)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_headers_done_ui hdrlen %d, file len %d\r\n",hdr_len,content_len); 
+        file_total_len = content_len;
+        return 0;
+    }
+    static err_t httpc_download_file_recv_ui(httpc_state_t *connection, u32_t rx_len,u32_t rx_total_len)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_file_recv_ui recv %d bytes total received %d filelen %d\r\n",rx_len,rx_total_len,file_total_len);
+        return 0;
+    }
+
+    static void httpc_download_result_report_data(void *arg, httpc_result_t httpc_result, u32_t rx_content_len, u32_t srv_res, err_t err)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"httpc_download_result , httpc_result_t %d, rx_content_len %d , srv_res %d, err %d\n",
+            httpc_result,rx_content_len,srv_res,err);
+        if(srv_res==200 && err==0)
+        remove(UPDATAREPORT);
+
+        return ;
+    }
+    
+    
+
+   
+    // // httpc_get_file(
+    //     const ip_addr_t* server_addr, 
+    //     u16_t port, 
+    //     const char* uri, 
+    //     const httpc_connection_t *settings,
+    // // //            altcp_recv_fn recv_fn, 
+    // void* callback_arg, httpc_state_t **connection)
+
+    static void report_data_by_get_file(char *data,u16_t data_len)
+    {
+        settings.use_proxy=0;
+        
+        settings.use_post=1;
+        settings.args=(u8_t*)data;
+        settings.arglen=data_len;
+        uint8_t *otadatapath =(uint8_t *)UPDATAREPORT_;
+
+        settings.result_fn=httpc_download_result_report_data;
+        settings.file_rx_fn = httpc_download_file_recv_ui;
+        settings.headers_done_fn = httpc_download_headers_done_ui;
+
+        httpc_state_t* connection=NULL;
+        err_t rett= httpc_get_file_dns_to_disk(
+            HTTP_JSON_SERVER_NAME,
+            PORT,
+            POST_URL,
+            &settings, 
+            NULL, 
+            (const char*) otadatapath, 
+             &connection);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"custom_start_ota_download %d \r\n",rett);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "use_post_");      
+    }
+    //#define UP_TEST
+    static void upgrade_task(void  *arg)
+    {
+     
+        // msleep(3000);
+        //uapi_tcxo_delay_ms(3000);
+       
+
+        FILE * fp = fopen(Path,"rb+");
+        if(fp==NULL)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "open fail");
+            if(SystemupgradeView::GetInstance())
+            SystemupgradeView::GetInstance()->set_string_value(NULL,false);
+            return;
+        }
+        char *buf=(char *)malloc(1024);
+        memset((void*)buf,0,1024);
+        int ret =fread(buf,1,1024,fp);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui %d %s\r\n",ret,buf);
+        if(ret==0)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fread %d",ret);
+            fclose(fp);
+            free(buf);
+            if(SystemupgradeView::GetInstance())
+            SystemupgradeView::GetInstance()->set_string_value(NULL,false);
+            return;
+        }
+       
+        // std::string jsonDataString((std::istreambuf_iterator<char>(inFile)), std::istreambuf_iterator<char>());
+        // const char *jsonData = jsonDataString.c_str();
+        // char *new_buf=NULL;
+        // new_buf=strstr(buf,"{\"success\":");//移到json的头的位置
+        cJSON *root = cJSON_Parse(buf);
+        //  WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, " %s",new_buf);
+        free(buf);
+        if(root==NULL)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui JSON_parse_fail");
+        }
+        else if(root!=NULL)
+        {
+            
+            int code=cJSON_GetObjectItem(root, "code")->valueint;
+
+            //char *uri = cJSON_GetObjectItem(root, "url")->valuestring;
+            //
+            //char *OtaPackageVersion = cJSON_GetObjectItem(root, "OtaPackageVersion")->valuestring;
+            char *msg = cJSON_GetObjectItem(root, "msg")->valuestring;
+            // if(msg==NULL)
+            // {
+            //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "msg????????????????"); 
+            // }
+            // else
+            // //WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",msg); 
+            int success=cJSON_GetObjectItem(root, "success")->valueint;
+            
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s,%s",uri,OtaPackageVersion);
+        // //SystemupgradeView::GetInstance()->newVersion->SetText(OtaPackageVersion);
+        //     cJSON_Delete(root);
+            char msg_buf[256]={0};
+            bool falg=false;
+
+     
+         
+            sprintf(msg_buf,"%s",msg);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",msg); 
+            if(SystemupgradeView::GetInstance())
+            SystemupgradeView::GetInstance()->set_string_value(msg_buf,falg);
+        
+        //RootView::GetInstance()->Invalidate();
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
+            cJSON_Delete(root);
+
+        }
+        fclose(fp);
+        
+
+    }
+
+    static void upgrade_task_fwpkg(void  *arg)
+    {
+     
+        // msleep(3000);
+        FILE * fp = fopen(Path_ota_package,"rb");
+        if(fp!=NULL)
+        {
+            fclose(fp);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "file open success fwpkg_is_ready");
+        }
+        errcode_t ret=uaip_cmd_update_request();
+        if(ret!=ERRCODE_SUCC)
+        {
+            SystemupgradeView::GetInstance()->init_fail(0);
+        }
+
+            //开始升级
+            //**********
+
+    }
+
+    // void create_ppg_queue(void)
+    // {
+    // if (osal_msg_queue_create("ppg_service_queue", 10, &g_app_queue,
+    //                           0, sizeof(PPG_CMD_TYPE_T)) != ERRCODE_SUCC) {
+    //     PRINT_ERR("[ppg][service] app create mail fail\n");
+    // }
+    // }
+
+    errcode_t upgrade_service_service_init(void)
+    {
+   
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"uapi_ppg_service_init !\r\n");
+        app_task_definition_t taskcfg={0};
+        taskcfg.create_queue_handle = NULL;
+        taskcfg.attr.name="upgrade_service";
+        taskcfg.attr.priority = TASK_PRIORITY_APP;
+        taskcfg.attr.stack_size =  1024*10;
+        taskcfg.func = upgrade_task;
+        taskcfg.use_mem = USE_EXTEND_MEM;
+        
+        errcode_t ret=uapi_create_osThread_custom(&taskcfg);
+        if(ret != ERRCODE_SUCC)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create ppg_service failed %d!\r\n",ret);
+            return ERRCODE_FAIL;
+        }
+
+        return ERRCODE_SUCC;
+    }
+
+     errcode_t upgrade_service_service_init_packpage(void)
+    {
+   
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"uapi_ppg_service_init !\r\n");
+        app_task_definition_t taskcfg={0};
+        taskcfg.create_queue_handle = NULL;
+        taskcfg.attr.name="upgrade_service_ota_fwpkg";
+        taskcfg.attr.priority = TASK_PRIORITY_APP;
+        taskcfg.attr.stack_size =  1024*8;
+        taskcfg.func = upgrade_task_fwpkg;
+        taskcfg.use_mem = USE_EXTEND_MEM;
+        
+        errcode_t ret=uapi_create_osThread_custom(&taskcfg);
+        if(ret != ERRCODE_SUCC)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"create ppg_service failed %d!\r\n",ret);
+            return ERRCODE_FAIL;
+        }
+
+        return ERRCODE_SUCC;
+    }
+
+
+
+
+    static void httpc_download_result_ui_packpage(void *arg, httpc_result_t httpc_result, u32_t rx_content_len, u32_t srv_res, err_t err)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"httpc_download_result , httpc_result_t %d, rx_content_len %d , srv_res %d, err %d\n",
+            httpc_result,rx_content_len,srv_res,err);
+        cat1_api_keep_wakeup(0);
+        if(httpc_result!=0)
+        {
+            SystemupgradeView::GetInstance()->init_fail(1);
+            return;
+        }
+        
+        
+        upgrade_service_service_init_packpage();//线程当timer用
+        return ;
+    }
+
+
+    static void httpc_download_result_ui(void *arg, httpc_result_t httpc_result, u32_t rx_content_len, u32_t srv_res, err_t err)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"httpc_download_result , httpc_result_t %d, rx_content_len %d , srv_res %d, err %d\n",
+            httpc_result,rx_content_len,srv_res,err);
+        cat1_api_keep_wakeup(0);
+        upgrade_service_service_init();//线程当timer用
+       
+        return ;
+    }
+
+    //static osTimerId_t  upgrade_timer=NULL;
+    
+
+    static uint32_t custom_start_ota_download_ui_1( uint8_t *uri_str,uint8_t *Path,bool falg,const char *server_name)
+    {
+    
+       //(uint8_t*)argv[0];
+        uint8_t *otadatapath = (uint8_t*)Path;
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"custom_start_ota_download %s to %s\r\n",uri_str,otadatapath);
+        cat1_api_keep_wakeup(1);
+        if(falg)
+        {
+            settings.result_fn=httpc_download_result_ui;
+        }
+        else
+        {
+            settings.result_fn=httpc_download_result_ui_packpage;
+        }
+
+        FILE * fp= fopen((char *)Path,"rb");
+        if(fp!=NULL)
+        {
+            fclose(fp);
+            int  ret= remove((char *)Path);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "file remove!!!!!!!!!!!!! %d  ",ret);
+        }
+        
+        settings.file_rx_fn = httpc_download_file_recv_ui;
+        settings.headers_done_fn=httpc_download_headers_done_ui;
+        settings.use_post=0;
+        httpc_state_t* connection=NULL;
+        err_t rett =  httpc_get_file_dns_to_disk(
+                        server_name, 
+                        PORT,
+                        (const char*) uri_str,
+                        (const httpc_connection_t *)&settings,
+                        NULL, 
+                        (const char*) otadatapath, 
+                        &connection);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"custom_start_ota_download %d \r\n",rett);
+        if(rett!=0)
+        {
+            if(SystemupgradeView::GetInstance())
+            SystemupgradeView::GetInstance()->set_string_value(NULL,false);
+        }
+       
+        // SystemupgradeView::GetInstance()->init_fail(0);
+        return ERRCODE_SUCC;
+    }
+
+
+
+
+    
+
+    //httpc_result_fn *result_fn;
+   
+
+    SystemupgradeView::SystemupgradeView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::SystemFactoryResetView");
+        g_pSystemFactoryResetView = this;
+    }
+
+    SystemupgradeView::~SystemupgradeView()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::~SystemFactoryResetView");
+        ClearAll();
+        g_pSystemFactoryResetView = nullptr;
+    }
+
+    SystemupgradeView *SystemupgradeView::GetInstance()
+    {
+        return g_pSystemFactoryResetView;
+    }
+
+    void SystemupgradeView::ClearAll()
+    {
+        // if (initViewStatus == true)
+        // {
+        if(scrollView)
+        {
+            scrollView->RemoveAll();
+            if(container_fail)
+            {
+                container_fail->RemoveAll();
+                if(label1_fail)
+                {
+                    delete label1_fail;
+                }
+                label1_fail=nullptr;
+
+                if(labelButton1_exit)
+                {
+                    delete labelButton1_exit;
+                }
+                labelButton1_exit=nullptr;
+
+                delete container_fail;
+                container_fail = nullptr;
+            }
+            if(container_updating)
+            {
+                container_updating->RemoveAll();
+                if(label_updating)
+                {
+                    delete label_updating;
+                }
+                label_updating=nullptr;
+                delete label_updating;
+                label_updating = nullptr;
+            }
+            if(newVersionTitle)
+            {
+                delete newVersionTitle;
+            }
+            newVersionTitle=nullptr;
+
+            if(newVersion)
+            {
+                delete newVersion;
+            }
+            newVersion=nullptr;
+
+            if(systemupgrade)
+            {
+                delete systemupgrade;
+            }
+            systemupgrade=nullptr;
+
+            if(FirmwareVersionTitle)
+            {
+                delete FirmwareVersionTitle;
+            }
+            FirmwareVersionTitle=nullptr;
+
+            if(FirmwareVersion)
+            {
+                delete FirmwareVersion;
+            }
+            FirmwareVersion=nullptr;
+
+            if(new_label)
+            {
+                delete new_label;
+            }
+            new_label=nullptr;
+
+            
+            if(SystemUpgradeButton_)
+            {
+                delete SystemUpgradeButton_;
+            }
+            SystemUpgradeButton_=nullptr;
+
+        }
+            scrollView->RemoveAll();
+            delete scrollView;
+            scrollView = nullptr;
+
+        // const power_display_svr_api_t *display_api = power_display_svr_get_api();
+        //  if (display_api->get_screen_state() != SCREEN_ON)
+        //  {   
+        //        display_api->turn_on_screen();  
+        //  }
+        // int t=ConfigModel::GetInstance()->GetScreenDuration();
+        // display_api->set_screen_set_keepon_timeout(t);
+        ScreenAlwaysOnCtr(CANCEL_SCREEN_ALWAYS_ON);
+       // }
+    }
+
+
+
+    UILabel *SystemupgradeView::InitLabel(LabelConfig &labelConfig)
+    {
+        UILabel *label = new UILabel();
+        if (label == nullptr)
+        {
+            return nullptr;
+        }
+        label->SetPosition(labelConfig.left, labelConfig.top, labelConfig.width, labelConfig.height); // 位置大小
+        label->SetStyle(STYLE_TEXT_FONT, labelConfig.fontSize);                                       // 字体大小
+        label->SetStyle(STYLE_LINE_HEIGHT, labelConfig.lineHeigh);                                    // 字体行高
+        label->SetText(labelConfig.text);                                                             // 内容
+        label->SetLineBreakMode(labelConfig.lineBreakMode);                                           // 断行模式。
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_TOP);
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelConfig.fontSize);
+        return label;
+    }
+    void SystemupgradeView::statr_down_fwpkg(void)
+    {
+        // if(is_new_cat1_version)
+        // {
+        //     char *imei_str= const_cast<char*>(ConfigModel::GetInstance()->Getimei().c_str());
+        //     char * version_buf=const_cast<char*>(ConfigModel::GetInstance()->GetmoderVer().c_str());
+        //     sprintf((char *)uri,"http://test.iot.api.thisiot.com/ota/task?deviceId=%s&sourceVersion=%s",imei_str,version_buf);
+        //     cat1_ota_update((char *)"0");
+        //     container_updating->SetVisible(true);
+        //     scrollView->SetTouchable(false);
+        //     scrollView->SetDraggable(false);
+        // }
+        // else 
+        if(is_new_version)
+        {
+            //下载差分包
+            // // //**********
+            container_updating->SetVisible(true);
+            scrollView->SetTouchable(false);
+            scrollView->SetDraggable(false);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "custom_start_ota_download_ui_1");
+            custom_start_ota_download_ui_1(uri_ota_package,(uint8_t*)Path_ota_package,false,HTTP_FWPGK_SERVER_NAME);
+            if(report_jsonString!=NULL)
+            {
+                uint32_t data_len=strlen(report_jsonString);
+                if(data_len!=0)
+                {
+                    FILE *FP_= fopen(UPDATAREPORT,"w+");
+                    printf("升级文件保存\r\n");
+                    fwrite(report_jsonString,1,data_len,FP_);
+                    fclose(FP_);
+                    printf("data%d %s\r\n",data_len,report_jsonString);
+                    cJSON_free(report_jsonString);
+                    report_jsonString=NULL;
+                }
+
+            }
+            
+           
+            // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "");
+            // upgrade_reported_data();
+        }
+    }
+
+    void SystemupgradeView::cat1_up_success(void)
+    {
+        if(is_new_cat1_version)
+        {
+            label_updating->SetText("   success");
+            container_updating->SetVisible(true);
+            scrollView->SetTouchable(true);
+            scrollView->SetDraggable(true);
+            is_new_cat1_version=false;
+            statr_down_fwpkg();
+        }
+        
+    }
+
+
+    static uint8_t falg_dwon_json=0;
+    void SystemupgradeView::set_string_value(char *str,bool falg)
+    {
+        if(falg_dwon_json==0)
+        {
+             if(falg)
+            {
+                if(str!=NULL)
+                {
+                    newVersion->SetText(str);
+                }
+
+                if(newVersion)
+                newVersion->SetVisible(true);
+
+                if(newVersionTitle)
+                {
+                    newVersionTitle->SetText("有最新固件版本");
+                    newVersionTitle->SetVisible(true);
+                }
+               
+                //new_label->SetVisible(true);
+                is_new_version=true;
+
+            }
+            else
+            {
+                if(str!=NULL)
+                {
+                    WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "str %s",str);
+                    if(newVersion)
+                    {
+                        newVersion->SetText(str);
+                        newVersion->SetVisible(true);
+                    }
+                   
+                }
+                
+                if(newVersion)
+                {
+                    newVersionTitle->SetText("获取升级失败");
+                    newVersionTitle->SetVisible(true);
+                }
+                
+                is_new_version=false;
+        
+            }
+            
+            // imei_str= const_cast<char*>(ConfigModel::GetInstance()->Getimei().c_str());
+            // char * version_buf=const_cast<char*>(ConfigModel::GetInstance()->GetmoderVer().c_str());
+            // sprintf((char *)uri,"https://test.app.api.thisiot.com/ota/task?deviceId=%s&sourceVersion=%s",imei_str,version_buf);
+            // custom_start_ota_download_ui_1(uri,(uint8_t*)Path,true);
+            // falg_dwon_json++;
+        }
+        else if (falg_dwon_json==1)
+        {
+            if(falg)
+            {
+                const char *text= newVersion->GetText();
+                char buf[256]={0};
+                sprintf(buf,"%s\n%s",text,str);
+                newVersion->SetText(buf);
+                newVersionTitle->SetText("有最新固件版本");
+                newVersion->SetVisible(true);
+                newVersionTitle->SetVisible(true);
+                is_new_cat1_version=true;
+
+            }
+            else
+            {
+                if(is_new_version!=true)
+                {
+                    newVersionTitle->SetText("已是最新固件版本");
+                    newVersionTitle->SetVisible(true);
+                    is_new_version=false;
+                    is_new_cat1_version=false;
+
+                }
+              
+        
+            }
+            
+            UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(SystemPresenter::GetInstance());
+            if (draglistener == nullptr)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::draglistener can not be nullptr!");
+                return ;
+            }
+            scrollView->SetOnDragListener(draglistener);
+            falg_dwon_json++;
+        }
+        
+       
+
+
+        
+        RootView::GetInstance()->Invalidate();
+    }
+
+     void SystemupgradeView::statr_upgrade(void)
+    {
+        if(is_fwpkg_ready)
+        {
+            //开始升级
+            //**********
+            statr_down_fwpkg();
+        }
+    }
+
+    void SystemupgradeView::init_updating(void)
+    {
+        if (container_updating == nullptr) {
+        container_updating = new UIViewGroup();
+        container_updating->SetPosition(0, 0, 466, 480);
+        //container_updating->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+          if (label_updating == nullptr) {
+            label_updating = new UILabel();
+        }
+        label_updating->SetPosition(94, 207);         // widget's left position and top position
+        label_updating->Resize(425, 132);          // widget's width and height
+        label_updating->SetViewId("label1");// Set style
+        label_updating->SetStyle(STYLE_TEXT_FONT, 50);
+
+        // Set additional property
+        label_updating->SetText("updating.....");
+        label_updating->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label_updating->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label_updating->SetRollSpeed(0);
+        label_updating->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 50);
+
+        // Add to rootView
+        container_updating->Add(label_updating);
+        container_updating->SetVisible(false);
+        container_updating->SetTouchable(false);
+        container_updating->SetDraggable(false);
+        scrollView->Add(container_updating);
+
+
+    }
+
+    void SystemupgradeView::init_fail(uint8_t falg)
+    {
+        if (container_fail == nullptr) {
+        container_fail = new UIViewGroup();
+        container_fail->SetPosition(0, 0, 466, 480);
+       // container_fail->SetStyle(STYLE_BACKGROUND_OPA, 0);
+        }
+
+       if (label1_fail == nullptr) {
+        label1_fail = new UILabel();
+        }
+        label1_fail->SetPosition(81, 207);         // widget's left position and top position
+        label1_fail->Resize(454, 142);  
+        // label1_fail->SetPosition(197, 207);         // widget's left position and top position
+        // label1_fail->Resize(425, 132);          // widget's width and height
+        label1_fail->SetViewId("label1");// Set style
+        label1_fail->SetStyle(STYLE_TEXT_FONT, 50);
+
+        // Set additional property
+        if(falg==0)
+        {
+            label1_fail->SetText("updating fail");
+        }
+        else
+        {
+            label1_fail->SetText("download fail");
+        }
+        
+        label1_fail->SetLineBreakMode(UILabel::LINE_BREAK_ADAPT);
+        label1_fail->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        label1_fail->SetRollSpeed(0);
+        label1_fail->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 50);
+
+        // Add to rootView
+        container_fail->Add(label1_fail);
+        label1_fail->SetVisible(true);
+        
+        // Add LabelButtonExt to App
+        if (labelButton1_exit == nullptr) {
+            labelButton1_exit = new UILabelButtonExt();
+        }
+        labelButton1_exit->SetPosition(156, 326);         // widget's left position and top position
+        labelButton1_exit->Resize(153, 64);          // widget's width and height
+        labelButton1_exit->SetViewId("labelButton1_exit");// Set style
+
+        // Set additional property
+        labelButton1_exit->SetText("exit");
+        labelButton1_exit->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 35);
+        labelButton1_exit->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
+        labelButton1_exit->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+        UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(SystemPresenter::GetInstance());
+        labelButton1_exit->SetOnClickListener(clickListener);
+        // Add to rootView
+        container_fail->SetTouchable(true);
+        container_fail->Add(labelButton1_exit);
+        container_fail->SetVisible(true);
+        scrollView->Add(container_fail);
+        scrollView->SetTouchable(true);
+        scrollView->SetDraggable(true);
+        RootView::GetInstance()->Invalidate();
+    }
+
+
+
+
+
+    UIScrollView *SystemupgradeView::SystemupgradeViewInit(void)
+    {
+
+        scrollView = new UIScrollView();
+        if (scrollView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemFactoryResetView::new scrollView fail!");
+            return nullptr;
+        }
+        scrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+        scrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+        scrollView->SetStyle(STYLE_BORDER_RADIUS, 1294);
+        scrollView->SetScrollBlankSize(35);
+        scrollView->SetReboundSize(50);
+        scrollView->SetDirection(1);
+
+       
+        scrollView->SetTouchable(true);
+        scrollView->SetDraggable(true);
+
+        LabelConfig Config = {
+            .left = 190,
+            .top = 52,
+            .width = 60,
+            .height = 35,
+            .fontSize = 30,
+            .lineHeigh = 35,
+            .text = "系统升级",
+            .lineBreakMode = UILabel::LINE_BREAK_ADAPT,
+        };
+        systemupgrade = InitLabel(Config);
+        if (systemupgrade == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::SystemAboutTheWatchTitle new fail!");
+            return nullptr;
+        }
+        scrollView->Add(systemupgrade);
+        
+        /* -------------------------------------------------------------------------- */
+        Config = {
+            .left = 168,
+            .top = 105,
+            .width = 120,
+            .height = 35,
+            .fontSize = 30,
+            .lineHeigh = 35,
+            .text = "当前固件版本",
+            .lineBreakMode = UILabel::LINE_BREAK_ADAPT,
+        };
+        FirmwareVersionTitle = InitLabel(Config);
+        if (FirmwareVersionTitle == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::FirmwareVersionTitle new fail!");
+            return nullptr;
+        }
+        scrollView->Add(FirmwareVersionTitle);
+
+        char version_buf[128]={0};
+        uint32_t version_len=128;
+        uapi_get_buildversion((uint8_t*)version_buf,version_len);
+        Config = {
+            .left = 37,
+            .top = 135,
+            .width = 400,
+            .height = 30,
+            .fontSize = 26,
+            .lineHeigh = 30,
+            .text = (char*)version_buf,
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,
+        };
+        FirmwareVersion = InitLabel(Config);
+        if (FirmwareVersion == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::FirmwareVersion new fail!");
+            return nullptr;
+        }
+        FirmwareVersion->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x87));
+        scrollView->Add(FirmwareVersion);
+
+             Config = {
+            .left = 140,
+            .top = 210,
+            .width = 120,
+            .height = 35,
+            .fontSize = 30,
+            .lineHeigh = 35,
+            .text = "最新固件版本",
+            .lineBreakMode = UILabel::LINE_BREAK_ADAPT,
+        };
+        newVersionTitle = InitLabel(Config);
+        if (newVersionTitle == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::FirmwareVersionTitle new fail!");
+            return nullptr;
+        }
+        newVersionTitle->SetVisible(false);
+        scrollView->Add(newVersionTitle);
+
+
+
+        Config = {
+            .left = 37,
+            .top = 240,
+            .width = 400,
+            .height = 30,
+            .fontSize = 26,
+            .lineHeigh = 30,
+            .text = (char*)"",
+            .lineBreakMode = UILabel::LINE_BREAK_WRAP,
+        };
+        newVersion = InitLabel(Config);
+        newVersion->SetTextColor(Color::GetColorFromRGBA(0xff, 0xff, 0xff, 0x87));
+        newVersion->SetTouchable(true);
+        newVersion->SetViewId("newVersion");
+        UIView::OnClickListener *clickListener = static_cast<UIView::OnClickListener *>(SystemPresenter::GetInstance());
+        newVersion->SetOnClickListener(clickListener);
+        newVersion->SetVisible(false);
+        scrollView->Add(newVersion);
+
+        //  Config = {
+        //     .left = 367,
+        //     .top = 240,
+        //     .width = 45,
+        //     .height = 30,
+        //     .fontSize = 26,
+        //     .lineHeigh = 30,
+        //     .text = "新!",
+        //     .lineBreakMode = UILabel::LINE_BREAK_WRAP,
+        // };
+        // new_label = InitLabel(Config);
+        // if (FirmwareVersion == nullptr)
+        // {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::FirmwareVersion new fail!");
+        //     return nullptr;
+        // }
+        // new_label->SetTextColor(Color::GetColorFromRGBA(0xff, 0x00, 0x00, 0x87));
+        // new_label->SetVisible(false);
+        // scrollView->Add(new_label);
+        /* -------------------------------------------------------------------------- */
+        // UILabelButtonExt * SystemUpgradeButton = new UILabelButtonExt();
+        // if (SystemUpgradeButton == nullptr)
+        // {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::SystemUpgradeButtonExt new fail!");
+        // }
+        // SystemUpgradeButton->SetPosition(43, 400, 200, 100);
+        // SystemUpgradeButton->SetViewId(SYSTEM_UPGRADE);
+        // SystemUpgradeButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+        // SystemUpgradeButton->SetText("下载");
+        // SystemUpgradeButton->SetAlign(TEXT_ALIGNMENT_LEFT);
+        // SystemUpgradeButton->SetLabelPosition(45, 0);
+        // SystemUpgradeButton->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 25);
+        // SystemUpgradeButton->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
+        // scrollView->Add(SystemUpgradeButton);
+
+        SystemUpgradeButton_ = new UILabelButtonExt();
+        if (SystemUpgradeButton_ == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemView::SystemUpgradeButtonExt new fail!");
+        }
+        SystemUpgradeButton_->SetPosition(163, 400, 180, 80);
+        SystemUpgradeButton_->SetViewId(SYSTEM_UPGRADE_t);
+        SystemUpgradeButton_->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+        SystemUpgradeButton_->SetText("确认升级");
+        SystemUpgradeButton_->SetAlign(TEXT_ALIGNMENT_LEFT);
+        SystemUpgradeButton_->SetLabelPosition(45, 0);
+        SystemUpgradeButton_->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 25);
+        SystemUpgradeButton_->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
+        
+
+        UIView::OnClickListener *Click = static_cast<UIView::OnClickListener *>(SystemPresenter::GetInstance());
+        SystemUpgradeButton_->SetOnClickListener(Click);
+        scrollView->Add(SystemUpgradeButton_);
+
+
+        init_updating();
+
+        //init_fail();
+    
+        //SystemUpgradeButton->SetOnClickListener(clickListener);
+
+        //char *Path= "/user/data/ota_start_1.json";
+        // const power_display_svr_api_t *display_api = power_display_svr_get_api();
+        // if (display_api->get_screen_state() != SCREEN_ON)
+        //  {   
+        //        display_api->turn_on_screen();  
+        //  }  
+        // display_api->set_screen_set_keepon_timeout(-1);
+        ScreenAlwaysOnCtr(OPEN_SCREEN_ALWAYS_ON);
+        
+        memset(uri,0,256);
+        imei_str= const_cast<char*>(ConfigModel::GetInstance()->Getimei().c_str());//"864430010001091";//const_cast<char*>(ConfigModel::GetInstance()->Getimei().c_str());
+         //https://test.app.api.thisiot.com/ota/task?deviceId=deviceId&sourceVersion=sourceVersion
+        //  860132060347507
+        //  v1.1_20240419_152549
+        //  sprintf((char *)uri,JSON_URL,"860132060347507","V1.1_20240422_161728");
+        sprintf((char *)uri,JSON_URL,imei_str,version_buf);
+        custom_start_ota_download_ui_1(uri,(uint8_t*)Path,true,HTTP_JSON_SERVER_NAME);
+        //report_data_by_get_file();
+        falg_dwon_json=0;
+        //uograde_service_service_init();
+        
+        return scrollView;
+    }
+
+}
\ No newline at end of file