• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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