• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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 "query_erms_observer_manager.h"
16 
17 #include "ability_manager_service.h"
18 #include "ability_util.h"
19 #include "hilog_tag_wrapper.h"
20 
21 namespace OHOS {
22 namespace AAFwk {
23 
24 // Mock class for QueryERMSObserver
25 class MockQueryERMSObserver : public IQueryERMSObserver {
26 public:
OnQueryFinished(const std::string & appId,const std::string & startTime,const AbilityRuntime::AtomicServiceStartupRule & rule,int resultCode)27     void OnQueryFinished(const std::string &appId, const std::string &startTime,
28         const AbilityRuntime::AtomicServiceStartupRule &rule, int resultCode) override {}
AsObject()29     sptr<IRemoteObject> AsObject() override { return nullptr; }
30 };
31 
QueryERMSObserverManager()32 QueryERMSObserverManager::QueryERMSObserverManager()
33 {}
34 
~QueryERMSObserverManager()35 QueryERMSObserverManager::~QueryERMSObserverManager()
36 {}
37 
GetInstance()38 QueryERMSObserverManager &QueryERMSObserverManager::GetInstance()
39 {
40     static QueryERMSObserverManager manager;
41     return manager;
42 }
43 
AddObserver(int32_t recordId,const sptr<IQueryERMSObserver> & observer)44 int32_t QueryERMSObserverManager::AddObserver(int32_t recordId, const sptr<IQueryERMSObserver> &observer)
45 {
46     TAG_LOGD(AAFwkTag::QUERY_ERMS, "test::begin");
47     if (observer == nullptr) {
48         TAG_LOGE(AAFwkTag::QUERY_ERMS, "null observer");
49         return ERR_INVALID_VALUE;
50     }
51     return ERR_OK;
52 }
53 
OnQueryFinished(int32_t recordId,const std::string & appId,const std::string & startTime,const AtomicServiceStartupRule & rule,int resultCode)54 void QueryERMSObserverManager::OnQueryFinished(int32_t recordId, const std::string &appId,
55     const std::string &startTime, const AtomicServiceStartupRule &rule, int resultCode)
56 {
57     sptr<IQueryERMSObserver> observer = nullptr;
58     if (ERR_OK == resultCode) {
59         observer = sptr<IQueryERMSObserver>(new MockQueryERMSObserver());
60     }
61     observerMap_[recordId] = observer;
62     TAG_LOGI(AAFwkTag::QUERY_ERMS, "testcalled");
63 }
64 
HandleOnQueryFinished(int32_t recordId,const std::string & appId,const std::string & startTime,const AtomicServiceStartupRule & rule,int resultCode)65 void QueryERMSObserverManager::HandleOnQueryFinished(int32_t recordId, const std::string &appId,
66     const std::string &startTime, const AtomicServiceStartupRule &rule, int resultCode)
67 {
68     sptr<IQueryERMSObserver> observer = nullptr;
69     if (ERR_OK == resultCode) {
70         observer = sptr<IQueryERMSObserver>(new MockQueryERMSObserver());
71     }
72     observerMap_[recordId] = observer;
73     TAG_LOGI(AAFwkTag::QUERY_ERMS, "testcalled");
74 }
75 
OnObserverDied(const wptr<IRemoteObject> & remote)76 void QueryERMSObserverManager::OnObserverDied(const wptr<IRemoteObject> &remote)
77 {
78     TAG_LOGI(AAFwkTag::QUERY_ERMS, "called");
79     auto remoteObj = remote.promote();
80     if (remoteObj == nullptr) {
81         TAG_LOGE(AAFwkTag::QUERY_ERMS, "null observer");
82         return;
83     }
84     remoteObj->RemoveDeathRecipient(deathRecipient_);
85 
86     std::lock_guard<ffrt::mutex> lock(observerLock_);
87     for (auto &item : observerMap_) {
88         if (item.second && item.second->AsObject() == remoteObj) {
89             observerMap_.erase(item.first);
90             return;
91         }
92     }
93 }
94 
QueryERMSObserverRecipient(RemoteDiedHandler handler)95 QueryERMSObserverRecipient::QueryERMSObserverRecipient(RemoteDiedHandler handler) : handler_(handler)
96 {}
97 
~QueryERMSObserverRecipient()98 QueryERMSObserverRecipient::~QueryERMSObserverRecipient()
99 {}
100 
OnRemoteDied(const wptr<IRemoteObject> & remote)101 void QueryERMSObserverRecipient::OnRemoteDied(const wptr<IRemoteObject> &__attribute__((unused)) remote)
102 {
103     TAG_LOGI(AAFwkTag::QUERY_ERMS, "called");
104     if (handler_) {
105         handler_(remote);
106     }
107 }
108 } // namespace AAFwk
109 } // namespace OHOS