1 /*
2 * Copyright (c) 2022-2025 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_callback_client.h"
17 #include "avsession_errors.h"
18 #include "avsession_event_handler.h"
19
20 namespace OHOS::AVSession {
AVSessionCallbackClient(const std::shared_ptr<AVSessionCallback> & callback)21 AVSessionCallbackClient::AVSessionCallbackClient(const std::shared_ptr<AVSessionCallback>& callback)
22 : callback_(callback)
23 {
24 SLOGD("construct");
25 }
26
OnAVCallAnswer()27 ErrCode AVSessionCallbackClient::OnAVCallAnswer()
28 {
29 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
30
31 auto callback = callback_;
32 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
33 .AVSessionPostTask([callback]() { callback->OnAVCallAnswer(); }, std::string(__FUNCTION__)),
34 "AVSessionCallbackClient handler postTask failed");
35 return AVSESSION_SUCCESS;
36 }
37
OnAVCallHangUp()38 ErrCode AVSessionCallbackClient::OnAVCallHangUp()
39 {
40 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
41
42 auto callback = callback_;
43 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
44 .AVSessionPostTask([callback]() { callback->OnAVCallHangUp(); }, std::string(__FUNCTION__)),
45 "AVSessionCallbackClient handler postTask failed");
46 return AVSESSION_SUCCESS;
47 }
48
OnAVCallToggleCallMute()49 ErrCode AVSessionCallbackClient::OnAVCallToggleCallMute()
50 {
51 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
52
53 auto callback = callback_;
54 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
55 .AVSessionPostTask([callback]() { callback->OnAVCallToggleCallMute(); }, std::string(__FUNCTION__)),
56 "AVSessionCallbackClient handler postTask failed");
57 return AVSESSION_SUCCESS;
58 }
59
OnPlay()60 ErrCode AVSessionCallbackClient::OnPlay()
61 {
62 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
63
64 auto callback = callback_;
65 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
66 .AVSessionPostTask([callback]() { callback->OnPlay(); }, std::string(__FUNCTION__)),
67 "AVSessionCallbackClient handler postTask failed");
68 return AVSESSION_SUCCESS;
69 }
70
OnPause()71 ErrCode AVSessionCallbackClient::OnPause()
72 {
73 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
74
75 auto callback = callback_;
76 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
77 .AVSessionPostTask([callback]() { callback->OnPause(); }, std::string(__FUNCTION__)),
78 "AVSessionCallbackClient handler postTask failed");
79 return AVSESSION_SUCCESS;
80 }
81
OnStop()82 ErrCode AVSessionCallbackClient::OnStop()
83 {
84 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
85
86 auto callback = callback_;
87 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
88 .AVSessionPostTask([callback]() { callback->OnStop(); }, std::string(__FUNCTION__)),
89 "AVSessionCallbackClient handler postTask failed");
90 return AVSESSION_SUCCESS;
91 }
92
OnPlayNext()93 ErrCode AVSessionCallbackClient::OnPlayNext()
94 {
95 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
96
97 auto callback = callback_;
98 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
99 .AVSessionPostTask([callback]() { callback->OnPlayNext(); }, std::string(__FUNCTION__)),
100 "AVSessionCallbackClient handler postTask failed");
101 return AVSESSION_SUCCESS;
102 }
103
OnPlayPrevious()104 ErrCode AVSessionCallbackClient::OnPlayPrevious()
105 {
106 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
107
108 auto callback = callback_;
109 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
110 .AVSessionPostTask([callback]() { callback->OnPlayPrevious(); }, std::string(__FUNCTION__)),
111 "AVSessionCallbackClient handler postTask failed");
112 return AVSESSION_SUCCESS;
113 }
114
OnFastForward(int64_t time)115 ErrCode AVSessionCallbackClient::OnFastForward(int64_t time)
116 {
117 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
118
119 auto callback = callback_;
120 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
121 .AVSessionPostTask([callback, time]() { callback->OnFastForward(time); }, std::string(__FUNCTION__)),
122 "AVSessionCallbackClient handler postTask failed");
123 return AVSESSION_SUCCESS;
124 }
125
OnRewind(int64_t time)126 ErrCode AVSessionCallbackClient::OnRewind(int64_t time)
127 {
128 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
129
130 auto callback = callback_;
131 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
132 .AVSessionPostTask([callback, time]() { callback->OnRewind(time); }, std::string(__FUNCTION__)),
133 "AVSessionCallbackClient handler postTask failed");
134 return AVSESSION_SUCCESS;
135 }
136
OnSeek(int64_t time)137 ErrCode AVSessionCallbackClient::OnSeek(int64_t time)
138 {
139 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
140
141 auto callback = callback_;
142 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
143 .AVSessionPostTask([callback, time]() { callback->OnSeek(time); }, std::string(__FUNCTION__)),
144 "AVSessionCallbackClient handler postTask failed");
145 return AVSESSION_SUCCESS;
146 }
147
OnSetSpeed(double speed)148 ErrCode AVSessionCallbackClient::OnSetSpeed(double speed)
149 {
150 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
151
152 auto callback = callback_;
153 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
154 .AVSessionPostTask([callback, speed]() { callback->OnSetSpeed(speed); }, std::string(__FUNCTION__)),
155 "AVSessionCallbackClient handler postTask failed");
156 return AVSESSION_SUCCESS;
157 }
158
OnSetLoopMode(int32_t loopMode)159 ErrCode AVSessionCallbackClient::OnSetLoopMode(int32_t loopMode)
160 {
161 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
162
163 auto callback = callback_;
164 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
165 .AVSessionPostTask([callback, loopMode]() { callback->OnSetLoopMode(loopMode); }, std::string(__FUNCTION__)),
166 "AVSessionCallbackClient handler postTask failed");
167 return AVSESSION_SUCCESS;
168 }
169
OnSetTargetLoopMode(int32_t targetLoopMode)170 ErrCode AVSessionCallbackClient::OnSetTargetLoopMode(int32_t targetLoopMode)
171 {
172 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
173
174 auto callback = callback_;
175 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
176 .AVSessionPostTask([callback, targetLoopMode]() { callback->OnSetTargetLoopMode(targetLoopMode); },
177 std::string(__FUNCTION__)), "AVSessionCallbackClient handler postTask failed");
178 return AVSESSION_SUCCESS;
179 }
180
OnToggleFavorite(const std::string & mediaId)181 ErrCode AVSessionCallbackClient::OnToggleFavorite(const std::string& mediaId)
182 {
183 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
184
185 auto callback = callback_;
186 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
187 .AVSessionPostTask([callback, mediaId]() { callback->OnToggleFavorite(mediaId); }, std::string(__FUNCTION__)),
188 "AVSessionCallbackClient handler postTask failed");
189 return AVSESSION_SUCCESS;
190 }
191
OnMediaKeyEvent(const MMI::KeyEvent & keyEvent)192 ErrCode AVSessionCallbackClient::OnMediaKeyEvent(const MMI::KeyEvent& keyEvent)
193 {
194 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
195
196 auto callback = callback_;
197 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
198 .AVSessionPostTask([callback, keyEvent]() { callback->OnMediaKeyEvent(keyEvent); }, std::string(__FUNCTION__)),
199 "AVSessionCallbackClient handler postTask failed");
200 return AVSESSION_SUCCESS;
201 }
202
OnOutputDeviceChange(const int32_t connectionState,const OutputDeviceInfo & outputDeviceInfo)203 ErrCode AVSessionCallbackClient::OnOutputDeviceChange(const int32_t connectionState,
204 const OutputDeviceInfo& outputDeviceInfo)
205 {
206 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
207
208 auto callback = callback_;
209 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
210 .AVSessionPostTask([callback, connectionState, outputDeviceInfo]() {
211 callback->OnOutputDeviceChange(connectionState, outputDeviceInfo);
212 }, std::string(__FUNCTION__)), "AVSessionCallbackClient handler postTask failed");
213 return AVSESSION_SUCCESS;
214 }
215
OnCommonCommand(const std::string & commonCommand,const AAFwk::WantParams & commandArgs)216 ErrCode AVSessionCallbackClient::OnCommonCommand(const std::string& commonCommand,
217 const AAFwk::WantParams& commandArgs)
218 {
219 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
220 auto callback = callback_;
221 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance().AVSessionPostTask([callback,
222 commonCommand, commandArgs]() { callback->OnCommonCommand(commonCommand, commandArgs); },
223 std::string(__FUNCTION__)), "AVSessionCallbackClient handler postTask failed");
224 return AVSESSION_SUCCESS;
225 }
226
OnSkipToQueueItem(int32_t itemId)227 ErrCode AVSessionCallbackClient::OnSkipToQueueItem(int32_t itemId)
228 {
229 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
230
231 auto callback = callback_;
232 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
233 .AVSessionPostTask([callback, itemId]() { callback->OnSkipToQueueItem(itemId); }, std::string(__FUNCTION__)),
234 "AVSessionCallbackClient handler postTask failed");
235 return AVSESSION_SUCCESS;
236 }
237
OnPlayFromAssetId(int64_t assetId)238 ErrCode AVSessionCallbackClient::OnPlayFromAssetId(int64_t assetId)
239 {
240 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
241
242 auto callback = callback_;
243 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
244 .AVSessionPostTask([callback, assetId]() { callback->OnPlayFromAssetId(assetId); }, std::string(__FUNCTION__)),
245 "AVSessionCallbackClient handler postTask failed");
246 return AVSESSION_SUCCESS;
247 }
248
OnPlayWithAssetId(const std::string & assetId)249 ErrCode AVSessionCallbackClient::OnPlayWithAssetId(const std::string& assetId)
250 {
251 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
252
253 auto callback = callback_;
254 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
255 .AVSessionPostTask([callback, assetId]() { callback->OnPlayWithAssetId(assetId); }, std::string(__FUNCTION__)),
256 "AVSessionCallbackClient handler postTask failed");
257 return AVSESSION_SUCCESS;
258 }
259
OnCastDisplayChange(const CastDisplayInfo & castDisplayInfo)260 ErrCode AVSessionCallbackClient::OnCastDisplayChange(const CastDisplayInfo& castDisplayInfo)
261 {
262 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
263
264 auto callback = callback_;
265 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
266 .AVSessionPostTask([callback, castDisplayInfo]() { callback->OnCastDisplayChange(castDisplayInfo); },
267 std::string(__FUNCTION__)), "AVSessionCallbackClient handler postTask failed");
268 return AVSESSION_SUCCESS;
269 }
270
OnCastDisplaySizeChange(const CastDisplayInfo & castDisplayInfo)271 ErrCode AVSessionCallbackClient::OnCastDisplaySizeChange(const CastDisplayInfo& castDisplayInfo)
272 {
273 CHECK_AND_RETURN_RET_LOG(callback_ != nullptr, AVSESSION_ERROR, "callback is null");
274
275 auto callback = callback_;
276 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
277 .AVSessionPostTask([callback, castDisplayInfo]() { callback->OnCastDisplaySizeChange(castDisplayInfo); },
278 std::string(__FUNCTION__)), "AVSessionCallbackClient handler postTask failed");
279 return AVSESSION_SUCCESS;
280 }
281
OnCustomData(const AAFwk::WantParams & data)282 ErrCode AVSessionCallbackClient::OnCustomData(const AAFwk::WantParams& data)
283 {
284 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
285
286 auto callback = callback_;
287 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
288 .AVSessionPostTask([callback, data]() { callback->OnCustomData(data); }, EVENT_NAME),
289 "AVCastControllerCallbackClient handler postTask failed");
290 return AVSESSION_SUCCESS;
291 }
292
~AVSessionCallbackClient()293 AVSessionCallbackClient::~AVSessionCallbackClient()
294 {
295 AVSessionEventHandler::GetInstance().AVSessionRemoveTask(std::string(__FUNCTION__));
296 SLOGD("destroy");
297 }
298 }