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