diff --git a/service/message_handle/include/server_msg_handler.h b/service/message_handle/include/server_msg_handler.h index 1b9e7fc14678ef0480a69082d0f2904d5d24d134..afe58d8ddb94630422a738323110427f3dd94cc9 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 0f092e665b77b767e609c7a43624511a6695e508..fb9f8f2146b196401785a0cba297089ca305c9ce 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 fa59185f0d78732882a73f671583d2ee2aea7db0..3c79a3da8cd02787b7614dffef2c22fcd67a565f 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 51dc2157f0c83c8f15f4280adba684fb52fdcf81..7be613b85217a1a17f9e16a4be1c5cf54d981491 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 f8461ebba350459740f28cb8c30cba6ae9e46773..511ab087ca2fddc59ec85ddca9cf438cbe873a2f 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 4cc5bf0b1f8e0ad9fa6b4dec5e4650100fcf287f..276ca91a94daef41f9380fca3b4a66683461658f 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 b9387eee6583b08563e274506b5495f73b51da7b..c087b872527a206550a3e090b2fb9713eb26be7f 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 ff74a3d49e98a6c2b661816d1b32850105881820..38a6db4b4c8a5a482a6be81bc660fb132279f0f8 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); } /**