• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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 
16 #include "avsession_manager_impl.h"
17 #include "ipc_skeleton.h"
18 #include "system_ability_definition.h"
19 #include "avsession_log.h"
20 #include "avsession_errors.h"
21 #include "avsession_event_handler.h"
22 #include "session_listener_client.h"
23 #include "avsession_trace.h"
24 #include "avsession_sysevent.h"
25 #include "avsession_utils.h"
26 
27 namespace OHOS::AVSession {
28 
29 sptr<ClientDeathStub> AVSessionManagerImpl::clientDeath_ = nullptr;
30 
AVSessionManagerImpl()31 AVSessionManagerImpl::AVSessionManagerImpl()
32 {
33     SLOGD("constructor");
34 }
35 
DetachCallback()36 extern "C" __attribute__((destructor)) void AVSessionManagerImpl::DetachCallback()
37 {
38     SLOGI("DetachCallback success");
39 }
40 
GetService()41 sptr<AVSessionServiceProxy> AVSessionManagerImpl::GetService()
42 {
43     SLOGI("enter GetService");
44     std::lock_guard<std::mutex> lockGuard(lock_);
45     if (service_) {
46         return service_;
47     }
48 
49     auto mgr = SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager();
50     if (mgr == nullptr) {
51         SLOGE("failed to get sa mgr");
52         return nullptr;
53     }
54 #ifndef START_STOP_ON_DEMAND_ENABLE
55     auto object = mgr->GetSystemAbility(AVSESSION_SERVICE_ID);
56     if (object == nullptr) {
57         SLOGE("failed to get service");
58         return nullptr;
59     }
60 #else
61     SLOGI("enter check SystemAbility");
62     auto object = mgr->CheckSystemAbility(AVSESSION_SERVICE_ID);
63     if (object == nullptr) {
64         SLOGI("check no SystemAbility");
65         object = mgr->LoadSystemAbility(AVSESSION_SERVICE_ID, loadSystemAbilityWaitTimeOut_);
66         if (object == nullptr) {
67             SLOGE("failed to load SystemAbility");
68             return nullptr;
69         }
70     }
71 #endif
72     service_ = iface_cast<AVSessionServiceProxy>(object);
73     if (service_ != nullptr) {
74         serviceDeathRecipient_ = new(std::nothrow) ServiceDeathRecipient([this] { OnServiceDie(); });
75         if (serviceDeathRecipient_ == nullptr) {
76             SLOGE("register ServiceDeathRecipient failed");
77             return nullptr;
78         }
79 
80         sptr<IAVSessionService> serviceBase = service_;
81         serviceBase->AsObject()->AddDeathRecipient(serviceDeathRecipient_);
82 
83         SLOGD("get service success");
84         RegisterClientDeathObserver();
85         RegisterServiceStateListener(mgr);
86     }
87     return service_;
88 }
89 
RegisterServiceStateListener(sptr<ISystemAbilityManager> mgr)90 void AVSessionManagerImpl::RegisterServiceStateListener(sptr<ISystemAbilityManager> mgr)
91 {
92     SLOGI("RegisterServiceStateListener enter");
93     if (serviceListener_ == nullptr && serviceStartCallback_) {
94         serviceListener_ = new(std::nothrow) ServiceStatusListener([this] {
95             OnServiceStart();
96         });
97         CHECK_AND_RETURN_LOG(serviceListener_ != nullptr, "serviceListener_ alloc failed");
98         auto ret = mgr->SubscribeSystemAbility(AVSESSION_SERVICE_ID, serviceListener_);
99         SLOGI("RegisterServiceStateListener ret=%{public}d", ret);
100     }
101 }
102 
OnServiceStart()103 void AVSessionManagerImpl::OnServiceStart()
104 {
105     SLOGI("OnServiceStart enter isServiceDie: %{public}d", isServiceDie.load());
106     if (serviceStartCallback_ && isServiceDie.load()) {
107         serviceStartCallback_();
108     }
109     isServiceDie = false;
110 }
111 
OnServiceDie()112 void AVSessionManagerImpl::OnServiceDie()
113 {
114     SLOGI("OnServiceDie enter");
115     auto callback = deathCallback_;
116     {
117         std::lock_guard<std::mutex> lockGuard(lock_);
118         service_.clear();
119         isServiceDie = true;
120         listenerMapByUserId_.clear();
121         deathCallback_ = nullptr;
122     }
123     if (callback) {
124         callback();
125     }
126     HISYSEVENT_RESET;
127     HISYSEVENT_UNREGISTER;
128     std::string cachePath(AVSessionUtils::GetCachePathName());
129     AVSessionUtils::DeleteCacheFiles(cachePath);
130 }
131 
CreateSession(const std::string & tag,int32_t type,const AppExecFwk::ElementName & elementName)132 std::shared_ptr<AVSession> AVSessionManagerImpl::CreateSession(const std::string& tag, int32_t type,
133                                                                const AppExecFwk::ElementName& elementName)
134 {
135     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::CreateSession");
136     if (tag.empty() || elementName.GetBundleName().empty() || elementName.GetAbilityName().empty()) {
137         SLOGE("param is invalid");
138         return nullptr;
139     }
140     if (type != AVSession::SESSION_TYPE_AUDIO && type != AVSession::SESSION_TYPE_VIDEO
141         && type != AVSession::SESSION_TYPE_VOICE_CALL && type != AVSession::SESSION_TYPE_VIDEO_CALL) {
142         SLOGE("type is invalid");
143         return nullptr;
144     }
145 
146     auto service = GetService();
147     return service ? service->CreateSession(tag, type, elementName) : nullptr;
148 }
149 
CreateSession(const std::string & tag,int32_t type,const AppExecFwk::ElementName & elementName,std::shared_ptr<AVSession> & session)150 int32_t AVSessionManagerImpl::CreateSession(const std::string& tag, int32_t type,
151                                             const AppExecFwk::ElementName& elementName,
152                                             std::shared_ptr<AVSession>& session)
153 {
154     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::CreateSession with ret");
155     if (tag.empty() || elementName.GetBundleName().empty() || elementName.GetAbilityName().empty()) {
156         SLOGE("param is invalid");
157         return ERR_INVALID_PARAM;
158     }
159     if (type != AVSession::SESSION_TYPE_AUDIO && type != AVSession::SESSION_TYPE_VIDEO
160         && type != AVSession::SESSION_TYPE_VOICE_CALL && type != AVSession::SESSION_TYPE_VIDEO_CALL) {
161         SLOGE("type is invalid");
162         return ERR_INVALID_PARAM;
163     }
164 
165     auto service = GetService();
166     return service ? service->CreateSession(tag, type, elementName, session) : ERR_SERVICE_NOT_EXIST;
167 }
168 
GetAllSessionDescriptors(std::vector<AVSessionDescriptor> & descriptors)169 int32_t AVSessionManagerImpl::GetAllSessionDescriptors(std::vector<AVSessionDescriptor>& descriptors)
170 {
171     auto service = GetService();
172     return service ? service->GetAllSessionDescriptors(descriptors) : ERR_SERVICE_NOT_EXIST;
173 }
174 
GetActivatedSessionDescriptors(std::vector<AVSessionDescriptor> & activatedSessions)175 int32_t AVSessionManagerImpl::GetActivatedSessionDescriptors(std::vector<AVSessionDescriptor>& activatedSessions)
176 {
177     std::vector<AVSessionDescriptor> descriptors;
178     int32_t ret = GetAllSessionDescriptors(descriptors);
179     CHECK_AND_RETURN_RET_LOG(ret == AVSESSION_SUCCESS, ret, "GetAllSessionDescriptors failed");
180 
181     for (const auto& descriptor : descriptors) {
182         if (descriptor.isActive_) {
183             activatedSessions.push_back(descriptor);
184         }
185     }
186     return ret;
187 }
188 
GetSessionDescriptorsBySessionId(const std::string & sessionId,AVSessionDescriptor & descriptor)189 int32_t AVSessionManagerImpl::GetSessionDescriptorsBySessionId(const std::string& sessionId,
190                                                                AVSessionDescriptor& descriptor)
191 {
192     if (sessionId.empty()) {
193         SLOGE("sessionId is invalid");
194         return ERR_INVALID_PARAM;
195     }
196 
197     auto service = GetService();
198     return service ? service->GetSessionDescriptorsBySessionId(sessionId, descriptor) : ERR_SERVICE_NOT_EXIST;
199 }
200 
GetHistoricalSessionDescriptors(int32_t maxSize,std::vector<AVSessionDescriptor> & descriptors)201 int32_t AVSessionManagerImpl::GetHistoricalSessionDescriptors(int32_t maxSize,
202     std::vector<AVSessionDescriptor>& descriptors)
203 {
204     auto service = GetService();
205     return service ? service->GetHistoricalSessionDescriptors(maxSize, descriptors) : ERR_SERVICE_NOT_EXIST;
206 }
207 
GetHistoricalAVQueueInfos(int32_t maxSize,int32_t maxAppSize,std::vector<AVQueueInfo> & avQueueInfos)208 int32_t AVSessionManagerImpl::GetHistoricalAVQueueInfos(int32_t maxSize, int32_t maxAppSize,
209     std::vector<AVQueueInfo>& avQueueInfos)
210 {
211     auto service = GetService();
212     return service ? service->GetHistoricalAVQueueInfos(maxSize, maxAppSize, avQueueInfos) : ERR_SERVICE_NOT_EXIST;
213 }
214 
StartAVPlayback(const std::string & bundleName,const std::string & assetId)215 int32_t AVSessionManagerImpl::StartAVPlayback(const std::string& bundleName, const std::string& assetId)
216 {
217     auto service = GetService();
218     return service ? service->StartAVPlayback(bundleName, assetId) : ERR_SERVICE_NOT_EXIST;
219 }
220 
GetDistributedSessionControllers(const DistributedSessionType & sessionType,std::vector<std::shared_ptr<AVSessionController>> & sessionControllers)221 int32_t AVSessionManagerImpl::GetDistributedSessionControllers(const DistributedSessionType& sessionType,
222     std::vector<std::shared_ptr<AVSessionController>>& sessionControllers)
223 {
224     auto service = GetService();
225     return service ? service->GetDistributedSessionControllers(sessionType, sessionControllers) : ERR_SERVICE_NOT_EXIST;
226 }
227 
CreateController(const std::string & sessionId,std::shared_ptr<AVSessionController> & controller)228 int32_t AVSessionManagerImpl::CreateController(const std::string& sessionId,
229     std::shared_ptr<AVSessionController>& controller)
230 {
231     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::CreateController");
232     if (sessionId.empty()) {
233         SLOGE("sessionId is invalid");
234         return ERR_INVALID_PARAM;
235     }
236 
237     auto service = GetService();
238     return service ? service->CreateController(sessionId, controller) : ERR_SERVICE_NOT_EXIST;
239 }
240 
241 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
GetAVCastController(const std::string & sessionId,std::shared_ptr<AVCastController> & castController)242 int32_t AVSessionManagerImpl::GetAVCastController(const std::string& sessionId,
243     std::shared_ptr<AVCastController>& castController)
244 {
245     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::GetAVCastController");
246     if (sessionId.empty()) {
247         SLOGE("sessionId is invalid");
248         return ERR_INVALID_PARAM;
249     }
250 
251     auto service = GetService();
252     return service ? service->GetAVCastController(sessionId, castController) : ERR_SERVICE_NOT_EXIST;
253 }
254 #endif
255 
GetSessionListenerClient(const std::shared_ptr<SessionListener> & listener)256 sptr<ISessionListener> AVSessionManagerImpl::GetSessionListenerClient(const std::shared_ptr<SessionListener>& listener)
257 {
258     if (listener == nullptr) {
259         SLOGE("listener recv is nullptr");
260         return nullptr;
261     }
262 
263     sptr<ISessionListener> listenerPtr = new(std::nothrow) SessionListenerClient(listener);
264     if (listenerPtr == nullptr) {
265         SLOGE("listener create is nullptr");
266         return nullptr;
267     }
268     return listenerPtr;
269 }
270 
RegisterSessionListener(const std::shared_ptr<SessionListener> & listener)271 int32_t AVSessionManagerImpl::RegisterSessionListener(const std::shared_ptr<SessionListener>& listener)
272 {
273     auto service = GetService();
274     if (service == nullptr) {
275         return ERR_SERVICE_NOT_EXIST;
276     }
277 
278     std::lock_guard<std::mutex> lockGuard(lock_);
279     sptr<ISessionListener> listenerPtr = GetSessionListenerClient(listener);
280     if (listenerPtr == nullptr) {
281         return ERR_INVALID_PARAM;
282     }
283 
284     int32_t ret = service->RegisterSessionListener(listenerPtr);
285     if (ret <= AVSESSION_SUCCESS) {
286         SLOGE("RegisterSessionListener fail with ret %{public}d", ret);
287         return ret;
288     }
289     SLOGI("RegisterSessionListener for user %{public}d", ret);
290     listenerMapByUserId_[ret] = listenerPtr;
291     return AVSESSION_SUCCESS;
292 }
293 
RegisterSessionListenerForAllUsers(const std::shared_ptr<SessionListener> & listener)294 int32_t AVSessionManagerImpl::RegisterSessionListenerForAllUsers(const std::shared_ptr<SessionListener>& listener)
295 {
296     SLOGI("RegisterSessionListenerForAllUsers in");
297     auto service = GetService();
298     if (service == nullptr) {
299         return ERR_SERVICE_NOT_EXIST;
300     }
301 
302     std::lock_guard<std::mutex> lockGuard(lock_);
303     sptr<ISessionListener> listenerPtr = GetSessionListenerClient(listener);
304     if (listenerPtr == nullptr) {
305         return ERR_INVALID_PARAM;
306     }
307 
308     auto ret = service->RegisterSessionListenerForAllUsers(listenerPtr);
309     if (ret != AVSESSION_SUCCESS) {
310         SLOGE("RegisterSessionListenerForAllUsers fail with ret %{public}d", ret);
311         return ret;
312     }
313     listenerMapByUserId_[userIdForAllUsers_] = listenerPtr;
314     return AVSESSION_SUCCESS;
315 }
316 
RegisterServiceDeathCallback(const DeathCallback & callback)317 int32_t AVSessionManagerImpl::RegisterServiceDeathCallback(const DeathCallback& callback)
318 {
319     deathCallback_ = callback;
320     return AVSESSION_SUCCESS;
321 }
322 
UnregisterServiceDeathCallback()323 int32_t AVSessionManagerImpl::UnregisterServiceDeathCallback()
324 {
325     deathCallback_ = nullptr;
326     return AVSESSION_SUCCESS;
327 }
328 
RegisterServiceStartCallback(const std::function<void ()> serviceStartCallback)329 int32_t AVSessionManagerImpl::RegisterServiceStartCallback(const std::function<void()> serviceStartCallback)
330 {
331     SLOGI("RegisterServiceStartCallback");
332     serviceStartCallback_ = serviceStartCallback;
333     return AVSESSION_SUCCESS;
334 }
335 
UnregisterServiceStartCallback()336 int32_t AVSessionManagerImpl::UnregisterServiceStartCallback()
337 {
338     serviceStartCallback_= nullptr;
339     return AVSESSION_SUCCESS;
340 }
341 
SendSystemAVKeyEvent(const MMI::KeyEvent & keyEvent)342 int32_t AVSessionManagerImpl::SendSystemAVKeyEvent(const MMI::KeyEvent& keyEvent)
343 {
344     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::SendSystemAVKeyEvent");
345     if (!keyEvent.IsValid()) {
346         SLOGE("keyEvent is invalid");
347         return ERR_COMMAND_NOT_SUPPORT;
348     }
349 
350     auto service = GetService();
351     return service ? service->SendSystemAVKeyEvent(keyEvent) : ERR_SERVICE_NOT_EXIST;
352 }
353 
SendSystemAVKeyEvent(const MMI::KeyEvent & keyEvent,const AAFwk::Want & wantParam)354 int32_t AVSessionManagerImpl::SendSystemAVKeyEvent(const MMI::KeyEvent& keyEvent, const AAFwk::Want &wantParam)
355 {
356     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::SendSystemAVKeyEvent");
357     if (!keyEvent.IsValid()) {
358         SLOGE("keyEvent is invalid");
359         return ERR_COMMAND_NOT_SUPPORT;
360     }
361 
362     auto service = GetService();
363     return service ? service->SendSystemAVKeyEvent(keyEvent, wantParam) : ERR_SERVICE_NOT_EXIST;
364 }
365 
SendSystemControlCommand(const AVControlCommand & command)366 int32_t AVSessionManagerImpl::SendSystemControlCommand(const AVControlCommand& command)
367 {
368     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::SendSystemControlCommand");
369     if (!command.IsValid()) {
370         SLOGE("command is invalid");
371         HISYSEVENT_FAULT("CONTROL_COMMAND_FAILED", "ERROR_TYPE", "INVALID_COMMAND", "CMD", command.GetCommand(),
372             "ERROR_CODE", ERR_INVALID_PARAM, "ERROR_INFO", "avsessionmanagerimpl command is invalid");
373         return ERR_COMMAND_NOT_SUPPORT;
374     }
375 
376     auto service = GetService();
377     if (service == nullptr) {
378         HISYSEVENT_FAULT("CONTROL_COMMAND_FAILED", "ERROR_TYPE", "GET_SERVICE_ERROR",
379             "ERROR_CODE", ERR_SERVICE_NOT_EXIST, "ERROR_INFO", "mgrimp sendsystemcontrolcommand get service error");
380         return ERR_SERVICE_NOT_EXIST;
381     }
382     return service->SendSystemControlCommand(command);
383 }
384 
CastAudio(const SessionToken & token,const std::vector<AudioStandard::AudioDeviceDescriptor> & descriptors)385 int32_t AVSessionManagerImpl::CastAudio(const SessionToken& token,
386                                         const std::vector<AudioStandard::AudioDeviceDescriptor>& descriptors)
387 {
388     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::CastAudio");
389     CHECK_AND_RETURN_RET_LOG(descriptors.size() > 0, ERR_INVALID_PARAM, "devices size is zero");
390     auto service = GetService();
391     return service ? service->CastAudio(token, descriptors) : ERR_SERVICE_NOT_EXIST;
392 }
393 
CastAudioForAll(const std::vector<AudioStandard::AudioDeviceDescriptor> & descriptors)394 int32_t AVSessionManagerImpl::CastAudioForAll(const std::vector<AudioStandard::AudioDeviceDescriptor>& descriptors)
395 {
396     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::CastAudioForAll");
397     CHECK_AND_RETURN_RET_LOG(descriptors.size() > 0, ERR_INVALID_PARAM, "devices size is zero");
398     auto service = GetService();
399     return service ? service->CastAudioForAll(descriptors) : ERR_SERVICE_NOT_EXIST;
400 }
401 
Close(void)402 int32_t AVSessionManagerImpl::Close(void)
403 {
404     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::Close");
405     int32_t ret = ERR_SERVICE_NOT_EXIST;
406     auto service = GetService();
407     if (service) {
408         sptr<IAVSessionService> serviceBase = service;
409         serviceBase->AsObject()->RemoveDeathRecipient(serviceDeathRecipient_);
410         serviceDeathRecipient_ = nullptr;
411         ret = service->Close();
412     }
413     SLOGI("manager impl close with listener clear");
414     listenerMapByUserId_.clear();
415 
416     AVSessionEventHandler::GetInstance().AVSessionRemoveHandler();
417     return ret;
418 }
419 
420 #ifdef CASTPLUS_CAST_ENGINE_ENABLE
StartCastDiscovery(const int32_t castDeviceCapability,std::vector<std::string> drmSchemes)421 int32_t AVSessionManagerImpl::StartCastDiscovery(
422     const int32_t castDeviceCapability, std::vector<std::string> drmSchemes)
423 {
424     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::StartCastDiscovery");
425     auto service = GetService();
426     return service ? service->StartCastDiscovery(castDeviceCapability, drmSchemes) : ERR_SERVICE_NOT_EXIST;
427 }
428 
StopCastDiscovery()429 int32_t AVSessionManagerImpl::StopCastDiscovery()
430 {
431     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::StopCastDiscovery");
432     auto service = GetService();
433     return service ? service->StopCastDiscovery() : ERR_SERVICE_NOT_EXIST;
434 }
435 
SetDiscoverable(const bool enable)436 int32_t AVSessionManagerImpl::SetDiscoverable(const bool enable)
437 {
438     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::SetDiscoverable");
439     auto service = GetService();
440     return service ? service->SetDiscoverable(enable) : ERR_SERVICE_NOT_EXIST;
441 }
442 
StartDeviceLogging(int32_t fd,uint32_t maxSize)443 int32_t AVSessionManagerImpl::StartDeviceLogging(int32_t fd, uint32_t maxSize)
444 {
445     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::StartDeviceLogging");
446     auto service = GetService();
447     return service ? service->StartDeviceLogging(fd, maxSize) : ERR_SERVICE_NOT_EXIST;
448 }
449 
StopDeviceLogging()450 int32_t AVSessionManagerImpl::StopDeviceLogging()
451 {
452     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::StopDeviceLogging");
453     auto service = GetService();
454     return service ? service->StopDeviceLogging() : ERR_SERVICE_NOT_EXIST;
455 }
456 
StartCast(const SessionToken & sessionToken,const OutputDeviceInfo & outputDeviceInfo)457 int32_t AVSessionManagerImpl::StartCast(const SessionToken& sessionToken, const OutputDeviceInfo& outputDeviceInfo)
458 {
459     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::StartCast");
460     auto service = GetService();
461     return service ? service->StartCast(sessionToken, outputDeviceInfo) : ERR_SERVICE_NOT_EXIST;
462 }
463 
StopCast(const SessionToken & sessionToken)464 int32_t AVSessionManagerImpl::StopCast(const SessionToken& sessionToken)
465 {
466     AVSESSION_TRACE_SYNC_START("AVSessionManagerImpl::StopCast");
467     auto service = GetService();
468     return service ? service->StopCast(sessionToken) : ERR_SERVICE_NOT_EXIST;
469 }
470 #endif
471 
RegisterClientDeathObserver()472 void AVSessionManagerImpl::RegisterClientDeathObserver()
473 {
474     clientDeath_ = new(std::nothrow) ClientDeathStub();
475     if (clientDeath_ == nullptr) {
476         SLOGE("malloc failed");
477         HISYSEVENT_FAULT("CONTROL_COMMAND_FAILED", "ERROR_TYPE", "MALLOC_FAILED",
478             "ERROR_INFO", "avsession manager impl register client death observer malloc failed");
479         return;
480     }
481 
482     if (service_->RegisterClientDeathObserver(clientDeath_) != AVSESSION_SUCCESS) {
483         SLOGE("register failed");
484         HISYSEVENT_FAULT("CONTROL_COMMAND_FAILED", "ERROR_TYPE", "REGISTER_FAILED",
485             "ERROR_INFO", "avsession manager impl register client death observer register failed");
486         return;
487     }
488     SLOGI("success");
489 }
490 
ServiceDeathRecipient(const std::function<void ()> & callback)491 ServiceDeathRecipient::ServiceDeathRecipient(const std::function<void()>& callback)
492     : callback_(callback)
493 {
494     SLOGD("construct");
495 }
496 
OnRemoteDied(const wptr<IRemoteObject> & object)497 void ServiceDeathRecipient::OnRemoteDied(const wptr<IRemoteObject>& object)
498 {
499     if (callback_) {
500         callback_();
501     }
502 }
503 
ServiceStatusListener(const std::function<void ()> & callback)504 ServiceStatusListener::ServiceStatusListener(const std::function<void()>& callback)
505     : callback_(callback)
506 {
507     SLOGD("construct");
508 }
509 
OnAddSystemAbility(int32_t systemAbilityId,const std::string & deviceId)510 void ServiceStatusListener::OnAddSystemAbility(int32_t systemAbilityId, const std::string& deviceId)
511 {
512     SLOGI("OnAddSystemAbility systemAbilityId=%{public}d", systemAbilityId);
513     if (callback_) {
514         callback_();
515     }
516 }
OnRemoveSystemAbility(int32_t systemAbilityId,const std::string & deviceId)517 void ServiceStatusListener::OnRemoveSystemAbility(int32_t systemAbilityId, const std::string& deviceId)
518 {
519     SLOGI("OnRemoveSystemAbility systemAbilityId=%{public}d", systemAbilityId);
520 }
521 } // namespace OHOS::AVSession
522