180922886Sopenharmony_ci/* 280922886Sopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 380922886Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 480922886Sopenharmony_ci * you may not use this file except in compliance with the License. 580922886Sopenharmony_ci * You may obtain a copy of the License at 680922886Sopenharmony_ci * 780922886Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 880922886Sopenharmony_ci * 980922886Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1080922886Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1180922886Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1280922886Sopenharmony_ci * See the License for the specific language governing permissions and 1380922886Sopenharmony_ci * limitations under the License. 1480922886Sopenharmony_ci */ 1580922886Sopenharmony_ci 1680922886Sopenharmony_ci#ifndef OHOS_AVCONTROLLER_ITEM_H 1780922886Sopenharmony_ci#define OHOS_AVCONTROLLER_ITEM_H 1880922886Sopenharmony_ci 1980922886Sopenharmony_ci#include <mutex> 2080922886Sopenharmony_ci#include <string> 2180922886Sopenharmony_ci 2280922886Sopenharmony_ci#include "avsession_item.h" 2380922886Sopenharmony_ci#include "avcontroller_callback_proxy.h" 2480922886Sopenharmony_ci#include "avsession_controller_stub.h" 2580922886Sopenharmony_ci#include "audio_info.h" 2680922886Sopenharmony_ci 2780922886Sopenharmony_cinamespace OHOS::AVSession { 2880922886Sopenharmony_ciclass AVControllerItem : public AVSessionControllerStub { 2980922886Sopenharmony_cipublic: 3080922886Sopenharmony_ci AVControllerItem(pid_t pid, const sptr<AVSessionItem>& session, int32_t userId = DEFAULT_USER_ID); 3180922886Sopenharmony_ci 3280922886Sopenharmony_ci ~AVControllerItem() override; 3380922886Sopenharmony_ci 3480922886Sopenharmony_ci int32_t GetUserId() const; 3580922886Sopenharmony_ci 3680922886Sopenharmony_ci int32_t GetAVCallState(AVCallState& avCallState) override; 3780922886Sopenharmony_ci 3880922886Sopenharmony_ci int32_t GetAVCallMetaData(AVCallMetaData& avCallMetaData) override; 3980922886Sopenharmony_ci 4080922886Sopenharmony_ci int32_t GetAVPlaybackState(AVPlaybackState& state) override; 4180922886Sopenharmony_ci 4280922886Sopenharmony_ci int32_t GetAVMetaData(AVMetaData& data) override; 4380922886Sopenharmony_ci 4480922886Sopenharmony_ci int32_t GetAVQueueItems(std::vector<AVQueueItem>& items) override; 4580922886Sopenharmony_ci 4680922886Sopenharmony_ci int32_t GetAVQueueTitle(std::string& title) override; 4780922886Sopenharmony_ci 4880922886Sopenharmony_ci int32_t SkipToQueueItem(int32_t& itemId) override; 4980922886Sopenharmony_ci 5080922886Sopenharmony_ci int32_t GetExtras(AAFwk::WantParams& extras) override; 5180922886Sopenharmony_ci 5280922886Sopenharmony_ci int32_t SendAVKeyEvent(const MMI::KeyEvent& keyEvent) override; 5380922886Sopenharmony_ci 5480922886Sopenharmony_ci int32_t GetLaunchAbility(AbilityRuntime::WantAgent::WantAgent& ability) override; 5580922886Sopenharmony_ci 5680922886Sopenharmony_ci int32_t GetValidCommands(std::vector<int32_t>& cmds) override; 5780922886Sopenharmony_ci 5880922886Sopenharmony_ci int32_t IsSessionActive(bool& isActive) override; 5980922886Sopenharmony_ci 6080922886Sopenharmony_ci int32_t SendControlCommand(const AVControlCommand& cmd) override; 6180922886Sopenharmony_ci 6280922886Sopenharmony_ci int32_t SendCommonCommand(const std::string& commonCommand, const AAFwk::WantParams& commandArgs) override; 6380922886Sopenharmony_ci 6480922886Sopenharmony_ci int32_t SetAVCallMetaFilter(const AVCallMetaData::AVCallMetaMaskType& filter) override; 6580922886Sopenharmony_ci 6680922886Sopenharmony_ci int32_t SetAVCallStateFilter(const AVCallState::AVCallStateMaskType& filter) override; 6780922886Sopenharmony_ci 6880922886Sopenharmony_ci int32_t SetMetaFilter(const AVMetaData::MetaMaskType& filter) override; 6980922886Sopenharmony_ci 7080922886Sopenharmony_ci int32_t SetPlaybackFilter(const AVPlaybackState::PlaybackStateMaskType& filter) override; 7180922886Sopenharmony_ci 7280922886Sopenharmony_ci int32_t Destroy() override; 7380922886Sopenharmony_ci 7480922886Sopenharmony_ci std::string GetSessionId() override; 7580922886Sopenharmony_ci 7680922886Sopenharmony_ci void HandleSessionDestroy(); 7780922886Sopenharmony_ci 7880922886Sopenharmony_ci void HandleAVCallStateChange(const AVCallState& avCallState); 7980922886Sopenharmony_ci 8080922886Sopenharmony_ci void HandleAVCallMetaDataChange(const AVCallMetaData& avCallMetaData); 8180922886Sopenharmony_ci 8280922886Sopenharmony_ci void HandlePlaybackStateChange(const AVPlaybackState& state); 8380922886Sopenharmony_ci 8480922886Sopenharmony_ci void HandleMetaDataChange(const AVMetaData& data); 8580922886Sopenharmony_ci 8680922886Sopenharmony_ci void HandleActiveStateChange(bool isActive); 8780922886Sopenharmony_ci 8880922886Sopenharmony_ci void HandleValidCommandChange(const std::vector<int32_t>& cmds); 8980922886Sopenharmony_ci 9080922886Sopenharmony_ci void HandleOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo& outputDeviceInfo); 9180922886Sopenharmony_ci 9280922886Sopenharmony_ci void HandleSetSessionEvent(const std::string& event, const AAFwk::WantParams& args); 9380922886Sopenharmony_ci 9480922886Sopenharmony_ci void HandleQueueItemsChange(const std::vector<AVQueueItem>& items); 9580922886Sopenharmony_ci 9680922886Sopenharmony_ci void HandleQueueTitleChange(const std::string& title); 9780922886Sopenharmony_ci 9880922886Sopenharmony_ci void HandleExtrasChange(const AAFwk::WantParams& extras); 9980922886Sopenharmony_ci 10080922886Sopenharmony_ci pid_t GetPid() const; 10180922886Sopenharmony_ci 10280922886Sopenharmony_ci bool HasSession(const std::string& sessionId); 10380922886Sopenharmony_ci 10480922886Sopenharmony_ci void SetServiceCallbackForRelease(const std::function<void(AVControllerItem&)>& callback); 10580922886Sopenharmony_ci 10680922886Sopenharmony_ci int32_t RegisterAVControllerCallback(const std::shared_ptr<AVControllerCallback> &callback); 10780922886Sopenharmony_ci 10880922886Sopenharmony_ci bool isFromSession_ = false; 10980922886Sopenharmony_ciprotected: 11080922886Sopenharmony_ci int32_t RegisterCallbackInner(const sptr<IRemoteObject>& callback) override; 11180922886Sopenharmony_ci 11280922886Sopenharmony_ciprivate: 11380922886Sopenharmony_ci static const int32_t DEFAULT_USER_ID = 100; 11480922886Sopenharmony_ci pid_t pid_; 11580922886Sopenharmony_ci sptr<AVSessionItem> session_; 11680922886Sopenharmony_ci std::string sessionId_; 11780922886Sopenharmony_ci int32_t userId_; 11880922886Sopenharmony_ci sptr<IAVControllerCallback> callback_; 11980922886Sopenharmony_ci std::shared_ptr<AVControllerCallback> innerCallback_; 12080922886Sopenharmony_ci AVCallMetaData::AVCallMetaMaskType avCallMetaMask_; 12180922886Sopenharmony_ci AVCallState::AVCallStateMaskType avCallStateMask_; 12280922886Sopenharmony_ci AVMetaData::MetaMaskType metaMask_; 12380922886Sopenharmony_ci AVPlaybackState::PlaybackStateMaskType playbackMask_; 12480922886Sopenharmony_ci std::function<void(AVControllerItem&)> serviceCallback_; 12580922886Sopenharmony_ci 12680922886Sopenharmony_ci // The following locks are used in the defined order of priority 12780922886Sopenharmony_ci std::recursive_mutex callbackMutex_; 12880922886Sopenharmony_ci 12980922886Sopenharmony_ci std::recursive_mutex serviceCallbackMutex_; 13080922886Sopenharmony_ci 13180922886Sopenharmony_ci std::recursive_mutex avCallMetaMaskMutex_; 13280922886Sopenharmony_ci 13380922886Sopenharmony_ci std::recursive_mutex avCallStateMaskMutex_; 13480922886Sopenharmony_ci 13580922886Sopenharmony_ci std::recursive_mutex metaMaskMutex_; 13680922886Sopenharmony_ci 13780922886Sopenharmony_ci std::recursive_mutex playbackMaskMutex_; 13880922886Sopenharmony_ci 13980922886Sopenharmony_ci std::recursive_mutex sessionMutex_; 14080922886Sopenharmony_ci}; 14180922886Sopenharmony_ci} // namespace OHOS::AVSession 14280922886Sopenharmony_ci#endif // OHOS_AVCONTROLLER_ITEM_H 143