[系统更新】UI
authorCaisking <Casiking@zhihuishixun.com>
Mon, 28 Apr 2025 09:35:02 +0000 (17:35 +0800)
committerCaisking <Casiking@zhihuishixun.com>
Mon, 28 Apr 2025 09:35:02 +0000 (17:35 +0800)
code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/include/SystemUpdateModel.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/include/SystemUpdatePresenter.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/include/SystemUpdateView.h [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/src/SystemUpdateModel.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/src/SystemUpdatePresenter.cpp [new file with mode: 0644]
code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/src/SystemUpdateView.cpp [new file with mode: 0644]

diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/include/SystemUpdateModel.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/include/SystemUpdateModel.h
new file mode 100644 (file)
index 0000000..2c19e8a
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:26:14
+ * @LastEditors: SnickerSun snickersun@163.com
+ * @LastEditTime: 2024-10-21 11:38:16
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/systemupdate/include/SystemUpdateModel.h
+ */
+
+#ifndef SYSTEM_UPDATE_MODEL_H
+#define SYSTEM_UPDATE_MODEL_H
+
+#include <iostream>
+#include <fstream>
+#include "upg_common_porting.h"
+#define USE_THISIOT 1
+// http://iot.api.thisiot.com/ota/task/v2?deviceId=28110668A5D4&sourceVersion=1.1.41
+#if USE_THISIOT
+#define HTTP_JSON_SERVER_NAME "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://iot.api.thisiot.com/ota/update-result"//上报url
+#define JSON_URL "http://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
+
+#define  UPDATAFWPKGPATHURL 256
+
+#define  MSG_LEN 64
+namespace OHOS
+{
+    int start_report_timer(void);
+    typedef enum
+    {
+       OTA_UPDATA_MSG_NEW_VER,
+       OTA_UPDATA_MSG_FWKG,
+       OTA_UPDATA_MSG_REPORT,
+    }OTA_UPDATA_MSG;
+
+     typedef enum
+    {
+       OTA_BUTTON_GET_VISON,
+       OTA_BUTTON_GET_ABLE_DOWNLOAD,
+       OTA_BUTTON_GET_DOWNLOADING,
+       OTA_BUTTON_GET_ABLE_UPDTAT,
+       OTA_BUTTON_GET_VISON_ING,
+       OTA_BUTTON_GET_ABLE_DOWNLOAD_FAIL,
+       OTA_BUTTON_GET_ABLE_UPDTAT_SUCCESS,
+       OTA_BUTTON_GET_ABLE_UPDTAT_FAIL,
+    }OTA_BUTTON;
+
+
+    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 SystemUpdateModel
+    {
+    public:
+        static SystemUpdateModel &GetInstance(void);
+        bool IsLatestVersion(void);
+        bool OTA_Update_msg_back(uint8_t);
+        uint8_t button_flag=0;
+        bool OTA_JSON_Parse(char* msg);
+        uint8_t uri_ota_package[256] ={0};
+
+        char OTA_MSG[MSG_LEN] ={0};
+        char NEW_VISON[MSG_LEN]={0};
+
+        bool OTA_FWPKG_CHECK(void);
+        uint8_t download_schedule_value=0;
+        void report_jsonString_write(void);
+
+
+    private:
+
+        SystemUpdateModel();
+        SystemUpdateModel(const SystemUpdateModel &) = delete;
+        SystemUpdateModel &operator=(const SystemUpdateModel &) = delete;
+        virtual ~SystemUpdateModel();
+    };
+}
+
+#endif
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/include/SystemUpdatePresenter.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/include/SystemUpdatePresenter.h
new file mode 100644 (file)
index 0000000..45ab336
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:25:49
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-05-07 14:22:10
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/systemupdate/include/SystemUpdatePresenter.h
+ */
+
+#ifndef SYSTEM_UPDATE_PRESENTER_H
+#define SYSTEM_UPDATE_PRESENTER_H
+
+#include "Presenter.h"
+#include "View.h"
+
+namespace OHOS
+{
+    class SystemUpdateView;
+    class SystemUpdatePresenter : public Presenter<SystemUpdateView>,
+                                  public UIView::OnClickListener,
+                                  public RootView::OnKeyActListener,
+                                  public UIView::OnDragListener
+    {
+    public:
+        SystemUpdatePresenter();
+        virtual ~SystemUpdatePresenter();
+
+        void OnStart() override;
+        void OnPause() override;
+        void OnResume() override;
+        void OnStop() override;
+
+        static SystemUpdatePresenter *GetInstance();
+
+    private:
+        bool OnClick(UIView &view, const ClickEvent &event) override;
+        bool OnDrag(UIView &view, const DragEvent &event) override;
+        bool OnDragEnd(UIView &view, const DragEvent &event) override;
+        bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件
+
+        bool X_DRAG_FLAG{false};
+    };
+}
+
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/include/SystemUpdateView.h b/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/include/SystemUpdateView.h
new file mode 100644 (file)
index 0000000..07b6787
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:25:27
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-05-07 18:10:03
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/systemupdate/include/SystemUpdateView.h
+ */
+
+#ifndef SYSTEM_UPDATE_VIEW_H
+#define SYSTEM_UPDATE_VIEW_H
+
+
+#include "View.h"
+#include "components/ui_scroll_view.h"
+#include "components/ui_label_ext.h"
+#include "components/ui_image_view.h"
+#include "components/ui_button.h"
+#include "components/ui_slider.h"
+
+namespace OHOS
+{
+    class SystemUpdatePresenter;
+    void upgrade_reported_data(void);
+    class SystemUpdateView : public View<SystemUpdatePresenter>
+    {
+
+    public:
+        SystemUpdateView();
+        virtual ~SystemUpdateView();
+        static SystemUpdateView *GetInstance(void);
+
+        struct LabelConfig
+        {
+            int16_t left;
+            int16_t top;
+            int16_t width;
+            int16_t height;
+            int16_t fontSize;  // 字体大小
+            int16_t lineHeigh; // 行高
+            uint16_t textId;
+            uint8_t lineBreakMode; // 断行模式。
+        };
+
+        void OnStart() override;
+  
+
+        UIButton *GetUpdateNowButtton(void);
+        UIButton *GetTryAgainLaterButton(void);
+
+        void UpdateNowbutton_back(void);
+        void msg_text_set(bool);
+        void updatasider_back(void);
+        
+        void start_dwonload(void);
+
+        UILabelExt *LatestVersionLabel{nullptr}; // 当前版本
+        UILabelExt *VersionIdLabel{nullptr};     // 版本编号
+
+        UILabelExt *NEWMSGLabel{nullptr}; // 更新信息
+        UILabelExt *NEWVersionIdLabel{nullptr};     // 需要更新的版本编号
+
+        UILabelExt *UpdateNowLabel{nullptr};     // 立即升级标签
+        UILabelExt *TryAgainLaterLabel{nullptr}; // 稍后再试标签
+        UIButton *UpdateNowButtton{nullptr};     // 立即升级按钮
+        UIButton *TryAgainLaterButton{nullptr};  // 稍后再试按钮
+        UISlider *updatasider{nullptr};
+        UILabelExt *IMEIlabel{nullptr};  //imei
+
+        UILabelExt *CATlabel{nullptr};  //imei
+
+
+    private:
+        bool SetSystemUpdateScrollView(void);
+        UILabelExt *InitLabel_Ext(LabelConfig &labelConfig);
+        void SystemUpdateViewInit(uint8_t );
+        void NoNeedUpdateViewInit(void);
+        void ClearAll(void);
+
+
+        
+
+        UIScrollView *SystemUpdateScrollView{nullptr};
+        UILabelExt *Title{nullptr};              // 标题
+        UIImageView *KUMILOGOImage{nullptr};     // KUMILogo图片
+        
+        /* -------------------------------------------------------------------------- */
+        UIScrollView *NoNeedUpdateScrollView{nullptr};
+        UILabelExt *NoNeedUpdateTitle{nullptr};
+        UILabelExt *NoNeedUpdateNote[2]{nullptr};
+        /* -------------------------------------------------------------------------- */
+    };
+}
+#endif
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/src/SystemUpdateModel.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/src/SystemUpdateModel.cpp
new file mode 100644 (file)
index 0000000..678c2b1
--- /dev/null
@@ -0,0 +1,290 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:26:25
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-05 14:47:26
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/systemupdate/src/SystemUpdateModel.cpp
+ */
+#include "systemupdate/include/SystemUpdateModel.h"
+#include "wearable_log.h"
+#include "systemupdate/include/SystemUpdateView.h"
+#include "UiConfig.h"
+#include "custom_utils.h"
+#include "stdio.h"
+#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"
+#include "cat1_ctl.h"
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+namespace OHOS
+{
+    static int fwpkg_size=0;
+    static void upgrade_report_task(void  *arg)
+    {
+        FILE * fp = fopen(UPDATAREPORT,"rb+");
+        bool falg=false;
+        if(fp!=NULL)
+        {
+            falg=true;
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP,"UPDATAREPORT_M IS TRUE!\r\n");
+            fclose(fp);
+        }
+       
+        while (falg)
+        {
+            
+            if(ConfigModel::GetInstance()->GetCat1_4Gability())
+            {
+                upgrade_reported_data();
+            }
+            for(int i=0;i<60;i++)
+            {
+                msleep(1000);
+            }
+            fp = fopen(UPDATAREPORT,"rb+");
+            if(fp!=NULL)
+            {
+                falg=true;
+                fclose(fp);
+            }
+            else
+            {
+                falg=false;
+            }
+        } 
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"UPDATAREPORT IS OK!\r\n");
+    }
+
+    int start_report_timer(void)
+    {
+        return ERRCODE_SUCC;
+
+    }
+
+    void SystemUpdateModel::report_jsonString_write()
+    {
+        return;
+    }
+    
+
+    SystemUpdateModel::SystemUpdateModel()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemUpdateModel::SystemUpdateModel");
+    }
+
+    SystemUpdateModel::~SystemUpdateModel()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemUpdateModel::~SystemUpdateModel");
+    }
+
+    SystemUpdateModel &SystemUpdateModel::GetInstance()
+    {
+        static SystemUpdateModel instance;
+        return instance;
+    }
+    bool SystemUpdateModel::OTA_Update_msg_back(uint8_t flag)
+    {
+         bool ret;
+        switch (flag)
+        {
+            case OTA_UPDATA_MSG_NEW_VER:
+
+                ret= OTA_JSON_Parse(OTA_MSG);
+                if(SystemUpdateView::GetInstance())
+                {         
+                  SystemUpdateView::GetInstance()->msg_text_set(ret);
+                }
+                break;
+            case OTA_UPDATA_MSG_FWKG:
+
+                ret= OTA_FWPKG_CHECK();
+               
+                if(SystemUpdateView::GetInstance())
+                {         
+                  SystemUpdateView::GetInstance()->msg_text_set(ret);
+                }
+                else
+                {
+                    if(ret)
+                    button_flag=OTA_BUTTON_GET_ABLE_UPDTAT;
+                    else{
+                    button_flag=OTA_BUTTON_GET_ABLE_DOWNLOAD_FAIL;
+                    }
+
+                  NativeAbility::GetInstance().EnterSlice(VIEW_SYSTEM_UPDATE);
+                  //SystemUpdateView::GetInstance()->msg_text_set(ret);
+                }
+                break;
+            case OTA_UPDATA_MSG_REPORT:
+                if(SystemUpdateView::GetInstance())
+                {         
+                  SystemUpdateView::GetInstance()->msg_text_set(ret);
+                }
+                else
+                {
+                  NativeAbility::GetInstance().EnterSlice(VIEW_SYSTEM_UPDATE);
+                  //SystemUpdateView::GetInstance()->msg_text_set(ret);
+                }
+                break;
+            default:
+                break;
+        }
+        return true;
+
+    }
+    bool SystemUpdateModel::OTA_FWPKG_CHECK()
+    {
+        FILE * fp = fopen(UPDATAFWPKGPATH,"rb");
+        if(fp!=NULL)
+        {
+             fseek(fp, 0, SEEK_END);
+
+             int len=ftell(fp);
+            if(len!=fwpkg_size)
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "len %d  != fwpkg_size  %d ",len,fwpkg_size);
+                fclose(fp);
+                return false;
+            }
+            fclose(fp);
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "file open success fwpkg_is_ready");
+            return true;
+        }
+        return false;
+    }
+
+
+
+    bool SystemUpdateModel::OTA_JSON_Parse(char* msg)
+    {
+
+        //msleep(3000);
+        memset(msg,0,MSG_LEN);
+
+        FILE * fp = fopen(UPDATAJSONPATH,"rb+");
+        if(fp==NULL)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "open fail");
+            return false;
+        }
+        char *buf=(char *)malloc(1024);
+        memset((void*)buf,0,1024);
+        int ret =fread(buf,1,1024,fp);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%s\r\n",buf);
+        if(ret==0)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fread %d",ret);
+            fclose(fp);
+            free(buf);
+            return false;
+        }
+        char *p=buf;
+        while (*p!='{')
+        {
+           p++;
+        }
+        
+        cJSON *root = cJSON_Parse(p);
+        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 *msg_json = cJSON_GetObjectItem(root, "msg")->valuestring;
+            if(msg_json)
+            strcpy(msg,msg_json);
+            else
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "msg_json");
+            }
+            int success=cJSON_GetObjectItem(root, "success")->valueint;
+
+            if(code==IOT_CODE_SUCCESS)
+            {
+                cJSON *data=cJSON_GetObjectItem(root, "data");
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "");
+
+                if(data!=NULL)
+                {
+                    cJSON *downloadFileVo=cJSON_GetObjectItem(data, "downloadFileVo");
+
+                    if(downloadFileVo!=NULL)
+                    {
+                        
+                        char *uri = cJSON_GetObjectItem(downloadFileVo, "url")->valuestring;
+                        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "uri %s",uri);
+                        
+                        memset(uri_ota_package,0,UPDATAFWPKGPATHURL);
+                        sprintf((char *)uri_ota_package,"%s",uri);
+
+                        fwpkg_size=cJSON_GetObjectItem(downloadFileVo,"size")->valueint;
+
+                        
+                    }
+                    char* targetVersion=cJSON_GetObjectItem(data,"targetVersion")->valuestring;
+
+                    
+                    WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "fwpkg_size %d",fwpkg_size);
+
+                    memset(NEW_VISON,0,MSG_LEN);
+                    sprintf((char *)NEW_VISON,"%s",targetVersion);
+                    
+                }
+            }
+            else
+            {
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "code!=IOT_CODE_SUCCESS"); 
+                return false;
+            }
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%s",msg); 
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
+            cJSON_Delete(root);
+
+        }
+        fclose(fp);
+        return true;
+    }
+
+
+
+    //获取是否是最新版本
+    bool SystemUpdateModel::IsLatestVersion(void)
+    {
+        if(button_flag==OTA_BUTTON_GET_ABLE_UPDTAT)
+        return false;
+        else
+        return true;
+    }
+
+    // bool SystemUpdateModel::OTA_Update_msg_back(uint8_t flag)
+    // {
+    // //    bool ret;
+    // //    switch (flag)
+    // //    {
+    // //     case OTA_UPDATA_MSG_NEW_VER:
+
+    // //         ret= OTA_JSON_Parse(OTA_MSG);
+    // //         if(SystemUpdateView::GetInstance())
+    // //         {         
+    // //           SystemUpdateView::GetInstance()->msg_text_set(ret);
+    // //         }
+    // //         break;
+    // //     default:
+    // //         break;
+    // //    }
+    //    return true;
+    // }
+
+}
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/src/SystemUpdatePresenter.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/src/SystemUpdatePresenter.cpp
new file mode 100644 (file)
index 0000000..149f918
--- /dev/null
@@ -0,0 +1,121 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:26:06
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-05 14:48:04
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/systemupdate/src/SystemUpdatePresenter.cpp
+ */
+
+#include "AppViewIDs.h"
+#include "NativeAbility.h"
+#include "systemupdate/include/SystemUpdatePresenter.h"
+#include "systemupdate/include/SystemUpdateView.h"
+#include "common/key_code.h"
+#include <custom_utils.h>
+#include "UiConfig.h"
+#include "wearable_log.h"
+
+#include "NativeRegisterManager.h"
+
+namespace OHOS
+{
+    REGIST_SLICE(VIEW_SYSTEM_UPDATE, SystemUpdateView, SystemUpdatePresenter);
+
+    // 当前Presenter属性实例化的内存指针
+    static SystemUpdatePresenter *g_pSystemUpdatePresenter = nullptr;
+
+    SystemUpdatePresenter::SystemUpdatePresenter()
+    {
+        g_pSystemUpdatePresenter = this;
+    }
+
+    SystemUpdatePresenter::~SystemUpdatePresenter()
+    {
+        g_pSystemUpdatePresenter = nullptr;
+    }
+
+    SystemUpdatePresenter *SystemUpdatePresenter::GetInstance()
+    {
+        return g_pSystemUpdatePresenter;
+    }
+
+    void SystemUpdatePresenter::OnStart()
+    {
+        Presenter<SystemUpdateView>::OnStart();
+    }
+
+    void SystemUpdatePresenter::OnPause(void)
+    {
+        Presenter<SystemUpdateView>::OnPause();
+    }
+
+    void SystemUpdatePresenter::OnResume(void)
+    {
+        Presenter<SystemUpdateView>::OnResume();
+    }
+
+    void SystemUpdatePresenter::OnStop(void)
+    {
+        Presenter<SystemUpdateView>::OnStop();
+    }
+
+    bool SystemUpdatePresenter::OnClick(UIView &view, const ClickEvent &event)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemUpdatePresenter::OnClick");
+        SystemUpdateView *systemUpdateView = SystemUpdateView::GetInstance();
+        if (systemUpdateView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::GetInstance fail!");
+            return false;
+        }
+
+        if (&view == systemUpdateView->GetUpdateNowButtton()) // 如果点击的是立即更新按钮
+        {
+            systemUpdateView->UpdateNowbutton_back();
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetUpdateNowButtton");
+        }
+        else if (&view == systemUpdateView->GetTryAgainLaterButton()) // 如果点击的是稍后再说按钮
+        {
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "GetTryAgainLaterButton");
+            NativeAbility::GetInstance().Back();
+        }
+
+        return true;
+    }
+
+    bool SystemUpdatePresenter::OnDrag(UIView &view, const DragEvent &event)
+    {
+        UNUSED(view);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemUpdatePresenter::OnDrag");
+        if ((event.GetDeltaX() > X_DRAG_OFFSET) && (event.GetDeltaX() > (DOUBLES * MATH_ABS(event.GetDeltaY())))) // 拖动过程中判断是否是水平滑动
+        {
+            SystemUpdatePresenter::X_DRAG_FLAG = true;
+        }
+        return true;
+    }
+
+    bool SystemUpdatePresenter::OnDragEnd(UIView &view, const DragEvent &event)
+    {
+        UNUSED(view);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemUpdatePresenter::OnDragEnd");
+        if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT && SystemUpdatePresenter::X_DRAG_FLAG)
+        {
+            NativeAbility::GetInstance().Back();
+        }
+        return true;
+    }
+
+    bool SystemUpdatePresenter::OnKeyAct(UIView &view, const KeyEvent &event) // 增加按键事件
+    {
+        UNUSED(view);
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemUpdatePresenter::OnKeyAct");
+        unsigned short keyID = event.GetKeyId();
+        unsigned short keyState = event.GetState();
+        // 如果是power键,且是亮屏状态,按键释放就返回上一级
+        if (keyID == static_cast<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 1 && uapi_get_screen_state() == 0)
+        {
+            NativeAbility::GetInstance().Back();
+        }
+        return true;
+    }
+}
\ No newline at end of file
diff --git a/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/src/SystemUpdateView.cpp b/code/sdk/application/wearable/fd230/nativeapp/nativeui/systemupdate/src/SystemUpdateView.cpp
new file mode 100644 (file)
index 0000000..bfecb0a
--- /dev/null
@@ -0,0 +1,977 @@
+/*
+ * @Author: luozheng 1732036298@qq.com
+ * @Date: 2024-05-07 11:25:58
+ * @LastEditors: luozheng 1732036298@qq.com
+ * @LastEditTime: 2024-11-05 14:48:11
+ * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/systemupdate/src/SystemUpdateView.cpp
+ */
+
+#include "systemupdate/include/SystemUpdatePresenter.h"
+#include "systemupdate/include/SystemUpdateView.h"
+#include "wearable_log.h"
+#include "ui_resource_string.h"
+#include "ConfigModel.h"
+#include "systemupdate/include/SystemUpdateModel.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"
+#include "cat1_ctl.h"
+#include "cat1_server_hal.h"
+#include "bts_le_gap.h"
+#include "custom_http_download.h"
+
+#ifdef __cplusplus
+#if __cplusplus
+extern "C"
+{
+#endif
+#endif
+    #include "pm_veto.h"
+    #include "pm.h"
+#ifdef __cplusplus
+#if __cplusplus
+}
+#endif
+#endif
+
+#define OTA_UPDATA_TEST 0
+
+namespace OHOS
+{
+
+    static SystemUpdateView *g_pSystemUpdateView{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 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 uint32_t file_total_len = 0;
+
+    static void LCD_auto_timeout(bool off)
+    {
+        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->turn_off_screen();
+        //  }else
+        //  {
+        //         display_api->turn_on_screen();
+        //  } 
+       display_api->set_auto_timeout_function(off);
+        
+    }
+    
+    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_LOGD(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_LOGD(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);
+
+        SystemUpdateModel ::GetInstance().download_schedule_value= ((float)rx_total_len /(float)file_total_len) *100;
+        if(SystemUpdateView::GetInstance())
+        {
+            SystemUpdateView::GetInstance()->updatasider_back();
+        }
+        return 0;
+    }
+
+
+    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_LOGD(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
+        WEARABLE_LOGD(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);
+        LCD_auto_timeout(true);
+        SystemUpdateModel ::GetInstance().OTA_Update_msg_back(OTA_UPDATA_MSG_NEW_VER);
+        http_single_download_stop();
+        return ;
+    }
+
+    static void httpc_download_FWPKG_result_ui(void *arg, httpc_result_t httpc_result, u32_t rx_content_len, u32_t srv_res, err_t err)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
+        WEARABLE_LOGD(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);
+
+        LCD_auto_timeout(true);
+        SystemUpdateModel ::GetInstance().OTA_Update_msg_back(OTA_UPDATA_MSG_FWKG);
+        http_single_download_stop();
+        return ;
+    }
+
+    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_LOGD(WEARABLE_LOG_MODULE_APP, "httpc_download_result_ui");
+        WEARABLE_LOGD(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); 
+        return ;
+    }
+
+    static void report_data_by_get_file(char *data,u16_t data_len)
+    {
+        return;    
+    }
+
+    void upgrade_reported_data(void)
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "");
+        FILE * fp = fopen(UPDATAREPORT,"rb+");
+        if(fp==NULL)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "open_UPDATAREPORT_fail");
+            fclose(fp);
+            return;
+        }
+
+        char *buf=(char *)malloc(512);
+        memset((void*)buf,0,512);
+        int ret =fread(buf,1,512,fp);
+        int offset=512;
+        while (ret==512)
+        {
+            buf=(char *)realloc(buf,offset+512);
+            ret=fread(buf+offset,1,512,fp);
+            offset+=512;
+        }
+        // if(ret==0)
+        // {
+        //     WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "fread %d",ret);
+        //     fclose(fp);
+        //     free(buf);
+        //     return;
+        // }
+        fclose(fp);
+        remove(UPDATAREPORT);
+
+        cJSON *data = cJSON_Parse(buf);
+
+        if(data!=NULL)
+        {
+            char *targetVersion=cJSON_GetObjectItem(data, "targetVersion")->valuestring;
+            char *taskId=cJSON_GetObjectItem(data, "updateId")->valuestring;
+            char version_buf[128]={0};
+             uint32_t version_len=128;
+            uapi_get_buildversion((uint8_t*)version_buf,version_len);
+            // if(strcmp(targetVersion,version_buf)==0)
+            // {
+                //HTTP_send_data
+                cJSON* dataJSON=cJSON_CreateObject();
+                char* imei_str= const_cast<char*>(ConfigModel::GetInstance()->Getimei().c_str());
+                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "%s",imei_str);
+
+                cJSON_AddStringToObject(dataJSON,"deviceId",imei_str);
+
+                cJSON_AddStringToObject(dataJSON,"companyId","");
+
+                cJSON_AddStringToObject(dataJSON,"createTime","");
+
+                cJSON_AddStringToObject(dataJSON,"id","");
+                if(strcmp(targetVersion,version_buf)==0)
+                {
+                    cJSON_AddStringToObject(dataJSON,"result","1");
+                    SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_ABLE_UPDTAT_SUCCESS;
+                }
+                else
+                {
+                    cJSON_AddStringToObject(dataJSON,"result","0");
+                    SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_ABLE_UPDTAT_FAIL;
+                }
+                SystemUpdateModel ::GetInstance().OTA_Update_msg_back(OTA_UPDATA_MSG_REPORT);
+
+                cJSON_AddStringToObject(dataJSON,"taskId",taskId);
+                cJSON_AddStringToObject(dataJSON,"updateTime","");
+                buf = cJSON_PrintUnformatted(dataJSON);
+                cJSON_Delete(dataJSON);
+                cJSON_free(buf);
+                WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "%s",buf);
+                u16_t buf_len=strlen(buf);
+               
+                report_data_by_get_file(buf,buf_len);
+
+           // }
+        }   
+        cJSON_Delete(data);
+    }
+
+  
+    static uint32_t custom_start_ota_download_ui( uint8_t *uri_str,uint8_t *Path,uint8_t falg,const char *server_name)
+    {
+    
+        uint8_t *otadatapath = (uint8_t*)Path;
+        err_t rett;
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP,"custom_start_ota_download %s to %s\r\n",uri_str,otadatapath);
+        LCD_auto_timeout(false);
+
+        FILE * fp= fopen((char *)Path,"rb");
+        if(fp!=NULL)
+        {
+            fclose(fp);
+            int  ret= remove((char *)Path);
+            WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "file remove!!!!!!!!!!!!! %d  ",ret);
+        }
+
+        if(falg==OTA_BUTTON_GET_VISON)
+        {
+            rett =http_single_download_start((uint8_t*)server_name,PORT,uri_str,otadatapath,
+            httpc_download_result_ui,httpc_download_headers_done_ui,NULL);
+        }
+        else if(falg==OTA_BUTTON_GET_ABLE_DOWNLOAD)
+        {
+            rett =http_single_download_start((uint8_t*)server_name,PORT,uri_str,otadatapath,
+            httpc_download_FWPKG_result_ui,httpc_download_headers_done_ui,httpc_download_file_recv_ui);
+        }
+     
+        return rett;
+
+    }
+
+
+    static void start_get_updata_json(void)
+    {
+        memset(uri,0,256);
+        char Mac_str[32]={0};
+        char version_buf[32]={0};
+
+        bd_addr_t addr_info;
+        int ret = gap_ble_get_local_addr(&addr_info);
+
+        sprintf_s(Mac_str,32,"%02X%02X%02X%02X%02X%02X",addr_info.addr[5],addr_info.addr[4],addr_info.addr[3],
+        addr_info.addr[2],addr_info.addr[1],addr_info.addr[0]);
+
+        uint8_t _major,_mid,_minor;
+        uapi_get_fw_version(&_major,&_mid,&_minor);
+        sprintf_s(version_buf,32,"%d.%d.%d",_major,_mid,_minor);
+
+        #if OTA_UPDATA_TEST
+        sprintf((char *)uri,JSON_URL,"860132060347762","V1.1.14_20240706_182936_CT");
+        #else
+        sprintf((char *)uri,JSON_URL,Mac_str,version_buf);
+        #endif
+        custom_start_ota_download_ui(uri,(uint8_t*)UPDATAJSONPATH,OTA_BUTTON_GET_VISON,HTTP_JSON_SERVER_NAME);
+    }
+
+    static void start_get_updata_fwpkg(void)
+    {
+        if(ERRCODE_SUCC==custom_start_ota_download_ui(SystemUpdateModel ::GetInstance().uri_ota_package,(uint8_t*)UPDATAFWPKGPATH,OTA_BUTTON_GET_ABLE_DOWNLOAD,HTTP_FWPGK_SERVER_NAME))
+        {
+            SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_DOWNLOADING;
+           
+        }
+    }
+
+
+    SystemUpdateView::SystemUpdateView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::SystemUpdateView");
+        g_pSystemUpdateView = this;
+    }
+
+    SystemUpdateView::~SystemUpdateView()
+    {
+        WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::~SystemUpdateView");
+        ClearAll();
+        g_pSystemUpdateView = nullptr;
+    }
+
+    SystemUpdateView *SystemUpdateView::GetInstance()
+    {
+        return g_pSystemUpdateView;
+    }
+
+    void SystemUpdateView::ClearAll(void)
+    {
+        if (SystemUpdateScrollView != nullptr)
+        {
+            SystemUpdateScrollView->RemoveAll();
+
+            delete Title;
+            Title = nullptr;
+
+            delete KUMILOGOImage;
+            KUMILOGOImage = nullptr;
+
+            delete LatestVersionLabel;
+            LatestVersionLabel = nullptr;
+
+            delete VersionIdLabel;
+            VersionIdLabel = nullptr;
+
+            delete UpdateNowLabel;
+            UpdateNowLabel = nullptr;
+
+            delete TryAgainLaterLabel;
+            TryAgainLaterLabel = nullptr;
+
+            delete UpdateNowButtton;
+            UpdateNowButtton = nullptr;
+
+            delete TryAgainLaterButton;
+            TryAgainLaterButton = nullptr;
+
+            delete updatasider;
+            updatasider = nullptr;
+
+             delete IMEIlabel;
+            IMEIlabel = nullptr;
+
+            delete CATlabel;
+            CATlabel = nullptr;
+
+
+            delete NEWMSGLabel;
+            NEWMSGLabel = nullptr;
+
+            delete NEWVersionIdLabel;
+            NEWVersionIdLabel = nullptr;
+
+
+            delete SystemUpdateScrollView;
+            SystemUpdateScrollView = nullptr;
+
+
+        }
+
+        if (NoNeedUpdateScrollView != nullptr)
+        {
+            NoNeedUpdateScrollView->RemoveAll();
+
+            delete NoNeedUpdateTitle;
+            NoNeedUpdateTitle = nullptr;
+
+            for (int i = 0; i < 2; i++)
+            {
+                delete NoNeedUpdateNote[i];
+                NoNeedUpdateNote[i] = nullptr;
+            }
+
+            delete NoNeedUpdateScrollView;
+            NoNeedUpdateScrollView = nullptr;
+        }
+    }
+    void SystemUpdateView::UpdateNowbutton_back(void)
+    {
+        uint8_t falg_id=SystemUpdateModel ::GetInstance().button_flag;
+        switch (falg_id)
+        {
+          case OTA_BUTTON_GET_VISON://开始获取升级
+            start_get_updata_json();
+            SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_VISON_ING;
+            break;
+        case OTA_BUTTON_GET_ABLE_DOWNLOAD://开始下载升级包
+            start_get_updata_fwpkg();
+            start_dwonload();
+            break;
+        case OTA_BUTTON_GET_ABLE_UPDTAT:
+            #if OTA_UPDATA_TEST
+            uapi_reboot_device();
+            #else
+            uaip_cmd_update_request();
+            #endif
+            
+            break;
+
+         default:
+            break;
+        }
+    }
+
+    void SystemUpdateView::start_dwonload()
+    {
+        NEWMSGLabel->SetText("正在下载");
+        //LatestVersionLabel->SetText("当前版本");
+        UpdateNowLabel->SetVisible(false);
+        UpdateNowButtton->SetVisible(false);
+
+        TryAgainLaterButton->SetVisible(false);
+        TryAgainLaterLabel->SetVisible(false);
+        //VersionIdLabel->SetText("OTA V4.0.0");
+        updatasider->SetVisible(true);
+        updatasider->SetValue(SystemUpdateModel ::GetInstance().download_schedule_value);
+    }
+
+    void SystemUpdateView:: updatasider_back()
+    {
+        //updatasider->SetVisible(true);
+        updatasider->SetValue(SystemUpdateModel ::GetInstance().download_schedule_value);
+        RootView::GetInstance()->Invalidate();
+
+    }
+
+    void SystemUpdateView::msg_text_set(bool flag)
+    {
+        if(SystemUpdateModel::GetInstance().button_flag==OTA_BUTTON_GET_VISON_ING)
+        {
+             if(flag)
+            {
+                NEWMSGLabel->SetText(SystemUpdateModel ::GetInstance().OTA_MSG);
+                if(strlen(SystemUpdateModel ::GetInstance().NEW_VISON)>0)
+                {
+                    NEWVersionIdLabel->SetText(SystemUpdateModel ::GetInstance().NEW_VISON);
+                }
+                UpdateNowLabel->SetText("开始下载");
+                SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_ABLE_DOWNLOAD;
+
+            }
+            else
+            {
+                NEWMSGLabel->SetText("暂无新版本");
+                if(strlen(SystemUpdateModel ::GetInstance().NEW_VISON)>0)
+                {
+                    NEWVersionIdLabel->SetText(SystemUpdateModel ::GetInstance().NEW_VISON);
+                }
+                SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_VISON;
+            }
+
+        }
+        else  if(SystemUpdateModel::GetInstance().button_flag==OTA_BUTTON_GET_DOWNLOADING)
+        {
+            if(flag)
+            {
+                    NEWMSGLabel->SetText("下载成功");
+                    if(strlen(SystemUpdateModel ::GetInstance().NEW_VISON)>0)
+                    {
+                        NEWVersionIdLabel->SetText(SystemUpdateModel ::GetInstance().NEW_VISON);
+                    }
+                    UpdateNowLabel->SetText("开始升级");
+                    UpdateNowLabel->SetVisible(true);
+                    UpdateNowButtton->SetVisible(true);
+
+                    TryAgainLaterButton->SetVisible(true);
+                    TryAgainLaterLabel->SetVisible(true);
+
+                    NEWMSGLabel->SetVisible(true);
+                    NEWVersionIdLabel->SetVisible(true);
+
+                    //VersionIdLabel->SetText("OTA V4.0.0");
+                    updatasider->SetVisible(false);
+                    SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_ABLE_UPDTAT;
+
+
+            }
+            else
+            {
+                NEWMSGLabel->SetText("下载失败");
+                if(strlen(SystemUpdateModel ::GetInstance().NEW_VISON)>0)
+                {
+                    NEWVersionIdLabel->SetText(SystemUpdateModel ::GetInstance().NEW_VISON);
+                }
+                UpdateNowLabel->SetText("重新获取升级");
+                UpdateNowLabel->SetVisible(true);
+                UpdateNowButtton->SetVisible(true);
+
+                TryAgainLaterButton->SetVisible(true);
+                TryAgainLaterLabel->SetVisible(true);
+
+                NEWMSGLabel->SetVisible(true);
+                NEWVersionIdLabel->SetVisible(true);
+                //VersionIdLabel->SetText("OTA V4.0.0");
+                updatasider->SetVisible(false);
+                SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_VISON;
+            }
+        }
+        
+        if(SystemUpdateModel::GetInstance().button_flag==OTA_BUTTON_GET_ABLE_UPDTAT_SUCCESS)
+        {
+            UpdateNowLabel->SetText("获取升级");
+            NEWMSGLabel->SetText("升级成功");
+            NEWVersionIdLabel->SetText("");
+            SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_VISON;
+        }
+        if(SystemUpdateModel::GetInstance().button_flag==OTA_BUTTON_GET_ABLE_UPDTAT_FAIL)
+        {
+            UpdateNowLabel->SetText("重新获取升级");
+            NEWMSGLabel->SetText("升级失败");
+            NEWVersionIdLabel->SetText("");
+            SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_VISON;
+        }
+
+        
+       
+        RootView::GetInstance()->Invalidate();
+    }
+
+    UILabelExt *SystemUpdateView::InitLabel_Ext(LabelConfig &labelConfig)
+    {
+        UILabelExt *label = new UILabelExt();
+        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->SetTextId(labelConfig.textId);
+        label->SetLineBreakMode(labelConfig.lineBreakMode); // 断行模式。
+        label->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_TOP);
+        label->SetFont(DEFAULT_VECTOR_FONT_FILENAME, labelConfig.fontSize);
+        return label;
+    }
+
+    bool SystemUpdateView::SetSystemUpdateScrollView(void)
+    {
+        SystemUpdateScrollView = new UIScrollView();
+        if (SystemUpdateScrollView == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::SystemUpdateScrollView new fail!");
+            return false;
+        }
+        SystemUpdateScrollView->SetPosition(0, 0, Screen::GetInstance().GetWidth(), Screen::GetInstance().GetHeight());
+        SystemUpdateScrollView->SetStyle(STYLE_BACKGROUND_OPA, 0xff);
+        SystemUpdateScrollView->SetStyle(STYLE_BORDER_RADIUS, 1294);
+        SystemUpdateScrollView->SetScrollBlankSize(35);
+        SystemUpdateScrollView->SetReboundSize(50);
+        SystemUpdateScrollView->SetDirection(1);
+        UIView::OnDragListener *draglistener = static_cast<UIView::OnDragListener *>(SystemUpdatePresenter::GetInstance());
+        if (draglistener == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemAboutTheWatchView::draglistener can not be nullptr!");
+            return false;
+        }
+        SystemUpdateScrollView->SetOnDragListener(draglistener);
+        SystemUpdateScrollView->SetTouchable(true);
+        SystemUpdateScrollView->SetDraggable(true);
+
+        return true;
+    }
+
+    void SystemUpdateView::SystemUpdateViewInit(uint8_t flag)
+    {
+        if (!SetSystemUpdateScrollView())
+        {
+            return;
+        }
+        /* ---------------------------------- Title --------------------------------- */
+        LabelConfig Config = {
+            .left = 83,
+            .top = 52,
+            .width = 300,
+            .height = 35,
+            .fontSize = 30,
+            .lineHeigh = 35,
+            //.text = "系统",
+            .textId = STR_SYSTEM,
+            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,
+        };
+        Title = InitLabel_Ext(Config);
+        if (Title == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::Title new fail!");
+            return;
+        }
+        /* ------------------------------ KUMILOGOImage ----------------------------- */
+        KUMILOGOImage = new UIImageView();
+        if (KUMILOGOImage == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::KUMILOGOImage new fail!");
+            return;
+        }
+        KUMILOGOImage->SetPosition(117, 87, 230, 160);
+        #ifdef CUSTOM_Z1
+        // const char *imagesPath = "/user/res/system/KUMILOGO.bin";
+        // KUMILOGOImage->SetSrc(imagesPath);        
+
+        #else
+        const char *imagesPath = "/user/res/system/KUMILOGO.bin";
+        KUMILOGOImage->SetSrc(imagesPath);        
+        #endif
+        /* --------------------------- LatestVersionLabel --------------------------- */
+        Config = {
+            .left = 33,
+            .top = 227+30,
+            .width = 400,
+            .height = 35,
+            .fontSize = 30,
+            .lineHeigh = 35,
+            //.text = "最新版本",
+            .textId = STR_LATEST_VERSION,
+            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,
+        };
+        
+        LatestVersionLabel = InitLabel_Ext(Config);
+        
+        if (LatestVersionLabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::LatestVersionLabel new fail!");
+            return;
+        }
+        /* ----------------------------- imeiLabel ----------------------------- */
+        IMEIlabel = new UILabelExt();
+        if (IMEIlabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::VersionIdLabel new fail!");
+            return;
+        }
+        IMEIlabel->SetPosition(33, 227-5, 400, 35);
+        IMEIlabel->SetStyle(STYLE_TEXT_FONT, 30);
+        IMEIlabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+
+        bd_addr_t addr_info;
+        int ret = gap_ble_get_local_addr(&addr_info);
+        char Mac_str[32]={0};
+        sprintf_s(Mac_str,32,"%02X%02X%02X%02X%02X%02X",addr_info.addr[5],addr_info.addr[4],addr_info.addr[3],
+        addr_info.addr[2],addr_info.addr[1],addr_info.addr[0]);
+
+        IMEIlabel->SetText(Mac_str);
+        IMEIlabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+        IMEIlabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        IMEIlabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+        /* ----------------------------- CAT1提示Label ----------------------------- */
+        CATlabel = new UILabelExt();
+        if (CATlabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::VersionIdLabel new fail!");
+            return;
+        }
+        CATlabel->SetPosition(33, 227-5+20, 400, 35);
+        CATlabel->SetStyle(STYLE_TEXT_FONT, 30);
+        CATlabel->SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
+        CATlabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+
+        //imei_str= const_cast<char*>(ConfigModel::GetInstance()->Getimei().c_str());
+        CATlabel->SetText("请开启4G能力");
+        CATlabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+        CATlabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        CATlabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        CATlabel->SetVisible(false);
+       
+        /* ----------------------------- VersionIdLabel ----------------------------- */
+        VersionIdLabel = new UILabelExt();
+        if (VersionIdLabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::VersionIdLabel new fail!");
+            return;
+        }
+        VersionIdLabel->SetPosition(33, 262+30, 400, 35);
+        VersionIdLabel->SetStyle(STYLE_TEXT_FONT, 30);
+        VersionIdLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+           
+        char version_buf[32]={0};
+        uint8_t _major,_mid,_minor;
+        uapi_get_fw_version(&_major,&_mid,&_minor);
+        sprintf_s(version_buf,32,"%d.%d.%d",_major,_mid,_minor);
+
+
+        VersionIdLabel->SetText(version_buf);
+       
+        
+        VersionIdLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+        VersionIdLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        VersionIdLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+
+        /* ----------------------------- NEWMSGLabel ----------------------------- */
+        NEWMSGLabel = new UILabelExt();
+        if (NEWMSGLabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::VersionIdLabel new fail!");
+            return;
+        }
+        NEWMSGLabel->SetPosition(33, 262+30+30+5, 400, 35);
+        NEWMSGLabel->SetStyle(STYLE_TEXT_FONT, 30);
+        NEWMSGLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+       
+        
+        NEWMSGLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+        NEWMSGLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        NEWMSGLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        
+
+        NEWVersionIdLabel = new UILabelExt();
+        if (NEWVersionIdLabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::VersionIdLabel new fail!");
+            return;
+        }
+        NEWVersionIdLabel->SetPosition(33, 262+30+30+35+5, 400, 35);
+        NEWVersionIdLabel->SetStyle(STYLE_TEXT_FONT, 30);
+        NEWVersionIdLabel->SetStyle(STYLE_LINE_HEIGHT, 35);
+       
+        
+        NEWVersionIdLabel->SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+        NEWVersionIdLabel->SetAlign(TEXT_ALIGNMENT_CENTER, TEXT_ALIGNMENT_CENTER);
+        NEWVersionIdLabel->SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+
+
+
+        /* ----------------------------- UpdateNowLabel ----------------------------- */
+        Config = {
+            .left = 113,
+            .top = 350+30+60+5,
+            .width = 240,
+            .height = 35,
+            .fontSize = 30,
+            .lineHeigh = 35,
+            .textId = STR_UPDATENOW,
+            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,
+        };
+        UpdateNowLabel = InitLabel_Ext(Config);
+        if (UpdateNowLabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::UpdateNowLabel new fail!");
+            return;
+        }
+       
+        /* -------------------------------------------------------------------------- */
+        Config = {
+            .left = 113,
+            .top = 477+30+60+5,
+            .width = 240,
+            .height = 35,
+            .fontSize = 30,
+            .lineHeigh = 35,
+            .textId = STR_LATER,
+            .lineBreakMode = UILabel::LINE_BREAK_MARQUEE,
+        };
+        TryAgainLaterLabel = InitLabel_Ext(Config);
+        if (TryAgainLaterLabel == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::TryAgainLaterLabel new fail!");
+            return;
+        }
+        /* ---------------------------- UpdateNowButtton ---------------------------- */
+        UpdateNowButtton = new UIButton();
+        if (UpdateNowButtton == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::UpdateNowButtton new fail!");
+            return;
+        }
+        UpdateNowButtton->SetPosition(63, 317+30+60+5, 340, 100);
+        UpdateNowButtton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff4fc34c);
+        UpdateNowButtton->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
+        /* --------------------------- TryAgainLaterButton -------------------------- */
+        TryAgainLaterButton = new UIButton();
+        if (TryAgainLaterButton == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::TryAgainLaterButton new fail!");
+            return;
+        }
+        TryAgainLaterButton->SetPosition(63, 427+30+60+5, 340, 100);
+        TryAgainLaterButton->SetStyle(STYLE_BACKGROUND_COLOR, 0xff000000);
+        TryAgainLaterButton->SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
+        TryAgainLaterButton->SetStyleForState(STYLE_BACKGROUND_OPA, 0x00, UIButton::PRESSED);
+        /* ----------------------------- OnClickListener ---------------------------- */
+        UIView::OnClickListener *listener = static_cast<UIView::OnClickListener *>(SystemUpdatePresenter::GetInstance());
+        if (listener == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView::listener can not be nullptr!");
+            return;
+        }
+        UpdateNowButtton->SetOnClickListener(listener);
+        TryAgainLaterButton->SetOnClickListener(listener);
+
+
+        updatasider = new UISlider();
+        if (updatasider == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SystemUpdateView new fail");
+            return;
+        }
+        updatasider->SetSliderColor(Color::Gray(), Color::Silver());
+        updatasider->SetPosition(63, 317+50+50, 340, 50);
+       // updatasider->SetDirection(UISlider::Direction::DIR_BOTTOM_TO_TOP);
+        updatasider->SetViewId("SystemUpdateView_updatasider");
+        updatasider->SetRange(0, 100);
+
+        updatasider->SetStyle(STYLE_BORDER_RADIUS, 100);
+        updatasider->SetBackgroundStyle(STYLE_LINE_CAP, CapType::CAP_ROUND);
+        updatasider->SetForegroundStyle(STYLE_LINE_CAP, CapType::CAP_ROUND);
+        updatasider->SetSliderColor(Color::GetColorFromRGBA(0x19, 0x19, 0x19, 0xff), Color::GetColorFromRGBA(0xfA, 0xfA, 0xfA, 0xff));
+        updatasider->SetForegroundStyle(STYLE_BACKGROUND_OPA, 0xff);
+        updatasider->SetDraggable(false);
+        updatasider->SetVisible(false);
+        updatasider->SetTouchable(false);
+        updatasider->SetValue(0);
+
+
+
+        /* ----------------------------------- Add ---------------------------------- */
+        SystemUpdateScrollView->Add(Title);
+        SystemUpdateScrollView->Add(KUMILOGOImage);
+        SystemUpdateScrollView->Add(LatestVersionLabel);
+        SystemUpdateScrollView->Add(VersionIdLabel);
+        SystemUpdateScrollView->Add(UpdateNowButtton);
+        SystemUpdateScrollView->Add(TryAgainLaterButton);
+        SystemUpdateScrollView->Add(UpdateNowLabel);
+        SystemUpdateScrollView->Add(TryAgainLaterLabel);
+        SystemUpdateScrollView->Add(updatasider);
+        SystemUpdateScrollView->Add(IMEIlabel);
+        SystemUpdateScrollView->Add(NEWMSGLabel);
+        SystemUpdateScrollView->Add(NEWVersionIdLabel);
+
+        SystemUpdateScrollView->Add(CATlabel);
+        
+         LatestVersionLabel->SetText("当前版本");
+
+       if(flag==OTA_BUTTON_GET_VISON)
+        {
+            UpdateNowLabel->SetText("获取升级");
+            NEWMSGLabel->SetText("");
+            NEWVersionIdLabel->SetText("");
+        }
+        if(flag==OTA_BUTTON_GET_ABLE_DOWNLOAD)
+        {
+            UpdateNowLabel->SetText("开始下载");
+            NEWMSGLabel->SetText(SystemUpdateModel ::GetInstance().OTA_MSG);
+            NEWVersionIdLabel->SetText(SystemUpdateModel ::GetInstance().NEW_VISON);
+        }
+        if(flag==OTA_BUTTON_GET_DOWNLOADING)
+        {
+            UpdateNowLabel->SetText("正在下载");
+            UpdateNowLabel->SetVisible(false);
+            UpdateNowButtton->SetVisible(false);
+
+            TryAgainLaterButton->SetVisible(false);
+            TryAgainLaterLabel->SetVisible(false);
+
+            NEWMSGLabel->SetVisible(true);
+            NEWVersionIdLabel->SetVisible(true);
+
+            //VersionIdLabel->SetText("OTA V4.0.0");
+            updatasider->SetVisible(true);
+            updatasider->SetValue(SystemUpdateModel ::GetInstance().download_schedule_value);
+        }
+        if(flag==OTA_BUTTON_GET_ABLE_UPDTAT)
+        {
+            UpdateNowLabel->SetText("开始升级");
+
+            UpdateNowLabel->SetVisible(true);
+            UpdateNowButtton->SetVisible(true);
+
+            TryAgainLaterButton->SetVisible(true);
+            TryAgainLaterLabel->SetVisible(true);
+
+            NEWMSGLabel->SetVisible(true);
+            NEWVersionIdLabel->SetVisible(true);
+
+            //VersionIdLabel->SetText("OTA V4.0.0");
+            updatasider->SetVisible(false);
+
+
+
+            NEWMSGLabel->SetText(SystemUpdateModel ::GetInstance().OTA_MSG);
+            NEWVersionIdLabel->SetText(SystemUpdateModel ::GetInstance().NEW_VISON);
+        }
+        if(flag==OTA_BUTTON_GET_ABLE_DOWNLOAD_FAIL)
+        {
+            UpdateNowLabel->SetText("重新获取升级");
+            NEWMSGLabel->SetText("下载失败");
+            NEWVersionIdLabel->SetText("");
+            SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_VISON;
+        }
+
+        if(flag==OTA_BUTTON_GET_ABLE_UPDTAT_SUCCESS)
+        {
+            UpdateNowLabel->SetText("获取升级");
+            NEWMSGLabel->SetText("升级成功");
+            NEWVersionIdLabel->SetText("");
+            SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_VISON;
+        }
+        if(flag==OTA_BUTTON_GET_ABLE_UPDTAT_FAIL)
+        {
+            UpdateNowLabel->SetText("重新获取升级");
+            NEWMSGLabel->SetText("升级失败");
+            NEWVersionIdLabel->SetText("");
+            SystemUpdateModel ::GetInstance().button_flag=OTA_BUTTON_GET_VISON;
+        }
+
+        if(ConfigModel::GetInstance()->get_configData_bool(ConfigModel::CONFIGMODEL_ITEM_CAT1_SERVICE_ON)==false)
+        {
+            CATlabel->SetVisible(true);
+
+            UpdateNowLabel->SetVisible(false);
+            UpdateNowButtton->SetVisible(false);
+
+            TryAgainLaterButton->SetVisible(false);
+            TryAgainLaterLabel->SetVisible(false);
+
+            NEWMSGLabel->SetVisible(false);
+            NEWVersionIdLabel->SetVisible(false);
+
+            UpdateNowButtton->SetVisible(false);
+            TryAgainLaterButton->SetVisible(false);
+
+            UpdateNowLabel->SetVisible(false);
+            TryAgainLaterLabel->SetVisible(false);
+
+            LatestVersionLabel->SetVisible(false);
+            VersionIdLabel->SetVisible(false);
+
+            IMEIlabel->SetVisible(false);
+
+            updatasider->SetVisible(false);
+
+        }
+
+        GetRootContainer()->Add(SystemUpdateScrollView);
+    }
+
+    void SystemUpdateView::NoNeedUpdateViewInit(void)
+    {
+        
+    }
+
+    void SystemUpdateView::OnStart()
+    {
+        View<SystemUpdatePresenter>::OnStart();
+
+       
+       
+        SystemUpdateViewInit(SystemUpdateModel ::GetInstance().button_flag);
+
+
+        // 增加按键监听
+        RootView::OnKeyActListener *keyactListener = (RootView::OnKeyActListener *)OHOS::SystemUpdatePresenter::GetInstance();
+       RootView::GetInstance()->SetOnKeyActListener(keyactListener);
+    }
+
+
+
+    UIButton *SystemUpdateView::GetUpdateNowButtton(void)
+    {
+        if (UpdateNowButtton != nullptr)
+        {
+            return UpdateNowButtton;
+        }
+        return nullptr;
+    }
+
+    UIButton *SystemUpdateView::GetTryAgainLaterButton(void)
+    {
+        if (TryAgainLaterButton != nullptr)
+        {
+            return TryAgainLaterButton;
+        }
+        return nullptr;
+    }
+}
\ No newline at end of file