1 /* 2 * Copyright (c) 2023 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_STATE_MANAGER_H 17 #define ST_AUDIO_STATE_MANAGER_H 18 19 #include <unordered_set> 20 #include <shared_mutex> 21 #include "audio_system_manager.h" 22 #include "i_standard_audio_policy_manager_listener.h" 23 24 namespace OHOS { 25 namespace AudioStandard { 26 using namespace std; 27 28 class AudioStateManager { 29 public: GetAudioStateManager()30 static AudioStateManager& GetAudioStateManager() 31 { 32 static AudioStateManager audioStateManager; 33 return audioStateManager; 34 } 35 36 // Set media render device selected by the user 37 void SetPreferredMediaRenderDevice(const std::shared_ptr<AudioDeviceDescriptor> &deviceDescriptor); 38 39 // Set call render device selected by the user 40 void SetPreferredCallRenderDevice(const std::shared_ptr<AudioDeviceDescriptor> &deviceDescriptor, 41 const int32_t uid = INVALID_UID, const std::string caller = ""); 42 43 // Set call capture device selected by the user 44 void SetPreferredCallCaptureDevice(const std::shared_ptr<AudioDeviceDescriptor> &deviceDescriptor); 45 46 // Set ring render device selected by the user 47 void SetPreferredRingRenderDevice(const std::shared_ptr<AudioDeviceDescriptor> &deviceDescriptor); 48 49 // Set record capture device selected by the user 50 void SetPreferredRecordCaptureDevice(const std::shared_ptr<AudioDeviceDescriptor> &deviceDescriptor); 51 52 // Set tone render device selected by the user 53 void SetPreferredToneRenderDevice(const std::shared_ptr<AudioDeviceDescriptor> &deviceDescriptor); 54 55 void ExcludeOutputDevices(AudioDeviceUsage audioDevUsage, 56 vector<shared_ptr<AudioDeviceDescriptor>> &audioDeviceDescriptors); 57 58 void UnexcludeOutputDevices(AudioDeviceUsage audioDevUsage, 59 vector<shared_ptr<AudioDeviceDescriptor>> &audioDeviceDescriptors); 60 61 // Get media render device selected by the user 62 shared_ptr<AudioDeviceDescriptor> GetPreferredMediaRenderDevice(); 63 64 // Get call render device selected by the user 65 shared_ptr<AudioDeviceDescriptor> GetPreferredCallRenderDevice(); 66 67 // Get call capture device selected by the user 68 shared_ptr<AudioDeviceDescriptor> GetPreferredCallCaptureDevice(); 69 70 // Get ring render device selected by the user 71 shared_ptr<AudioDeviceDescriptor> GetPreferredRingRenderDevice(); 72 73 // Get record capture device selected by the user 74 shared_ptr<AudioDeviceDescriptor> GetPreferredRecordCaptureDevice(); 75 76 // Get tone render device selected by the user 77 shared_ptr<AudioDeviceDescriptor> GetPreferredToneRenderDevice(); 78 79 void UpdatePreferredMediaRenderDeviceConnectState(ConnectState state); 80 void UpdatePreferredCallRenderDeviceConnectState(ConnectState state); 81 void UpdatePreferredCallCaptureDeviceConnectState(ConnectState state); 82 void UpdatePreferredRecordCaptureDeviceConnectState(ConnectState state); 83 84 vector<shared_ptr<AudioDeviceDescriptor>> GetExcludedDevices(AudioDeviceUsage audioDevUsage); 85 bool IsExcludedDevice(AudioDeviceUsage audioDevUsage, 86 const shared_ptr<AudioDeviceDescriptor> &audioDeviceDescriptor); 87 88 void SetAudioSceneOwnerUid(const int32_t uid); 89 90 int32_t SetAudioClientInfoMgrCallback(sptr<IStandardAudioPolicyManagerListener> &callback); 91 const std::string GetBundleNameFromUid(int32_t uid); 92 93 private: AudioStateManager()94 AudioStateManager() {}; ~AudioStateManager()95 ~AudioStateManager() {}; 96 std::shared_ptr<AudioDeviceDescriptor> preferredMediaRenderDevice_ = std::make_shared<AudioDeviceDescriptor>(); 97 std::shared_ptr<AudioDeviceDescriptor> preferredCallRenderDevice_ = std::make_shared<AudioDeviceDescriptor>(); 98 std::shared_ptr<AudioDeviceDescriptor> preferredCallCaptureDevice_ = std::make_shared<AudioDeviceDescriptor>(); 99 std::shared_ptr<AudioDeviceDescriptor> preferredRingRenderDevice_ = std::make_shared<AudioDeviceDescriptor>(); 100 std::shared_ptr<AudioDeviceDescriptor> preferredRecordCaptureDevice_ = std::make_shared<AudioDeviceDescriptor>(); 101 std::shared_ptr<AudioDeviceDescriptor> preferredToneRenderDevice_ = std::make_shared<AudioDeviceDescriptor>(); 102 103 unordered_set<shared_ptr<AudioDeviceDescriptor>, AudioDeviceDescriptor::AudioDeviceDescriptorHash, 104 AudioDeviceDescriptor::AudioDeviceDescriptorEqual> mediaExcludedDevices_; 105 unordered_set<shared_ptr<AudioDeviceDescriptor>, AudioDeviceDescriptor::AudioDeviceDescriptorHash, 106 AudioDeviceDescriptor::AudioDeviceDescriptorEqual> callExcludedDevices_; 107 108 std::mutex mutex_; 109 shared_mutex mediaExcludedDevicesMutex_; 110 shared_mutex callExcludedDevicesMutex_; 111 int32_t ownerUid_ = 0; 112 std::list<std::map<int32_t, std::shared_ptr<AudioDeviceDescriptor>>> forcedDeviceMapList_; 113 sptr<IStandardAudioPolicyManagerListener> audioClientInfoMgrCallback_; 114 void RemoveForcedDeviceMapData(int32_t uid); 115 }; 116 117 } // namespace AudioStandard 118 } // namespace OHOS 119 120 #endif // ST_AUDIO_STATE_MANAGER_H 121 122