1bc2ed2b3Sopenharmony_ci/* 2bc2ed2b3Sopenharmony_ci * Copyright (C) 2022 Huawei Device Co., Ltd. 3bc2ed2b3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4bc2ed2b3Sopenharmony_ci * you may not use this file except in compliance with the License. 5bc2ed2b3Sopenharmony_ci * You may obtain a copy of the License at 6bc2ed2b3Sopenharmony_ci * 7bc2ed2b3Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8bc2ed2b3Sopenharmony_ci * 9bc2ed2b3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10bc2ed2b3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11bc2ed2b3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12bc2ed2b3Sopenharmony_ci * See the License for the specific language governing permissions and 13bc2ed2b3Sopenharmony_ci * limitations under the License. 14bc2ed2b3Sopenharmony_ci */ 15bc2ed2b3Sopenharmony_ci#include "nfc_event_handler.h" 16bc2ed2b3Sopenharmony_ci 17bc2ed2b3Sopenharmony_ci#include "ce_service.h" 18bc2ed2b3Sopenharmony_ci#include "common_event_support.h" 19bc2ed2b3Sopenharmony_ci#include "loghelper.h" 20bc2ed2b3Sopenharmony_ci#include "nfc_service.h" 21bc2ed2b3Sopenharmony_ci#include "nfc_polling_manager.h" 22bc2ed2b3Sopenharmony_ci#include "nfc_routing_manager.h" 23bc2ed2b3Sopenharmony_ci#include "want.h" 24bc2ed2b3Sopenharmony_ci#include "screenlock_manager.h" 25bc2ed2b3Sopenharmony_ci#include "power_mgr_client.h" 26bc2ed2b3Sopenharmony_ci#include "nfc_watch_dog.h" 27bc2ed2b3Sopenharmony_ci 28bc2ed2b3Sopenharmony_ci#ifdef NDEF_WIFI_ENABLED 29bc2ed2b3Sopenharmony_ci#include "wifi_connection_manager.h" 30bc2ed2b3Sopenharmony_ci#endif 31bc2ed2b3Sopenharmony_ci#ifdef NDEF_BT_ENABLED 32bc2ed2b3Sopenharmony_ci#include "bt_connection_manager.h" 33bc2ed2b3Sopenharmony_ci#endif 34bc2ed2b3Sopenharmony_ci 35bc2ed2b3Sopenharmony_cinamespace OHOS { 36bc2ed2b3Sopenharmony_cinamespace NFC { 37bc2ed2b3Sopenharmony_ciconst std::string EVENT_DATA_SHARE_READY = "usual.event.DATA_SHARE_READY"; 38bc2ed2b3Sopenharmony_ci 39bc2ed2b3Sopenharmony_ciclass NfcEventHandler::ScreenChangedReceiver : public EventFwk::CommonEventSubscriber { 40bc2ed2b3Sopenharmony_cipublic: 41bc2ed2b3Sopenharmony_ci explicit ScreenChangedReceiver(std::weak_ptr<NfcService> nfcService, 42bc2ed2b3Sopenharmony_ci const EventFwk::CommonEventSubscribeInfo& subscribeInfo); 43bc2ed2b3Sopenharmony_ci ~ScreenChangedReceiver() 44bc2ed2b3Sopenharmony_ci { 45bc2ed2b3Sopenharmony_ci } 46bc2ed2b3Sopenharmony_ci void OnReceiveEvent(const EventFwk::CommonEventData& data) override; 47bc2ed2b3Sopenharmony_ci 48bc2ed2b3Sopenharmony_ciprivate: 49bc2ed2b3Sopenharmony_ci std::weak_ptr<NfcService> nfcService_ {}; 50bc2ed2b3Sopenharmony_ci std::weak_ptr<NfcEventHandler> eventHandler_ {}; 51bc2ed2b3Sopenharmony_ci}; 52bc2ed2b3Sopenharmony_ci 53bc2ed2b3Sopenharmony_ciNfcEventHandler::ScreenChangedReceiver::ScreenChangedReceiver(std::weak_ptr<NfcService> nfcService, 54bc2ed2b3Sopenharmony_ci const EventFwk::CommonEventSubscribeInfo& subscribeInfo) 55bc2ed2b3Sopenharmony_ci : EventFwk::CommonEventSubscriber(subscribeInfo), 56bc2ed2b3Sopenharmony_ci nfcService_(nfcService), 57bc2ed2b3Sopenharmony_ci eventHandler_(nfcService.lock()->eventHandler_) 58bc2ed2b3Sopenharmony_ci{ 59bc2ed2b3Sopenharmony_ci} 60bc2ed2b3Sopenharmony_ci 61bc2ed2b3Sopenharmony_cibool NfcEventHandler::IsScreenOn() 62bc2ed2b3Sopenharmony_ci{ 63bc2ed2b3Sopenharmony_ci return PowerMgr::PowerMgrClient::GetInstance().IsScreenOn(); 64bc2ed2b3Sopenharmony_ci} 65bc2ed2b3Sopenharmony_ci 66bc2ed2b3Sopenharmony_cibool NfcEventHandler::IsScreenLocked() 67bc2ed2b3Sopenharmony_ci{ 68bc2ed2b3Sopenharmony_ci return OHOS::ScreenLock::ScreenLockManager::GetInstance()->IsScreenLocked(); 69bc2ed2b3Sopenharmony_ci} 70bc2ed2b3Sopenharmony_ci 71bc2ed2b3Sopenharmony_ciScreenState NfcEventHandler::CheckScreenState() 72bc2ed2b3Sopenharmony_ci{ 73bc2ed2b3Sopenharmony_ci bool isScreenOn = IsScreenOn(); 74bc2ed2b3Sopenharmony_ci bool isScreenLocked = IsScreenLocked(); 75bc2ed2b3Sopenharmony_ci if (isScreenOn && isScreenLocked) { 76bc2ed2b3Sopenharmony_ci return ScreenState::SCREEN_STATE_ON_LOCKED; 77bc2ed2b3Sopenharmony_ci } else if (!isScreenOn && !isScreenLocked) { 78bc2ed2b3Sopenharmony_ci return ScreenState::SCREEN_STATE_OFF_UNLOCKED; 79bc2ed2b3Sopenharmony_ci } else if (!isScreenOn && isScreenLocked) { 80bc2ed2b3Sopenharmony_ci return ScreenState::SCREEN_STATE_OFF_LOCKED; 81bc2ed2b3Sopenharmony_ci } else if (isScreenOn && !isScreenLocked) { 82bc2ed2b3Sopenharmony_ci return ScreenState::SCREEN_STATE_ON_UNLOCKED; 83bc2ed2b3Sopenharmony_ci } 84bc2ed2b3Sopenharmony_ci return ScreenState::SCREEN_STATE_UNKNOWN; 85bc2ed2b3Sopenharmony_ci} 86bc2ed2b3Sopenharmony_ci 87bc2ed2b3Sopenharmony_civoid NfcEventHandler::ScreenChangedReceiver::OnReceiveEvent(const EventFwk::CommonEventData& data) 88bc2ed2b3Sopenharmony_ci{ 89bc2ed2b3Sopenharmony_ci std::string action = data.GetWant().GetAction(); 90bc2ed2b3Sopenharmony_ci if (action.empty()) { 91bc2ed2b3Sopenharmony_ci ErrorLog("action is empty"); 92bc2ed2b3Sopenharmony_ci return; 93bc2ed2b3Sopenharmony_ci } 94bc2ed2b3Sopenharmony_ci InfoLog("OnScreenChanged: action: %{public}s", action.c_str()); 95bc2ed2b3Sopenharmony_ci ScreenState screenState = ScreenState::SCREEN_STATE_UNKNOWN; 96bc2ed2b3Sopenharmony_ci if (action.compare(EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_ON) == 0) { 97bc2ed2b3Sopenharmony_ci screenState = eventHandler_.lock()->IsScreenLocked() ? 98bc2ed2b3Sopenharmony_ci ScreenState::SCREEN_STATE_ON_LOCKED : ScreenState::SCREEN_STATE_ON_UNLOCKED; 99bc2ed2b3Sopenharmony_ci } else if (action.compare(EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_OFF) == 0) { 100bc2ed2b3Sopenharmony_ci screenState = eventHandler_.lock()->IsScreenLocked() ? 101bc2ed2b3Sopenharmony_ci ScreenState::SCREEN_STATE_OFF_LOCKED : ScreenState::SCREEN_STATE_OFF_UNLOCKED; 102bc2ed2b3Sopenharmony_ci } else if (action.compare(EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_UNLOCKED) == 0) { 103bc2ed2b3Sopenharmony_ci screenState = eventHandler_.lock()->IsScreenOn() ? 104bc2ed2b3Sopenharmony_ci ScreenState::SCREEN_STATE_ON_UNLOCKED : ScreenState::SCREEN_STATE_OFF_UNLOCKED; 105bc2ed2b3Sopenharmony_ci } else { 106bc2ed2b3Sopenharmony_ci ErrorLog("Screen changed receiver event:unknown"); 107bc2ed2b3Sopenharmony_ci return; 108bc2ed2b3Sopenharmony_ci } 109bc2ed2b3Sopenharmony_ci eventHandler_.lock()->SendEvent(static_cast<uint32_t>(NfcCommonEvent::MSG_SCREEN_CHANGED), 110bc2ed2b3Sopenharmony_ci static_cast<int64_t>(screenState), static_cast<int64_t>(0)); 111bc2ed2b3Sopenharmony_ci} 112bc2ed2b3Sopenharmony_ci 113bc2ed2b3Sopenharmony_ciclass NfcEventHandler::PackageChangedReceiver : public EventFwk::CommonEventSubscriber { 114bc2ed2b3Sopenharmony_cipublic: 115bc2ed2b3Sopenharmony_ci explicit PackageChangedReceiver(std::weak_ptr<NfcService> nfcService, 116bc2ed2b3Sopenharmony_ci const EventFwk::CommonEventSubscribeInfo& subscribeInfo); 117bc2ed2b3Sopenharmony_ci ~PackageChangedReceiver() 118bc2ed2b3Sopenharmony_ci { 119bc2ed2b3Sopenharmony_ci } 120bc2ed2b3Sopenharmony_ci void OnReceiveEvent(const EventFwk::CommonEventData& data) override; 121bc2ed2b3Sopenharmony_ci 122bc2ed2b3Sopenharmony_ciprivate: 123bc2ed2b3Sopenharmony_ci std::weak_ptr<NfcService> nfcService_ {}; 124bc2ed2b3Sopenharmony_ci std::weak_ptr<AppExecFwk::EventHandler> eventHandler_ {}; 125bc2ed2b3Sopenharmony_ci}; 126bc2ed2b3Sopenharmony_ci 127bc2ed2b3Sopenharmony_ciNfcEventHandler::PackageChangedReceiver::PackageChangedReceiver(std::weak_ptr<NfcService> nfcService, 128bc2ed2b3Sopenharmony_ci const EventFwk::CommonEventSubscribeInfo& subscribeInfo) 129bc2ed2b3Sopenharmony_ci : EventFwk::CommonEventSubscriber(subscribeInfo), 130bc2ed2b3Sopenharmony_ci nfcService_(nfcService), 131bc2ed2b3Sopenharmony_ci eventHandler_(nfcService.lock()->eventHandler_) 132bc2ed2b3Sopenharmony_ci{ 133bc2ed2b3Sopenharmony_ci} 134bc2ed2b3Sopenharmony_ci 135bc2ed2b3Sopenharmony_civoid NfcEventHandler::PackageChangedReceiver::OnReceiveEvent(const EventFwk::CommonEventData& data) 136bc2ed2b3Sopenharmony_ci{ 137bc2ed2b3Sopenharmony_ci DebugLog("NfcEventHandler::PackageChangedReceiver"); 138bc2ed2b3Sopenharmony_ci std::string action = data.GetWant().GetAction(); 139bc2ed2b3Sopenharmony_ci if (action.empty()) { 140bc2ed2b3Sopenharmony_ci ErrorLog("action is empty"); 141bc2ed2b3Sopenharmony_ci return; 142bc2ed2b3Sopenharmony_ci } 143bc2ed2b3Sopenharmony_ci const std::shared_ptr<EventFwk::CommonEventData> mdata = 144bc2ed2b3Sopenharmony_ci std::make_shared<EventFwk::CommonEventData> (data); 145bc2ed2b3Sopenharmony_ci if (action.compare(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_ADDED) == 0 || 146bc2ed2b3Sopenharmony_ci action.compare(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_REMOVED) == 0 || 147bc2ed2b3Sopenharmony_ci action.compare(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_CHANGED) == 0) { 148bc2ed2b3Sopenharmony_ci eventHandler_.lock()->SendEvent(static_cast<uint32_t>(NfcCommonEvent::MSG_PACKAGE_UPDATED), 149bc2ed2b3Sopenharmony_ci mdata, static_cast<int64_t>(0)); 150bc2ed2b3Sopenharmony_ci } 151bc2ed2b3Sopenharmony_ci} 152bc2ed2b3Sopenharmony_ci 153bc2ed2b3Sopenharmony_ciclass NfcEventHandler::ShutdownEventReceiver : public EventFwk::CommonEventSubscriber { 154bc2ed2b3Sopenharmony_cipublic: 155bc2ed2b3Sopenharmony_ci explicit ShutdownEventReceiver(std::weak_ptr<NfcService> nfcService, 156bc2ed2b3Sopenharmony_ci const EventFwk::CommonEventSubscribeInfo& subscribeInfo); 157bc2ed2b3Sopenharmony_ci ~ShutdownEventReceiver() 158bc2ed2b3Sopenharmony_ci { 159bc2ed2b3Sopenharmony_ci } 160bc2ed2b3Sopenharmony_ci void OnReceiveEvent(const EventFwk::CommonEventData& data) override; 161bc2ed2b3Sopenharmony_ci 162bc2ed2b3Sopenharmony_ciprivate: 163bc2ed2b3Sopenharmony_ci std::weak_ptr<NfcService> nfcService_ {}; 164bc2ed2b3Sopenharmony_ci std::weak_ptr<AppExecFwk::EventHandler> eventHandler_ {}; 165bc2ed2b3Sopenharmony_ci}; 166bc2ed2b3Sopenharmony_ci 167bc2ed2b3Sopenharmony_ciNfcEventHandler::ShutdownEventReceiver::ShutdownEventReceiver(std::weak_ptr<NfcService> nfcService, 168bc2ed2b3Sopenharmony_ci const EventFwk::CommonEventSubscribeInfo& subscribeInfo) 169bc2ed2b3Sopenharmony_ci : EventFwk::CommonEventSubscriber(subscribeInfo), 170bc2ed2b3Sopenharmony_ci nfcService_(nfcService), 171bc2ed2b3Sopenharmony_ci eventHandler_(nfcService.lock()->eventHandler_) 172bc2ed2b3Sopenharmony_ci{ 173bc2ed2b3Sopenharmony_ci} 174bc2ed2b3Sopenharmony_ci 175bc2ed2b3Sopenharmony_civoid NfcEventHandler::ShutdownEventReceiver::OnReceiveEvent(const EventFwk::CommonEventData& data) 176bc2ed2b3Sopenharmony_ci{ 177bc2ed2b3Sopenharmony_ci DebugLog("NfcEventHandler::ShutdownEventReceiver"); 178bc2ed2b3Sopenharmony_ci std::string action = data.GetWant().GetAction(); 179bc2ed2b3Sopenharmony_ci if (action.empty()) { 180bc2ed2b3Sopenharmony_ci ErrorLog("action is empty"); 181bc2ed2b3Sopenharmony_ci return; 182bc2ed2b3Sopenharmony_ci } 183bc2ed2b3Sopenharmony_ci if (action.compare(EventFwk::CommonEventSupport::COMMON_EVENT_SHUTDOWN) == 0) { 184bc2ed2b3Sopenharmony_ci eventHandler_.lock()->SendEvent(static_cast<uint32_t>(NfcCommonEvent::MSG_SHUTDOWN), 185bc2ed2b3Sopenharmony_ci static_cast<int64_t>(0)); 186bc2ed2b3Sopenharmony_ci } 187bc2ed2b3Sopenharmony_ci} 188bc2ed2b3Sopenharmony_ci 189bc2ed2b3Sopenharmony_ciclass NfcEventHandler::DataShareChangedReceiver : public EventFwk::CommonEventSubscriber { 190bc2ed2b3Sopenharmony_cipublic: 191bc2ed2b3Sopenharmony_ci explicit DataShareChangedReceiver(std::weak_ptr<NfcService> nfcService, 192bc2ed2b3Sopenharmony_ci const EventFwk::CommonEventSubscribeInfo& subscribeInfo); 193bc2ed2b3Sopenharmony_ci ~DataShareChangedReceiver() 194bc2ed2b3Sopenharmony_ci { 195bc2ed2b3Sopenharmony_ci } 196bc2ed2b3Sopenharmony_ci void OnReceiveEvent(const EventFwk::CommonEventData& data) override; 197bc2ed2b3Sopenharmony_ci 198bc2ed2b3Sopenharmony_ciprivate: 199bc2ed2b3Sopenharmony_ci std::weak_ptr<NfcService> nfcService_ {}; 200bc2ed2b3Sopenharmony_ci std::weak_ptr<AppExecFwk::EventHandler> eventHandler_ {}; 201bc2ed2b3Sopenharmony_ci}; 202bc2ed2b3Sopenharmony_ci 203bc2ed2b3Sopenharmony_ciNfcEventHandler::DataShareChangedReceiver::DataShareChangedReceiver(std::weak_ptr<NfcService> nfcService, 204bc2ed2b3Sopenharmony_ci const EventFwk::CommonEventSubscribeInfo& subscribeInfo) 205bc2ed2b3Sopenharmony_ci : EventFwk::CommonEventSubscriber(subscribeInfo), 206bc2ed2b3Sopenharmony_ci nfcService_(nfcService), 207bc2ed2b3Sopenharmony_ci eventHandler_(nfcService.lock()->eventHandler_) 208bc2ed2b3Sopenharmony_ci{ 209bc2ed2b3Sopenharmony_ci} 210bc2ed2b3Sopenharmony_ci 211bc2ed2b3Sopenharmony_civoid NfcEventHandler::DataShareChangedReceiver::OnReceiveEvent(const EventFwk::CommonEventData& data) 212bc2ed2b3Sopenharmony_ci{ 213bc2ed2b3Sopenharmony_ci DebugLog("NfcEventHandler::DataShareChangedReceiver"); 214bc2ed2b3Sopenharmony_ci std::string action = data.GetWant().GetAction(); 215bc2ed2b3Sopenharmony_ci if (action.empty()) { 216bc2ed2b3Sopenharmony_ci ErrorLog("action is empty"); 217bc2ed2b3Sopenharmony_ci return; 218bc2ed2b3Sopenharmony_ci } 219bc2ed2b3Sopenharmony_ci InfoLog("DataShareChangedReceiver: action = %{public}s", action.c_str()); 220bc2ed2b3Sopenharmony_ci if (action.compare(EVENT_DATA_SHARE_READY) == 0 && !eventHandler_.expired()) { 221bc2ed2b3Sopenharmony_ci eventHandler_.lock()->SendEvent(static_cast<uint32_t>(NfcCommonEvent::MSG_DATA_SHARE_READY), 222bc2ed2b3Sopenharmony_ci static_cast<int64_t>(0)); 223bc2ed2b3Sopenharmony_ci } 224bc2ed2b3Sopenharmony_ci} 225bc2ed2b3Sopenharmony_ci 226bc2ed2b3Sopenharmony_ciNfcEventHandler::NfcEventHandler(const std::shared_ptr<AppExecFwk::EventRunner> &runner, 227bc2ed2b3Sopenharmony_ci std::weak_ptr<NfcService> service) 228bc2ed2b3Sopenharmony_ci : EventHandler(runner), nfcService_(service) 229bc2ed2b3Sopenharmony_ci{ 230bc2ed2b3Sopenharmony_ci} 231bc2ed2b3Sopenharmony_ci 232bc2ed2b3Sopenharmony_ciNfcEventHandler::~NfcEventHandler() 233bc2ed2b3Sopenharmony_ci{ 234bc2ed2b3Sopenharmony_ci EventFwk::CommonEventManager::UnSubscribeCommonEvent(screenSubscriber_); 235bc2ed2b3Sopenharmony_ci EventFwk::CommonEventManager::UnSubscribeCommonEvent(pkgSubscriber_); 236bc2ed2b3Sopenharmony_ci EventFwk::CommonEventManager::UnSubscribeCommonEvent(shutdownSubscriber_); 237bc2ed2b3Sopenharmony_ci EventFwk::CommonEventManager::UnSubscribeCommonEvent(dataShareSubscriber_); 238bc2ed2b3Sopenharmony_ci} 239bc2ed2b3Sopenharmony_ci 240bc2ed2b3Sopenharmony_civoid NfcEventHandler::Intialize(std::weak_ptr<TAG::TagDispatcher> tagDispatcher, 241bc2ed2b3Sopenharmony_ci std::weak_ptr<CeService> ceService, 242bc2ed2b3Sopenharmony_ci std::weak_ptr<NfcPollingManager> nfcPollingManager, 243bc2ed2b3Sopenharmony_ci std::weak_ptr<NfcRoutingManager> nfcRoutingManager, 244bc2ed2b3Sopenharmony_ci std::weak_ptr<NCI::INciNfccInterface> nciNfccProxy) 245bc2ed2b3Sopenharmony_ci{ 246bc2ed2b3Sopenharmony_ci DebugLog("NfcEventHandler::Intialize"); 247bc2ed2b3Sopenharmony_ci tagDispatcher_ = tagDispatcher; 248bc2ed2b3Sopenharmony_ci ceService_ = ceService; 249bc2ed2b3Sopenharmony_ci nfcPollingManager_ = nfcPollingManager; 250bc2ed2b3Sopenharmony_ci nfcRoutingManager_ = nfcRoutingManager; 251bc2ed2b3Sopenharmony_ci nciNfccProxy_ = nciNfccProxy; 252bc2ed2b3Sopenharmony_ci 253bc2ed2b3Sopenharmony_ci SubscribeScreenChangedEvent(); 254bc2ed2b3Sopenharmony_ci SubscribePackageChangedEvent(); 255bc2ed2b3Sopenharmony_ci SubscribeShutdownEvent(); 256bc2ed2b3Sopenharmony_ci SubscribeDataShareChangedEvent(); 257bc2ed2b3Sopenharmony_ci} 258bc2ed2b3Sopenharmony_ci 259bc2ed2b3Sopenharmony_civoid NfcEventHandler::SubscribeScreenChangedEvent() 260bc2ed2b3Sopenharmony_ci{ 261bc2ed2b3Sopenharmony_ci std::lock_guard<std::mutex> guard(commonEventMutex_); 262bc2ed2b3Sopenharmony_ci if (screenSubscriber_ != nullptr) { 263bc2ed2b3Sopenharmony_ci InfoLog("Screen changed event is subscribed, skip"); 264bc2ed2b3Sopenharmony_ci return; 265bc2ed2b3Sopenharmony_ci } 266bc2ed2b3Sopenharmony_ci EventFwk::MatchingSkills matchingSkills; 267bc2ed2b3Sopenharmony_ci matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_ON); 268bc2ed2b3Sopenharmony_ci matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_OFF); 269bc2ed2b3Sopenharmony_ci matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_UNLOCKED); 270bc2ed2b3Sopenharmony_ci EventFwk::CommonEventSubscribeInfo subscribeInfo(matchingSkills); 271bc2ed2b3Sopenharmony_ci screenSubscriber_ = std::make_shared<ScreenChangedReceiver>(nfcService_, subscribeInfo); 272bc2ed2b3Sopenharmony_ci if (screenSubscriber_ == nullptr) { 273bc2ed2b3Sopenharmony_ci ErrorLog("Create screen changed subscriber failed"); 274bc2ed2b3Sopenharmony_ci return; 275bc2ed2b3Sopenharmony_ci } 276bc2ed2b3Sopenharmony_ci 277bc2ed2b3Sopenharmony_ci if (!EventFwk::CommonEventManager::SubscribeCommonEvent(screenSubscriber_)) { 278bc2ed2b3Sopenharmony_ci ErrorLog("Subscribe screen changed event fail"); 279bc2ed2b3Sopenharmony_ci } 280bc2ed2b3Sopenharmony_ci} 281bc2ed2b3Sopenharmony_ci 282bc2ed2b3Sopenharmony_civoid NfcEventHandler::SubscribePackageChangedEvent() 283bc2ed2b3Sopenharmony_ci{ 284bc2ed2b3Sopenharmony_ci std::lock_guard<std::mutex> guard(commonEventMutex_); 285bc2ed2b3Sopenharmony_ci if (pkgSubscriber_ != nullptr) { 286bc2ed2b3Sopenharmony_ci InfoLog("Package changed subscriber is subscribed, skip"); 287bc2ed2b3Sopenharmony_ci return; 288bc2ed2b3Sopenharmony_ci } 289bc2ed2b3Sopenharmony_ci EventFwk::MatchingSkills matchingSkills; 290bc2ed2b3Sopenharmony_ci matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_ADDED); 291bc2ed2b3Sopenharmony_ci matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_REMOVED); 292bc2ed2b3Sopenharmony_ci matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_PACKAGE_CHANGED); 293bc2ed2b3Sopenharmony_ci EventFwk::CommonEventSubscribeInfo subscribeInfo(matchingSkills); 294bc2ed2b3Sopenharmony_ci pkgSubscriber_ = std::make_shared<PackageChangedReceiver>(nfcService_, subscribeInfo); 295bc2ed2b3Sopenharmony_ci if (pkgSubscriber_ == nullptr) { 296bc2ed2b3Sopenharmony_ci ErrorLog("Create package changed subscriber failed"); 297bc2ed2b3Sopenharmony_ci return; 298bc2ed2b3Sopenharmony_ci } 299bc2ed2b3Sopenharmony_ci 300bc2ed2b3Sopenharmony_ci if (!EventFwk::CommonEventManager::SubscribeCommonEvent(pkgSubscriber_)) { 301bc2ed2b3Sopenharmony_ci ErrorLog("Subscribe package changed event fail"); 302bc2ed2b3Sopenharmony_ci } 303bc2ed2b3Sopenharmony_ci} 304bc2ed2b3Sopenharmony_ci 305bc2ed2b3Sopenharmony_civoid NfcEventHandler::SubscribeShutdownEvent() 306bc2ed2b3Sopenharmony_ci{ 307bc2ed2b3Sopenharmony_ci std::lock_guard<std::mutex> guard(commonEventMutex_); 308bc2ed2b3Sopenharmony_ci if (shutdownSubscriber_ != nullptr) { 309bc2ed2b3Sopenharmony_ci InfoLog("Shutdown event is subscribed, skip"); 310bc2ed2b3Sopenharmony_ci return; 311bc2ed2b3Sopenharmony_ci } 312bc2ed2b3Sopenharmony_ci EventFwk::MatchingSkills matchingSkills; 313bc2ed2b3Sopenharmony_ci matchingSkills.AddEvent(EventFwk::CommonEventSupport::COMMON_EVENT_SHUTDOWN); 314bc2ed2b3Sopenharmony_ci EventFwk::CommonEventSubscribeInfo subscribeInfo(matchingSkills); 315bc2ed2b3Sopenharmony_ci shutdownSubscriber_ = std::make_shared<ShutdownEventReceiver>(nfcService_, subscribeInfo); 316bc2ed2b3Sopenharmony_ci if (shutdownSubscriber_ == nullptr) { 317bc2ed2b3Sopenharmony_ci ErrorLog("Create shutdown subscriber failed"); 318bc2ed2b3Sopenharmony_ci return; 319bc2ed2b3Sopenharmony_ci } 320bc2ed2b3Sopenharmony_ci 321bc2ed2b3Sopenharmony_ci if (!EventFwk::CommonEventManager::SubscribeCommonEvent(shutdownSubscriber_)) { 322bc2ed2b3Sopenharmony_ci ErrorLog("Subscribe shutdown event fail"); 323bc2ed2b3Sopenharmony_ci } 324bc2ed2b3Sopenharmony_ci} 325bc2ed2b3Sopenharmony_ci 326bc2ed2b3Sopenharmony_civoid NfcEventHandler::SubscribeDataShareChangedEvent() 327bc2ed2b3Sopenharmony_ci{ 328bc2ed2b3Sopenharmony_ci std::lock_guard<std::mutex> guard(commonEventMutex_); 329bc2ed2b3Sopenharmony_ci if (dataShareSubscriber_ != nullptr) { 330bc2ed2b3Sopenharmony_ci InfoLog("DataShare changed event is subscribed, skip"); 331bc2ed2b3Sopenharmony_ci return; 332bc2ed2b3Sopenharmony_ci } 333bc2ed2b3Sopenharmony_ci EventFwk::MatchingSkills matchingSkills; 334bc2ed2b3Sopenharmony_ci matchingSkills.AddEvent(EVENT_DATA_SHARE_READY); 335bc2ed2b3Sopenharmony_ci EventFwk::CommonEventSubscribeInfo subscribeInfo(matchingSkills); 336bc2ed2b3Sopenharmony_ci dataShareSubscriber_ = std::make_shared<DataShareChangedReceiver>(nfcService_, subscribeInfo); 337bc2ed2b3Sopenharmony_ci if (dataShareSubscriber_ == nullptr) { 338bc2ed2b3Sopenharmony_ci ErrorLog("dataShareSubscriber_ failed"); 339bc2ed2b3Sopenharmony_ci return; 340bc2ed2b3Sopenharmony_ci } 341bc2ed2b3Sopenharmony_ci 342bc2ed2b3Sopenharmony_ci if (!EventFwk::CommonEventManager::SubscribeCommonEvent(dataShareSubscriber_)) { 343bc2ed2b3Sopenharmony_ci ErrorLog("Subscribe dataShareSubscriber_ fail"); 344bc2ed2b3Sopenharmony_ci } 345bc2ed2b3Sopenharmony_ci} 346bc2ed2b3Sopenharmony_ci 347bc2ed2b3Sopenharmony_civoid NfcEventHandler::ProcessEvent(const AppExecFwk::InnerEvent::Pointer& event) 348bc2ed2b3Sopenharmony_ci{ 349bc2ed2b3Sopenharmony_ci if (event == nullptr) { 350bc2ed2b3Sopenharmony_ci ErrorLog("event is nullptr"); 351bc2ed2b3Sopenharmony_ci return; 352bc2ed2b3Sopenharmony_ci } 353bc2ed2b3Sopenharmony_ci NfcCommonEvent eventId = static_cast<NfcCommonEvent>(event->GetInnerEventId()); 354bc2ed2b3Sopenharmony_ci if (eventId != NfcCommonEvent::MSG_NOTIFY_FIELD_OFF && 355bc2ed2b3Sopenharmony_ci eventId != NfcCommonEvent::MSG_NOTIFY_FIELD_ON) { 356bc2ed2b3Sopenharmony_ci InfoLog("NFC common event handler receive a message of %{public}d", eventId); 357bc2ed2b3Sopenharmony_ci } 358bc2ed2b3Sopenharmony_ci NfcWatchDog nfcProcessEventDog("nfcProcessEvent", WAIT_PROCESS_EVENT_TIMES, nciNfccProxy_); 359bc2ed2b3Sopenharmony_ci nfcProcessEventDog.Run(); 360bc2ed2b3Sopenharmony_ci switch (eventId) { 361bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_TAG_FOUND: 362bc2ed2b3Sopenharmony_ci tagDispatcher_.lock()->HandleTagFound(event->GetParam()); 363bc2ed2b3Sopenharmony_ci break; 364bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_TAG_DEBOUNCE: 365bc2ed2b3Sopenharmony_ci tagDispatcher_.lock()->HandleTagDebounce(); 366bc2ed2b3Sopenharmony_ci break; 367bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_TAG_LOST: 368bc2ed2b3Sopenharmony_ci tagDispatcher_.lock()->HandleTagLost(event->GetParam()); 369bc2ed2b3Sopenharmony_ci break; 370bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_SCREEN_CHANGED: { 371bc2ed2b3Sopenharmony_ci nfcPollingManager_.lock()->HandleScreenChanged(event->GetParam()); 372bc2ed2b3Sopenharmony_ci break; 373bc2ed2b3Sopenharmony_ci } 374bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_PACKAGE_UPDATED: { 375bc2ed2b3Sopenharmony_ci bool updated = nfcPollingManager_.lock()->HandlePackageUpdated( 376bc2ed2b3Sopenharmony_ci event->GetSharedObject<EventFwk::CommonEventData>()); 377bc2ed2b3Sopenharmony_ci if (updated) { 378bc2ed2b3Sopenharmony_ci ceService_.lock()->OnAppAddOrChangeOrRemove(event->GetSharedObject<EventFwk::CommonEventData>()); 379bc2ed2b3Sopenharmony_ci } 380bc2ed2b3Sopenharmony_ci break; 381bc2ed2b3Sopenharmony_ci } 382bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_COMMIT_ROUTING: { 383bc2ed2b3Sopenharmony_ci nfcRoutingManager_.lock()->HandleCommitRouting(); 384bc2ed2b3Sopenharmony_ci break; 385bc2ed2b3Sopenharmony_ci } 386bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_COMPUTE_ROUTING_PARAMS: { 387bc2ed2b3Sopenharmony_ci int defaultPaymentType = event->GetParam(); 388bc2ed2b3Sopenharmony_ci nfcRoutingManager_.lock()->HandleComputeRoutingParams(defaultPaymentType); 389bc2ed2b3Sopenharmony_ci break; 390bc2ed2b3Sopenharmony_ci } 391bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_FIELD_ACTIVATED: { 392bc2ed2b3Sopenharmony_ci ceService_.lock()->HandleFieldActivated(); 393bc2ed2b3Sopenharmony_ci break; 394bc2ed2b3Sopenharmony_ci } 395bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_FIELD_DEACTIVATED: { 396bc2ed2b3Sopenharmony_ci ceService_.lock()->HandleFieldDeactivated(); 397bc2ed2b3Sopenharmony_ci break; 398bc2ed2b3Sopenharmony_ci } 399bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_NOTIFY_FIELD_ON: { 400bc2ed2b3Sopenharmony_ci ceService_.lock()->PublishFieldOnOrOffCommonEvent(true); 401bc2ed2b3Sopenharmony_ci break; 402bc2ed2b3Sopenharmony_ci } 403bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_NOTIFY_FIELD_OFF: { 404bc2ed2b3Sopenharmony_ci ceService_.lock()->PublishFieldOnOrOffCommonEvent(false); 405bc2ed2b3Sopenharmony_ci break; 406bc2ed2b3Sopenharmony_ci } 407bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_NOTIFY_FIELD_OFF_TIMEOUT: { 408bc2ed2b3Sopenharmony_ci ceService_.lock()->PublishFieldOnOrOffCommonEvent(false); 409bc2ed2b3Sopenharmony_ci break; 410bc2ed2b3Sopenharmony_ci } 411bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_SHUTDOWN: { 412bc2ed2b3Sopenharmony_ci nfcService_.lock()->HandleShutdown(); 413bc2ed2b3Sopenharmony_ci break; 414bc2ed2b3Sopenharmony_ci } 415bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_DATA_SHARE_READY: { 416bc2ed2b3Sopenharmony_ci ceService_.lock()->HandleDataShareReady(); 417bc2ed2b3Sopenharmony_ci break; 418bc2ed2b3Sopenharmony_ci } 419bc2ed2b3Sopenharmony_ci#ifdef VENDOR_APPLICATIONS_ENABLED 420bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_VENDOR_EVENT: { 421bc2ed2b3Sopenharmony_ci int eventType = event->GetParam(); 422bc2ed2b3Sopenharmony_ci if (eventType == KITS::VENDOR_APP_INIT_DONE || eventType == KITS::VENDOR_APP_CHANGE) { 423bc2ed2b3Sopenharmony_ci ceService_.lock()->ConfigRoutingAndCommit(); 424bc2ed2b3Sopenharmony_ci } 425bc2ed2b3Sopenharmony_ci break; 426bc2ed2b3Sopenharmony_ci } 427bc2ed2b3Sopenharmony_ci#endif 428bc2ed2b3Sopenharmony_ci#ifdef NDEF_WIFI_ENABLED 429bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_WIFI_ENABLE_TIMEOUT: { 430bc2ed2b3Sopenharmony_ci TAG::WifiConnectionManager::GetInstance().HandleWifiEnableFailed(); 431bc2ed2b3Sopenharmony_ci break; 432bc2ed2b3Sopenharmony_ci } 433bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_WIFI_CONNECT_TIMEOUT: { 434bc2ed2b3Sopenharmony_ci TAG::WifiConnectionManager::GetInstance().HandleWifiConnectFailed(); 435bc2ed2b3Sopenharmony_ci break; 436bc2ed2b3Sopenharmony_ci } 437bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_WIFI_ENABLED: { 438bc2ed2b3Sopenharmony_ci TAG::WifiConnectionManager::GetInstance().OnWifiEnabled(); 439bc2ed2b3Sopenharmony_ci break; 440bc2ed2b3Sopenharmony_ci } 441bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_WIFI_CONNECTED: { 442bc2ed2b3Sopenharmony_ci TAG::WifiConnectionManager::GetInstance().OnWifiConnected(); 443bc2ed2b3Sopenharmony_ci break; 444bc2ed2b3Sopenharmony_ci } 445bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_WIFI_NTF_CLICKED: { 446bc2ed2b3Sopenharmony_ci TAG::WifiConnectionManager::GetInstance().OnWifiNtfClicked(); 447bc2ed2b3Sopenharmony_ci break; 448bc2ed2b3Sopenharmony_ci } 449bc2ed2b3Sopenharmony_ci#endif 450bc2ed2b3Sopenharmony_ci#ifdef NDEF_BT_ENABLED 451bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_BT_ENABLE_TIMEOUT: { 452bc2ed2b3Sopenharmony_ci TAG::BtConnectionManager::GetInstance().HandleBtEnableFailed(); 453bc2ed2b3Sopenharmony_ci break; 454bc2ed2b3Sopenharmony_ci } 455bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_BT_PAIR_TIMEOUT: { 456bc2ed2b3Sopenharmony_ci TAG::BtConnectionManager::GetInstance().HandleBtPairFailed(); 457bc2ed2b3Sopenharmony_ci break; 458bc2ed2b3Sopenharmony_ci } 459bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_BT_CONNECT_TIMEOUT: { 460bc2ed2b3Sopenharmony_ci TAG::BtConnectionManager::GetInstance().HandleBtConnectFailed(); 461bc2ed2b3Sopenharmony_ci break; 462bc2ed2b3Sopenharmony_ci } 463bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_BT_ENABLED: { 464bc2ed2b3Sopenharmony_ci TAG::BtConnectionManager::GetInstance().OnBtEnabled(); 465bc2ed2b3Sopenharmony_ci break; 466bc2ed2b3Sopenharmony_ci } 467bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_BT_PAIR_STATUS_CHANGED: { 468bc2ed2b3Sopenharmony_ci TAG::BtConnectionManager::GetInstance().OnPairStatusChanged( 469bc2ed2b3Sopenharmony_ci event->GetSharedObject<TAG::BtConnectionInfo>()); 470bc2ed2b3Sopenharmony_ci break; 471bc2ed2b3Sopenharmony_ci } 472bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_BT_CONNECT_STATUS_CHANGED: { 473bc2ed2b3Sopenharmony_ci TAG::BtConnectionManager::GetInstance().OnConnectionStateChanged( 474bc2ed2b3Sopenharmony_ci event->GetSharedObject<TAG::BtConnectionInfo>()); 475bc2ed2b3Sopenharmony_ci break; 476bc2ed2b3Sopenharmony_ci } 477bc2ed2b3Sopenharmony_ci case NfcCommonEvent::MSG_BT_NTF_CLICKED: { 478bc2ed2b3Sopenharmony_ci TAG::BtConnectionManager::GetInstance().OnBtNtfClicked(); 479bc2ed2b3Sopenharmony_ci break; 480bc2ed2b3Sopenharmony_ci } 481bc2ed2b3Sopenharmony_ci#endif 482bc2ed2b3Sopenharmony_ci default: 483bc2ed2b3Sopenharmony_ci ErrorLog("Unknown message received: id %{public}d", eventId); 484bc2ed2b3Sopenharmony_ci break; 485bc2ed2b3Sopenharmony_ci } 486bc2ed2b3Sopenharmony_ci nfcProcessEventDog.Cancel(); 487bc2ed2b3Sopenharmony_ci} 488bc2ed2b3Sopenharmony_ci} // namespace NFC 489bc2ed2b3Sopenharmony_ci} // namespace OHOS 490