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