Merge #348 into sdk602patch0521 from refs/changes/348/head 350/target/1
author袁清梦 <3449750381@qq.com>
Fri, 21 Jun 2024 12:48:54 +0000 (12:48 +0000)
committersnickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Fri, 21 Jun 2024 12:48:54 +0000 (12:48 +0000)
删除单项信息数据

* refs/changes/348/head: (2 commits squashed)

  - 删除单项信息数据

  - 优化message部分显示逻辑

Signed-off-by: Caisking <3449750381@qq.com>
Reviewed-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
Merged-by: snickersun@163.com <accounts_62b90f7fcf51ade33b6f628e@mail.teambition.com>
link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/348
code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h
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/MessageShowPresenter.cpp
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageView.cpp

index 3d84156..effb3cf 100644 (file)
@@ -25,6 +25,7 @@ namespace OHOS
         std::string labelTitle;   // 消息标题
         std::string labelDetails; // 消息详情
         std::string labelTime;    // 消息时间
+        uint32 timestamp;         // 消息时间戳
     };
 
     // 消息模型类
@@ -36,18 +37,21 @@ namespace OHOS
         const MessageListItem *GetMessageListItems() const; // 获取消息列表项
         // uint8_t GetMessageListCount() const;                // 获取消息列表数量
 
-        bool HasDataJson();                            // 判断是否存在数据Json
-        bool GetJsonLoadStatus();                      // 获取Json加载状态
-        std::vector<MessageData> LoadMessageData();    // 加载消息数据
-        uint8_t GetMessageCount() const;               // 获取消息数量
-        void SetPopupViewState(bool state);            // 设置弹出视图状态
-        bool GetPopupViewState();                      // 获取弹出视图状态
-        void PrintData(const MessageData messageData); // 打印数据
-        MessageData *GetCurrentMessageData();          // 获取当前消息数据
-        void SetCurrentMessageData(MessageData *data); // 设置当前消息数据
-        bool ClearAllData();                           // 清除所有数据
-        bool DeleteSingleItem();                       // 删除单个项
-        MessageData *GetNewestData();                  // 获取最新信息项
+        bool HasDataJson();                                                  // 判断是否存在数据Json
+        bool GetJsonLoadStatus();                                            // 获取Json加载状态
+        std::vector<MessageData> LoadMessageData();                          // 加载消息数据
+        void SaveMessageData(const std::vector<MessageData> &messageVector); // 保存json数据
+        uint8_t GetMessageCount() const;                                     // 获取消息数量
+        void SetPopupViewState(bool state);                                  // 设置弹出视图状态
+        bool GetPopupViewState();                                            // 获取弹出视图状态
+        void PrintData(const MessageData messageData);                       // 打印数据
+        MessageData *GetCurrentMessageData();                                // 获取当前消息数据
+        void SetCurrentMessageData(MessageData *data);                       // 设置当前消息数据
+        bool ClearAllData();                                                 // 清除所有数据
+        bool DeleteSingleItem(int currentIndex);                             // 删除单个项
+        MessageData *GetNewestData();                                        // 获取最新信息项
+        void SetCurrentIndex(uint8_t index);                                 // 设置当前项
+        uint8_t GetCurrentIndex();                                           // 获取当前项
 
     private:
         MessageModel();
@@ -58,6 +62,7 @@ namespace OHOS
         uint8_t numberOfItems;                                                                 // 项数
         static const uint16_t MaxMessageListCount = 11;                                        // 消息列表最大数量
         MessageListItem Messages[MaxMessageListCount] = {0, false, nullptr, nullptr, nullptr}; // 消息列表
+        uint8_t indexCurrent;                                                                  // 选择的项
 
         bool jsonDataExists{false}; // Json数据存在标志
         bool popupViewState{false}; // 弹出视图状态
index 0ec8dcb..9ecef03 100644 (file)
@@ -32,7 +32,7 @@ namespace OHOS
     MessageModel::MessageModel()
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MessageModel");
-        jsonDataExists = HasDataJson(); // 更新json状态
+        HasDataJson(); // 更新json状态
     }
 
     MessageModel::~MessageModel() {}
@@ -56,6 +56,7 @@ namespace OHOS
         if (!file.is_open())
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unable to open file");
+            jsonDataExists = false;
             return false;
         }
         // 检查文件是否为空
@@ -64,10 +65,13 @@ namespace OHOS
         {
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "File is empty");
             file.close();
+            jsonDataExists = false;
             return false;
         }
         // 关闭文件
         file.close();
+
+        jsonDataExists = true;
         return true;
     }
     /*加载json函数*/
@@ -93,12 +97,12 @@ namespace OHOS
             cJSON *item = cJSON_GetArrayItem(dataArray, i);
             MessageData messagedata;
 
-            // 使用 strdup 复制字符串,确保每个字符串都有独立的内存空间
             messagedata.labelTitle = cJSON_GetObjectItem(item, "title")->valuestring;
             messagedata.labelDetails = cJSON_GetObjectItem(item, "msg")->valuestring;
 
             // 获取时间
             uint32 timestamp = cJSON_GetObjectItem(item, "time")->valueint;
+            messagedata.timestamp = timestamp;
             char labelTime[20];
             if (uapi_get_TIME_STR(timestamp, labelTime, '.', false) != ERRCODE_SUCC)
             {
@@ -118,7 +122,40 @@ namespace OHOS
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "LoadMessageJson is ok");
         return MessageVector;
     }
+    /*保存json数据*/
+    void MessageModel::SaveMessageData(const std::vector<MessageData> &messageVector)
+    {
+        cJSON *root = cJSON_CreateObject();
+        cJSON *dataArray = cJSON_CreateArray();
+
+        for (const auto &message : messageVector)
+        {
+            cJSON *item = cJSON_CreateObject();
+            cJSON_AddStringToObject(item, "title", message.labelTitle.c_str());
+            cJSON_AddStringToObject(item, "msg", message.labelDetails.c_str());
+            cJSON_AddNumberToObject(item, "time", message.timestamp);
+            cJSON_AddNumberToObject(item, "read", message.isRead);
+
+            cJSON_AddItemToArray(dataArray, item);
+        }
+
+        cJSON_AddItemToObject(root, "infor", dataArray);
+
+        std::string jsonString = cJSON_Print(root);
+        cJSON_Delete(root);
 
+        std::ofstream file(MESSAGE_JSON_FILE);
+        if (file.is_open())
+        {
+            file << jsonString;
+            file.close();
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "SaveMessageData is ok");
+        }
+        else
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Failed to open file for writing");
+        }
+    }
     void MessageModel::PrintData(MessageData messagedata)
     {
         WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "**************************************");
@@ -153,6 +190,7 @@ namespace OHOS
     {
         return Messages;
     }
+
     bool MessageModel::GetJsonLoadStatus()
     {
         return jsonDataExists;
@@ -189,11 +227,34 @@ namespace OHOS
     // 清除所有数据
     bool MessageModel::ClearAllData()
     {
-        return true;
+        if (uapi_delete_files(MESSAGE_JSON_FILE))
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClearAllData is ok");
+            return true;
+        }
+        WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ClearAllData is fail");
+        return false;
     }
     // 删除单个项
-    bool MessageModel::DeleteSingleItem()
+    bool MessageModel::DeleteSingleItem(int currentIndex)
     {
+        std::vector<MessageData> messageVector = LoadMessageData();
+
+        if (currentIndex < 0 || currentIndex >= messageVector.size())
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Invalid index for deletion");
+            return false;
+        }
+
+        if (messageVector.size() == 1)
+        {
+            // 如果是最后一条数据则需要直接删除文件
+            return ClearAllData();
+        }
+
+        messageVector.erase(messageVector.begin() + currentIndex);
+        SaveMessageData(messageVector);
+
         return true;
     }
     // 获取最新消息项
@@ -205,4 +266,14 @@ namespace OHOS
 
         return &messageVector[numberOfItems - 1];
     }
+    // 设置当前项
+    void MessageModel::SetCurrentIndex(uint8_t index)
+    {
+        indexCurrent = index;
+    }
+    // 获取当前项
+    uint8_t MessageModel::GetCurrentIndex()
+    {
+        return indexCurrent;
+    }
 }
index 2043ac7..4199190 100644 (file)
@@ -88,16 +88,18 @@ namespace OHOS
 
     bool MessagePresenter::OnDrag(UIView &view, const DragEvent &event)
     {
-
         if (event.GetDragDirection() == DragEvent::DIRECTION_LEFT_TO_RIGHT &&
             (event.GetDeltaX() > 20) && (event.GetDeltaX() > (2 * MATH_ABS(event.GetDeltaY()))))
         {
             NativeAbility::GetInstance().Back();
         }
-        // 向下回到主界面
-        if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM)
+        if (!MessageModel::GetInstance().GetPopupViewState())
         {
-            // NativeAbility::GetInstance().EnterSlice(VIEW_MAIN);
+            // 向下回到主界面
+            if (event.GetDragDirection() == DragEvent::DIRECTION_TOP_TO_BOTTOM)
+            {
+                NativeAbility::GetInstance().EnterSlice(VIEW_MAIN);
+            }
         }
         return true;
     }
@@ -118,17 +120,14 @@ namespace OHOS
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the index is %d", index);
             // 读取json数据
             std::vector<MessageData> messageDataVector = MessageModel::GetInstance().LoadMessageData();
-            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the index is %d", index);
             if (!messageDataVector.empty())
             {
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the index is %d", index);
                 // 选择点击按键的历史数据
                 int arraynum = messageDataVector.size() - 1;
                 MessageData messageData = messageDataVector[arraynum - index]; // 显示是倒序 id同理
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the index is %d", index);
                 MessageModel::GetInstance().SetCurrentMessageData(&messageData);
+                MessageModel::GetInstance().SetCurrentIndex(arraynum - index);
                 NativeAbility::GetInstance().ChangeSlice(VIEW_MESSAGE_SHOW);
-                WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the index is %d", index);
                 return true;
             }
             WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the messageDataVector is error");
index cecca33..0596b6f 100644 (file)
@@ -1,3 +1,9 @@
+/***
+ * @Date: 2024-06-17 19:39:36
+ * @LastEditors: Caisking 3449750381@qq.com
+ * @LastEditTime: 2024-06-21 18:57:04
+ * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp
+ */
 /***
  * @Date: 2024-06-17 19:39:36
  * @LastEditors: Caisking 3449750381@qq.com
@@ -77,6 +83,10 @@ namespace OHOS
         UNUSED(event);
         if (strcmp(view.GetViewId(), DELETEBUTTON) == 0)
         {
+            // 删除当前项
+            uint8_t index = MessageModel::GetInstance().GetCurrentIndex();
+            MessageModel::GetInstance().DeleteSingleItem(index);
+
             NativeAbility::GetInstance().ChangeSlice(VIEW_MESSAGE);
         }
         return true;
index 7a8e383..210259d 100644 (file)
@@ -43,12 +43,8 @@ namespace OHOS
     }
     void MessageView::InitView()
     {
-        if (container_ == nullptr)
-        {
-            container_ = new UIScrollView();
-            container_->SetPosition(0, 0, 466, 466);
-            container_->SetStyle(STYLE_BACKGROUND_OPA, 0);
-        }
+        // 刷新一下文件状态
+        MessageModel::GetInstance().HasDataJson();
         // 展示界面
         if (MessageModel::GetInstance().GetJsonLoadStatus())
         {
@@ -208,11 +204,6 @@ namespace OHOS
 
         messageView->SetYScrollBarVisible(true); // 设置滑动滚动条
         MessageList->SetOnClickListener(static_cast<UIView::OnClickListener *>(MessagePresenter::GetInstance()));
-        UIView::OnDragListener *Messagedraglistener = static_cast<UIView::OnDragListener *>(MessagePresenter::GetInstance());
-        if (Messagedraglistener == nullptr)
-        {
-            return;
-        }
 #if 0
         /*删除按键*/
         int top = (MessageModel::GetInstance().GetListNum() * 100);
@@ -221,6 +212,11 @@ namespace OHOS
         DeleteButton->SetOnClickListener(static_cast<UIView::OnClickListener *>(MessagePresenter::GetInstance()));
         messageView->Add(DeleteButton);
 #endif
+        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");
@@ -246,6 +242,13 @@ namespace OHOS
             return;
         }
         popupView->SetVisible(status);
+        UIView::OnDragListener *Messagedraglistener = static_cast<UIView::OnDragListener *>(MessagePresenter::GetInstance());
+        if (Messagedraglistener == nullptr)
+        {
+            WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Messagedraglistener is NULL");
+            return;
+        }
+        popupView->SetOnDragListener(Messagedraglistener);
     }
 
     /// @brief 页面启动时需要执行的代码逻辑
@@ -292,28 +295,4 @@ namespace OHOS
         RootView::GetInstance()->RemoveAll();
         return;
     }
-
-    /* -------------------------------------------------------------------------- */
-    // 初始化页面
-    bool MessageView::InitPage()
-    {
-        return true;
-    }
-
-    // 设置页面视图
-    bool MessageView::SetupViewPage(MessageView *messageView)
-    {
-        g_MessageModel = &MessageModel::GetInstance();
-        g_MessageModel->InitMessageListItems();
-        if (g_MessageModel->GetJsonLoadStatus())
-        {
-            const MessageListItem *itemInfo = g_MessageModel->GetMessageListItems();
-            for (int i = 0; i < g_MessageModel->GetMessageCount(); i++)
-            {
-                messageView->AddMessageToList(itemInfo[i]);
-            }
-        }
-        return true;
-    }
-
 }
\ No newline at end of file