From 00eacf9830304e7cb2b4b2227858a6eec70cc8a0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E8=A2=81=E6=B8=85=E6=A2=A6?= <3449750381@qq.com> Date: Fri, 21 Jun 2024 12:48:54 +0000 Subject: [PATCH] Merge #348 into sdk602patch0521 from refs/changes/348/head MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 删除单项信息数据 * refs/changes/348/head: (2 commits squashed) - 删除单项信息数据 - 优化message部分显示逻辑 Signed-off-by: Caisking <3449750381@qq.com> Reviewed-by: snickersun@163.com Merged-by: snickersun@163.com CR-link: https://codeup.aliyun.com/64191456b9581d62e8f81ac0/FD230/change/348 --- .../nativeui/message/include/MessageModel.h | 29 ++++--- .../nativeui/message/src/MessageModel.cpp | 79 ++++++++++++++++++- .../nativeui/message/src/MessagePresenter.cpp | 15 ++-- .../message/src/MessageShowPresenter.cpp | 10 +++ .../nativeui/message/src/MessageView.cpp | 49 ++++-------- 5 files changed, 123 insertions(+), 59 deletions(-) diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h b/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h index 3d8415698..effb3cfde 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h +++ b/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageModel.h @@ -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 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 LoadMessageData(); // 加载消息数据 + void SaveMessageData(const std::vector &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}; // 弹出视图状态 diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp index 0ec8dcb67..9ecef0304 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageModel.cpp @@ -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 &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 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; + } } diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp index 2043ac78e..4199190e5 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp @@ -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 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"); diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp index cecca3391..0596b6fcb 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp @@ -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; diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageView.cpp b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageView.cpp index 7a8e38376..210259d3a 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageView.cpp @@ -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(MessagePresenter::GetInstance())); - UIView::OnDragListener *Messagedraglistener = static_cast(MessagePresenter::GetInstance()); - if (Messagedraglistener == nullptr) - { - return; - } #if 0 /*删除按键*/ int top = (MessageModel::GetInstance().GetListNum() * 100); @@ -221,6 +212,11 @@ namespace OHOS DeleteButton->SetOnClickListener(static_cast(MessagePresenter::GetInstance())); messageView->Add(DeleteButton); #endif + UIView::OnDragListener *Messagedraglistener = static_cast(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(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 -- 2.17.1