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