• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 }