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 }