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 "istandard_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 92 int32_t SetAudioVKBInfoMgrCallback(sptr<IStandardAudioPolicyManagerListener> &callback); 93 int32_t CheckVKBInfo(const std::string &bundleName, bool &isValid); 94 95 private: AudioStateManager()96 AudioStateManager() {}; ~AudioStateManager()97 ~AudioStateManager() {}; 98 std::shared_ptr<AudioDeviceDescriptor> preferredMediaRenderDevice_ = std::make_shared<AudioDeviceDescriptor>(); 99 std::shared_ptr<AudioDeviceDescriptor> preferredCallRenderDevice_ = std::make_shared<AudioDeviceDescriptor>(); 100 std::shared_ptr<AudioDeviceDescriptor> preferredCallCaptureDevice_ = std::make_shared<AudioDeviceDescriptor>(); 101 std::shared_ptr<AudioDeviceDescriptor> preferredRingRenderDevice_ = std::make_shared<AudioDeviceDescriptor>(); 102 std::shared_ptr<AudioDeviceDescriptor> preferredRecordCaptureDevice_ = std::make_shared<AudioDeviceDescriptor>(); 103 std::shared_ptr<AudioDeviceDescriptor> preferredToneRenderDevice_ = std::make_shared<AudioDeviceDescriptor>(); 104 105 unordered_set<shared_ptr<AudioDeviceDescriptor>, AudioDeviceDescriptor::AudioDeviceDescriptorHash, 106 AudioDeviceDescriptor::AudioDeviceDescriptorEqual> mediaExcludedDevices_; 107 unordered_set<shared_ptr<AudioDeviceDescriptor>, AudioDeviceDescriptor::AudioDeviceDescriptorHash, 108 AudioDeviceDescriptor::AudioDeviceDescriptorEqual> callExcludedDevices_; 109 110 std::mutex mutex_; 111 shared_mutex mediaExcludedDevicesMutex_; 112 shared_mutex callExcludedDevicesMutex_; 113 int32_t ownerUid_ = 0; 114 std::list<std::map<int32_t, std::shared_ptr<AudioDeviceDescriptor>>> forcedDeviceMapList_; 115 sptr<IStandardAudioPolicyManagerListener> audioClientInfoMgrCallback_; 116 sptr<IStandardAudioPolicyManagerListener> audioVKBInfoMgrCallback_; 117 void RemoveForcedDeviceMapData(int32_t uid); 118 }; 119 120 } // namespace AudioStandard 121 } // namespace OHOS 122 123 #endif // ST_AUDIO_STATE_MANAGER_H 124 125