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 "avcontroller_item.h"
17 #include "ipc_skeleton.h"
18 #include "avsession_errors.h"
19 #include "avsession_log.h"
20 #include "avsession_pixel_map_adapter.h"
21 #include "avsession_trace.h"
22 #include "command_send_limit.h"
23 #include "avsession_utils.h"
24 #include "permission_checker.h"
25 #include "avsession_sysevent.h"
26 #include "want_params.h"
27
28 #if !defined(WINDOWS_PLATFORM) and !defined(MAC_PLATFORM) and !defined(IOS_PLATFORM)
29 #include <malloc.h>
30 #endif
31
32 namespace OHOS::AVSession {
AVControllerItem(pid_t pid,const sptr<AVSessionItem> & session,int32_t userId)33 AVControllerItem::AVControllerItem(pid_t pid, const sptr<AVSessionItem>& session, int32_t userId)
34 : pid_(pid), session_(session), userId_(userId)
35 {
36 sessionId_ = session_->GetSessionId();
37 SLOGI("construct sessionId=%{public}s, pid=%{public}d, userId=%{public}d",
38 AVSessionUtils::GetAnonySessionId(sessionId_).c_str(), static_cast<int>(pid_), userId_);
39 }
40
~AVControllerItem()41 AVControllerItem::~AVControllerItem()
42 {
43 SLOGI("destroy sessionId=%{public}s, pid=%{public}d, userId=%{public}d",
44 AVSessionUtils::GetAnonySessionId(sessionId_).c_str(), static_cast<int>(pid_), userId_);
45 }
46
GetUserId() const47 int32_t AVControllerItem::GetUserId() const
48 {
49 return userId_;
50 }
51
RegisterCallbackInner(const sptr<IRemoteObject> & callback)52 int32_t AVControllerItem::RegisterCallbackInner(const sptr<IRemoteObject>& callback)
53 {
54 std::lock_guard lockGuard(callbackMutex_);
55 SLOGD("do register callback for controller %{public}d", static_cast<int>(pid_));
56 callback_ = iface_cast<AVControllerCallbackProxy>(callback);
57 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "RegisterCallbackInner callback_ is nullptr");
58 return AVSESSION_SUCCESS;
59 }
60
RegisterAVControllerCallback(const std::shared_ptr<AVControllerCallback> & callback)61 int32_t AVControllerItem::RegisterAVControllerCallback(const std::shared_ptr<AVControllerCallback> &callback)
62 {
63 std::lock_guard lockGuard(callbackMutex_);
64 innerCallback_ = callback;
65 CHECK_AND_RETURN_RET_LOG(innerCallback_ != nullptr, AVSESSION_ERROR, "RegisterCallbackInner callback_ is nullptr");
66 return AVSESSION_SUCCESS;
67 }
68
GetAVCallMetaData(AVCallMetaData & avCallMetaData)69 int32_t AVControllerItem::GetAVCallMetaData(AVCallMetaData& avCallMetaData)
70 {
71 std::lock_guard lockGuard(sessionMutex_);
72 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
73 avCallMetaData = session_->GetAVCallMetaData();
74 return AVSESSION_SUCCESS;
75 }
76
GetAVCallState(AVCallState & avCallState)77 int32_t AVControllerItem::GetAVCallState(AVCallState& avCallState)
78 {
79 std::lock_guard lockGuard(sessionMutex_);
80 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
81 avCallState = session_->GetAVCallState();
82 return AVSESSION_SUCCESS;
83 }
84
85 // LCOV_EXCL_START
GetAVPlaybackState(AVPlaybackState & state)86 int32_t AVControllerItem::GetAVPlaybackState(AVPlaybackState& state)
87 {
88 std::lock_guard lockGuard(sessionMutex_);
89 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
90 state = session_->GetPlaybackState();
91 return AVSESSION_SUCCESS;
92 }
93 // LCOV_EXCL_STOP
94
GetAVMetaData(AVMetaData & data)95 int32_t AVControllerItem::GetAVMetaData(AVMetaData& data)
96 {
97 std::lock_guard lockGuard(sessionMutex_);
98 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
99 data = session_->GetMetaData();
100 if (data.GetMediaImage() != nullptr && !data.GetMediaImageUri().empty()) {
101 SLOGD("isFromSession %{public}d in metaGet", isFromSession_);
102 if (isFromSession_) {
103 data.GetMediaImage()->Clear();
104 } else {
105 return ERR_INVALID_PARAM;
106 }
107 }
108 return AVSESSION_SUCCESS;
109 }
110
111 // LCOV_EXCL_START
GetAVQueueItems(std::vector<AVQueueItem> & items)112 int32_t AVControllerItem::GetAVQueueItems(std::vector<AVQueueItem>& items)
113 {
114 std::lock_guard lockGuard(sessionMutex_);
115 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
116 items = session_->GetQueueItems();
117 return AVSESSION_SUCCESS;
118 }
119
GetAVQueueTitle(std::string & title)120 int32_t AVControllerItem::GetAVQueueTitle(std::string& title)
121 {
122 std::lock_guard lockGuard(sessionMutex_);
123 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
124 title = session_->GetQueueTitle();
125 return AVSESSION_SUCCESS;
126 }
127
SkipToQueueItem(int32_t & itemId)128 int32_t AVControllerItem::SkipToQueueItem(int32_t& itemId)
129 {
130 std::lock_guard lockGuard(sessionMutex_);
131 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
132 session_->HandleSkipToQueueItem(itemId);
133 return AVSESSION_SUCCESS;
134 }
135
GetExtras(AAFwk::WantParams & extras)136 int32_t AVControllerItem::GetExtras(AAFwk::WantParams& extras)
137 {
138 std::lock_guard lockGuard(sessionMutex_);
139 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
140 CHECK_AND_RETURN_RET_LOG(CommandSendLimit::GetInstance().IsCommandSendEnable(OHOS::IPCSkeleton::GetCallingPid()),
141 ERR_COMMAND_SEND_EXCEED_MAX, "command send number exceed max");
142 extras = session_->GetExtras();
143 return AVSESSION_SUCCESS;
144 }
145
SendAVKeyEvent(const MMI::KeyEvent & keyEvent)146 int32_t AVControllerItem::SendAVKeyEvent(const MMI::KeyEvent& keyEvent)
147 {
148 std::lock_guard lockGuard(sessionMutex_);
149 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
150 session_->HandleMediaKeyEvent(keyEvent);
151 return AVSESSION_SUCCESS;
152 }
153
GetLaunchAbility(AbilityRuntime::WantAgent::WantAgent & ability)154 int32_t AVControllerItem::GetLaunchAbility(AbilityRuntime::WantAgent::WantAgent& ability)
155 {
156 std::lock_guard lockGuard(sessionMutex_);
157 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
158 ability = session_->GetLaunchAbility();
159 return AVSESSION_SUCCESS;
160 }
161
GetValidCommands(std::vector<int32_t> & cmds)162 int32_t AVControllerItem::GetValidCommands(std::vector<int32_t>& cmds)
163 {
164 std::lock_guard lockGuard(sessionMutex_);
165 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
166 cmds = session_->GetSupportCommand();
167 return AVSESSION_SUCCESS;
168 }
169 // LCOV_EXCL_STOP
170
IsSessionActive(bool & isActive)171 int32_t AVControllerItem::IsSessionActive(bool& isActive)
172 {
173 std::lock_guard lockGuard(sessionMutex_);
174 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
175 isActive = session_->IsActive();
176 return AVSESSION_SUCCESS;
177 }
178
179 // LCOV_EXCL_START
SendControlCommand(const AVControlCommand & cmd)180 int32_t AVControllerItem::SendControlCommand(const AVControlCommand& cmd)
181 {
182 std::lock_guard lockGuard(sessionMutex_);
183 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "session not exist");
184 std::vector<int32_t> cmds = session_->GetSupportCommand();
185 CHECK_AND_RETURN_RET_LOG(std::find(cmds.begin(), cmds.end(), cmd.GetCommand()) != cmds.end(),
186 ERR_COMMAND_NOT_SUPPORT, "command not support");
187 CHECK_AND_RETURN_RET_LOG(CommandSendLimit::GetInstance().IsCommandSendEnable(OHOS::IPCSkeleton::GetCallingPid()),
188 ERR_COMMAND_SEND_EXCEED_MAX, "command send number exceed max");
189 session_->ExecuteControllerCommand(cmd);
190 return AVSESSION_SUCCESS;
191 }
192 // LCOV_EXCL_STOP
193
SendCommonCommand(const std::string & commonCommand,const AAFwk::WantParams & commandArgs)194 int32_t AVControllerItem::SendCommonCommand(const std::string& commonCommand, const AAFwk::WantParams& commandArgs)
195 {
196 std::lock_guard lockGuard(sessionMutex_);
197 CHECK_AND_RETURN_RET_LOG(session_ != nullptr, ERR_SESSION_NOT_EXIST, "Session not exist");
198 CHECK_AND_RETURN_RET_LOG(CommandSendLimit::GetInstance().IsCommandSendEnable(OHOS::IPCSkeleton::GetCallingPid()),
199 ERR_COMMAND_SEND_EXCEED_MAX, "common command send number exceed max");
200 session_->ExecueCommonCommand(commonCommand, commandArgs);
201 return AVSESSION_SUCCESS;
202 }
203
204 // LCOV_EXCL_START
SetAVCallMetaFilter(const AVCallMetaData::AVCallMetaMaskType & filter)205 int32_t AVControllerItem::SetAVCallMetaFilter(const AVCallMetaData::AVCallMetaMaskType& filter)
206 {
207 std::lock_guard lockGuard(avCallMetaMaskMutex_);
208 avCallMetaMask_ = filter;
209 return AVSESSION_SUCCESS;
210 }
211
SetAVCallStateFilter(const AVCallState::AVCallStateMaskType & filter)212 int32_t AVControllerItem::SetAVCallStateFilter(const AVCallState::AVCallStateMaskType& filter)
213 {
214 std::lock_guard lockGuard(avCallStateMaskMutex_);
215 avCallStateMask_ = filter;
216 return AVSESSION_SUCCESS;
217 }
218
SetMetaFilter(const AVMetaData::MetaMaskType & filter)219 int32_t AVControllerItem::SetMetaFilter(const AVMetaData::MetaMaskType& filter)
220 {
221 std::lock_guard lockGuard(metaMaskMutex_);
222 metaMask_ = filter;
223 return AVSESSION_SUCCESS;
224 }
225
SetPlaybackFilter(const AVPlaybackState::PlaybackStateMaskType & filter)226 int32_t AVControllerItem::SetPlaybackFilter(const AVPlaybackState::PlaybackStateMaskType& filter)
227 {
228 std::lock_guard lockGuard(playbackMaskMutex_);
229 playbackMask_ = filter;
230 return AVSESSION_SUCCESS;
231 }
232 // LCOV_EXCL_STOP
233
Destroy()234 int32_t AVControllerItem::Destroy()
235 {
236 SLOGI("do controller destroyfor pid %{public}d", static_cast<int>(pid_));
237 {
238 std::lock_guard callbackLockGuard(callbackMutex_);
239 callback_ = nullptr;
240 innerCallback_ = nullptr;
241 }
242 {
243 std::lock_guard sessionLockGuard(sessionMutex_);
244 if (session_ != nullptr) {
245 session_->HandleControllerRelease(pid_);
246 session_ = nullptr;
247 sessionId_.clear();
248 }
249 }
250 {
251 std::lock_guard serviceCallbacklockGuard(serviceCallbackMutex_);
252 if (serviceCallback_) {
253 serviceCallback_(*this);
254 }
255 }
256 return AVSESSION_SUCCESS;
257 }
258
DestroyWithoutReply()259 int32_t AVControllerItem::DestroyWithoutReply()
260 {
261 SLOGI("do controller DestroyWithoutReply for pid %{public}d", static_cast<int>(pid_));
262 {
263 std::lock_guard callbackLockGuard(callbackMutex_);
264 innerCallback_ = nullptr;
265 callback_ = nullptr;
266 }
267 {
268 std::lock_guard sessionLockGuard(sessionMutex_);
269 if (session_ != nullptr) {
270 session_->HandleControllerRelease(pid_);
271 sessionId_.clear();
272 session_ = nullptr;
273 }
274 }
275 return AVSESSION_SUCCESS;
276 }
277
278 // LCOV_EXCL_START
GetSessionId()279 std::string AVControllerItem::GetSessionId()
280 {
281 return sessionId_;
282 }
283 // LCOV_EXCL_STOP
284
HandleSessionDestroy()285 void AVControllerItem::HandleSessionDestroy()
286 {
287 {
288 std::lock_guard callbackLockGuard(callbackMutex_);
289 if (callback_ != nullptr) {
290 callback_->OnSessionDestroy();
291 }
292 if (innerCallback_ != nullptr) {
293 innerCallback_->OnSessionDestroy();
294 }
295 }
296 std::lock_guard sessionLockGuard(sessionMutex_);
297 session_ = nullptr;
298 sessionId_.clear();
299 }
300
301 // LCOV_EXCL_START
HandleAVCallStateChange(const AVCallState & avCallState)302 void AVControllerItem::HandleAVCallStateChange(const AVCallState& avCallState)
303 {
304 std::lock_guard callbackLockGuard(callbackMutex_);
305 AVCallState stateOut;
306 std::lock_guard avCallStateLockGuard(avCallStateMaskMutex_);
307 if (avCallState.CopyToByMask(avCallStateMask_, stateOut)) {
308 SLOGI("update avcall state");
309 AVSESSION_TRACE_SYNC_START("AVControllerItem::OnAVCallStateChange");
310 if (callback_ != nullptr) {
311 callback_->OnAVCallStateChange(stateOut);
312 }
313 if (innerCallback_ != nullptr) {
314 innerCallback_->OnAVCallStateChange(stateOut);
315 }
316 }
317 }
318
HandleAVCallMetaDataChange(const AVCallMetaData & avCallMetaData)319 void AVControllerItem::HandleAVCallMetaDataChange(const AVCallMetaData& avCallMetaData)
320 {
321 std::lock_guard callbackLockGuard(callbackMutex_);
322 AVCallMetaData metaOut;
323 std::lock_guard avCallMetaDataMaskLockGuard(avCallMetaMaskMutex_);
324 if (avCallMetaData.CopyToByMask(avCallMetaMask_, metaOut)) {
325 if (avCallMetaMask_.test(AVCallMetaData::AVCALL_META_KEY_MEDIA_IMAGE)) {
326 std::shared_ptr<AVSessionPixelMap> innerPixelMap = nullptr;
327 if (metaOut.GetMediaImage() != nullptr) {
328 std::string fileDir = AVSessionUtils::GetCachePathName(userId_);
329 std::string fileName = sessionId_ + AVSessionUtils::GetFileSuffix();
330 innerPixelMap = metaOut.GetMediaImage();
331 AVSessionUtils::ReadImageFromFile(innerPixelMap, fileDir, fileName);
332 }
333 metaOut.SetMediaImage(innerPixelMap);
334 }
335
336 if (avCallMetaMask_.test(AVCallMetaData::AVCALL_META_KEY_NAME)) {
337 metaOut.SetName(avCallMetaData.GetName());
338 }
339
340 if (avCallMetaMask_.test(AVCallMetaData::AVCALL_META_KEY_PHONE_NUMBER)) {
341 metaOut.SetPhoneNumber(avCallMetaData.GetPhoneNumber());
342 }
343 SLOGI("update avcall meta data");
344 }
345
346 if (callback_ != nullptr) {
347 callback_->OnAVCallMetaDataChange(metaOut);
348 }
349 if (innerCallback_ != nullptr) {
350 innerCallback_->OnAVCallMetaDataChange(metaOut);
351 }
352 AVSESSION_TRACE_SYNC_START("AVControllerItem::OnAVCallMetaDataChange");
353 }
354
HandlePlaybackStateChange(const AVPlaybackState & state)355 void AVControllerItem::HandlePlaybackStateChange(const AVPlaybackState& state)
356 {
357 std::lock_guard callbackLockGuard(callbackMutex_);
358 AVPlaybackState stateOut;
359 std::lock_guard playbackLockGuard(playbackMaskMutex_);
360 if (state.CopyToByMask(playbackMask_, stateOut)) {
361 SLOGI("update playback pid %{public}d, state %{public}d",
362 static_cast<int>(pid_), static_cast<int>(stateOut.GetState()));
363 AVSESSION_TRACE_SYNC_START("AVControllerItem::OnPlaybackStateChange");
364 if (callback_ != nullptr) {
365 callback_->OnPlaybackStateChange(stateOut);
366 }
367 if (innerCallback_ != nullptr) {
368 innerCallback_->OnPlaybackStateChange(stateOut);
369 }
370 }
371 }
372
HandleMetaDataChange(const AVMetaData & data)373 void AVControllerItem::HandleMetaDataChange(const AVMetaData& data)
374 {
375 std::lock_guard callbackLockGuard(callbackMutex_);
376 AVMetaData metaOut;
377 std::lock_guard metaMaskLockGuard(metaMaskMutex_);
378 if (data.CopyToByMask(metaMask_, metaOut)) {
379 if ((metaMask_.test(AVMetaData::META_KEY_MEDIA_IMAGE)) && (metaOut.GetMediaImage() != nullptr)) {
380 std::string fileDir = AVSessionUtils::GetCachePathName(userId_);
381 std::shared_ptr<AVSessionPixelMap> innerPixelMap = metaOut.GetMediaImage();
382 AVSessionUtils::ReadImageFromFile(innerPixelMap, fileDir, sessionId_ + AVSessionUtils::GetFileSuffix());
383 metaOut.SetMediaImage(innerPixelMap);
384 }
385 if ((metaMask_.test(AVMetaData::META_KEY_AVQUEUE_IMAGE)) && (metaOut.GetAVQueueImage() != nullptr)) {
386 std::string avQueueFileDir = AVSessionUtils::GetFixedPathName(userId_);
387 CHECK_AND_RETURN_LOG(session_ != nullptr, "Session not exist");
388 std::string avQueueFileName =
389 session_->GetBundleName() + "_" + metaOut.GetAVQueueId() + AVSessionUtils::GetFileSuffix();
390 std::shared_ptr<AVSessionPixelMap> avQueuePixelMap = metaOut.GetAVQueueImage();
391 AVSessionUtils::ReadImageFromFile(avQueuePixelMap, avQueueFileDir, avQueueFileName);
392 metaOut.SetAVQueueImage(avQueuePixelMap);
393 }
394 if (!metaMask_.test(AVMetaData::META_KEY_ASSET_ID)) {
395 metaOut.SetAssetId(data.GetAssetId());
396 }
397 SLOGI("update metaData pid %{public}d, title %{public}s", static_cast<int>(pid_), metaOut.GetTitle().c_str());
398 AVSESSION_TRACE_SYNC_START("AVControllerItem::OnMetaDataChange");
399 if (metaOut.GetMediaImage() != nullptr && !metaOut.GetMediaImageUri().empty()) {
400 SLOGI("isFromSession %{public}d in metaChange", isFromSession_);
401 if (isFromSession_) {
402 metaOut.GetMediaImage()->Clear();
403 } else {
404 metaOut.SetMediaImageUri("");
405 }
406 }
407 if (callback_ != nullptr) {
408 callback_->OnMetaDataChange(metaOut);
409 }
410 if (innerCallback_ != nullptr) {
411 innerCallback_->OnMetaDataChange(metaOut);
412 }
413 }
414 std::shared_ptr<AVSessionPixelMap> innerQueuePixelMap = metaOut.GetAVQueueImage();
415 AVSessionPixelMapAdapter::CleanAVSessionPixelMap(innerQueuePixelMap);
416 std::shared_ptr<AVSessionPixelMap> innerMediaPixelMap = metaOut.GetMediaImage();
417 AVSessionPixelMapAdapter::CleanAVSessionPixelMap(innerMediaPixelMap);
418 }
419
HandleOutputDeviceChange(const int32_t connectionState,const OutputDeviceInfo & outputDeviceInfo)420 void AVControllerItem::HandleOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo& outputDeviceInfo)
421 {
422 SLOGD("Connection state %{public}d", connectionState);
423 std::lock_guard lockGuard(callbackMutex_);
424 CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
425 callback_->OnOutputDeviceChange(connectionState, outputDeviceInfo);
426 }
427 // LCOV_EXCL_STOP
428
HandleActiveStateChange(bool isActive)429 void AVControllerItem::HandleActiveStateChange(bool isActive)
430 {
431 std::lock_guard lockGuard(callbackMutex_);
432 CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
433 callback_->OnActiveStateChange(isActive);
434 }
435
436 // LCOV_EXCL_START
HandleValidCommandChange(const std::vector<int32_t> & cmds)437 void AVControllerItem::HandleValidCommandChange(const std::vector<int32_t>& cmds)
438 {
439 std::lock_guard lockGuard(callbackMutex_);
440 CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
441 SLOGD("do OnValidCommandChange with pid %{public}d cmd list size %{public}d",
442 static_cast<int>(pid_), static_cast<int>(cmds.size()));
443 callback_->OnValidCommandChange(cmds);
444 }
445 // LCOV_EXCL_STOP
446
HandleSetSessionEvent(const std::string & event,const AAFwk::WantParams & args)447 void AVControllerItem::HandleSetSessionEvent(const std::string& event, const AAFwk::WantParams& args)
448 {
449 std::lock_guard lockGuard(callbackMutex_);
450 CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
451 AVSESSION_TRACE_SYNC_START("AVControllerItem::OnSessionEventChange");
452 callback_->OnSessionEventChange(event, args);
453 }
454
455 // LCOV_EXCL_START
HandleQueueItemsChange(const std::vector<AVQueueItem> & items)456 void AVControllerItem::HandleQueueItemsChange(const std::vector<AVQueueItem>& items)
457 {
458 std::lock_guard lockGuard(callbackMutex_);
459 CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
460 AVSESSION_TRACE_SYNC_START("AVControllerItem::OnQueueItemsChange");
461 callback_->OnQueueItemsChange(items);
462 }
463
HandleQueueTitleChange(const std::string & title)464 void AVControllerItem::HandleQueueTitleChange(const std::string& title)
465 {
466 std::lock_guard lockGuard(callbackMutex_);
467 CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
468 AVSESSION_TRACE_SYNC_START("AVControllerItem::OnQueueTitleChange");
469 callback_->OnQueueTitleChange(title);
470 }
471
HandleExtrasChange(const AAFwk::WantParams & extras)472 void AVControllerItem::HandleExtrasChange(const AAFwk::WantParams& extras)
473 {
474 std::lock_guard lockGuard(callbackMutex_);
475 CHECK_AND_RETURN_LOG(callback_ != nullptr, "callback_ is nullptr");
476 AVSESSION_TRACE_SYNC_START("AVControllerItem::OnSetExtras");
477 callback_->OnExtrasChange(extras);
478 }
479 // LCOV_EXCL_STOP
480
GetPid() const481 pid_t AVControllerItem::GetPid() const
482 {
483 return pid_;
484 }
485
HasSession(const std::string & sessionId)486 bool AVControllerItem::HasSession(const std::string& sessionId)
487 {
488 return sessionId_ == sessionId;
489 }
490
SetServiceCallbackForRelease(const std::function<void (AVControllerItem &)> & callback)491 void AVControllerItem::SetServiceCallbackForRelease(const std::function<void(AVControllerItem&)>& callback)
492 {
493 std::lock_guard lockGuard(serviceCallbackMutex_);
494 serviceCallback_ = callback;
495 }
496 } // namespace OHOS::AVSession
497