• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021-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 #include "audio_device_manager.h"
17 
18 #include "audio_control_manager.h"
19 #include "bluetooth_call_manager.h"
20 #include "bluetooth_device_state.h"
21 #include "call_ability_report_proxy.h"
22 #include "earpiece_device_state.h"
23 #include "inactive_device_state.h"
24 #include "speaker_device_state.h"
25 #include "telephony_log_wrapper.h"
26 #include "wired_headset_device_state.h"
27 #include "distributed_call_manager.h"
28 #include "audio_system_manager.h"
29 #include "audio_device_info.h"
30 
31 namespace OHOS {
32 namespace Telephony {
33 using namespace AudioStandard;
34 bool AudioDeviceManager::isBtScoDevEnable_ = false;
35 bool AudioDeviceManager::isDCallDevEnable_ = false;
36 bool AudioDeviceManager::isSpeakerAvailable_ = true; // default available
37 bool AudioDeviceManager::isEarpieceAvailable_ = true;
38 bool AudioDeviceManager::isWiredHeadsetConnected_ = false;
39 bool AudioDeviceManager::isBtScoConnected_ = false;
40 bool AudioDeviceManager::isDCallDevConnected_ = false;
41 
AudioDeviceManager()42 AudioDeviceManager::AudioDeviceManager()
43     : audioDeviceType_(AudioDeviceType::DEVICE_UNKNOWN), currentAudioDevice_(nullptr), isAudioActivated_(false)
44 {}
45 
~AudioDeviceManager()46 AudioDeviceManager::~AudioDeviceManager()
47 {
48     memberFuncMap_.clear();
49 }
50 
Init()51 void AudioDeviceManager::Init()
52 {
53     memberFuncMap_[AudioEvent::ENABLE_DEVICE_EARPIECE] = &AudioDeviceManager::EnableEarpiece;
54     memberFuncMap_[AudioEvent::ENABLE_DEVICE_SPEAKER] = &AudioDeviceManager::EnableSpeaker;
55     memberFuncMap_[AudioEvent::ENABLE_DEVICE_WIRED_HEADSET] = &AudioDeviceManager::EnableWiredHeadset;
56     memberFuncMap_[AudioEvent::ENABLE_DEVICE_BLUETOOTH] = &AudioDeviceManager::EnableBtSco;
57     currentAudioDevice_ = std::make_unique<InactiveDeviceState>();
58     if (currentAudioDevice_ == nullptr) {
59         TELEPHONY_LOGE("current audio device nullptr");
60     }
61     if (memset_s(&info_, sizeof(AudioDeviceInfo), 0, sizeof(AudioDeviceInfo)) != EOK) {
62         TELEPHONY_LOGE("memset_s address fail");
63         return;
64     }
65     AudioDevice speaker = {
66         .deviceType = AudioDeviceType::DEVICE_SPEAKER,
67         .address = { 0 },
68     };
69     info_.audioDeviceList.push_back(speaker);
70     AudioDevice earpiece = {
71         .deviceType = AudioDeviceType::DEVICE_EARPIECE,
72         .address = { 0 },
73     };
74     info_.audioDeviceList.push_back(earpiece);
75 }
76 
AddAudioDeviceList(const std::string & address,AudioDeviceType deviceType)77 void AudioDeviceManager::AddAudioDeviceList(const std::string &address, AudioDeviceType deviceType)
78 {
79     std::lock_guard<std::mutex> lock(infoMutex_);
80     std::vector<AudioDevice>::iterator it = info_.audioDeviceList.begin();
81     while (it != info_.audioDeviceList.end()) {
82         if (it->address == address && it->deviceType == deviceType) {
83             TELEPHONY_LOGI("device is already existenced");
84             return;
85         }
86         if (deviceType == AudioDeviceType::DEVICE_WIRED_HEADSET && it->deviceType == AudioDeviceType::DEVICE_EARPIECE) {
87             it = info_.audioDeviceList.erase(it);
88             TELEPHONY_LOGI("remove Earpiece device success");
89         } else {
90             ++it;
91         }
92     }
93     AudioDevice audioDevice;
94     if (memset_s(&audioDevice, sizeof(AudioDevice), 0, sizeof(AudioDevice)) != EOK) {
95         TELEPHONY_LOGE("memset_s fail");
96         return;
97     }
98     audioDevice.deviceType = deviceType;
99     if (address.length() > kMaxAddressLen) {
100         TELEPHONY_LOGE("address is not too long");
101         return;
102     }
103     if (memcpy_s(audioDevice.address, kMaxAddressLen, address.c_str(), address.length()) != EOK) {
104         TELEPHONY_LOGE("memcpy_s address fail");
105         return;
106     }
107     info_.audioDeviceList.push_back(audioDevice);
108     if (deviceType == AudioDeviceType::DEVICE_WIRED_HEADSET) {
109         SetDeviceAvailable(AudioDeviceType::DEVICE_WIRED_HEADSET, true);
110     }
111     if (deviceType == AudioDeviceType::DEVICE_BLUETOOTH_SCO) {
112         SetDeviceAvailable(AudioDeviceType::DEVICE_BLUETOOTH_SCO, true);
113     }
114     if (IsDistributedAudioDeviceType(deviceType)) {
115         SetDeviceAvailable(deviceType, true);
116     }
117     ReportAudioDeviceInfo();
118     TELEPHONY_LOGI("AddAudioDeviceList success");
119 }
120 
RemoveAudioDeviceList(const std::string & address,AudioDeviceType deviceType)121 void AudioDeviceManager::RemoveAudioDeviceList(const std::string &address, AudioDeviceType deviceType)
122 {
123     std::lock_guard<std::mutex> lock(infoMutex_);
124     bool needAddEarpiece = true;
125     std::vector<AudioDevice>::iterator it = info_.audioDeviceList.begin();
126     while (it != info_.audioDeviceList.end()) {
127         if (it->deviceType == AudioDeviceType::DEVICE_EARPIECE) {
128             needAddEarpiece = false;
129         }
130         if (it->address == address && it->deviceType == deviceType) {
131             it = info_.audioDeviceList.erase(it);
132         } else {
133             ++it;
134         }
135     }
136 
137     bool wiredHeadsetExist = false;
138     bool blueToothScoExist = false;
139     for (auto &elem : info_.audioDeviceList) {
140         if (elem.deviceType == AudioDeviceType::DEVICE_WIRED_HEADSET) {
141             wiredHeadsetExist = true;
142         }
143         if (elem.deviceType == AudioDeviceType::DEVICE_BLUETOOTH_SCO) {
144             blueToothScoExist = true;
145         }
146     }
147     if (deviceType == AudioDeviceType::DEVICE_WIRED_HEADSET && !wiredHeadsetExist) {
148         SetDeviceAvailable(AudioDeviceType::DEVICE_WIRED_HEADSET, false);
149     }
150     if (deviceType == AudioDeviceType::DEVICE_BLUETOOTH_SCO && !blueToothScoExist) {
151         SetDeviceAvailable(AudioDeviceType::DEVICE_BLUETOOTH_SCO, false);
152     }
153     if (IsDistributedAudioDeviceType(deviceType)) {
154         SetDeviceAvailable(deviceType, false);
155     }
156     if (needAddEarpiece && deviceType == AudioDeviceType::DEVICE_WIRED_HEADSET && !wiredHeadsetExist) {
157         AudioDevice audioDevice = {
158             .deviceType = AudioDeviceType::DEVICE_EARPIECE,
159             .address = { 0 },
160         };
161         info_.audioDeviceList.push_back(audioDevice);
162         TELEPHONY_LOGI("add Earpiece device success");
163     }
164     DelayedSingleton<AudioControlManager>::GetInstance()->UpdateDeviceTypeForVideoCall();
165     ReportAudioDeviceInfo();
166     TELEPHONY_LOGI("RemoveAudioDeviceList success");
167 }
168 
ResetBtAudioDevicesList()169 void AudioDeviceManager::ResetBtAudioDevicesList()
170 {
171     std::lock_guard<std::mutex> lock(mutex_);
172     std::vector<AudioDevice>::iterator it = info_.audioDeviceList.begin();
173     while (it != info_.audioDeviceList.end()) {
174         if (it->deviceType == AudioDeviceType::DEVICE_BLUETOOTH_SCO) {
175             it = info_.audioDeviceList.erase(it);
176         } else {
177             ++it;
178         }
179     }
180     SetDeviceAvailable(AudioDeviceType::DEVICE_BLUETOOTH_SCO, false);
181     ReportAudioDeviceInfo();
182     TELEPHONY_LOGI("ResetBtAudioDevicesList success");
183 }
184 
ResetDistributedCallDevicesList()185 void AudioDeviceManager::ResetDistributedCallDevicesList()
186 {
187     std::lock_guard<std::mutex> lock(mutex_);
188     std::vector<AudioDevice>::iterator it = info_.audioDeviceList.begin();
189     while (it != info_.audioDeviceList.end()) {
190         if (IsDistributedAudioDeviceType(it->deviceType)) {
191             it = info_.audioDeviceList.erase(it);
192         } else {
193             ++it;
194         }
195     }
196     SetDeviceAvailable(AudioDeviceType::DEVICE_DISTRIBUTED_AUTOMOTIVE, false);
197     SetDeviceAvailable(AudioDeviceType::DEVICE_DISTRIBUTED_PHONE, false);
198     SetDeviceAvailable(AudioDeviceType::DEVICE_DISTRIBUTED_PAD, false);
199     DelayedSingleton<CallAbilityReportProxy>::GetInstance()->ReportAudioDeviceChange(info_);
200     TELEPHONY_LOGI("Reset Distributed Audio Devices List success");
201 }
202 
InitAudioDevice()203 bool AudioDeviceManager::InitAudioDevice()
204 {
205     // when audio deactivate interrupt , reinit
206     // when external audio device connection state changed , reinit
207     auto device = DelayedSingleton<AudioControlManager>::GetInstance()->GetInitAudioDeviceType();
208     return SwitchDevice(device);
209 }
210 
ProcessEvent(AudioEvent event)211 bool AudioDeviceManager::ProcessEvent(AudioEvent event)
212 {
213     bool result = false;
214     switch (event) {
215         case AudioEvent::AUDIO_ACTIVATED:
216         case AudioEvent::AUDIO_RINGING:
217             if (!isAudioActivated_) {
218                 isAudioActivated_ = true;
219                 std::unique_ptr<AudioStandard::AudioDeviceDescriptor> activeBluetoothDevice =
220                     AudioStandard::AudioRoutingManager::GetInstance()->GetActiveBluetoothDevice();
221                 if (activeBluetoothDevice != nullptr && !activeBluetoothDevice->macAddress_.empty()) {
222                     AudioSystemManager* audioSystemManager = AudioSystemManager::GetInstance();
223                     int32_t ret = audioSystemManager->SetCallDeviceActive(ActiveDeviceType::BLUETOOTH_SCO,
224                         true, activeBluetoothDevice->macAddress_);
225                     return ret == 0 ? true : false;
226                 }
227                 AudioDevice device = {
228                     .deviceType = AudioDeviceType::DEVICE_EARPIECE,
229                     .address = { 0 },
230                 };
231                 if (DelayedSingleton<AudioProxy>::GetInstance()->GetPreferredOutputAudioDevice(device) !=
232                 TELEPHONY_SUCCESS) {
233                 TELEPHONY_LOGE("current audio device nullptr");
234                 return false;
235                 }
236             SetCurrentAudioDevice(device.deviceType);
237             }
238             break;
239         case AudioEvent::AUDIO_DEACTIVATED:
240             if (isAudioActivated_) {
241                 isAudioActivated_ = false;
242                 result = InitAudioDevice();
243             }
244             break;
245         case AudioEvent::INIT_AUDIO_DEVICE:
246             result = InitAudioDevice();
247             break;
248         case AudioEvent::WIRED_HEADSET_DISCONNECTED: {
249             if (!isAudioActivated_) {
250                 TELEPHONY_LOGE("call is not active, no need to connect sco");
251                 return false;
252             }
253             break;
254         }
255         default:
256             break;
257     }
258     return result;
259 }
260 
SwitchDevice(AudioEvent event)261 bool AudioDeviceManager::SwitchDevice(AudioEvent event)
262 {
263     auto itFunc = memberFuncMap_.find(event);
264     if (itFunc != memberFuncMap_.end() && itFunc->second != nullptr) {
265         auto memberFunc = itFunc->second;
266         return (this->*memberFunc)();
267     }
268     return false;
269 }
270 
SwitchDevice(AudioDeviceType device)271 bool AudioDeviceManager::SwitchDevice(AudioDeviceType device)
272 {
273     bool result = false;
274     std::lock_guard<std::mutex> lock(mutex_);
275     switch (device) {
276         case AudioDeviceType::DEVICE_EARPIECE:
277             result = EnableEarpiece();
278             break;
279         case AudioDeviceType::DEVICE_SPEAKER:
280             result = EnableSpeaker();
281             break;
282         case AudioDeviceType::DEVICE_WIRED_HEADSET:
283             result = EnableWiredHeadset();
284             break;
285         case AudioDeviceType::DEVICE_BLUETOOTH_SCO:
286             result = EnableBtSco();
287             break;
288         case AudioDeviceType::DEVICE_DISABLE:
289             result = DisableAll();
290             break;
291         default:
292             break;
293     }
294     TELEPHONY_LOGI("switch device lock release");
295     return result;
296 }
297 
EnableSpeaker()298 bool AudioDeviceManager::EnableSpeaker()
299 {
300     if (isSpeakerAvailable_ && DelayedSingleton<AudioProxy>::GetInstance()->SetSpeakerDevActive()) {
301         TELEPHONY_LOGI("speaker enabled , current audio device : speaker");
302         SetCurrentAudioDevice(AudioDeviceType::DEVICE_SPEAKER);
303         return true;
304     }
305     TELEPHONY_LOGI("enable speaker device failed");
306     return false;
307 }
308 
EnableEarpiece()309 bool AudioDeviceManager::EnableEarpiece()
310 {
311     if (isEarpieceAvailable_ && DelayedSingleton<AudioProxy>::GetInstance()->SetEarpieceDevActive()) {
312         TELEPHONY_LOGI("earpiece enabled , current audio device : earpiece");
313         SetCurrentAudioDevice(AudioDeviceType::DEVICE_EARPIECE);
314         return true;
315     }
316     TELEPHONY_LOGI("enable earpiece device failed");
317     return false;
318 }
319 
EnableWiredHeadset()320 bool AudioDeviceManager::EnableWiredHeadset()
321 {
322     if (isWiredHeadsetConnected_ && DelayedSingleton<AudioProxy>::GetInstance()->SetWiredHeadsetDevActive()) {
323         TELEPHONY_LOGI("wired headset enabled , current audio device : wired headset");
324         SetCurrentAudioDevice(AudioDeviceType::DEVICE_WIRED_HEADSET);
325         return true;
326     }
327     TELEPHONY_LOGI("enable wired headset device failed");
328     return false;
329 }
330 
EnableBtSco()331 bool AudioDeviceManager::EnableBtSco()
332 {
333     if (isBtScoConnected_) {
334         TELEPHONY_LOGI("bluetooth sco enabled , current audio device : bluetooth sco");
335         SetCurrentAudioDevice(AudioDeviceType::DEVICE_BLUETOOTH_SCO);
336         return true;
337     }
338     TELEPHONY_LOGI("enable bluetooth sco device failed");
339     return false;
340 }
341 
EnableDistributedCall()342 bool AudioDeviceManager::EnableDistributedCall()
343 {
344     if (isDCallDevConnected_) {
345         AudioDeviceType type = DelayedSingleton<DistributedCallManager>::GetInstance()->GetConnectedDCallType();
346         TELEPHONY_LOGI("distributed call enabled, current audio device: %d", static_cast<int32_t>(type));
347         SetCurrentAudioDevice(type);
348         return true;
349     }
350     TELEPHONY_LOGI("enable distributed call device failed");
351     return false;
352 }
353 
DisableAll()354 bool AudioDeviceManager::DisableAll()
355 {
356     audioDeviceType_ = AudioDeviceType::DEVICE_UNKNOWN;
357     isBtScoDevEnable_ = false;
358     isDCallDevEnable_ = false;
359     isWiredHeadsetDevEnable_ = false;
360     isSpeakerDevEnable_ = false;
361     isEarpieceDevEnable_ = false;
362     currentAudioDevice_ = std::make_unique<InactiveDeviceState>();
363     if (currentAudioDevice_ == nullptr) {
364         TELEPHONY_LOGE("make_unique InactiveDeviceState failed");
365         return false;
366     }
367     TELEPHONY_LOGI("current audio device : all audio devices disabled");
368     return true;
369 }
370 
SetCurrentAudioDevice(AudioDeviceType deviceType)371 void AudioDeviceManager::SetCurrentAudioDevice(AudioDeviceType deviceType)
372 {
373     if (!IsDistributedAudioDeviceType(deviceType) && IsDistributedAudioDeviceType(audioDeviceType_)) {
374         DelayedSingleton<DistributedCallManager>::GetInstance()->DisconnectDCallDevice();
375     }
376     audioDeviceType_ = deviceType;
377     ReportAudioDeviceChange();
378 }
379 
CheckAndSwitchDistributedAudioDevice()380 bool AudioDeviceManager::CheckAndSwitchDistributedAudioDevice()
381 {
382     std::lock_guard<std::mutex> lock(mutex_);
383     DelayedSingleton<DistributedCallManager>::GetInstance()->SetCallState(true);
384     std::vector<AudioDevice>::iterator it = info_.audioDeviceList.begin();
385     while (it != info_.audioDeviceList.end()) {
386         if (it->deviceType == AudioDeviceType::DEVICE_DISTRIBUTED_AUTOMOTIVE) {
387             DelayedSingleton<DistributedCallManager>::GetInstance()->SwitchDCallDeviceAsync(*it);
388             return true;
389         } else {
390             ++it;
391         }
392     }
393     return false;
394 }
395 
OnActivedCallDisconnected()396 void AudioDeviceManager::OnActivedCallDisconnected()
397 {
398     DelayedSingleton<DistributedCallManager>::GetInstance()->SetCallState(false);
399 }
400 
ReportAudioDeviceChange()401 int32_t AudioDeviceManager::ReportAudioDeviceChange()
402 {
403     if (audioDeviceType_ == AudioDeviceType::DEVICE_UNKNOWN) {
404         audioDeviceType_ = DelayedSingleton<AudioControlManager>::GetInstance()->GetInitAudioDeviceType();
405         info_.currentAudioDevice.deviceType = audioDeviceType_;
406     } else {
407         info_.currentAudioDevice.deviceType = audioDeviceType_;
408     }
409     std::string address = "";
410     if (audioDeviceType_ == AudioDeviceType::DEVICE_BLUETOOTH_SCO) {
411         std::shared_ptr<BluetoothCallManager> bluetoothCallManager = std::make_shared<BluetoothCallManager>();
412         address = bluetoothCallManager->GetConnectedScoAddr();
413     } else if (IsDistributedAudioDeviceType(audioDeviceType_)) {
414         address = DelayedSingleton<DistributedCallManager>::GetInstance()->GetConnectedDCallAddr();
415     }
416     if (address.length() > kMaxAddressLen) {
417         TELEPHONY_LOGE("address is not too long");
418         return TELEPHONY_ERR_ARGUMENT_INVALID;
419     }
420     if (address.length() > 0) {
421         if (memset_s(info_.currentAudioDevice.address, kMaxAddressLen, 0, kMaxAddressLen) != EOK) {
422             TELEPHONY_LOGE("memset_s address fail");
423             return TELEPHONY_ERR_MEMSET_FAIL;
424         }
425         if (memcpy_s(info_.currentAudioDevice.address, kMaxAddressLen, address.c_str(), address.length()) != EOK) {
426             TELEPHONY_LOGE("memcpy_s address fail");
427             return TELEPHONY_ERR_MEMCPY_FAIL;
428         }
429     } else {
430         if (memset_s(info_.currentAudioDevice.address, kMaxAddressLen, 0, kMaxAddressLen) != EOK) {
431             TELEPHONY_LOGE("memset_s address fail");
432             return TELEPHONY_ERR_MEMSET_FAIL;
433         }
434     }
435     return ReportAudioDeviceInfo();
436 }
437 
ReportAudioDeviceInfo()438 int32_t AudioDeviceManager::ReportAudioDeviceInfo()
439 {
440     info_.isMuted = DelayedSingleton<AudioProxy>::GetInstance()->IsMicrophoneMute();
441     TELEPHONY_LOGI("report audio device info, currentAudioDeviceType:%{public}d, currentAddress:%{public}s, "
442         "mute:%{public}d", info_.currentAudioDevice.deviceType, info_.currentAudioDevice.address, info_.isMuted);
443     return DelayedSingleton<CallAbilityReportProxy>::GetInstance()->ReportAudioDeviceChange(info_);
444 }
445 
GetCurrentAudioDevice()446 AudioDeviceType AudioDeviceManager::GetCurrentAudioDevice()
447 {
448     return audioDeviceType_;
449 }
450 
IsEarpieceDevEnable()451 bool AudioDeviceManager::IsEarpieceDevEnable()
452 {
453     return isEarpieceDevEnable_;
454 }
455 
IsWiredHeadsetDevEnable()456 bool AudioDeviceManager::IsWiredHeadsetDevEnable()
457 {
458     return isWiredHeadsetDevEnable_;
459 }
460 
IsSpeakerDevEnable()461 bool AudioDeviceManager::IsSpeakerDevEnable()
462 {
463     return isSpeakerDevEnable_;
464 }
465 
IsBtScoDevEnable()466 bool AudioDeviceManager::IsBtScoDevEnable()
467 {
468     return isBtScoDevEnable_;
469 }
470 
IsDCallDevEnable()471 bool AudioDeviceManager::IsDCallDevEnable()
472 {
473     return isDCallDevEnable_;
474 }
475 
IsBtScoConnected()476 bool AudioDeviceManager::IsBtScoConnected()
477 {
478     return isBtScoConnected_;
479 }
480 
IsDistributedCallConnected()481 bool AudioDeviceManager::IsDistributedCallConnected()
482 {
483     return isDCallDevConnected_;
484 }
485 
IsWiredHeadsetConnected()486 bool AudioDeviceManager::IsWiredHeadsetConnected()
487 {
488     return isWiredHeadsetConnected_;
489 }
490 
IsEarpieceAvailable()491 bool AudioDeviceManager::IsEarpieceAvailable()
492 {
493     return isEarpieceAvailable_;
494 }
495 
IsSpeakerAvailable()496 bool AudioDeviceManager::IsSpeakerAvailable()
497 {
498     return isSpeakerAvailable_;
499 }
500 
IsDistributedAudioDeviceType(AudioDeviceType deviceType)501 bool AudioDeviceManager::IsDistributedAudioDeviceType(AudioDeviceType deviceType)
502 {
503     if (((deviceType == AudioDeviceType::DEVICE_DISTRIBUTED_AUTOMOTIVE) ||
504         (deviceType == AudioDeviceType::DEVICE_DISTRIBUTED_PHONE) ||
505         (deviceType == AudioDeviceType::DEVICE_DISTRIBUTED_PAD))) {
506         return true;
507     }
508     return false;
509 }
510 
SetDeviceAvailable(AudioDeviceType deviceType,bool available)511 void AudioDeviceManager::SetDeviceAvailable(AudioDeviceType deviceType, bool available)
512 {
513     switch (deviceType) {
514         case AudioDeviceType::DEVICE_SPEAKER:
515             isSpeakerAvailable_ = available;
516             break;
517         case AudioDeviceType::DEVICE_EARPIECE:
518             isEarpieceAvailable_ = available;
519             break;
520         case AudioDeviceType::DEVICE_BLUETOOTH_SCO:
521             isBtScoConnected_ = available;
522             break;
523         case AudioDeviceType::DEVICE_WIRED_HEADSET:
524             isWiredHeadsetConnected_ = available;
525             break;
526         case AudioDeviceType::DEVICE_DISTRIBUTED_AUTOMOTIVE:
527         case AudioDeviceType::DEVICE_DISTRIBUTED_PHONE:
528         case AudioDeviceType::DEVICE_DISTRIBUTED_PAD:
529             isDCallDevConnected_ = available;
530             break;
531         default:
532             break;
533     }
534 }
535 } // namespace Telephony
536 } // namespace OHOS