1 /*
2  * Copyright (c) 2022 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 #ifndef OHOS_AVSESSION_CONTROLLER_PROXY_H
17 #define OHOS_AVSESSION_CONTROLLER_PROXY_H
18 
19 #include <mutex>
20 
21 #include "iavsession_controller.h"
22 #include "iremote_proxy.h"
23 
24 namespace OHOS::AVSession {
25 class AVSessionControllerProxy : public IRemoteProxy<IAVSessionController> {
26 public:
27     explicit AVSessionControllerProxy(const sptr<IRemoteObject>& impl);
28 
29     ~AVSessionControllerProxy() override;
30 
31     int32_t GetAVCallState(AVCallState& avCallState) override;
32 
33     int32_t GetAVCallMetaData(AVCallMetaData& avCallMetaData) override;
34 
35     int32_t GetAVPlaybackState(AVPlaybackState& state) override;
36 
37     int32_t GetAVMetaData(AVMetaData& data) override;
38 
39     int32_t SendAVKeyEvent(const MMI::KeyEvent& keyEvent) override;
40 
41     int32_t GetLaunchAbility(AbilityRuntime::WantAgent::WantAgent& ability) override;
42 
43     int32_t GetValidCommands(std::vector<int32_t>& cmds) override;
44 
45     int32_t IsSessionActive(bool& isActive) override;
46 
47     int32_t SendControlCommand(const AVControlCommand& cmd) override;
48 
49     int32_t SendCommonCommand(const std::string& commonCommand, const AAFwk::WantParams& commandArgs) override;
50 
51     int32_t RegisterCallback(const std::shared_ptr<AVControllerCallback>& callback) override;
52 
53     int32_t SetAVCallMetaFilter(const AVCallMetaData::AVCallMetaMaskType& filter) override;
54 
55     int32_t SetAVCallStateFilter(const AVCallState::AVCallStateMaskType& filter) override;
56 
57     int32_t SetMetaFilter(const AVMetaData::MetaMaskType& filter) override;
58 
59     int32_t SetPlaybackFilter(const AVPlaybackState::PlaybackStateMaskType& filter) override;
60 
61     int32_t GetAVQueueItems(std::vector<AVQueueItem>& items) override;
62 
63     int32_t GetAVQueueTitle(std::string& title) override;
64 
65     int32_t SkipToQueueItem(int32_t& itemId) override;
66 
67     int32_t GetExtras(AAFwk::WantParams& extras) override;
68 
69     int32_t Destroy() override;
70 
71     std::string GetSessionId() override;
72 
73     int64_t GetRealPlaybackPosition() override;
74 
75     bool IsDestroy() override;
76 
77 protected:
78     int32_t RegisterCallbackInner(const sptr<IRemoteObject>& callback) override;
79 
80 private:
81     static inline BrokerDelegator<AVSessionControllerProxy> delegator_;
82     const size_t defaultIpcCapacity = 1048576; // Increase the IPC default capacity(200K) to 1M
83     std::recursive_mutex currentStateLock_;
84     AVPlaybackState currentState_;
85     bool isDestroy_ = false;
86 
87     std::recursive_mutex controllerProxyLock_;
88 };
89 }
90 
91 #endif // OHOS_AVSESSION_CONTROLLER_PROXY_H