• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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_MIGRATE_AVSESSION_PROXY_H
17 #define OHOS_MIGRATE_AVSESSION_PROXY_H
18 
19 #include "softbus/softbus_session_proxy.h"
20 #include "migrate_avsession_constant.h"
21 #include "avcontroller_item.h"
22 #include "avsession_item.h"
23 #include "json/json.h"
24 #include "audio_adapter.h"
25 #include "avsession_info.h"
26 
27 namespace OHOS::AVSession {
28 using MigrateAVSessionProxyControllerCallbackFunc = std::function<int32_t(const std::string&, AAFwk::WantParams&)>;
29 
30 class AVSessionService;
31 class MigrateAVSessionProxy : public SoftbusSessionProxy,
32     public std::enable_shared_from_this<MigrateAVSessionProxy> {
33 public:
34     explicit MigrateAVSessionProxy(AVSessionService *ptr, int32_t mode = MSG_HEAD_MODE);
35     ~MigrateAVSessionProxy();
36 
37     void OnConnectServer(const std::string &deviceId) override;
38     void OnDisconnectServer(const std::string &deviceId) override;
39     int32_t GetCharacteristic() override;
40     void OnBytesReceived(const std::string &deviceId, const std::string &data) override;
41 
42     void HandlePlay();
43     void HandlePause();
44     void HandlePlayNext();
45     void HandlePlayPrevious();
46     void HandleToggleFavorite(const std::string& mediaId);
47     void HandleCommonCommand(const std::string& commonCommand, const AAFwk::WantParams& commandArgs);
48     void GetDistributedSessionControllerList(std::vector<sptr<IRemoteObject>>& controllerList);
49     bool CheckMediaAlive();
50 
51     enum {
52         AUDIO_NUM_SET_VOLUME = 0,
53         AUDIO_NUM_SELECT_OUTPUT_DEVICE = 1,
54         AUDIO_NUM_GET_VOLUME = 2,
55         AUDIO_NUM_GET_AVAILABLE_DEVICES = 3,
56         AUDIO_NUM_GET_PREFERRED_OUTPUT_DEVICE_FOR_RENDERER_INFO = 4,
57         SESSION_NUM_COLD_START_FROM_PROXY = 5,
58     };
59 
60     const std::map<const std::string, int32_t> AUDIO_EVENT_MAPS = {
61         {AUDIO_SET_VOLUME, AUDIO_NUM_SET_VOLUME},
62         {AUDIO_SELECT_OUTPUT_DEVICE, AUDIO_NUM_SELECT_OUTPUT_DEVICE},
63         {AUDIO_GET_VOLUME, AUDIO_NUM_GET_VOLUME},
64         {AUDIO_GET_AVAILABLE_DEVICES, AUDIO_NUM_GET_AVAILABLE_DEVICES},
65         {AUDIO_GET_PREFERRED_OUTPUT_DEVICE_FOR_RENDERER_INFO,
66             AUDIO_NUM_GET_PREFERRED_OUTPUT_DEVICE_FOR_RENDERER_INFO},
67         {SESSION_COLD_START_FROM_PROXY, SESSION_NUM_COLD_START_FROM_PROXY},
68     };
69 
70 private:
71     void PrepareSessionFromRemote();
72     void PrepareControllerOfRemoteSession(sptr<AVSessionItem> sessionItem);
73     void ProcessSessionInfo(Json::Value jsonValue);
74     void ProcessMetaData(Json::Value jsonValue);
75     void ProcessPlaybackState(Json::Value jsonValue);
76     void ProcessValidCommands(Json::Value jsonValue);
77     void ProcessVolumeControlCommand(Json::Value jsonValue);
78     void ProcessAvailableDevices(Json::Value jsonValue);
79     void ProcessPreferredOutputDevice(Json::Value jsonValue);
80     void ProcessBundleImg(std::string bundleIconStr);
81     void ProcessMediaImage(std::string mediaImageStr);
82     void SendControlCommandMsg(int32_t commandCode, std::string commandArgsStr);
83     void SendSpecialKeepAliveData();
84 
85     const MigrateAVSessionProxyControllerCallbackFunc MigrateAVSessionProxyControllerCallback();
86 
87     void SetVolume(const AAFwk::WantParams& extras);
88     void SelectOutputDevice(const AAFwk::WantParams& extras);
89 
90     void GetVolume(AAFwk::WantParams& extras);
91     void GetAvailableDevices(AAFwk::WantParams& extras);
92     void GetPreferredOutputDeviceForRendererInfo(AAFwk::WantParams& extras);
93     void ColdStartFromProxy();
94 
95     int32_t mMode_;
96     std::string deviceId_;
97     sptr<AVSessionItem> remoteSession_ = nullptr;
98     sptr<AVControllerItem> preSetController_ = nullptr;
99     AVSessionService *servicePtr_ = nullptr;
100     AppExecFwk::ElementName elementName_;
101 
102     int32_t volumeNum_ = 0;
103     AudioDeviceDescriptorsWithSptr availableDevices_;
104     AudioDeviceDescriptorsWithSptr preferredOutputDevice_;
105     MigrateAVSessionProxyControllerCallbackFunc migrateProxyCallback_;
106 };
107 
108 class AVSessionObserver : public AVSessionCallback {
109 public:
110     explicit AVSessionObserver(const std::string &playerId, std::weak_ptr<MigrateAVSessionProxy> migrateProxy);
AVSessionObserver()111     AVSessionObserver() {}
~AVSessionObserver()112     ~AVSessionObserver() {}
113 
114     void OnPlay() override;
115     void OnPause() override;
OnStop()116     void OnStop() override {}
117     void OnPlayNext() override;
118     void OnPlayPrevious() override;
OnFastForward(int64_t time)119     void OnFastForward(int64_t time) override {}
OnRewind(int64_t time)120     void OnRewind(int64_t time) override {}
OnSeek(int64_t time)121     void OnSeek(int64_t time) override {}
OnSetSpeed(double speed)122     void OnSetSpeed(double speed) override {}
OnSetLoopMode(int32_t loopMode)123     void OnSetLoopMode(int32_t loopMode) override {}
OnSetTargetLoopMode(int32_t targetLoopMode)124     void OnSetTargetLoopMode(int32_t targetLoopMode) override {}
125     void OnToggleFavorite(const std::string& mediaId) override;
OnMediaKeyEvent(const MMI::KeyEvent & keyEvent)126     void OnMediaKeyEvent(const MMI::KeyEvent& keyEvent) override {}
OnOutputDeviceChange(const int32_t connectionState,const OutputDeviceInfo & outputDeviceInfo)127     void OnOutputDeviceChange(const int32_t connectionState, const OutputDeviceInfo& outputDeviceInfo) override {}
128     void OnCommonCommand(const std::string& commonCommand, const AAFwk::WantParams& commandArgs) override;
OnSkipToQueueItem(int32_t itemId)129     void OnSkipToQueueItem(int32_t itemId) override {}
OnAVCallAnswer()130     void OnAVCallAnswer() override {}
OnAVCallHangUp()131     void OnAVCallHangUp() override {}
OnAVCallToggleCallMute()132     void OnAVCallToggleCallMute() override {}
OnPlayFromAssetId(int64_t assetId)133     void OnPlayFromAssetId(int64_t assetId) override {}
OnCastDisplayChange(const CastDisplayInfo & castDisplayInfo)134     void OnCastDisplayChange(const CastDisplayInfo& castDisplayInfo) override {}
135 
136 private:
137     std::weak_ptr<MigrateAVSessionProxy> migrateProxy_;
138     std::string playerId_ = "";
139 };
140 } // namespace OHOS::AVSession
141 
142 #endif //OHOS_MIGRATE_AVSESSION_PROXY_H