From 5b9008fe610f2047119d58a777fc76548b2635ae Mon Sep 17 00:00:00 2001 From: Dragon51 Date: Wed, 7 May 2025 10:37:51 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=8B=E5=86=99=E7=AC=94=E9=9D=A0=E8=BF=91?= =?UTF-8?q?=E8=BF=9C=E7=A6=BB=E6=B5=81=E7=A8=8B=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Dragon51 --- .../include/server_msg_handler.h | 2 +- .../message_handle/src/server_msg_handler.cpp | 27 +++++++++++++++++++ service/module_loader/src/mmi_service.cpp | 8 ++---- .../include/key_subscriber_handler.h | 3 +++ .../include/tablet_subscriber_handler.h | 9 +++---- .../subscriber/src/key_subscriber_handler.cpp | 12 ++++++++- .../src/tablet_subscriber_handler.cpp | 4 +-- .../test/tablet_subscriber_handler_test.cpp | 2 +- 8 files changed, 50 insertions(+), 17 deletions(-) diff --git a/service/message_handle/include/server_msg_handler.h b/service/message_handle/include/server_msg_handler.h index 1b9e7fc146..afe58d8ddb 100644 --- a/service/message_handle/include/server_msg_handler.h +++ b/service/message_handle/include/server_msg_handler.h @@ -85,7 +85,7 @@ public: int32_t OnQuerySwitchStatus(int32_t switchType, int32_t& state); #endif // OHOS_BUILD_ENABLE_SWITCH int32_t OnSubscribetabletProximity(IUdsServer *server, int32_t pid, int32_t subscribeId); - int32_t OnUnsubscribetabletProximity(IUdsServer *server, int32_t pid, int32_t subscribeId); + int32_t OnUnSubscribetabletProximity(IUdsServer *server, int32_t pid, int32_t subscribeId); int32_t OnSubscribeLongPressEvent(IUdsServer *server, int32_t pid, int32_t subscribeId, const LongPressRequest &longPressRequest); int32_t OnUnsubscribeLongPressEvent(IUdsServer *server, int32_t pid, int32_t subscribeId); diff --git a/service/message_handle/src/server_msg_handler.cpp b/service/message_handle/src/server_msg_handler.cpp index 0f092e665b..fb9f8f2146 100644 --- a/service/message_handle/src/server_msg_handler.cpp +++ b/service/message_handle/src/server_msg_handler.cpp @@ -1131,6 +1131,33 @@ int32_t ServerMsgHandler::OnQuerySwitchStatus(int32_t switchType, int32_t& state } #endif // OHOS_BUILD_ENABLE_SWITCH +int32_t ServerMsgHandler::OnSubscribetabletProximity(IUdsServer *server, int32_t pid, + int32_t subscribeId) +{ + CALL_DEBUG_ENTER; + CHKPR(server, ERROR_NULL_POINTER); + auto sess = server->GetSessionByPid(pid); + CHKPR(sess, ERROR_NULL_POINTER); + auto subscriberHandler = InputHandler->GetSubscriberHandler(); + CHKPR(subscriberHandler, ERROR_NULL_POINTER); + auto tabletSubscriberHandler = subscriberHandler->GetTabletSubscriberHandler(); + CHKPR(tabletSubscriberHandler, ERROR_NULL_POINTER); + return tabletSubscriberHandler->SubscribeTabletProximity(sess, subscribeId); +} + +int32_t ServerMsgHandler::OnUnSubscribetabletProximity(IUdsServer *server, int32_t pid, int32_t subscribeId) +{ + CALL_DEBUG_ENTER; + CHKPR(server, ERROR_NULL_POINTER); + auto sess = server->GetSessionByPid(pid); + CHKPR(sess, ERROR_NULL_POINTER); + auto subscriberHandler = InputHandler->GetSubscriberHandler(); + CHKPR(subscriberHandler, ERROR_NULL_POINTER); + auto tabletSubscriberHandler = subscriberHandler->GetTabletSubscriberHandler(); + CHKPR(tabletSubscriberHandler, ERROR_NULL_POINTER); + return tabletSubscriberHandler->UnSubscribetabletProximity(sess, subscribeId); +} + int32_t ServerMsgHandler::OnSubscribeLongPressEvent(IUdsServer *server, int32_t pid, int32_t subscribeId, const LongPressRequest &longPressRequest) { diff --git a/service/module_loader/src/mmi_service.cpp b/service/module_loader/src/mmi_service.cpp index fa59185f0d..3c79a3da8c 100644 --- a/service/module_loader/src/mmi_service.cpp +++ b/service/module_loader/src/mmi_service.cpp @@ -2116,9 +2116,7 @@ int32_t MMIService::SubscribeTabletProximity(int32_t subscribeId) int32_t pid = GetCallingPid(); int32_t ret = delegateTasks_.PostSyncTask( [this, pid, subscribeId] { - auto sess = this->GetSessionByPid(pid); - CHKPR(sess, RET_ERR); - return TABLET_SCRIBER_HANDLER->SubscribeTabletProximity(sess, subscribeId); + return sMsgHandler_.OnSubscribetabletProximity(this, pid, subscribeId); } ); if (ret != RET_OK) { @@ -2134,9 +2132,7 @@ int32_t MMIService::UnsubscribetabletProximity(int32_t subscribeId) int32_t pid = GetCallingPid(); int32_t ret = delegateTasks_.PostSyncTask( [this, pid, subscribeId] { - auto sess = this->GetSessionByPid(pid); - CHKPR(sess, RET_ERR); - return TABLET_SCRIBER_HANDLER->UnsubscribetabletProximity(sess, subscribeId); + return sMsgHandler_.OnUnSubscribetabletProximity(this, pid, subscribeId); } ); if (ret != RET_OK) { diff --git a/service/subscriber/include/key_subscriber_handler.h b/service/subscriber/include/key_subscriber_handler.h index 51dc2157f0..7be613b852 100644 --- a/service/subscriber/include/key_subscriber_handler.h +++ b/service/subscriber/include/key_subscriber_handler.h @@ -19,6 +19,7 @@ #include "i_input_event_handler.h" #include "key_gesture_manager.h" #include "nap_process.h" +#include "tablet_subscriber_handler.h" namespace OHOS { namespace MMI { @@ -46,6 +47,7 @@ public: int32_t EnableCombineKey(bool enable); void ResetSkipPowerKeyUpFlag(); void Dump(int32_t fd, const std::vector &args); + std::shared_ptr GetTabletSubscriberHandler(); private: struct Subscriber { @@ -142,6 +144,7 @@ private: std::atomic_bool needSkipPowerKeyUp_ { false }; bool callBahaviorState_ { false }; std::set pendingKeys_; + std::shared_ptr tabletSubscriberHandler_ { nullptr }; }; } // namespace MMI } // namespace OHOS diff --git a/service/subscriber/include/tablet_subscriber_handler.h b/service/subscriber/include/tablet_subscriber_handler.h index f8461ebba3..511ab087ca 100644 --- a/service/subscriber/include/tablet_subscriber_handler.h +++ b/service/subscriber/include/tablet_subscriber_handler.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 Huawei Device Co., Ltd. + * Copyright (c) 2025 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at @@ -33,12 +33,12 @@ namespace OHOS { namespace MMI { class TabletSubscriberHandler final { - DECLARE_DELAYED_SINGLETON(TabletSubscriberHandler); public: - DISALLOW_COPY_AND_MOVE(TabletSubscriberHandler); + TabletSubscriberHandler() = default; + ~TabletSubscriberHandler() = default; void HandleTabletEvent(const std::shared_ptr pointerEvent); int32_t SubscribeTabletProximity(SessionPtr sess, int32_t subscribeId); - int32_t UnsubscribetabletProximity(SessionPtr sess, int32_t subscribeId); + int32_t UnSubscribetabletProximity(SessionPtr sess, int32_t subscribeId); void Dump(int32_t fd, const std::vector &args); private: struct Subscriber { @@ -59,7 +59,6 @@ private: std::list> subscribers_ {}; std::atomic_bool callbackInitialized_ { false }; }; -#define TABLET_SCRIBER_HANDLER ::OHOS::DelayedSingleton::GetInstance() } // namespace MMI } // namespace OHOS #endif // TABLET_SUBSCRIBER_HANDLER_H diff --git a/service/subscriber/src/key_subscriber_handler.cpp b/service/subscriber/src/key_subscriber_handler.cpp index 4cc5bf0b1f..276ca91a94 100644 --- a/service/subscriber/src/key_subscriber_handler.cpp +++ b/service/subscriber/src/key_subscriber_handler.cpp @@ -108,7 +108,9 @@ void KeySubscriberHandler::HandlePointerEvent(const std::shared_ptr pointerEvent) { CHKPV(pointerEvent); - TABLET_SCRIBER_HANDLER->HandleTabletEvent(pointerEvent); + if (tabletSubscriberHandler_ != nullptr) { + tabletSubscriberHandler_->HandleTabletEvent(pointerEvent); + } CHKPV(nextHandler_); nextHandler_->HandleTouchEvent(pointerEvent); } @@ -1584,5 +1586,13 @@ void KeySubscriberHandler::InitDataShareListener() helper->RegisterObserver(uri, statusObserver); } } + +std::shared_ptr KeySubscriberHandler::GetTabletSubscriberHandler() +{ + if (tabletSubscriberHandler_ == nullptr) { + tabletSubscriberHandler_ = std::make_shared(); + } + return tabletSubscriberHandler_; +} } // namespace MMI } // namespace OHOS diff --git a/service/subscriber/src/tablet_subscriber_handler.cpp b/service/subscriber/src/tablet_subscriber_handler.cpp index b9387eee65..c087b87252 100644 --- a/service/subscriber/src/tablet_subscriber_handler.cpp +++ b/service/subscriber/src/tablet_subscriber_handler.cpp @@ -32,8 +32,6 @@ namespace OHOS { namespace MMI { -TabletSubscriberHandler::TabletSubscriberHandler() {} -TabletSubscriberHandler::~TabletSubscriberHandler() {} void TabletSubscriberHandler::HandleTabletEvent(const std::shared_ptr pointerEvent) { @@ -58,7 +56,7 @@ int32_t TabletSubscriberHandler::SubscribeTabletProximity(SessionPtr sess, int32 return RET_OK; } -int32_t TabletSubscriberHandler::UnsubscribetabletProximity(SessionPtr sess, int32_t subscribeId) +int32_t TabletSubscriberHandler::UnSubscribetabletProximity(SessionPtr sess, int32_t subscribeId) { CALL_INFO_TRACE; MMI_HILOGD("subscribeId:%{public}d", subscribeId); diff --git a/service/subscriber/test/tablet_subscriber_handler_test.cpp b/service/subscriber/test/tablet_subscriber_handler_test.cpp index ff74a3d49e..38a6db4b4c 100644 --- a/service/subscriber/test/tablet_subscriber_handler_test.cpp +++ b/service/subscriber/test/tablet_subscriber_handler_test.cpp @@ -88,7 +88,7 @@ HWTEST_F(TabletSubscriberHandlerTest, TabletSubscriberHandlerTest_UnSubscribeTab auto session = std::make_shared("test_program", 1, 123, 1000, 2000); int32_t subscribeId = 1001; handler.SubscribeTabletProximity(session, subscribeId); - EXPECT_EQ(handler.UnsubscribetabletProximity(session, subscribeId), RET_OK); + EXPECT_EQ(handler.UnSubscribetabletProximity(session, subscribeId), RET_OK); } /** -- Gitee