1/* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15#include "nfc_sa_manager.h" 16#include "loghelper.h" 17#include "system_ability_definition.h" 18#include "external_deps_proxy.h" 19 20namespace OHOS { 21namespace NFC { 22const bool REGISTER_RESULT = 23 SystemAbility::MakeAndRegisterAbility(DelayedSingleton<NfcSaManager>::GetInstance().get()); 24 25NfcSaManager::NfcSaManager() : SystemAbility(NFC_MANAGER_SYS_ABILITY_ID, false) {} 26 27NfcSaManager::~NfcSaManager() 28{ 29 if (nfcService_) { 30 nfcService_ = nullptr; 31 } 32} 33 34void NfcSaManager::OnStart() 35{ 36 if (state_ == ServiceRunningState::STATE_RUNNING) { 37 InfoLog("NfcSaManager has already started."); 38 return; 39 } 40 41 if (!Init()) { 42 InfoLog("failed to init NfcSaManager"); 43 // record init sa failed event. 44 NfcFailedParams err; 45 ExternalDepsProxy::GetInstance().BuildFailedParams(err, MainErrorCode::INIT_SA_FAILED, 46 SubErrorCode::DEFAULT_ERR_DEF); 47 ExternalDepsProxy::GetInstance().WriteNfcFailedHiSysEvent(&err); 48 return; 49 } 50 state_ = ServiceRunningState::STATE_RUNNING; 51 InfoLog("NfcSaManager::OnStart start service success."); 52} 53 54bool NfcSaManager::Init() 55{ 56 std::lock_guard<std::mutex> guard(initMutex_); 57 InfoLog("NfcSaManager::Init ready to init."); 58 if (!registerToService_) { 59 nfcService_ = std::make_shared<NfcService>(); 60 nfcService_->Initialize(); 61 bool ret = Publish(nfcService_->nfcControllerImpl_); 62 if (ret) { 63 InfoLog("NfcSaManager::Init Add System Ability SUCCESS!"); 64 } else { 65 ErrorLog("NfcSaManager::Init Add System Ability FAILED!"); 66 return false; 67 } 68 AddSystemAbilityListener(COMMON_EVENT_SERVICE_ID); 69 registerToService_ = true; 70 } 71 InfoLog("NfcSaManager::Init init success."); 72 return true; 73} 74 75void NfcSaManager::OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId) 76{ 77 InfoLog("OnAddSystemAbility systemAbilityId:%{public}d added!", systemAbilityId); 78 if (systemAbilityId != COMMON_EVENT_SERVICE_ID) { 79 InfoLog("OnAddSystemAbility systemAbilityId is not COMMON_EVENT_SERVICE_ID"); 80 return; 81 } 82 InfoLog("Start to resubscribe common event."); 83 if (nfcService_ == nullptr) { 84 ErrorLog("nfcService_ is nullptr"); 85 return; 86 } 87 if (nfcService_->eventHandler_ == nullptr) { 88 ErrorLog("eventHandler_ is nullptr"); 89 return; 90 } 91 nfcService_->eventHandler_->SubscribePackageChangedEvent(); 92 nfcService_->eventHandler_->SubscribeScreenChangedEvent(); 93 nfcService_->eventHandler_->SubscribeShutdownEvent(); 94} 95 96void NfcSaManager::OnRemoveSystemAbility(int32_t systemAbilityId, const std::string& deviceId) 97{ 98 InfoLog("NfcSaManager OnRemoveSystemAbility finish"); 99} 100 101void NfcSaManager::OnStop() 102{ 103 InfoLog("NfcSaManager::OnStop ready to stop service."); 104 state_ = ServiceRunningState::STATE_NOT_START; 105 registerToService_ = false; 106 InfoLog("NfcSaManager::OnStop stop service success."); 107} 108} // namespace NFC 109} // namespace OHOS 110