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