适配消息详情Slice回退以及按键
authorCaisking <3449750381@qq.com>
Sat, 3 Aug 2024 06:56:25 +0000 (14:56 +0800)
committerCaisking <3449750381@qq.com>
Sat, 3 Aug 2024 06:56:25 +0000 (14:56 +0800)
code/sdk/application/wearable/fd230app/nativeui/message/include/MessagePresenter.h
code/sdk/application/wearable/fd230app/nativeui/message/include/MessageShowPresenter.h
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageControlPresenter.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/MessageShowView.cpp
code/sdk/application/wearable/fd230app/nativeui/message/src/MessageView.cpp

index 7635308..9ccf550 100644 (file)
@@ -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
 
index 424e630..2025cb0 100644 (file)
@@ -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<MessageShowView>,
                                  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
index 2b642cd..2179f2c 100644 (file)
@@ -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<MessageItemView *>(&view);
-        if (!p_MessageItemView)
+        MessageItemView *pMessageItemView = dynamic_cast<MessageItemView *>(&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
index 9df71b0..7ad9329 100644 (file)
@@ -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<MessageView>::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<MessageView>::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<MessageItemView *>(&view);
-            if (!p_MessageItemView)
+            MessageItemView *pMessageItemView = dynamic_cast<MessageItemView *>(&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<uint16_t>(ZliteKeyCode::ZLITE_KEY_POWER) && keyState == 0 && uapi_get_screen_state() == 0)
         {
-            // NativeAbility::GetInstance().ChangeSlice(VIEW_APPLIST);
             NativeAbility::GetInstance().Back(TransitionType::TRANSITION_ZOOM);
         }
         return true;
index 305e936..a513d40 100644 (file)
@@ -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<uint16_t>(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
index bee94e8..c2bcc40 100644 (file)
@@ -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<MessageShowPresenter>::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<UIView::OnDragListener *>(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<MessageShowPresenter>::OnStop();
+        if (container_ != nullptr)
+        {
+            container_->RemoveAll();
+            delete container_;
+            container_ = nullptr;
+        }
         RootView::GetInstance()->RemoveAll();
         return;
     }
index 65da13a..7d9ed08 100644 (file)
@@ -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<MessagePresenter>::OnStart();
 
         // SetContainerView(new UIScrollView());