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