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_callback_client.h"
17 #include "avsession_errors.h"
18 #include "avsession_log.h"
19 #include "avsession_event_handler.h"
20
21 namespace OHOS::AVSession {
AVControllerCallbackClient(const std::shared_ptr<AVControllerCallback> & callback)22 AVControllerCallbackClient::AVControllerCallbackClient(const std::shared_ptr<AVControllerCallback>& callback)
23 : callback_(callback)
24 {
25 SLOGD("construct");
26 }
27
OnSessionDestroy()28 ErrCode AVControllerCallbackClient::OnSessionDestroy()
29 {
30 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
31
32 auto callback = callback_;
33 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
34 .AVSessionPostTask([callback]() { callback->OnSessionDestroy(); }, EVENT_NAME),
35 "AVControllerCallbackClient handler postTask failed");
36 return AVSESSION_SUCCESS;
37 }
38
OnAVCallMetaDataChange(const AVCallMetaData & data)39 ErrCode AVControllerCallbackClient::OnAVCallMetaDataChange(const AVCallMetaData& data)
40 {
41 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
42
43 auto callback = callback_;
44 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
45 .AVSessionPostTask([callback, data]() { callback->OnAVCallMetaDataChange(data); }, EVENT_NAME),
46 "AVControllerCallbackClient handler postTask failed");
47 return AVSESSION_SUCCESS;
48 }
49
OnAVCallStateChange(const AVCallState & state)50 ErrCode AVControllerCallbackClient::OnAVCallStateChange(const AVCallState& state)
51 {
52 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
53
54 auto callback = callback_;
55 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
56 .AVSessionPostTask([callback, state]() { callback->OnAVCallStateChange(state); }, EVENT_NAME),
57 "AVControllerCallbackClient handler postTask failed");
58 return AVSESSION_SUCCESS;
59 }
60
OnPlaybackStateChange(const AVPlaybackState & state)61 ErrCode AVControllerCallbackClient::OnPlaybackStateChange(const AVPlaybackState& state)
62 {
63 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
64
65 auto callback = callback_;
66 callback->OnPlaybackStateChange(state);
67
68 if (playbackStateListener_) {
69 playbackStateListener_(state);
70 }
71 return AVSESSION_SUCCESS;
72 }
73
OnMetaDataChange(const AVMetaData & data)74 ErrCode AVControllerCallbackClient::OnMetaDataChange(const AVMetaData& data)
75 {
76 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
77
78 auto callback = callback_;
79 callback->OnMetaDataChange(data);
80 return AVSESSION_SUCCESS;
81 }
82
OnActiveStateChange(bool isActive)83 ErrCode AVControllerCallbackClient::OnActiveStateChange(bool isActive)
84 {
85 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
86
87 auto callback = callback_;
88 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
89 .AVSessionPostTask([callback, isActive]() { callback->OnActiveStateChange(isActive); }, EVENT_NAME),
90 "AVControllerCallbackClient handler postTask failed");
91 return AVSESSION_SUCCESS;
92 }
93
OnValidCommandChange(const std::vector<int32_t> & cmds)94 ErrCode AVControllerCallbackClient::OnValidCommandChange(const std::vector<int32_t>& cmds)
95 {
96 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
97
98 auto callback = callback_;
99 callback->OnValidCommandChange(cmds);
100 return AVSESSION_SUCCESS;
101 }
102
OnOutputDeviceChange(const int32_t connectionState,const OutputDeviceInfo & info)103 ErrCode AVControllerCallbackClient::OnOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo& info)
104 {
105 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
106
107 auto callback = callback_;
108 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
109 .AVSessionPostTask([callback, connectionState, info]() {
110 callback->OnOutputDeviceChange(connectionState, info);
111 }, EVENT_NAME),
112 "AVControllerCallbackClient handler postTask failed");
113 return AVSESSION_SUCCESS;
114 }
115
OnSessionEventChange(const std::string & event,const AAFwk::WantParams & args)116 ErrCode AVControllerCallbackClient::OnSessionEventChange(const std::string& event, const AAFwk::WantParams& args)
117 {
118 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
119
120 auto callback = callback_;
121 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
122 .AVSessionPostTask([callback, event, args]() { callback->OnSessionEventChange(event, args); }, EVENT_NAME),
123 "AVControllerCallbackClient handler postTask failed");
124 return AVSESSION_SUCCESS;
125 }
126
OnQueueItemsChange(const std::vector<AVQueueItem> & items)127 ErrCode AVControllerCallbackClient::OnQueueItemsChange(const std::vector<AVQueueItem>& items)
128 {
129 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
130
131 auto callback = callback_;
132 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
133 .AVSessionPostTask([callback, items]() { callback->OnQueueItemsChange(items); }, EVENT_NAME),
134 "AVControllerCallbackClient handler postTask failed");
135 return AVSESSION_SUCCESS;
136 }
137
OnQueueTitleChange(const std::string & title)138 ErrCode AVControllerCallbackClient::OnQueueTitleChange(const std::string& title)
139 {
140 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
141
142 auto callback = callback_;
143 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
144 .AVSessionPostTask([callback, title]() { callback->OnQueueTitleChange(title); }, EVENT_NAME),
145 "AVControllerCallbackClient handler postTask failed");
146 return AVSESSION_SUCCESS;
147 }
148
OnExtrasChange(const AAFwk::WantParams & extras)149 ErrCode AVControllerCallbackClient::OnExtrasChange(const AAFwk::WantParams& extras)
150 {
151 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
152
153 auto callback = callback_;
154 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
155 .AVSessionPostTask([callback, extras]() { callback->OnExtrasChange(extras); }, EVENT_NAME),
156 "AVControllerCallbackClient handler postTask failed");
157 return AVSESSION_SUCCESS;
158 }
159
OnCustomData(const AAFwk::WantParams & data)160 ErrCode AVControllerCallbackClient::OnCustomData(const AAFwk::WantParams& data)
161 {
162 CHECK_AND_RETURN_RET_LOG(callback_, AVSESSION_ERROR, "callback is null");
163
164 auto callback = callback_;
165 CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
166 .AVSessionPostTask([callback, data]() { callback->OnCustomData(data); }, EVENT_NAME),
167 "AVControllerCallbackClient handler postTask failed");
168 return AVSESSION_SUCCESS;
169 }
170
AddListenerForPlaybackState(const std::function<void (const AVPlaybackState &)> & listener)171 ErrCode AVControllerCallbackClient::AddListenerForPlaybackState(
172 const std::function<void(const AVPlaybackState&)>& listener)
173 {
174 playbackStateListener_ = listener;
175 return AVSESSION_SUCCESS;
176 }
177
RemoveListenerForPlaybackState()178 ErrCode AVControllerCallbackClient::RemoveListenerForPlaybackState()
179 {
180 playbackStateListener_ = nullptr;
181 return AVSESSION_SUCCESS;
182 }
183
~AVControllerCallbackClient()184 AVControllerCallbackClient::~AVControllerCallbackClient()
185 {
186 AVSessionEventHandler::GetInstance().AVSessionRemoveTask(EVENT_NAME);
187 SLOGD("destroy");
188 }
189 }