消息Slice同步协议 296/1 296/head 297/target/1
authorCaisking <3449750381@qq.com>
Sat, 15 Jun 2024 11:07:02 +0000 (19:07 +0800)
committerCaisking <3449750381@qq.com>
Sat, 15 Jun 2024 11:07:02 +0000 (19:07 +0800)
12 files changed:
code/sdk/application/wearable/fd230app/nativeui/message/include/MessageAdapter.h
code/sdk/application/wearable/fd230app/nativeui/message/include/MessageItemView.h
code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h
code/sdk/application/wearable/fd230app/nativeui/message/include/MessageView.h
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageAdapter.cpp
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageItemView.cpp
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp
code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageView.cpp
code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordModel.cpp
code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordView.cpp
code/sdk/drivers/peripheral/utils/custom_utils.c

index 18b9621..98a3521 100644 (file)
@@ -1,4 +1,10 @@
-/*** 
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-13 16:31:15
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageAdapter.h
+ */
+/***
  * @Author: Caisking 3449750381@qq.com
  * @Date: 2024-01-29 19:58:37
  * @LastEditors: Caisking 3449750381@qq.com
@@ -23,10 +29,10 @@ namespace OHOS
     typedef struct
     {
         int index;
-        ImageInfo *icon;         // 图标
-        const char *label;       // 标签
-        const char *labelbutton; // 未读
-        bool hasSecondMenu;
+        bool read;                // 是否未读
+        std::string labeltitle;   // 来信标签
+        std::string labeldetails; // 信息内容
+        std::string labeltime;    // 来信时间
     } MessageListItem;
 
     class MessageListAdapter : public AbstractAdapter
index eb2ddc5..50b8603 100644 (file)
@@ -1,3 +1,9 @@
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-13 16:51:22
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageItemView.h
+ */
 
 #ifndef Message_ITEM_VIEW_H
 #define Message_ITEM_VIEW_H
@@ -23,12 +29,12 @@ namespace OHOS
 
     private:
         MessageItemView(const MessageItemView &);
-        UIImageView sbackground;    // 背景
-        UIImageView sIcon;          // 图标
-        UILabel sLabel;             // 标签
-        UILabelButton sLabelButton; // 未读
-        MessageListItem sItemInfo = {0, nullptr, nullptr, nullptr, false};
+        UIImageView sIcon;          // 未读图标
+        UILabel stitle;             // 消息来源
+        UILabel smessgae;           // 消息
+        UILabel stime;              // 时间
+        UILabelButton sLabelButton; // 按键
+        MessageListItem sItemInfo = {0, false, nullptr, nullptr, nullptr};
     };
-
 }
 #endif
\ No newline at end of file
index e2fb6d4..283ee99 100644 (file)
@@ -1,9 +1,21 @@
-/*** 
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-14 20:09:13
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h
+ */
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-14 19:49:15
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h
+ */
+/***
  * @Author: Caisking 3449750381@qq.com
  * @Date: 2024-01-29 19:58:37
  * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-26 18:00:19
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h
+ * @LastEditTime: 2024-06-13 17:01:04
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
 
 #include <map>
 #include "AppViewIDs.h"
 #include "components/ui_label_ext.h"
-#include"language/font/ui_resource_string.h"
+#include "language/font/ui_resource_string.h"
 #include "UiConfig.h"
 #include "MessagePresenter.h"
 #include "message/include/MessageAdapter.h"
 
 namespace OHOS
 {
+    struct MessageData
+    {
+        bool read;                // 是否已读
+        std::string labeltitle;   // 来信标签
+        std::string labeldetails; // 信息内容
+        std::string labeltime;    // 来信时间
+    };
     class MessageModel
     {
     public:
@@ -28,17 +47,33 @@ namespace OHOS
         void InitMessageListItem();
         const MessageListItem *GetMessagelistItems() const;
         uint8_t GetMessageListNum() const;
-        //const std::map<MessageIndex, AppViewId> &GetMessageIdToViewId() const;
+        // 判断json是否存在
+        bool CheckDataJson();
+        // 设置标志位 获取json状态 避免反复读取
+        bool GetJsonStatus();
+        // 加载json函数
+        std::vector<MessageData> LoadMessageJson();
+        // 获取总消息数量
+        uint8_t GetListNum();
+        // 设置当前界面
+        void SetPopupView(bool state);
+        // 获取当前界面
+        bool GetPopupView();
+        // 打印函数
+        void PrintfData(MessageData messagedata);
 
     private:
         MessageModel();
         MessageModel(const MessageModel &);
         MessageModel &operator=(const MessageModel &);
         virtual ~MessageModel();
-        static const uint16_t MessageListMaxNum = 4;
-        MessageListItem Messages[MessageListMaxNum] = {0, nullptr, nullptr, nullptr, false};
-        //std::map<int, AppViewId> MessageIdToViewId;
-        bool btConnectStatus{false};
+        uint8_t ArrayNum;
+        static const uint16_t MessageListMaxNum = 10;
+        MessageListItem Messages[MessageListMaxNum] = {0, false, nullptr, nullptr, nullptr};
+        // std::map<int, AppViewId> MessageIdToViewId;
+
+        bool jsonStatus{false}; // json文件存在标志位
+        bool popupStatus{false};
     };
 }
 
index 7266ff5..a02c987 100644 (file)
@@ -1,3 +1,9 @@
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-15 15:47:19
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageView.h
+ */
 /***
  * @Date: 2024-04-15 10:55:58
  * @LastEditors: Caisking 3449750381@qq.com
 #include "message/include/MessageAdapter.h"
 #include "message/include/MessageModel.h"
 #include "components/ui_image_view.h"
+#include "components/ui_label.h"
+#include "components/ui_label_ext.h"
 
 namespace OHOS
 {
-    enum class PopupMessgae
+    enum class PopupMessage
     {
         LackPopup,
         MessagePopup
@@ -38,11 +46,12 @@ namespace OHOS
         void OnSetUpView() override;
         void OnTearDownView() override;
         void OnStop() override;
-        // void AddMessageToList(const MessageListItem &item);
+        void AddMessageToList(const MessageListItem &item);
+        UIList *GetList();
 
         void ShowLackView();
         void ShowMessageView();
-        void SetPopupViewStatus(PopupMessgae view, bool status);
+        void SetPopupViewStatus(PopupMessage view, bool status);
 
         void InitView(void);
         void DeInitView(void);
@@ -51,11 +60,6 @@ namespace OHOS
     private:
         UIScrollView *container_ = nullptr;
 
-        UILabel *title{nullptr};
-        MessageListAdapter *p_MessageListAdapter{nullptr};
-        UIList *MessageList = nullptr;
-        UIView::OnDragListener *draglistener{nullptr};
-
         /*无消息界面*/
         UIScrollView *lackView{nullptr};
         UIImageView *imageline{nullptr};
@@ -65,6 +69,10 @@ namespace OHOS
 
         /*消息列表界面*/
         UIScrollView *messageView{nullptr};
+        UILabelExt *title{nullptr};
+        MessageListAdapter *p_MessageListAdapter{nullptr};
+        UIList *MessageList = nullptr;
+        UIView::OnDragListener *draglistener{nullptr};
 
         bool viewInitStatus{false};
     };
index fbb42a3..4ca0785 100644 (file)
@@ -38,7 +38,7 @@ namespace OHOS
         }
     }
 
-    /// @brief 为音乐列表的每一项创建一个视图
+    /// @brief 
     /// @param inView 一个指向已存在的视图对象的指
     /// @param index 要创建的视图在列表中的索引l。
     /// @return 返回该视图对象
index da24203..dda7628 100644 (file)
@@ -1,35 +1,37 @@
-/*** 
- * @Author: Caisking 3449750381@qq.com
- * @Date: 2024-01-29 19:58:37
+/***
+ * @Date: 2024-04-15 10:55:58
  * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-26 20:20:20
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/message/src/MessageItemView.cpp
- * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ * @LastEditTime: 2024-06-14 11:18:42
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageItemView.cpp
  */
 
 #include "message/include/MessageItemView.h"
 
 namespace OHOS
 {
-
+    static constexpr const char *ICON_IMAGE = "user/res/message/Icon.bin";
     MessageItemView::MessageItemView()
     {
-        SetPosition(0, 0, 380, 120); // 每一itemview宽高要配置好,因为每一首加到list歌曲都是以这个视图为基准
-        SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
+        SetPosition(0, 0, 380, 240); // 每一itemview宽高要配置好,因为每一首加到list歌曲都是以这个视图为基准
+        // SetStyle(STYLE_BACKGROUND_COLOR, 0xff191919);
         SetStyle(STYLE_BACKGROUND_OPA, 255);
+        SetStyle(STYLE_BORDER_RADIUS, 20);
         SetTouchable(true);
         SetUpChild();
-        Add(&sbackground);
-        Add(&sIcon);
-        Add(&sLabel);
+
         Add(&sLabelButton);
+        Add(&sIcon);
+        Add(&stitle);
+        Add(&smessgae);
+        Add(&stime);
     }
 
     MessageItemView::~MessageItemView()
     {
-        Remove(&sbackground);
-        Remove(&sLabel);
         Remove(&sIcon);
+        Remove(&stitle);
+        Remove(&smessgae);
+        Remove(&stime);
         Remove(&sLabelButton);
     }
 
@@ -38,30 +40,51 @@ namespace OHOS
     void MessageItemView::SetItemInfo(const MessageListItem itemInfo)
     {
         sItemInfo = itemInfo;
-        sIcon.SetSrc(itemInfo.icon);
-        sLabel.SetText(itemInfo.label);
-        sLabelButton.SetText(itemInfo.labelbutton);
+        if (!itemInfo.read)
+        {
+            sIcon.SetSrc(ICON_IMAGE);
+        }
+        stitle.SetText((itemInfo.labeltitle).c_str());
+        smessgae.SetText((itemInfo.labeldetails).c_str());
+        stime.SetText((itemInfo.labeltime).c_str());
+
+        // printf("itemInfo:%s %s %s\r\n", (itemInfo.labeltitle).c_str(), (itemInfo.labeldetails).c_str(), (itemInfo.labeltime).c_str());
     }
 
     /// @brief 设置每一个itemview上的组件
     void MessageItemView::SetUpChild()
     {
-        sbackground.SetSrc("/user/res/SETTING_BACKGROUND.bin");
 
-        sIcon.SetPosition(19, 19);
+        sIcon.SetPosition(40, 43);
         sIcon.SetStyle(STYLE_IMAGE_OPA, OPA_OPAQUE);
 
-        sLabel.SetPosition(115, 33, 200, 40);
-        sLabel.SetStyle(STYLE_TEXT_FONT, 30);
-        sLabel.SetStyle(STYLE_LINE_HEIGHT, 36);
-        sLabel.SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
-        sLabel.SetTextColor(Color::White());
-        sLabel.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+        stitle.SetPosition(60, 31, 280, 35);
+        stitle.SetStyle(STYLE_TEXT_FONT, 30);
+        stitle.SetStyle(STYLE_LINE_HEIGHT, 36);
+        stitle.SetLineBreakMode(UILabel::LINE_BREAK_MARQUEE);
+        stitle.SetRollSpeed(30); // 设置文本滚动速度
+        stitle.SetTextColor(Color::White());
+        stitle.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+        smessgae.SetPosition(40, 69, 300, 105);
+        smessgae.SetStyle(STYLE_TEXT_FONT, 30);
+        smessgae.SetStyle(STYLE_LINE_HEIGHT, 36);
+        smessgae.SetLineBreakMode(UILabel::LINE_BREAK_CLIP);
+        smessgae.SetTextColor(Color::Gray());
+        smessgae.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 30);
+
+        stime.SetPosition(40, 178, 300, 33);
+        stime.SetStyle(STYLE_TEXT_FONT, 30);
+        stime.SetStyle(STYLE_LINE_HEIGHT, 36);
+        stime.SetLineBreakMode(UILabel::LINE_BREAK_ELLIPSIS);
+        stime.SetTextColor(Color::Gray());
+        stime.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 28);
 
-        sLabelButton.SetPosition(215, 25, 140, 50);
+        sLabelButton.SetPosition(0, 0, 380, 220);
         sLabelButton.SetStyle(STYLE_BACKGROUND_COLOR, 0xff303030);
-        sLabelButton.SetTextColor(Color::White());
-        sLabelButton.SetFont(DEFAULT_VECTOR_FONT_FILENAME, 20);
+        sLabelButton.SetStyle(STYLE_BORDER_RADIUS, 20);
+        sLabelButton.SetStyleForState(STYLE_BORDER_COLOR, 0xff0b1928, UIButton::PRESSED);
+        sLabelButton.SetStyleForState(STYLE_BORDER_RADIUS, 20, UIButton::PRESSED);
         sLabelButton.SetTouchable(true);
     }
 
index 21696b7..82be4c3 100644 (file)
@@ -1,9 +1,9 @@
-/*** 
+/***
  * @Author: Caisking 3449750381@qq.com
  * @Date: 2024-01-29 19:58:37
  * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-03-26 20:08:00
- * @FilePath: /sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp
+ * @LastEditTime: 2024-06-14 19:15:15
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
 
 #include "common/image_cache_manager.h"
 #include "UiConfig.h"
 #include "ui_resource_image.h"
+#include "samgr_lite.h"
+#include <vector>
+#include <sstream>
+#include <iomanip>
+#include <fstream>
+#include <iostream>
+#include <string>
+#include "cJSON.h"
+#include "wearable_log.h"
+#include "custom_utils.h"
+
+#define MESSAGE_JSON_FILE "user/userdata/message/ancs.json"
+#define PRINTFDATA 1
+
+extern "C" errcode_t uapi_get_TIME_STR(uint32_t time, char *p_time, char separator, bool include_seconds);
 namespace OHOS
 {
 
-    MessageModel::MessageModel() {}
+    MessageModel::MessageModel()
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MessageModel");
+        jsonStatus = CheckDataJson(); // 更新json状态
+        // LoadMessageJson();
+    }
 
     MessageModel::~MessageModel() {}
 
@@ -24,25 +44,132 @@ namespace OHOS
         return instance;
     }
 
-    void MessageModel::InitMessageListItem()
+    uint8_t MessageModel::GetMessageListNum() const
+    {
+        return MessageListMaxNum;
+    }
+    /*检查是否存在数据*/
+    bool MessageModel::CheckDataJson()
+    {
+        // 读取record.json文件
+        std::ifstream file(MESSAGE_JSON_FILE);
+        // 检查文件是否打开成功
+        if (!file.is_open())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unable to open file");
+            return false;
+        }
+        // 检查文件是否为空
+        file.seekg(0, std::ios::end);
+        if (file.tellg() == 0)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "File is empty");
+            file.close();
+            return false;
+        }
+        // 关闭文件
+        file.close();
+        return true;
+    }
+    /*加载json函数*/
+    std::vector<MessageData> MessageModel::LoadMessageJson()
     {
-        ImageInfo *imgSystem = ImageCacheManager::GetInstance().LoadOneInMultiRes(MESSAGE_SYSTEM, MESSAGE_IAMGES);
-        ImageInfo *imgNote = ImageCacheManager::GetInstance().LoadOneInMultiRes(MESSAGE_MESSAGE, MESSAGE_IAMGES);
-        ImageInfo *imgWechat = ImageCacheManager::GetInstance().LoadOneInMultiRes(MESSAGE_WECHAT, MESSAGE_IAMGES);
-        ImageInfo *imgQQ = ImageCacheManager::GetInstance().LoadOneInMultiRes(MESSAGE_QQ, MESSAGE_IAMGES);
+        std::ifstream file(MESSAGE_JSON_FILE);
+        if (!file.is_open())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file");
+            return std::vector<MessageData>();
+        }
+        std::string jsonData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
+        file.close();
+
+        cJSON *root = cJSON_Parse(jsonData.c_str());
+        cJSON *dataArray = cJSON_GetObjectItem(root, "infor");
+        int dataCount = cJSON_GetArraySize(dataArray);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "dataCount is %d", dataCount);
+
+        std::vector<MessageData> MessageVector;
+        for (int i = 0; i < dataCount; i++)
+        {
+            cJSON *item = cJSON_GetArrayItem(dataArray, i);
+            MessageData messagedata;
+
+            // 使用 strdup 复制字符串,确保每个字符串都有独立的内存空间
+            messagedata.labeltitle = cJSON_GetObjectItem(item, "title")->valuestring;
+            messagedata.labeldetails = cJSON_GetObjectItem(item, "msg")->valuestring;
 
-        Messages[0] = {0, imgSystem, "系统", "暂无信息", false};
-        Messages[1] = {1, imgNote, "信息", "暂无信息", false};
-        Messages[2] = {2, imgWechat, "微信", "暂无信息", false};
-        Messages[3] = {3, imgQQ, "QQ", "暂无信息", false};
+            // 获取时间
+            uint32 timestamp = cJSON_GetObjectItem(item, "time")->valueint;
+            char labeltime[20];
+            if (uapi_get_TIME_STR(timestamp, labeltime, '.', false) != ERRCODE_SUCC)
+            {
+                messagedata.labeltime = std::string("2024.1.1 00:00");
+            }
+            else
+            {
+                messagedata.labeltime = std::string(labeltime);
+            }
+
+            // 这里根据解析的 JSON 数据类型修改 messagedata.read 的精确类型
+            messagedata.read = cJSON_GetObjectItem(item, "read")->valueint;
+            PrintfData(messagedata);
+            MessageVector.push_back(messagedata);
+        }
+        cJSON_Delete(root);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadMessageJson is ok");
+        return MessageVector;
     }
 
+    void MessageModel::PrintfData(MessageData messagedata)
+    {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "**************************************");
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Title: %s", (messagedata.labeltitle).c_str());
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Details: %s", (messagedata.labeldetails).c_str());
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Time: %s", (messagedata.labeltime).c_str());
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Message Read: %d", messagedata.read);
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "**************************************");
+    }
+    void MessageModel::InitMessageListItem()
+    {
+        // 读取json数据
+        std::vector<MessageData> messageVector = LoadMessageJson();
+        if (!messageVector.empty())
+        {
+            ArrayNum = messageVector.size();
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the ArrayNum is %d", ArrayNum);
+            for (int i = ArrayNum - 1, count = 0; i >= 0 && count < MessageListMaxNum; i--, count++)
+            {
+                MessageData messageData;
+                messageData.read = messageVector[i].read;
+                messageData.labeltitle = messageVector[i].labeltitle;
+                messageData.labeldetails = messageVector[i].labeldetails;
+                messageData.labeltime = messageVector[i].labeltime;
+                // PrintfData(messageData);
+                // 获取是否读取 来信 信息内容 时间
+                Messages[count] = {count, messageData.read, messageData.labeltitle, messageData.labeldetails, messageData.labeltime};
+            }
+        }
+    }
     const MessageListItem *MessageModel::GetMessagelistItems() const
     {
         return Messages;
     }
-    uint8_t MessageModel::GetMessageListNum() const
+    bool MessageModel::GetJsonStatus()
     {
-        return MessageListMaxNum;
+        return jsonStatus;
+    }
+    uint8_t MessageModel::GetListNum()
+    {
+        return ArrayNum;
+    }
+    // 设置当前界面
+    void MessageModel::SetPopupView(bool state)
+    {
+        popupStatus = state;
+    }
+    // 获取当前界面 0:没有记录 | 1:有记录
+    bool MessageModel::GetPopupView()
+    {
+        return popupStatus;
     }
-}
\ No newline at end of file
+}
index cc6ec2e..66061a3 100644 (file)
@@ -1,3 +1,9 @@
+/***
+ * @Date: 2024-04-15 10:55:58
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-15 15:56:50
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp
+ */
 /***
  * @Date: 2024-04-15 10:55:58
  * @LastEditors: Caisking 3449750381@qq.com
@@ -14,6 +20,7 @@
 #include "message/include/MessageItemView.h"
 #include "components/ui_abstract_scroll_bar.h"
 #include "gfx_utils/graphic_log.h"
+#include "wearable_log.h"
 
 namespace OHOS
 {
@@ -39,18 +46,31 @@ namespace OHOS
 
     void MessagePresenter::OnStart()
     {
-        // p_MessageModel->InitMessageListItem();
+
+        // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "InitMessageListItem");
+        p_MessageModel->InitMessageListItem();
         Presenter<MessageView>::OnStart();
     }
 
     void MessagePresenter::OnPause(void)
     {
-
         Presenter<MessageView>::OnPause();
     }
 
     void MessagePresenter::OnResume(void)
     {
+        if (view_ == nullptr)
+        {
+            return;
+        }
+        if (p_MessageModel->GetJsonStatus())
+        {
+            const MessageListItem *itemInfo = p_MessageModel->GetMessagelistItems();
+            for (int i = 0; i < p_MessageModel->GetMessageListNum(); i++)
+            {
+                view_->AddMessageToList(itemInfo[i]);
+            }
+        }
         Presenter<MessageView>::OnResume();
     }
 
@@ -70,7 +90,7 @@ namespace OHOS
         // 向下回到主界面
         if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM)
         {
-            NativeAbility::GetInstance().EnterSlice(VIEW_MAIN);
+            // NativeAbility::GetInstance().EnterSlice(VIEW_MAIN);
         }
         return true;
     }
index 466b21a..ebc96c2 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "message/include/MessageView.h"
 #include "message/include/MessagePresenter.h"
+#include "message/include/MessageModel.h"
 
 #include "UiConfig.h"
 #include "wearable_log.h"
@@ -11,6 +12,12 @@ namespace OHOS
     static constexpr char *lineimagePath = "/user/res/message/Line.bin";
     static constexpr char *messageimagePath = "/user/res/message/message.bin";
     static const uint32_t BACK_GROUND_COLOR = 0xfff6f6f6;
+    static constexpr int16_t More_LIST_POSITION_X = 43;
+    static constexpr int16_t More_LIST_POSITION_Y = 120;
+    static constexpr int16_t More_SCROLLBLANKSIZE = 35; // 设置此滚动视图的空白大小。
+    static constexpr int16 MAX_SCR_DIS = 1000;
+    static constexpr int16 LIST_POS = 20;
+    static constexpr int16 SNUM_2 = 2;
 
     static constexpr uint8_t NUM_2 = 2;
     static MessageView *g_pMessageView{nullptr};
@@ -41,12 +48,25 @@ namespace OHOS
             container_->SetPosition(0, 0, 466, 466);
             container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
         }
-        // 展示无记录界面。后续需要加入函数判断
-        SetPopupViewStatus(PopupMessgae::LackPopup, true);
+        // 展示界面
+        if (MessageModel::GetInstance().GetJsonStatus())
+        {
+            printf("存在数据!\r\n");
+            SetPopupViewStatus(PopupMessage::MessagePopup, true);
+        }
+        else
+        {
+            printf("不存在数据!\r\n");
+            SetPopupViewStatus(PopupMessage::LackPopup, true);
+        }
     }
     void MessageView::DeInitView()
     {
         container_->RemoveAll();
+        lackView->RemoveAll();
+        messageView->RemoveAll();
+        MessageList->RemoveAll();
+
         if (labeltitle != nullptr)
         {
             lackView->Remove(labeltitle);
@@ -77,6 +97,23 @@ namespace OHOS
             delete lackView;
             lackView = nullptr;
         }
+        if (title != nullptr)
+        {
+            delete title;
+            title = nullptr;
+        }
+        if (MessageList != nullptr)
+        {
+            MessageList->RemoveAll();
+            delete MessageList;
+            MessageList = nullptr;
+        }
+        if (messageView != nullptr)
+        {
+            messageView->RemoveAll();
+            delete messageView;
+            messageView = nullptr;
+        }
         if (container_ != nullptr)
         {
             container_->RemoveAll();
@@ -96,6 +133,7 @@ namespace OHOS
         }
     }
 
+    /*无数据界面*/
     void MessageView::ShowLackView()
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowLackView start");
@@ -111,7 +149,7 @@ namespace OHOS
         lackView->SetDirection(1);
         /*初始化label*/
         InitLabelExt(labeltitle, 83, 50, 300, 35, "labletitle", STR_MESSAGE, DEFAULT_VECTOR_FONT_FILENAME, 30);
-        InitLabelExt(labelmeage, 53, 276, 360, 40, "labelrecord", STR_MESSAGENO, DEFAULT_VECTOR_FONT_FILENAME, 30);
+        InitLabelExt(labelmeage, 53, 276, 360, 40, "labelMessage", STR_MESSAGENO, DEFAULT_VECTOR_FONT_FILENAME, 30);
         labelmeage->SetTextColor(Color::GetColorFromRGBA(0x66, 0x66, 0x66, 0xff));
         /*初始化image*/
         InitImageView(imageline, 193, 30, 365, 35, "image", lineimagePath);
@@ -137,33 +175,79 @@ namespace OHOS
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowLackView end");
     }
 
+    /*数据界面*/
     void MessageView::ShowMessageView()
     {
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowmessageView start");
+        messageView = new UIScrollView();
+        if (messageView == nullptr)
+        {
+            return;
+        }
+        messageView->SetPosition(0, 0);
+        messageView->Resize(VERTICAL_RESOLUTION, HORIZONTAL_RESOLUTION);
+        messageView->SetScrollBlankSize(20);
+        messageView->SetReboundSize(50);
+        messageView->SetDirection(1);
+
+        /*初始化label*/
+        InitLabelExt(title, 83, 50, 300, 35, "labletitle", STR_MESSAGE_NOTIFICATION, DEFAULT_VECTOR_FONT_FILENAME, 30);
+        messageView->Add(title);
+
+        // UIList 的适配器
+        p_MessageListAdapter = new MessageListAdapter();
+        p_MessageListAdapter->SetItemClickListener(presenter_);
+        if (MessageList == nullptr)
+        {
+            MessageList = new UIList();
+        }
+        MessageList->SetPosition(More_LIST_POSITION_X, More_LIST_POSITION_Y);
+        MessageList->Resize(HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION);
+        MessageList->SetScrollBlankSize(More_SCROLLBLANKSIZE);
+        MessageList->SetReboundSize(50);
+        MessageList->SetSelectPosition(HORIZONTAL_RESOLUTION / SNUM_2); // middle position
+        MessageList->SetDraggable(true);
+        MessageList->SetThrowDrag(true);
+        MessageList->EnableAutoAlign(true);
+        MessageList->SetElastic(true); // 设置回弹效果
+        MessageList->SetMaxScrollDistance(MAX_SCR_DIS);
+
+        messageView->SetYScrollBarVisible(true); // 设置滑动滚动条
+        MessageList->SetOnClickListener(static_cast<UIView::OnClickListener *>(MessagePresenter::GetInstance()));
+
+        UIView::OnDragListener *Messagedraglistener = static_cast<UIView::OnDragListener *>(MessagePresenter::GetInstance());
+        if (Messagedraglistener == nullptr)
+        {
+            return;
+        }
+        messageView->SetOnDragListener(Messagedraglistener);
+        messageView->SetVisible(false); // 隐藏界面
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowmessageView end");
     }
-    void MessageView::SetPopupViewStatus(PopupMessgae view, bool status)
+    /*控制显示界面*/
+    void MessageView::SetPopupViewStatus(PopupMessage view, bool status)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SetPopupViewStatus %d", view);
         UIView *popupView = nullptr;
-        if (view == PopupMessgae::LackPopup)
+        if (view == PopupMessage::LackPopup)
         {
+            MessageModel::GetInstance().SetPopupView(false); // 设置状态为无记录
             popupView = lackView;
         }
-        else if (view == PopupMessgae::MessagePopup)
+        else if (view == PopupMessage::MessagePopup)
         {
+            MessageModel::GetInstance().SetPopupView(true); // 设置状态为有记录
             popupView = messageView;
         }
-
         if (popupView == nullptr)
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "PopupView is NULL");
             return;
         }
-
         if (container_ != nullptr)
         {
             container_->SetVisible(!status);
         }
-
         popupView->SetVisible(status);
     }
 
@@ -190,18 +274,36 @@ namespace OHOS
         container_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full);
 
         ShowLackView();
+        ShowMessageView();
         PreLoad();
         RootView::GetInstance()->Add(container_);
     }
-
-    /// @brief 创建页面的视图。
+    void MessageView::AddMessageToList(const MessageListItem &item)
+    {
+        p_MessageListAdapter->AddListItem(item);
+    }
+    // 获取列表
+    UIList *MessageView::GetList()
+    {
+        return MessageList;
+    }
+    /// @brief 创建页面的视图
     void MessageView::OnSetUpView()
     {
         View<MessagePresenter>::OnSetUpView();
+        if (MessageModel::GetInstance().GetJsonStatus())
+        {
+            messageView->Add(MessageList);
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MessageList is add");
+            messageView->SetStyle(STYLE_BACKGROUND_OPA, OPA_TRANSPARENT);
+            RootView::GetInstance()->Add(messageView);
+            MessageList->SetAdapter(p_MessageListAdapter);
+            MessageList->RefreshList(); // 刷新列表
+        }
         Draw();
     }
 
-    /// @brief 销毁页面的视图。
+    /// @brief 销毁页面的视图
     void MessageView::OnTearDownView()
     {
         View<MessagePresenter>::OnTearDownView();
@@ -216,17 +318,6 @@ namespace OHOS
         return;
     }
 #if 0
-    UIList *MessageView::GetList()
-    {
-        return MessageList;
-    }
-
-    /// @brief 添加歌曲到list
-    /// @param item
-    void MessageView::AddMessageToList(const MessageListItem &item)
-    {
-        p_MessageListAdapter->AddListItem(item);
-    }
         /* -------------------------------------------------------------------------- */
     // 初始化页面
     bool MessageView::InitPage()
index 9ede7dc..9463823 100644 (file)
@@ -1,7 +1,7 @@
 /*** 
  * @Date: 2024-05-20 19:40:41
  * @LastEditors: Caisking 3449750381@qq.com
- * @LastEditTime: 2024-06-13 11:01:17
+ * @LastEditTime: 2024-06-15 15:16:11
  * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/traingrecord/src/TraingRecordModel.cpp
  */
 /***
@@ -49,10 +49,6 @@ namespace OHOS
     // 设置标志位
     bool TraingRecordModel::GetJsonStatus()
     {
-        if (jsonStatus)
-        {
-            // printf("存在文件!\r\n");
-        }
         return jsonStatus;
     }
 
index 33cfd90..0a91efd 100644 (file)
@@ -213,6 +213,7 @@ namespace OHOS
         TraingRecordList->SetMaxScrollDistance(MAX_SCR_DIS);
 
         recordView->SetYScrollBarVisible(true); // 设置滑动滚动条
+
         TraingRecordList->SetOnClickListener(static_cast<UIView::OnClickListener *>(TraingRecordPresenter::GetInstance()));
 
         UIView::OnDragListener *recorddraglistener = static_cast<UIView::OnDragListener *>(TraingRecordPresenter::GetInstance());
@@ -296,7 +297,6 @@ namespace OHOS
 
     void TraingRecordView::OnTearDownView()
     {
-
         View<TraingRecordPresenter>::OnTearDownView();
         return;
     }
index f97bad7..78b2cfa 100644 (file)
@@ -799,7 +799,7 @@ errcode_t uapi_get_TIME_STR(uint32_t time,char *p_time, char separator, bool inc
     }
 
     time_t rawtime = (time_t)time;
-    struct tm *timeinfo = gmtime(&rawtime);
+    struct tm *timeinfo = localtime(&rawtime);
 
     if (timeinfo == NULL)
     {