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 ST_AUDIO_ZONE_MANAGER_H 17 #define ST_AUDIO_ZONE_MANAGER_H 18 19 #include <vector> 20 #include <list> 21 #include <utility> 22 #include "audio_info.h" 23 #include "audio_interrupt_info.h" 24 #include "audio_system_manager.h" 25 #include "audio_zone_info.h" 26 #include "audio_device_descriptor.h" 27 28 namespace OHOS { 29 namespace AudioStandard { 30 class AudioZoneCallback { 31 public: 32 virtual ~AudioZoneCallback() = default; 33 34 virtual void OnAudioZoneAdd(const AudioZoneDescriptor &zoneDescriptor) = 0; 35 36 virtual void OnAudioZoneRemove(int32_t zoneId) = 0; 37 }; 38 39 class AudioZoneChangeCallback { 40 public: 41 virtual ~AudioZoneChangeCallback() = default; 42 43 virtual void OnAudioZoneChange(const AudioZoneDescriptor &zoneDescriptor, AudioZoneChangeReason reason) = 0; 44 }; 45 46 class AudioZoneVolumeProxy { 47 public: 48 virtual ~AudioZoneVolumeProxy() = default; 49 50 virtual void SetSystemVolume(const AudioVolumeType volumeType, const int32_t volumeLevel) = 0; 51 virtual int32_t GetSystemVolume(AudioVolumeType volumeType) = 0; 52 }; 53 54 class AudioZoneInterruptCallback { 55 public: 56 virtual ~AudioZoneInterruptCallback() = default; 57 58 virtual void OnInterruptEvent(const std::list<std::pair<AudioInterrupt, AudioFocuState>> &interrupts, 59 AudioZoneInterruptReason reason) = 0; 60 }; 61 62 class AudioZoneManager { 63 public: 64 AudioZoneManager() = default; 65 virtual ~AudioZoneManager() = default; 66 67 static AudioZoneManager *GetInstance(); 68 69 virtual int32_t CreateAudioZone(const std::string &name, const AudioZoneContext &context) = 0; 70 71 virtual void ReleaseAudioZone(int32_t zoneId) = 0; 72 73 virtual const std::vector<std::shared_ptr<AudioZoneDescriptor>> GetAllAudioZone() = 0; 74 75 virtual const std::shared_ptr<AudioZoneDescriptor> GetAudioZone(int32_t zoneId) = 0; 76 77 virtual int32_t GetAudioZoneByName(std::string name) = 0; 78 79 virtual int32_t BindDeviceToAudioZone(int32_t zoneId, 80 std::vector<std::shared_ptr<AudioDeviceDescriptor>> devices) = 0; 81 82 virtual int32_t UnBindDeviceToAudioZone(int32_t zoneId, 83 std::vector<std::shared_ptr<AudioDeviceDescriptor>> devices) = 0; 84 85 virtual int32_t RegisterAudioZoneCallback(const std::shared_ptr<AudioZoneCallback> &callback) = 0; 86 87 virtual int32_t UnRegisterAudioZoneCallback() = 0; 88 89 virtual int32_t RegisterAudioZoneChangeCallback(int32_t zoneId, 90 const std::shared_ptr<AudioZoneChangeCallback> &callback) = 0; 91 92 virtual int32_t UnRegisterAudioZoneChangeCallback(int32_t zoneId) = 0; 93 94 virtual int32_t AddUidToAudioZone(int32_t zoneId, int32_t uid) = 0; 95 96 virtual int32_t RemoveUidFromAudioZone(int32_t zoneId, int32_t uid) = 0; 97 98 virtual int32_t AddStreamToAudioZone(int32_t zoneId, AudioZoneStream stream) = 0; 99 100 virtual int32_t AddStreamsToAudioZone(int32_t zoneId, std::vector<AudioZoneStream> streams) = 0; 101 102 virtual int32_t RemoveStreamFromAudioZone(int32_t zoneId, AudioZoneStream stream) = 0; 103 104 virtual int32_t RemoveStreamsFromAudioZone(int32_t zoneId, std::vector<AudioZoneStream> streams) = 0; 105 106 virtual void SetZoneDeviceVisible(bool visible) = 0; 107 108 virtual int32_t RegisterSystemVolumeProxy(int32_t zoneId, 109 const std::shared_ptr<AudioZoneVolumeProxy> &proxy) = 0; 110 111 virtual int32_t UnRegisterSystemVolumeProxy(int32_t zoneId) = 0; 112 113 virtual std::list<std::pair<AudioInterrupt, AudioFocuState>> GetAudioInterruptForZone( 114 int32_t zoneId) = 0; 115 116 virtual std::list<std::pair<AudioInterrupt, AudioFocuState>> GetAudioInterruptForZone( 117 int32_t zoneId, const std::string &deviceTag) = 0; 118 119 virtual int32_t RegisterAudioZoneInterruptCallback(int32_t zoneId, 120 const std::shared_ptr<AudioZoneInterruptCallback> &callback) = 0; 121 122 virtual int32_t UnRegisterAudioZoneInterruptCallback(int32_t zoneId) = 0; 123 124 virtual int32_t RegisterAudioZoneInterruptCallback(int32_t zoneId, const std::string &deviceTag, 125 const std::shared_ptr<AudioZoneInterruptCallback> &callback) = 0; 126 127 virtual int32_t UnRegisterAudioZoneInterruptCallback(int32_t zoneId, 128 const std::string &deviceTag) = 0; 129 130 virtual int32_t InjectInterruptToAudioZone(int32_t zoneId, 131 const std::list<std::pair<AudioInterrupt, AudioFocuState>> &interrupts) = 0; 132 133 virtual int32_t InjectInterruptToAudioZone(int32_t zoneId, const std::string &deviceTag, 134 const std::list<std::pair<AudioInterrupt, AudioFocuState>> &interrupts) = 0; 135 }; 136 } // namespace AudioStandard 137 } // namespace OHOS 138 #endif // ST_AUDIO_ZONE_MANAGER_H