• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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 #include "audio_proxy.h"
17 
18 #include "telephony_log_wrapper.h"
19 #include "bluetooth_call_manager.h"
20 #include "audio_control_manager.h"
21 
22 namespace OHOS {
23 namespace Telephony {
AudioProxy()24 AudioProxy::AudioProxy()
25     : context_(nullptr), audioSoundManager_(std::make_unique<AudioStandard::RingtoneSoundManager>()),
26       deviceCallback_(std::make_shared<AudioDeviceChangeCallback>())
27 {}
28 
~AudioProxy()29 AudioProxy::~AudioProxy() {}
30 
SetAudioScene(AudioStandard::AudioScene audioScene)31 bool AudioProxy::SetAudioScene(AudioStandard::AudioScene audioScene)
32 {
33     return (AudioStandard::AudioSystemManager::GetInstance()->SetAudioScene(audioScene) == TELEPHONY_SUCCESS);
34 }
35 
SetAudioDeviceChangeCallback()36 int32_t AudioProxy::SetAudioDeviceChangeCallback()
37 {
38     if (deviceCallback_ == nullptr) {
39         TELEPHONY_LOGE("device callback nullptr");
40         return TELEPHONY_ERR_LOCAL_PTR_NULL;
41     }
42     return AudioStandard::AudioSystemManager::GetInstance()->SetDeviceChangeCallback(deviceCallback_);
43 }
44 
SetBluetoothDevActive()45 bool AudioProxy::SetBluetoothDevActive()
46 {
47     if (AudioStandard::AudioSystemManager::GetInstance()->IsDeviceActive(
48         AudioStandard::ActiveDeviceType::BLUETOOTH_SCO)) {
49         TELEPHONY_LOGI("bluetooth device is already active");
50         return true;
51     }
52 #ifdef ABILITY_AUDIO_SUPPORT
53     return AudioStandard::AudioSystemManager::GetInstance()->SetDeviceActive(
54         AudioStandard::ActiveDeviceType::BLUETOOTH_SCO, true) &&
55         AudioStandard::AudioSystemManager::GetInstance()->SetDeviceActive(
56             AudioStandard::ActiveDeviceType::SPEAKER, false);
57 #endif
58     return true;
59 }
60 
SetSpeakerDevActive()61 bool AudioProxy::SetSpeakerDevActive()
62 {
63     if (AudioStandard::AudioSystemManager::GetInstance()->IsDeviceActive(AudioStandard::ActiveDeviceType::SPEAKER)) {
64         TELEPHONY_LOGI("speaker device is already active");
65         return true;
66     }
67 #ifdef ABILITY_AUDIO_SUPPORT
68     return AudioStandard::AudioSystemManager::GetInstance()->SetDeviceActive(
69         AudioStandard::ActiveDeviceType::BLUETOOTH_SCO, false) &&
70         AudioStandard::AudioSystemManager::GetInstance()->SetDeviceActive(
71             AudioStandard::ActiveDeviceType::SPEAKER, true);
72 #endif
73     return true;
74 }
75 
SetWiredHeadsetDevActive()76 bool AudioProxy::SetWiredHeadsetDevActive()
77 {
78     return false;
79 }
80 
SetEarpieceDevActive()81 bool AudioProxy::SetEarpieceDevActive()
82 {
83     return false;
84 }
85 
GetVolume(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)86 int32_t AudioProxy::GetVolume(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)
87 {
88     return AudioStandard::AudioSystemManager::GetInstance()->GetVolume(audioVolumeType);
89 }
90 
SetVolume(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType,int32_t volume)91 int32_t AudioProxy::SetVolume(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType, int32_t volume)
92 {
93     return AudioStandard::AudioSystemManager::GetInstance()->SetVolume(audioVolumeType, volume);
94 }
95 
SetMaxVolume(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)96 int32_t AudioProxy::SetMaxVolume(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)
97 {
98     int32_t maxVolume = GetMaxVolume(audioVolumeType);
99     return AudioStandard::AudioSystemManager::GetInstance()->SetVolume(audioVolumeType, maxVolume);
100 }
101 
SetVolumeAudible()102 void AudioProxy::SetVolumeAudible()
103 {
104     int32_t volume = GetMaxVolume(AudioStandard::AudioSystemManager::AudioVolumeType::STREAM_VOICE_CALL);
105     SetVolume(AudioStandard::AudioSystemManager::AudioVolumeType::STREAM_VOICE_CALL,
106         (int32_t)(volume / VOLUME_AUDIBLE_DIVISOR));
107 }
108 
IsStreamActive(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)109 bool AudioProxy::IsStreamActive(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)
110 {
111     return AudioStandard::AudioSystemManager::GetInstance()->IsStreamActive(audioVolumeType);
112 }
113 
IsStreamMute(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)114 bool AudioProxy::IsStreamMute(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)
115 {
116     return AudioStandard::AudioSystemManager::GetInstance()->IsStreamMute(audioVolumeType);
117 }
118 
GetMaxVolume(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)119 int32_t AudioProxy::GetMaxVolume(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)
120 {
121     return AudioStandard::AudioSystemManager::GetInstance()->GetMaxVolume(audioVolumeType);
122 }
123 
GetMinVolume(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)124 int32_t AudioProxy::GetMinVolume(AudioStandard::AudioSystemManager::AudioVolumeType audioVolumeType)
125 {
126     return AudioStandard::AudioSystemManager::GetInstance()->GetMinVolume(audioVolumeType);
127 }
128 
IsMicrophoneMute()129 bool AudioProxy::IsMicrophoneMute()
130 {
131     return AudioStandard::AudioSystemManager::GetInstance()->IsMicrophoneMute();
132 }
133 
SetMicrophoneMute(bool mute)134 bool AudioProxy::SetMicrophoneMute(bool mute)
135 {
136     if (mute == IsMicrophoneMute()) {
137         return true;
138     }
139     int32_t muteResult = AudioStandard::AudioSystemManager::GetInstance()->SetMicrophoneMute(mute);
140     TELEPHONY_LOGI("set microphone mute result : %{public}d", muteResult);
141     return (muteResult == TELEPHONY_SUCCESS);
142 }
143 
GetRingerMode() const144 AudioStandard::AudioRingerMode AudioProxy::GetRingerMode() const
145 {
146     return AudioStandard::AudioSystemManager::GetInstance()->GetRingerMode();
147 }
148 
IsVibrateMode() const149 bool AudioProxy::IsVibrateMode() const
150 {
151     return (AudioStandard::AudioRingerMode::RINGER_MODE_VIBRATE == GetRingerMode());
152 }
153 
OnDeviceChange(const AudioStandard::DeviceChangeAction & deviceChangeAction)154 void AudioDeviceChangeCallback::OnDeviceChange(const AudioStandard::DeviceChangeAction &deviceChangeAction)
155 {
156     AudioStandard::DeviceChangeType changeType = deviceChangeAction.type;
157     switch (changeType) {
158         case AudioStandard::DeviceChangeType::CONNECT:
159 #ifdef ABILITY_AUDIO_SUPPORT
160             auto devices = deviceChangeAction.deviceDescriptors;
161             for (auto device : devices) {
162                 if (device->getType() == AudioStandard::DeviceType::DEVICE_TYPE_BLUETOOTH_SCO) {
163                     DelayedSingleton<AudioDeviceManager>::GetInstance()->ProcessEvent(
164                         AudioEvent::BLUETOOTH_SCO_CONNECTED);
165                 } else if (device->getType() == AudioStandard::DeviceType::DEVICE_TYPE_WIRED_HEADSET) {
166                     DelayedSingleton<AudioDeviceManager>::GetInstance()->ProcessEvent(
167                         AudioEvent::WIRED_HEADSET_CONNECTED);
168                 }
169             }
170 #endif
171             break;
172         case AudioStandard::DeviceChangeType::DISCONNECT:
173 #ifdef ABILITY_AUDIO_SUPPORT
174             auto devices = deviceChangeAction.deviceDescriptors;
175             for (auto device : devices) {
176                 if (device->getType() == AudioStandard::DeviceType::DEVICE_TYPE_BLUETOOTH_SCO) {
177                     DelayedSingleton<AudioDeviceManager>::GetInstance()->ProcessEvent(
178                         AudioEvent::BLUETOOTH_SCO_DISCONNECTED);
179                 } else if (device->getType() == AudioStandard::DeviceType::DEVICE_TYPE_WIRED_HEADSET) {
180                     DelayedSingleton<AudioDeviceManager>::GetInstance()->ProcessEvent(
181                         AudioEvent::WIRED_HEADSET_DISCONNECTED);
182                 }
183             }
184 #endif
185             break;
186         default:
187             break;
188     }
189 }
190 
GetSystemRingtoneUri() const191 std::string AudioProxy::GetSystemRingtoneUri() const
192 {
193     if (audioSoundManager_ == nullptr) {
194         TELEPHONY_LOGE("audio sound manager nullptr");
195         return "";
196     }
197     if (context_ == nullptr) {
198         TELEPHONY_LOGE("context nullptr");
199         return "";
200     }
201     AudioStandard::RingtoneType rinigtoneType = AudioStandard::RingtoneType::RINGTONE_TYPE_DEFAULT;
202     return audioSoundManager_->GetSystemRingtoneUri(context_, rinigtoneType);
203 }
204 
StartVibrate()205 int32_t AudioProxy::StartVibrate()
206 {
207 #ifdef ABILITY_SENSOR_SUPPORT
208     return VibratorManager::GetInstance()->StartVibrate();
209 #endif
210     return TELEPHONY_SUCCESS;
211 }
212 
CancelVibrate()213 int32_t AudioProxy::CancelVibrate()
214 {
215 #ifdef ABILITY_SENSOR_SUPPORT
216     return VibratorManager::GetInstance()->CancelVibrate();
217 #endif
218     return TELEPHONY_SUCCESS;
219 }
220 
GetDefaultRingPath() const221 std::string AudioProxy::GetDefaultRingPath() const
222 {
223     return defaultRingPath_;
224 }
225 
GetDefaultTonePath() const226 std::string AudioProxy::GetDefaultTonePath() const
227 {
228     return defaultTonePath_;
229 }
230 
GetDefaultDtmfPath() const231 std::string AudioProxy::GetDefaultDtmfPath() const
232 {
233     return defaultDtmfPath_;
234 }
235 } // namespace Telephony
236 } // namespace OHOS