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     auto callback = callback_;
61     callback->OnPlaybackStateChange(state);
62     if (playbackStateListener_) {
63         playbackStateListener_(state);
64     }
65 }
66 
OnMetaDataChange(const AVMetaData & data)67 void AVControllerCallbackClient::OnMetaDataChange(const AVMetaData& data)
68 {
69     CHECK_AND_RETURN_LOG(callback_, "callback is null");
70     auto callback = callback_;
71     callback->OnMetaDataChange(data);
72 }
73 
OnActiveStateChange(bool isActive)74 void AVControllerCallbackClient::OnActiveStateChange(bool isActive)
75 {
76     CHECK_AND_RETURN_LOG(callback_, "callback is null");
77 
78     auto callback = callback_;
79     CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
80         .AVSessionPostTask([callback, isActive]() { callback->OnActiveStateChange(isActive); }, EVENT_NAME),
81         "AVControllerCallbackClient handler postTask failed");
82 }
83 
OnValidCommandChange(const std::vector<int32_t> & cmds)84 void AVControllerCallbackClient::OnValidCommandChange(const std::vector<int32_t>& cmds)
85 {
86     CHECK_AND_RETURN_LOG(callback_, "callback is null");
87 
88     auto callback = callback_;
89     callback->OnValidCommandChange(cmds);
90 }
91 
OnOutputDeviceChange(const int32_t connectionState,const OutputDeviceInfo & info)92 void AVControllerCallbackClient::OnOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo& info)
93 {
94     CHECK_AND_RETURN_LOG(callback_, "callback is null");
95 
96     auto callback = callback_;
97     CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
98         .AVSessionPostTask([callback, connectionState, info]() {
99             callback->OnOutputDeviceChange(connectionState, info);
100         }, EVENT_NAME),
101         "AVControllerCallbackClient handler postTask failed");
102 }
103 
OnSessionEventChange(const std::string & event,const AAFwk::WantParams & args)104 void AVControllerCallbackClient::OnSessionEventChange(const std::string& event, const AAFwk::WantParams& args)
105 {
106     CHECK_AND_RETURN_LOG(callback_, "callback is null");
107 
108     auto callback = callback_;
109     CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
110         .AVSessionPostTask([callback, event, args]() { callback->OnSessionEventChange(event, args); }, EVENT_NAME),
111         "AVControllerCallbackClient handler postTask failed");
112 }
113 
OnQueueItemsChange(const std::vector<AVQueueItem> & items)114 void AVControllerCallbackClient::OnQueueItemsChange(const std::vector<AVQueueItem>& items)
115 {
116     CHECK_AND_RETURN_LOG(callback_, "callback is null");
117 
118     auto callback = callback_;
119     CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
120         .AVSessionPostTask([callback, items]() { callback->OnQueueItemsChange(items); }, EVENT_NAME),
121         "AVControllerCallbackClient handler postTask failed");
122 }
123 
OnQueueTitleChange(const std::string & title)124 void AVControllerCallbackClient::OnQueueTitleChange(const std::string& title)
125 {
126     CHECK_AND_RETURN_LOG(callback_, "callback is null");
127 
128     auto callback = callback_;
129     CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
130         .AVSessionPostTask([callback, title]() { callback->OnQueueTitleChange(title); }, EVENT_NAME),
131         "AVControllerCallbackClient handler postTask failed");
132 }
133 
OnExtrasChange(const AAFwk::WantParams & extras)134 void AVControllerCallbackClient::OnExtrasChange(const AAFwk::WantParams& extras)
135 {
136     CHECK_AND_RETURN_LOG(callback_, "callback is null");
137 
138     auto callback = callback_;
139     CHECK_AND_PRINT_LOG(AVSessionEventHandler::GetInstance()
140         .AVSessionPostTask([callback, extras]() { callback->OnExtrasChange(extras); }, EVENT_NAME),
141         "AVControllerCallbackClient handler postTask failed");
142 }
143 
AddListenerForPlaybackState(const std::function<void (const AVPlaybackState &)> & listener)144 void AVControllerCallbackClient::AddListenerForPlaybackState(const std::function<void(const AVPlaybackState&)>&
145     listener)
146 {
147     playbackStateListener_ = listener;
148 }
149 
~AVControllerCallbackClient()150 AVControllerCallbackClient::~AVControllerCallbackClient()
151 {
152     AVSessionEventHandler::GetInstance().AVSessionRemoveTask(EVENT_NAME);
153     SLOGD("destroy");
154 }
155 }