std::string labelTitle; // 消息标题
std::string labelDetails; // 消息详情
std::string labelTime; // 消息时间
+ uint32 timestamp; // 消息时间戳
};
// 消息模型类
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();
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}; // 弹出视图状态
MessageModel::MessageModel()
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MessageModel");
- jsonDataExists = HasDataJson(); // 更新json状态
+ HasDataJson(); // 更新json状态
}
MessageModel::~MessageModel() {}
if (!file.is_open())
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Unable to open file");
+ jsonDataExists = false;
return false;
}
// 检查文件是否为空
{
WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "File is empty");
file.close();
+ jsonDataExists = false;
return false;
}
// 关闭文件
file.close();
+
+ jsonDataExists = true;
return true;
}
/*加载json函数*/
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)
{
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, "**************************************");
{
return Messages;
}
+
bool MessageModel::GetJsonLoadStatus()
{
return jsonDataExists;
// 清除所有数据
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;
}
// 获取最新消息项
return &messageVector[numberOfItems - 1];
}
+ // 设置当前项
+ void MessageModel::SetCurrentIndex(uint8_t index)
+ {
+ indexCurrent = index;
+ }
+ // 获取当前项
+ uint8_t MessageModel::GetCurrentIndex()
+ {
+ return indexCurrent;
+ }
}
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;
}
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");
+/***
+ * @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
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;
}
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())
{
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);
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");
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 页面启动时需要执行的代码逻辑
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