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 OH_AUDIO_VOLUME_MANAGER_H 17 #define OH_AUDIO_VOLUME_MANAGER_H 18 19 #include "audio_system_manager.h" 20 #include "audio_policy_interface.h" 21 #include "native_audio_volume_manager.h" 22 23 namespace OHOS { 24 namespace AudioStandard { 25 class OHStreamVolumeChangeCallback : public StreamVolumeChangeCallback { 26 public: OHStreamVolumeChangeCallback(OH_AudioVolumeManager_OnStreamVolumeChangeCallback callback,StreamUsage usage,void * userData)27 OHStreamVolumeChangeCallback(OH_AudioVolumeManager_OnStreamVolumeChangeCallback callback, StreamUsage usage, 28 void *userData) 29 : callback_(callback), usage_(usage), userData_(userData) 30 { 31 } 32 33 void OnStreamVolumeChange(StreamVolumeEvent streamVolumeEvent) override; 34 private: 35 OH_AudioVolumeManager_OnStreamVolumeChangeCallback callback_ = nullptr; 36 StreamUsage usage_ = StreamUsage::STREAM_USAGE_INVALID; 37 void *userData_ = nullptr; 38 }; 39 40 class OHAudioRingerModeCallback : public AudioRingerModeCallback { 41 public: OHAudioRingerModeCallback(OH_AudioVolumeManager_OnRingerModeChangeCallback callback,void * userData)42 OHAudioRingerModeCallback(OH_AudioVolumeManager_OnRingerModeChangeCallback callback, void *userData) 43 : callback_(callback), userData_(userData) 44 { 45 } 46 47 void OnRingerModeUpdated(const AudioRingerMode &ringerMode) override; 48 private: 49 OH_AudioVolumeManager_OnRingerModeChangeCallback callback_ = nullptr; 50 void *userData_ = nullptr; 51 }; 52 53 class OHAudioVolumeManager { 54 public: 55 ~OHAudioVolumeManager() = default; 56 57 static OHAudioVolumeManager *GetInstance(); 58 int32_t GetMaxVolumeByUsage(StreamUsage streamUsage); 59 int32_t GetMinVolumeByUsage(StreamUsage streamUsage); 60 int32_t GetVolumeByUsage(StreamUsage streamUsage); 61 int32_t IsMuteByUsage(StreamUsage streamUsage, bool &isMute); 62 int32_t GetRingerMode(); 63 int32_t SetStreamVolumeChangeCallback(OH_AudioVolumeManager_OnStreamVolumeChangeCallback callback, 64 StreamUsage streamUsage, void *userData); 65 int32_t UnsetStreamVolumeChangeCallback(OH_AudioVolumeManager_OnStreamVolumeChangeCallback callback); 66 int32_t SetAudioRingerModeChangeCallback(OH_AudioVolumeManager_OnRingerModeChangeCallback callback, void *userData); 67 int32_t UnsetAudioRingerModeChangeCallback(OH_AudioVolumeManager_OnRingerModeChangeCallback callback); 68 69 private: 70 OHAudioVolumeManager(); 71 72 AudioSystemManager *audioSystemManager_ = nullptr; 73 std::shared_ptr<AudioGroupManager> audioGroupManager_ = nullptr; 74 std::map<OH_AudioVolumeManager_OnRingerModeChangeCallback, 75 std::shared_ptr<OHAudioRingerModeCallback>> ringerModeCallbacks_; 76 std::map<OH_AudioVolumeManager_OnStreamVolumeChangeCallback, 77 std::pair<StreamUsage, std::shared_ptr<OHStreamVolumeChangeCallback>>> streamVolumeCallbacks_; 78 79 std::mutex ringerModeCbMutex_; 80 std::mutex streamVolumeCbMutex_; 81 }; 82 83 } // namespace AudioStandard 84 } // namespace OHOS 85 #endif // OH_AUDIO_VOLUME_MANAGER_H