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