From: Caisking <3449750381@qq.com> Date: Sat, 3 Aug 2024 06:56:25 +0000 (+0800) Subject: 适配消息详情Slice回退以及按键 X-Git-Tag: release_V1.2.70_20241020_135402~555^2~17^2~4 X-Git-Url: http://git.snicker.com.cn/css/static/gitweb.css?a=commitdiff_plain;h=bd4ce1839bc0d3ae03cf0c3d9c28a9cd1a6be798;p=mirrors%2FFD230.git 适配消息详情Slice回退以及按键 --- diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/include/MessagePresenter.h b/code/sdk/application/wearable/fd230app/nativeui/message/include/MessagePresenter.h index 763530899..9ccf55063 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/include/MessagePresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/message/include/MessagePresenter.h @@ -1,21 +1,4 @@ -/*** - * @Date: 2024-04-15 10:55:58 - * @LastEditors: Caisking 3449750381@qq.com - * @LastEditTime: 2024-08-03 09:55:51 - * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessagePresenter.h - */ -/*** - * @Date: 2024-04-15 10:55:58 - * @LastEditors: Caisking 3449750381@qq.com - * @LastEditTime: 2024-07-06 16:36:09 - * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessagePresenter.h - */ -/*** - * @Date: 2024-04-15 10:55:58 - * @LastEditors: Caisking 3449750381@qq.com - * @LastEditTime: 2024-04-23 15:40:41 - * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessagePresenter.h - */ + #ifndef Message_PRESENTER_H #define Message_PRESENTER_H @@ -54,7 +37,7 @@ namespace OHOS bool OnClick(UIView &view, const ClickEvent &event) override; bool OnDrag(UIView &view, const DragEvent &event) override; bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件 - MessageModel *p_MessageModel{nullptr}; + MessageModel *model{nullptr}; }; } // namespace OHOS diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageShowPresenter.h b/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageShowPresenter.h index 424e630ac..2025cb0fd 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageShowPresenter.h +++ b/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageShowPresenter.h @@ -1,11 +1,10 @@ -/*** +/*** * @Date: 2024-06-17 19:39:27 * @LastEditors: Caisking 3449750381@qq.com - * @LastEditTime: 2024-06-17 20:04:15 - * @FilePath: /XTS_FD230/FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageShowPresenter.h + * @LastEditTime: 2024-08-03 14:18:46 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/message/include/MessageShowPresenter.h */ - #ifndef MessageShow_PRESENTER_H #define MessageShow_PRESENTER_H @@ -13,6 +12,7 @@ #include "MessageShowView.h" #include "message/include/MessageModel.h" #include "components/ui_list.h" +#include "common/key_code.h" namespace OHOS { class MessageShowView; @@ -20,6 +20,7 @@ namespace OHOS class MessageShowPresenter : public Presenter, public UIView::OnClickListener, public UIView::OnDragListener, + public RootView::OnKeyActListener, public UIList { public: @@ -37,6 +38,7 @@ namespace OHOS // 因为继承了OnClickListener,所以有OnClick属性,至于参数,原函数也这样直接继承; bool OnClick(UIView &view, const ClickEvent &event) override; bool OnDrag(UIView &view, const DragEvent &event) override; + bool OnKeyAct(UIView &view, const KeyEvent &event) override; // 增加按键事件 MessageShowModel *p_MessageShowModel{nullptr}; }; } // namespace OHOS diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageControlPresenter.cpp b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageControlPresenter.cpp index 2b642cd25..2179f2c8b 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageControlPresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageControlPresenter.cpp @@ -1,11 +1,16 @@ -/*** +/*** + * @Date: 2024-06-22 11:36:16 + * @LastEditors: Caisking 3449750381@qq.com + * @LastEditTime: 2024-08-03 14:23:21 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageControlPresenter.cpp + */ +/*** * @Date: 2024-06-22 11:36:16 * @LastEditors: Caisking 3449750381@qq.com * @LastEditTime: 2024-07-25 15:51:56 * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageControlPresenter.cpp */ - #include "message/include/MessageControlPresenter.h" #include "message/include/MessageControlView.h" #include "message/include/MessageModel.h" @@ -28,32 +33,43 @@ namespace OHOS UNUSED(event); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "MessageControlView::OnClick %s", view.GetViewId()); - if (!MessageModel::GetInstance().HasDataVector()) + MessageModel &messageModel = MessageModel::GetInstance(); + + if (!messageModel.HasDataVector()) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Json data not loaded."); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Vector data not loaded."); return false; } + if (strcmp(view.GetViewId(), DELETEALLDATA) == 0) { // 执行全部删除操作 - MessageModel::GetInstance().ClearAllMessages(); - NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); + messageModel.ClearAllMessages(); + NativeAbility::GetInstance().Back(); return true; } + // 获取 MessageItemView 并检查索引 - MessageItemView *p_MessageItemView = static_cast(&view); - if (!p_MessageItemView) + MessageItemView *pMessageItemView = dynamic_cast(&view); + if (!pMessageItemView) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Invalid view type."); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Invalid view type for view ID %s.", view.GetViewId()); return false; } - int index = p_MessageItemView->GetMessageListIndex(); - WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "index is %d", index); + int index = pMessageItemView->GetMessageListIndex(); + int messageCount = messageModel.GetMessageCount(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Clicked message index: %d, Total messages: %d", index, messageCount); + + if (index >= 0 && index < messageCount) + { + messageModel.SetCurrentIndex(index); + messageModel.SetMessageAsRead(); + NativeAbility::GetInstance().EnterSlice(VIEW_MESSAGE_SHOW); // 切换到详情界面 + return true; + } - MessageModel::GetInstance().SetCurrentIndex(index); - MessageModel::GetInstance().SetMessageAsRead(); - NativeAbility::GetInstance().EnterSlice(VIEW_MESSAGE_SHOW); // 切换到详情界面 - return true; + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Index %d is out of bounds.", index); + return false; } } // namespace OHOS \ No newline at end of file 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 9df71b029..7ad9329fd 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessagePresenter.cpp @@ -23,7 +23,7 @@ namespace OHOS MessagePresenter::MessagePresenter() { - p_MessageModel = &MessageModel::GetInstance(); + model = &MessageModel::GetInstance(); g_pMessagePresenter = this; } @@ -39,8 +39,7 @@ namespace OHOS void MessagePresenter::OnStart() { - // WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "InitMessageListItem"); - p_MessageModel->InitMessageListItems(); + model->InitMessageListItems(); Presenter::OnStart(); } @@ -55,15 +54,13 @@ namespace OHOS return; } - // p_MessageModel->InitMessageListItems(); - if (p_MessageModel->GetPopupViewState()) + if (model->GetPopupViewState()) { - const MessageListItem *itemInfo = p_MessageModel->GetMessageListItems(); - for (int i = 0; i < p_MessageModel->GetMessageCount(); i++) + const MessageListItem *itemInfo = model->GetMessageListItems(); + for (int i = 0; i < model->GetMessageCount(); i++) { view_->AddMessageToList(itemInfo[i]); } - // MessageView::GetInstance()->UpdataButton(p_MessageModel->GetMessageCount()); } Presenter::OnResume(); @@ -90,34 +87,43 @@ namespace OHOS UNUSED(event); if (MessageModel::GetInstance().GetPopupViewState()) { + if (!(model->HasDataVector())) + { + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Vector data not loaded."); + return false; + } + if (strcmp(view.GetViewId(), DELETEALLDATA) == 0) { // 执行全部删除操作 - MessageModel::GetInstance().ClearAllMessages(); + model->ClearAllMessages(); NativeAbility::GetInstance().Back(); return true; } - /* -------------------------------------------------------------------------- */ + // 获取 MessageItemView 并检查索引 - MessageItemView *p_MessageItemView = static_cast(&view); - if (!p_MessageItemView) + MessageItemView *pMessageItemView = dynamic_cast(&view); + if (!pMessageItemView) { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Error: Invalid view type."); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Error: Invalid view type for view ID %s.", view.GetViewId()); return false; } - int index = p_MessageItemView->GetMessageListIndex(); - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "index is %d", index); - - MessageModel::GetInstance().SetCurrentIndex(index); - MessageModel::GetInstance().SetMessageAsRead(); - // 切换到详情界面 - NativeAbility::GetInstance().EnterSlice(VIEW_MESSAGE_SHOW); + int index = pMessageItemView->GetMessageListIndex(); + int messageCount = model->GetMessageCount(); + WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "Clicked message index: %d, Total messages: %d", index, messageCount); - return true; // 返回 true 表示点击事件处理成功 - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "the messageDataVector is error"); + if (index >= 0 && index < messageCount) + { + model->SetCurrentIndex(index); + model->SetMessageAsRead(); + NativeAbility::GetInstance().EnterSlice(VIEW_MESSAGE_SHOW); // 切换到详情界面 + return true; + } + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "Error: Index %d is out of bounds.", index); } - return true; + + return false; } bool MessagePresenter::OnKeyAct(UIView &view, const KeyEvent &event) @@ -127,7 +133,6 @@ namespace OHOS // 如果是power键,且是亮屏状态,按键释放就返回上一级 if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0) { - // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); NativeAbility::GetInstance().Back(TransitionType::TRANSITION_ZOOM); } return true; 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 305e93631..a513d40b2 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-08-03 14:19:43 + * @FilePath: /FD230/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowPresenter.cpp + */ #include "AppViewIDs.h" #include "components/ui_label_ext.h" @@ -8,6 +14,10 @@ #include "gfx_utils/graphic_log.h" #include "wearable_log.h" +#include "common/key_code.h" +#include "KeyInputListener.h" +#include "custom_utils.h" + namespace OHOS { @@ -74,4 +84,16 @@ namespace OHOS return true; } + bool MessageShowPresenter::OnKeyAct(UIView &view, const KeyEvent &event) + { + unsigned short keyID = event.GetKeyId(); + unsigned short keyState = event.GetState(); + // 如果是power键,且是亮屏状态,按键释放就返回上一级 + if (keyID == static_cast(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0) + { + // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST); + NativeAbility::GetInstance().Back(TransitionType::TRANSITION_ZOOM); + } + return true; + } } \ No newline at end of file diff --git a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowView.cpp b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowView.cpp index bee94e862..c2bcc40f2 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageShowView.cpp @@ -63,40 +63,20 @@ namespace OHOS } void MessageShowView::DeInitView() { - container_->RemoveAll(); - if (title != nullptr) - { - delete title; - title = nullptr; - } - if (time != nullptr) - { - delete time; - time = nullptr; - } - if (message != nullptr) - { - delete message; - message = nullptr; - } - if (messageButton != nullptr) - { - delete messageButton; - messageButton = nullptr; - } - if (deleteButton != nullptr) - { - delete deleteButton; - deleteButton = nullptr; - } - if (container_ != nullptr) - { - container_->RemoveAll(); - delete container_; - container_ = nullptr; - } - // delete draglistener; - // draglistener = nullptr; + delete title; + title = nullptr; + + delete time; + time = nullptr; + + delete message; + message = nullptr; + + delete messageButton; + messageButton = nullptr; + + delete deleteButton; + deleteButton = nullptr; } void MessageShowView::InitializeLabel(UILabel *label, int posX, int posY, int width, int height, const char *viewId, int fontSize) @@ -177,7 +157,6 @@ namespace OHOS container_->Add(title); container_->Add(time); container_->Add(messageButton); - // container_->Add(message); container_->Add(deleteButton); /* -------------------------------------------------------------------------- */ // UpdateMessage(); @@ -208,30 +187,23 @@ namespace OHOS void MessageShowView::OnStart() { - // WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "OnStart"); + View::OnStart(); + container_ = new UIScrollView(); - if (container_ == nullptr) - { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "container_ new fail"); - return; - } container_->SetPosition(0, 0, HORIZONTAL_RESOLUTION, VERTICAL_RESOLUTION); container_->SetScrollBlankSize(35); container_->SetReboundSize(50); - container_->SetDirection(1); - // 创建 draglistener 实例并设置为拖动监听器 - UIView::OnDragListener *draglistener = static_cast(MessageShowPresenter::GetInstance()); - if (draglistener == nullptr) - { - return; - } - container_->SetOnDragListener(draglistener); + + container_->SetOnDragListener(presenter_); container_->SetTouchable(true); container_->SetDraggable(true); - container_->SetStyle(STYLE_BACKGROUND_COLOR, Color::Black().full); PreLoad(); + RootView::GetInstance()->Add(container_); + SetContainerView(container_); + + RootView::GetInstance()->SetOnKeyActListener(presenter_); } void MessageShowView::OnSetUpView() { @@ -246,6 +218,12 @@ namespace OHOS void MessageShowView::OnStop() { View::OnStop(); + if (container_ != nullptr) + { + container_->RemoveAll(); + delete container_; + container_ = nullptr; + } RootView::GetInstance()->RemoveAll(); return; } 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 65da13ad2..7d9ed0860 100644 --- a/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageView.cpp +++ b/code/sdk/application/wearable/fd230app/nativeui/message/src/MessageView.cpp @@ -180,7 +180,7 @@ namespace OHOS MessageList->SetOnClickListener(presenter_); messageView->SetOnDragListener(presenter_); - +#if 0 /*删除按键*/ int top = MessageList->GetHeight(); WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "old top %d", top); @@ -189,7 +189,7 @@ namespace OHOS InitButtonExt(DeleteButton, 43, top, 380, 100, DELETEALLDATA, STR_CLEANALL, 30); DeleteButton->SetOnClickListener(presenter_); messageView->Add(DeleteButton); - +#endif messageView->SetVisible(false); // 隐藏界面 WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "ShowmessageView end"); } @@ -231,7 +231,7 @@ namespace OHOS /// @brief 页面启动时需要执行的代码逻辑 void MessageView::OnStart() { - WEARABLE_LOGE(WEARABLE_LOG_MODULE_APP, "HeartResultView::OnStart"); + WEARABLE_LOGD(WEARABLE_LOG_MODULE_APP, "HeartResultView::OnStart"); View::OnStart(); // SetContainerView(new UIScrollView());