diff --git a/frameworks/native/audiorenderer/src/audio_renderer.cpp b/frameworks/native/audiorenderer/src/audio_renderer.cpp index 91f909e9cef499bd812dc40ce5d272eec93ebe56..1b6ed12a7053bd30e4354c8cd33a5a1bc2372c68 100644 --- a/frameworks/native/audiorenderer/src/audio_renderer.cpp +++ b/frameworks/native/audiorenderer/src/audio_renderer.cpp @@ -169,7 +169,7 @@ std::unique_ptr AudioRenderer::Create(const std::string cachePath StreamUsage streamUsage = rendererOptions.rendererInfo.streamUsage; CHECK_AND_RETURN_RET_LOG(streamUsage >= STREAM_USAGE_UNKNOWN && - streamUsage <= STREAM_USAGE_VOICE_MODEM_COMMUNICATION, nullptr, "Invalid stream usage"); + streamUsage <= STREAM_USAGE_MAX, nullptr, "Invalid stream usage"); if (contentType == CONTENT_TYPE_ULTRASONIC || IsNeedVerifyPermission(streamUsage)) { if (!PermissionUtil::VerifySelfPermission()) { AUDIO_ERR_LOG("CreateAudioRenderer failed! CONTENT_TYPE_ULTRASONIC or STREAM_USAGE_SYSTEM or "\ diff --git a/frameworks/native/bluetoothclient/audio_bluetooth_manager.cpp b/frameworks/native/bluetoothclient/audio_bluetooth_manager.cpp index deb56c15a5249e64c87ec3716f9352cfe54aa9b4..0940162e451374eeec7dc0a31db40d94750ef124 100644 --- a/frameworks/native/bluetoothclient/audio_bluetooth_manager.cpp +++ b/frameworks/native/bluetoothclient/audio_bluetooth_manager.cpp @@ -332,7 +332,7 @@ int32_t AudioHfpManager::ConnectScoWithAudioScene(AudioScene scene) CHECK_AND_RETURN_RET_LOG(hfpInstance_ != nullptr, ERROR, "HFP AG profile instance unavailable"); bool isInbardingEnabled = false; hfpInstance_->IsInbandRingingEnabled(isInbardingEnabled); - if (scene == AUDIO_SCENE_RINGING && !isInbardingEnabled) { + if ((scene == AUDIO_SCENE_RINGING || scene == AUDIO_SCENE_VOICE_RINGING) && !isInbardingEnabled) { AUDIO_INFO_LOG("The inbarding switch is off, ignore the ring scene."); return SUCCESS; } @@ -372,9 +372,10 @@ int32_t AudioHfpManager::DisconnectSco() int8_t AudioHfpManager::GetScoCategoryFromScene(AudioScene scene) { switch (scene) { - case AUDIO_SCENE_RINGING: + case AUDIO_SCENE_VOICE_RINGING: case AUDIO_SCENE_PHONE_CALL: return ScoCategory::SCO_CALLULAR; + case AUDIO_SCENE_RINGING: case AUDIO_SCENE_PHONE_CHAT: return ScoCategory::SCO_VIRTUAL; default: diff --git a/frameworks/native/hdiadapter/sink/multichannel/multichannel_audio_renderer_sink.cpp b/frameworks/native/hdiadapter/sink/multichannel/multichannel_audio_renderer_sink.cpp index 011df149a7c45c058dfd6b616e834ed9bde2ed4d..e4cac5213d9bb2807ef29009e14e0f822d415825 100644 --- a/frameworks/native/hdiadapter/sink/multichannel/multichannel_audio_renderer_sink.cpp +++ b/frameworks/native/hdiadapter/sink/multichannel/multichannel_audio_renderer_sink.cpp @@ -686,6 +686,7 @@ static AudioCategory GetAudioCategory(AudioScene audioScene) audioCategory = AUDIO_IN_MEDIA; break; case AUDIO_SCENE_RINGING: + case AUDIO_SCENE_VOICE_RINGING: audioCategory = AUDIO_IN_RINGTONE; break; case AUDIO_SCENE_PHONE_CALL: @@ -812,7 +813,7 @@ int32_t MultiChannelRendererSinkInner::SetAudioScene(AudioScene audioScene, Devi { AUDIO_INFO_LOG("SetAudioScene scene: %{public}d, device: %{public}d", audioScene, activeDevice); - CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene <= AUDIO_SCENE_PHONE_CHAT, + CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene < AUDIO_SCENE_MAX, ERR_INVALID_PARAM, "invalid audioScene"); if (audioRender_ == nullptr) { AUDIO_ERR_LOG("SetAudioScene failed audio render handle is null!"); diff --git a/frameworks/native/hdiadapter/sink/primary/audio_renderer_sink.cpp b/frameworks/native/hdiadapter/sink/primary/audio_renderer_sink.cpp index c9528cdac2e3648db9f3e554d387b14d8bdcc72e..06aa0c47a6917f707834407340923c03671e485c 100644 --- a/frameworks/native/hdiadapter/sink/primary/audio_renderer_sink.cpp +++ b/frameworks/native/hdiadapter/sink/primary/audio_renderer_sink.cpp @@ -844,6 +844,7 @@ static AudioCategory GetAudioCategory(AudioScene audioScene) audioCategory = AUDIO_IN_MEDIA; break; case AUDIO_SCENE_RINGING: + case AUDIO_SCENE_VOICE_RINGING: audioCategory = AUDIO_IN_RINGTONE; break; case AUDIO_SCENE_PHONE_CALL: @@ -973,7 +974,7 @@ int32_t AudioRendererSinkInner::SetAudioScene(AudioScene audioScene, DeviceType { AUDIO_INFO_LOG("SetAudioScene scene: %{public}d, device: %{public}d", audioScene, activeDevice); - CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene <= AUDIO_SCENE_PHONE_CHAT, + CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene < AUDIO_SCENE_MAX, ERR_INVALID_PARAM, "invalid audioScene"); CHECK_AND_RETURN_RET_LOG(audioRender_ != nullptr, ERR_INVALID_HANDLE, "SetAudioScene failed audio render handle is null!"); diff --git a/frameworks/native/hdiadapter/sink/remote/remote_audio_renderer_sink.cpp b/frameworks/native/hdiadapter/sink/remote/remote_audio_renderer_sink.cpp index 637141080dea729ebb72f5d3f183d9204a35300a..e73a6a49ee5325bd4d86fe5bbe4bcd072bc397e4 100644 --- a/frameworks/native/hdiadapter/sink/remote/remote_audio_renderer_sink.cpp +++ b/frameworks/native/hdiadapter/sink/remote/remote_audio_renderer_sink.cpp @@ -528,6 +528,7 @@ static AudioCategory GetAudioCategory(AudioScene audioScene) audioCategory = AudioCategory::AUDIO_IN_MEDIA; break; case AUDIO_SCENE_RINGING: + case AUDIO_SCENE_VOICE_RINGING: audioCategory = AudioCategory::AUDIO_IN_RINGTONE; break; case AUDIO_SCENE_PHONE_CALL: @@ -603,7 +604,7 @@ int32_t RemoteAudioRendererSinkInner::SetAudioScene(AudioScene audioScene, Devic { AUDIO_INFO_LOG("SetAudioScene scene: %{public}d, device: %{public}d", audioScene, activeDevice); - CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene <= AUDIO_SCENE_PHONE_CHAT, + CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene < AUDIO_SCENE_MAX, ERR_INVALID_PARAM, "invalid audioScene"); int32_t ret = OpenOutput(DEVICE_TYPE_SPEAKER); diff --git a/frameworks/native/hdiadapter/source/primary/audio_capturer_source.cpp b/frameworks/native/hdiadapter/source/primary/audio_capturer_source.cpp index c3601aeee4e059d1be1a4069fdb05667fbe0e7dd..41a9742d61b84862138dcef4d0ba825870877695 100755 --- a/frameworks/native/hdiadapter/source/primary/audio_capturer_source.cpp +++ b/frameworks/native/hdiadapter/source/primary/audio_capturer_source.cpp @@ -751,6 +751,7 @@ static AudioCategory GetAudioCategory(AudioScene audioScene) audioCategory = AUDIO_IN_COMMUNICATION; break; case AUDIO_SCENE_RINGING: + case AUDIO_SCENE_VOICE_RINGING: audioCategory = AUDIO_IN_RINGTONE; break; case AUDIO_SCENE_DEFAULT: @@ -854,7 +855,7 @@ int32_t AudioCapturerSourceInner::SetAudioScene(AudioScene audioScene, DeviceTyp { AUDIO_INFO_LOG("SetAudioScene scene: %{public}d, device: %{public}d", audioScene, activeDevice); - CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene <= AUDIO_SCENE_PHONE_CHAT, + CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene < AUDIO_SCENE_MAX, ERR_INVALID_PARAM, "invalid audioScene"); CHECK_AND_RETURN_RET_LOG(audioCapture_ != nullptr, ERR_INVALID_HANDLE, "SetAudioScene failed audioCapture_ handle is null!"); diff --git a/frameworks/native/hdiadapter/source/remote/remote_audio_capturer_source.cpp b/frameworks/native/hdiadapter/source/remote/remote_audio_capturer_source.cpp index ed840f08d89eca8fb36513b5a71cea4387e07a55..f81d83f91abc638d3569fe360872fcc5d62822d3 100644 --- a/frameworks/native/hdiadapter/source/remote/remote_audio_capturer_source.cpp +++ b/frameworks/native/hdiadapter/source/remote/remote_audio_capturer_source.cpp @@ -575,6 +575,7 @@ AudioCategory RemoteAudioCapturerSourceInner::GetAudioCategory(AudioScene audioS audioCategory = AudioCategory::AUDIO_IN_MEDIA; break; case AUDIO_SCENE_RINGING: + case AUDIO_SCENE_VOICE_RINGING: audioCategory = AudioCategory::AUDIO_IN_RINGTONE; break; case AUDIO_SCENE_PHONE_CALL: @@ -598,7 +599,7 @@ int32_t RemoteAudioCapturerSourceInner::SetAudioScene(AudioScene audioScene, Dev struct AudioSceneDescriptor scene; scene.scene.id = GetAudioCategory(audioScene); scene.desc.pins = AudioPortPin::PIN_IN_MIC; - CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene <= AUDIO_SCENE_PHONE_CHAT, + CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene < AUDIO_SCENE_MAX, ERR_INVALID_PARAM, "invalid audioScene"); AUDIO_INFO_LOG("AudioCapturerSource::SelectScene start"); diff --git a/frameworks/native/hdiadapter/source/remote_fast/remote_fast_audio_capturer_source.cpp b/frameworks/native/hdiadapter/source/remote_fast/remote_fast_audio_capturer_source.cpp index fe84b1f8abaee3c945af2dda3f1526067048e654..51f73a15c3c919b898126a7687331fc3d22fa437 100644 --- a/frameworks/native/hdiadapter/source/remote_fast/remote_fast_audio_capturer_source.cpp +++ b/frameworks/native/hdiadapter/source/remote_fast/remote_fast_audio_capturer_source.cpp @@ -696,6 +696,7 @@ AudioCategory RemoteFastAudioCapturerSourceInner::GetAudioCategory(AudioScene au audioCategory = AudioCategory::AUDIO_IN_MEDIA; break; case AUDIO_SCENE_RINGING: + case AUDIO_SCENE_VOICE_RINGING: audioCategory = AudioCategory::AUDIO_IN_RINGTONE; break; case AUDIO_SCENE_PHONE_CALL: @@ -720,7 +721,7 @@ int32_t RemoteFastAudioCapturerSourceInner::SetAudioScene(AudioScene audioScene, struct AudioSceneDescriptor scene; scene.scene.id = GetAudioCategory(audioScene); scene.desc.pins = AudioPortPin::PIN_IN_MIC; - CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene <= AUDIO_SCENE_PHONE_CHAT, + CHECK_AND_RETURN_RET_LOG(audioScene >= AUDIO_SCENE_DEFAULT && audioScene < AUDIO_SCENE_MAX, ERR_INVALID_PARAM, "invalid audioScene"); AUDIO_DEBUG_LOG("AudioCapturerSource::SelectScene start"); diff --git a/interfaces/inner_api/native/audiocommon/include/audio_info.h b/interfaces/inner_api/native/audiocommon/include/audio_info.h index 1ee9a06a95f4a1b2fc49872a1d9a91716017e92c..8b722fd7ff8f9656c59aadad9154abbaed1ab85d 100644 --- a/interfaces/inner_api/native/audiocommon/include/audio_info.h +++ b/interfaces/inner_api/native/audiocommon/include/audio_info.h @@ -419,6 +419,11 @@ enum AudioScene : int32_t { * AvSession set call end flag */ AUDIO_SCENE_CALL_END, + /** + * Voice ringing audio scene + * Only available for system api. + */ + AUDIO_SCENE_VOICE_RINGING, /** * Max */ diff --git a/interfaces/inner_api/native/audiocommon/include/audio_stream_info.h b/interfaces/inner_api/native/audiocommon/include/audio_stream_info.h index 6363e6668d73cffab4affc209af70efcfcd08cd9..ca83ed489ef963cf230abb6b497c8ade3c5de9a4 100644 --- a/interfaces/inner_api/native/audiocommon/include/audio_stream_info.h +++ b/interfaces/inner_api/native/audiocommon/include/audio_stream_info.h @@ -143,10 +143,14 @@ enum AudioStreamType { * Indicates audio streams for voip call. */ STREAM_VOICE_COMMUNICATION = 24, + /** + * Indicates audio streams for voice ringtones. + */ + STREAM_VOICE_RING = 25, /** * Indicates the max value of audio stream type (except STREAM_ALL). */ - STREAM_TYPE_MAX = STREAM_VOICE_COMMUNICATION, + STREAM_TYPE_MAX = STREAM_VOICE_RING, /** * Indicates audio streams used for only one volume bar of a device. @@ -181,7 +185,9 @@ enum StreamUsage { STREAM_USAGE_VIDEO_COMMUNICATION = 17, //other StreamUsage STREAM_USAGE_RANGING, - STREAM_USAGE_VOICE_MODEM_COMMUNICATION + STREAM_USAGE_VOICE_MODEM_COMMUNICATION, + STREAM_USAGE_VOICE_RINGTONE, + STREAM_USAGE_MAX = STREAM_USAGE_VOICE_RINGTONE }; /** @@ -486,7 +492,8 @@ const std::vector AUDIO_SUPPORTED_STREAM_USAGES { STREAM_USAGE_ULTRASONIC, STREAM_USAGE_VIDEO_COMMUNICATION, STREAM_USAGE_RANGING, - STREAM_USAGE_VOICE_MODEM_COMMUNICATION + STREAM_USAGE_VOICE_MODEM_COMMUNICATION, + STREAM_USAGE_VOICE_RINGTONE, }; // Supported audio parameters for fast audio stream @@ -520,7 +527,8 @@ const std::map STREAM_TYPE_USAGE_MAP = { {STREAM_NAVIGATION, STREAM_USAGE_NAVIGATION}, {STREAM_DTMF, STREAM_USAGE_DTMF}, {STREAM_SYSTEM_ENFORCED, STREAM_USAGE_ENFORCED_TONE}, - {STREAM_ULTRASONIC, STREAM_USAGE_ULTRASONIC} + {STREAM_ULTRASONIC, STREAM_USAGE_ULTRASONIC}, + {STREAM_VOICE_RING, STREAM_USAGE_VOICE_RINGTONE}, }; const std::unordered_map STREAM_USAGE_MAP = { @@ -546,6 +554,7 @@ const std::unordered_map STREAM_USAGE_MAP = { {"STREAM_USAGE_VIDEO_COMMUNICATION", STREAM_USAGE_VIDEO_COMMUNICATION}, {"STREAM_USAGE_RANGING", STREAM_USAGE_RANGING}, {"STREAM_USAGE_VOICE_MODEM_COMMUNICATION", STREAM_USAGE_VOICE_MODEM_COMMUNICATION}, + {"STREAM_USAGE_VOICE_RINGTONE", STREAM_USAGE_VOICE_RINGTONE}, }; struct BufferDesc { diff --git a/services/audio_policy/server/config/audio_interrupt_policy_config.xml b/services/audio_policy/server/config/audio_interrupt_policy_config.xml index 7e1e29fc866d866a1b922c082f0b0baa0cdf3ee5..2ffccb078f12ba2050113f7a599cbf8102f5dec0 100644 --- a/services/audio_policy/server/config/audio_interrupt_policy_config.xml +++ b/services/audio_policy/server/config/audio_interrupt_policy_config.xml @@ -23,6 +23,7 @@ + @@ -86,6 +87,7 @@ + @@ -122,6 +124,7 @@ + @@ -159,6 +162,7 @@ + @@ -194,6 +198,7 @@ + @@ -229,6 +234,7 @@ + @@ -264,6 +270,7 @@ + @@ -299,6 +306,7 @@ + @@ -320,6 +328,7 @@ + @@ -371,6 +380,7 @@ + @@ -407,6 +417,7 @@ + @@ -431,6 +442,7 @@ + @@ -479,6 +491,7 @@ + @@ -515,6 +528,7 @@ + @@ -539,6 +553,7 @@ + @@ -577,6 +592,7 @@ + @@ -613,6 +629,7 @@ + @@ -629,6 +646,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -654,6 +709,7 @@ + @@ -692,6 +748,7 @@ + @@ -731,6 +788,7 @@ + @@ -761,6 +819,7 @@ + @@ -798,6 +857,7 @@ + @@ -837,6 +897,7 @@ + @@ -872,6 +933,7 @@ + @@ -915,6 +977,7 @@ + @@ -948,6 +1011,7 @@ + @@ -980,6 +1044,7 @@ + diff --git a/services/audio_policy/server/config/audio_usage_strategy.xml b/services/audio_policy/server/config/audio_usage_strategy.xml index 6d57b042b81da2093e0c5437eea7bd88633ed056..01eb0136a7d180c14116442e8a5c2790ea479022 100644 --- a/services/audio_policy/server/config/audio_usage_strategy.xml +++ b/services/audio_policy/server/config/audio_usage_strategy.xml @@ -17,7 +17,7 @@ - + diff --git a/services/audio_policy/server/include/service/config/audio_usage_strategy_parser.h b/services/audio_policy/server/include/service/config/audio_usage_strategy_parser.h index 921d9579a7393ecbf8438296e2cbba97c8b6b827..283a0fe2c8e830e6c4c435ec4273fe0e1935251c 100644 --- a/services/audio_policy/server/include/service/config/audio_usage_strategy_parser.h +++ b/services/audio_policy/server/include/service/config/audio_usage_strategy_parser.h @@ -88,6 +88,7 @@ private: {"STREAM_USAGE_VIDEO_COMMUNICATION", STREAM_USAGE_VIDEO_COMMUNICATION}, {"STREAM_USAGE_RANGING", STREAM_USAGE_RANGING}, {"STREAM_USAGE_VOICE_MODEM_COMMUNICATION", STREAM_USAGE_VOICE_MODEM_COMMUNICATION}, + {"STREAM_USAGE_VOICE_RINGTONE", STREAM_USAGE_VOICE_RINGTONE}, }; const unordered_map sourceTypeMap = { diff --git a/services/audio_policy/server/src/audio_policy_server.cpp b/services/audio_policy/server/src/audio_policy_server.cpp index 09ccfdc09a5db9aae39e859e99df2d3676386745..f05b90f3fe2009f7b86987af33f086e0812ed6ab 100644 --- a/services/audio_policy/server/src/audio_policy_server.cpp +++ b/services/audio_policy/server/src/audio_policy_server.cpp @@ -358,6 +358,7 @@ AudioVolumeType AudioPolicyServer::GetVolumeTypeFromStreamType(AudioStreamType s case STREAM_NOTIFICATION: case STREAM_SYSTEM_ENFORCED: case STREAM_DTMF: + case STREAM_VOICE_RING: return STREAM_RING; case STREAM_MUSIC: case STREAM_MEDIA: @@ -395,6 +396,7 @@ bool AudioPolicyServer::IsVolumeTypeValid(AudioStreamType streamType) case STREAM_ACCESSIBILITY: case STREAM_ULTRASONIC: case STREAM_ALL: + case STREAM_VOICE_RING: result = true; break; default: @@ -685,7 +687,7 @@ int32_t AudioPolicyServer::SetStreamMuteInternal(AudioStreamType streamType, boo int32_t AudioPolicyServer::SetSingleStreamMute(AudioStreamType streamType, bool mute, bool isUpdateUi) { bool updateRingerMode = false; - if (streamType == AudioStreamType::STREAM_RING) { + if (streamType == AudioStreamType::STREAM_RING || streamType == AudioStreamType::STREAM_VOICE_RING) { // Check whether the currentRingerMode is suitable for the ringtone mute state. AudioRingerMode currentRingerMode = GetRingerMode(); if ((currentRingerMode == RINGER_MODE_NORMAL && mute) || (currentRingerMode != RINGER_MODE_NORMAL && !mute)) { @@ -755,7 +757,7 @@ int32_t AudioPolicyServer::SetSystemVolumeLevelInternal(AudioStreamType streamTy int32_t AudioPolicyServer::SetSingleStreamVolume(AudioStreamType streamType, int32_t volumeLevel, bool isUpdateUi) { bool updateRingerMode = false; - if (streamType == AudioStreamType::STREAM_RING) { + if (streamType == AudioStreamType::STREAM_RING || streamType == AudioStreamType::STREAM_VOICE_RING) { // Check whether the currentRingerMode is suitable for the ringtone volume level. AudioRingerMode currentRingerMode = GetRingerMode(); if ((currentRingerMode == RINGER_MODE_NORMAL && volumeLevel == 0) || @@ -801,7 +803,7 @@ int32_t AudioPolicyServer::SetSingleStreamVolume(AudioStreamType streamType, int bool AudioPolicyServer::GetStreamMute(AudioStreamType streamType) { - if (streamType == AudioStreamType::STREAM_RING) { + if (streamType == AudioStreamType::STREAM_RING || streamType == AudioStreamType::STREAM_VOICE_RING) { bool ret = VerifyPermission(ACCESS_NOTIFICATION_POLICY_PERMISSION); CHECK_AND_RETURN_RET_LOG(ret, false, "GetStreamMute permission denied for stream type : %{public}d", streamType); diff --git a/services/audio_policy/server/src/audio_stream_collector.cpp b/services/audio_policy/server/src/audio_stream_collector.cpp index bc6eff2984b0094a737ee69f77c87a2005307128..9c3173cef38e5650f3cd02cfabab07189437b6f1 100644 --- a/services/audio_policy/server/src/audio_stream_collector.cpp +++ b/services/audio_policy/server/src/audio_stream_collector.cpp @@ -86,6 +86,7 @@ map, AudioStreamType> AudioStreamCollector::Creat streamMap[make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_DTMF)] = STREAM_DTMF; streamMap[make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_ENFORCED_TONE)] = STREAM_SYSTEM_ENFORCED; streamMap[make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_ULTRASONIC)] = STREAM_ULTRASONIC; + streamMap[make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_VOICE_RINGTONE)] = STREAM_VOICE_RING; return streamMap; } diff --git a/services/audio_policy/server/src/service/audio_policy_service.cpp b/services/audio_policy/server/src/service/audio_policy_service.cpp index e696c3f75c270c28c74f136beb763820ac31341a..7222f4d188c91a77736197dbff271b9b1d6d2926 100644 --- a/services/audio_policy/server/src/service/audio_policy_service.cpp +++ b/services/audio_policy/server/src/service/audio_policy_service.cpp @@ -235,6 +235,7 @@ static AudioStreamType GetStreamForVolumeMap(AudioStreamType streamType) case STREAM_NOTIFICATION: case STREAM_SYSTEM_ENFORCED: case STREAM_DTMF: + case STREAM_VOICE_RING: return STREAM_RING; case STREAM_MUSIC: case STREAM_MEDIA: @@ -2601,11 +2602,6 @@ int32_t AudioPolicyService::SetAudioScene(AudioScene audioScene) const sptr gsp = GetAudioServerProxy(); CHECK_AND_RETURN_RET_LOG(gsp != nullptr, ERR_OPERATION_FAILED, "Service proxy unavailable"); - if (audioScene_ == AUDIO_SCENE_RINGING && audioScene == AUDIO_SCENE_PHONE_CHAT) { -#ifdef BLUETOOTH_ENABLE - Bluetooth::AudioHfpManager::DisconnectSco(); -#endif - } audioScene_ = audioScene; if (audioScene_ == AUDIO_SCENE_DEFAULT) { diff --git a/services/audio_policy/server/src/service/config/audio_focus_parser.cpp b/services/audio_policy/server/src/service/config/audio_focus_parser.cpp index f0ffaeaab05aff941b653c6a20044cf0eb058331..f079de69e240d51c29915876996187d5857d93c4 100644 --- a/services/audio_policy/server/src/service/config/audio_focus_parser.cpp +++ b/services/audio_policy/server/src/service/config/audio_focus_parser.cpp @@ -62,6 +62,8 @@ std::map AudioFocusParser::audioFocusMap = { {AudioStreamType::STREAM_INTERNAL_FORCE_STOP, SourceType::SOURCE_TYPE_INVALID, true}}, {"STREAM_VOICE_COMMUNICATION", {AudioStreamType::STREAM_VOICE_COMMUNICATION, SourceType::SOURCE_TYPE_INVALID, true}}, + {"STREAM_VOICE_RING", + {AudioStreamType::STREAM_VOICE_RING, SourceType::SOURCE_TYPE_INVALID, true}}, // source type for audio interrupt {"SOURCE_TYPE_MIC", {AudioStreamType::STREAM_DEFAULT, SourceType::SOURCE_TYPE_MIC, false}}, diff --git a/services/audio_policy/server/src/service/dump/audio_service_dump.cpp b/services/audio_policy/server/src/service/dump/audio_service_dump.cpp index 117220b7283ac93e35ab9b2acb112694c042686a..5debf5e2ab2f41f0c7550b1428ec558fae2de6a7 100644 --- a/services/audio_policy/server/src/service/dump/audio_service_dump.cpp +++ b/services/audio_policy/server/src/service/dump/audio_service_dump.cpp @@ -192,6 +192,7 @@ bool AudioServiceDump::IsStreamSupported(AudioStreamType streamType) case STREAM_VOICE_COMMUNICATION: case STREAM_VOICE_ASSISTANT: case STREAM_WAKEUP: + case STREAM_VOICE_RING: return true; default: return false; @@ -213,6 +214,7 @@ const std::string AudioServiceDump::GetStreamName(AudioStreamType streamType) name = "SYSTEM"; break; case STREAM_RING: + case STREAM_VOICE_RING: name = "RING"; break; case STREAM_MUSIC: @@ -500,6 +502,7 @@ void AudioServiceDump::CallStatusDump(std::string &dumpString) dumpString += "DEFAULT"; break; case AUDIO_SCENE_RINGING: + case AUDIO_SCENE_VOICE_RINGING: dumpString += "RINGING"; break; case AUDIO_SCENE_PHONE_CALL: diff --git a/services/audio_policy/server/src/service/interrupt/audio_interrupt_service.cpp b/services/audio_policy/server/src/service/interrupt/audio_interrupt_service.cpp index 0421434e52c09071730149d70eab29c3826c27c7..66cea51b68b00f0eeda527373e8d03e01566e322 100644 --- a/services/audio_policy/server/src/service/interrupt/audio_interrupt_service.cpp +++ b/services/audio_policy/server/src/service/interrupt/audio_interrupt_service.cpp @@ -39,6 +39,8 @@ inline AudioScene GetAudioSceneFromAudioInterrupt(const AudioInterrupt &audioInt audioInterrupt.audioFocusType.streamType == STREAM_VOICE_COMMUNICATION) { return audioInterrupt.streamUsage == STREAM_USAGE_VOICE_MODEM_COMMUNICATION ? AUDIO_SCENE_PHONE_CALL : AUDIO_SCENE_PHONE_CHAT; + } else if (audioInterrupt.audioFocusType.streamType == STREAM_VOICE_RING) { + return AUDIO_SCENE_VOICE_RINGING; } return AUDIO_SCENE_DEFAULT; } @@ -47,6 +49,7 @@ static const std::unordered_map SCENE_PRIORITY = { // from high to low {AUDIO_SCENE_PHONE_CALL, 4}, {AUDIO_SCENE_PHONE_CHAT, 3}, + {AUDIO_SCENE_VOICE_RINGING, 2}, {AUDIO_SCENE_RINGING, 2}, {AUDIO_SCENE_DEFAULT, 1} }; diff --git a/services/audio_policy/server/src/service/manager/audio_adapter_manager.cpp b/services/audio_policy/server/src/service/manager/audio_adapter_manager.cpp index c1d7cf30f93bf8e4f3ca03192d9a089487ea1d58..d41ac4ea844114e76015205225d46920949c5bab 100644 --- a/services/audio_policy/server/src/service/manager/audio_adapter_manager.cpp +++ b/services/audio_policy/server/src/service/manager/audio_adapter_manager.cpp @@ -61,6 +61,7 @@ static const std::vector VOICE_CALL_VOLUME_TYPE_LIST = { static const std::vector RINGTONE_VOLUME_TYPE_LIST = { // all stream types for ringtone volume type STREAM_RING, + STREAM_VOICE_RING, STREAM_SYSTEM, STREAM_NOTIFICATION, STREAM_SYSTEM_ENFORCED, @@ -327,7 +328,7 @@ int32_t AudioAdapterManager::SetVolumeDb(AudioStreamType streamType) return SetVolumeDbForVolumeTypeGroup(VOICE_CALL_VOLUME_TYPE_LIST, volumeDb); } else if (streamType == STREAM_MUSIC) { return SetVolumeDbForVolumeTypeGroup(MEDIA_VOLUME_TYPE_LIST, volumeDb); - } else if (streamType == STREAM_RING) { + } else if (streamType == STREAM_RING || streamType == STREAM_VOICE_RING) { return SetVolumeDbForVolumeTypeGroup(RINGTONE_VOLUME_TYPE_LIST, volumeDb); } @@ -809,6 +810,7 @@ std::string AudioAdapterManager::GetVolumeKeyForKvStore(DeviceType deviceType, A case STREAM_MUSIC: return typeStr + "_music_volume"; case STREAM_RING: + case STREAM_VOICE_RING: return typeStr + "_ring_volume"; case STREAM_SYSTEM: return typeStr + "_system_volume"; @@ -873,6 +875,7 @@ AudioStreamType AudioAdapterManager::GetStreamForVolumeMap(AudioStreamType strea case STREAM_NOTIFICATION: case STREAM_SYSTEM_ENFORCED: case STREAM_DTMF: + case STREAM_VOICE_RING: return STREAM_RING; case STREAM_MUSIC: case STREAM_MEDIA: @@ -1356,6 +1359,7 @@ std::string AudioAdapterManager::GetMuteKeyForKvStore(DeviceType deviceType, Aud case STREAM_MUSIC: return type + "_music_mute_status"; case STREAM_RING: + case STREAM_VOICE_RING: return type + "_ring_mute_status"; case STREAM_SYSTEM: return type + "_system_mute_status"; diff --git a/services/audio_policy/server/src/service/routers/audio_router_center.cpp b/services/audio_policy/server/src/service/routers/audio_router_center.cpp index 8dae2bfaab39bafe000d13fd7091bb34d574fead..deb6174681556ce9051a57307855cd815c6787fd 100644 --- a/services/audio_policy/server/src/service/routers/audio_router_center.cpp +++ b/services/audio_policy/server/src/service/routers/audio_router_center.cpp @@ -87,7 +87,7 @@ unique_ptr AudioRouterCenter::FetchOutputDevice(StreamUsa renderConfigMap_[streamUsage] == TONE_RENDER_ROUTERS) { AudioScene audioScene = AudioPolicyService::GetAudioPolicyService().GetAudioScene(); if (audioScene == AUDIO_SCENE_PHONE_CALL || audioScene == AUDIO_SCENE_PHONE_CHAT || - (audioScene == AUDIO_SCENE_RINGING && HasScoDevice())) { + ((audioScene == AUDIO_SCENE_RINGING || audioScene == AUDIO_SCENE_VOICE_RINGING) && HasScoDevice())) { auto isPresent = [] (const unique_ptr &router) { return router->name_ == "package_filter_router"; }; diff --git a/services/audio_policy/server/src/service/routers/public_priority_router.cpp b/services/audio_policy/server/src/service/routers/public_priority_router.cpp index 0b4dcdde5e2c1dbcaedef25275868e1df22db92b..a4817d4e1de3c8a38f903f3230fc4a8de4057f35 100644 --- a/services/audio_policy/server/src/service/routers/public_priority_router.cpp +++ b/services/audio_policy/server/src/service/routers/public_priority_router.cpp @@ -27,7 +27,7 @@ unique_ptr PublicPriorityRouter::GetMediaRenderDevice(Str int32_t clientUID) { vector> descs; - if (streamUsage == STREAM_USAGE_RINGTONE) { + if (streamUsage == STREAM_USAGE_RINGTONE || streamUsage == STREAM_USAGE_VOICE_RINGTONE) { descs = AudioDeviceManager::GetAudioDeviceManager().GetCommRenderPublicDevices(); } else { descs = AudioDeviceManager::GetAudioDeviceManager().GetMediaRenderPublicDevices(); diff --git a/services/audio_policy/server/src/service/routers/user_select_router.cpp b/services/audio_policy/server/src/service/routers/user_select_router.cpp index acc66907af22692690f4229ef6c963f55388852e..25e086ddb21ec6d6c4d7c7cd88b0aea8820feb4a 100644 --- a/services/audio_policy/server/src/service/routers/user_select_router.cpp +++ b/services/audio_policy/server/src/service/routers/user_select_router.cpp @@ -24,7 +24,7 @@ namespace OHOS { namespace AudioStandard { unique_ptr UserSelectRouter::GetMediaRenderDevice(StreamUsage streamUsage, int32_t clientUID) { - if (streamUsage == STREAM_USAGE_RINGTONE) { + if (streamUsage == STREAM_USAGE_RINGTONE || streamUsage == STREAM_USAGE_VOICE_RINGTONE) { AUDIO_INFO_LOG("Ringtone skip user select"); return make_unique(); } diff --git a/services/audio_service/client/src/audio_service_client.cpp b/services/audio_service/client/src/audio_service_client.cpp index a614893694434be1204d43d3e3154621cc8ae4a7..676be605dade43ce8a41ba3ec3c15f48d4ff52c6 100644 --- a/services/audio_service/client/src/audio_service_client.cpp +++ b/services/audio_service/client/src/audio_service_client.cpp @@ -103,7 +103,8 @@ static const std::unordered_map STREAM_TYPE_ENUM_S {STREAM_VOICE_MESSAGE, "voice_message"}, {STREAM_NAVIGATION, "navigation"}, {STREAM_SOURCE_VOICE_CALL, "source_voice_call"}, - {STREAM_VOICE_COMMUNICATION, "voice_call"} + {STREAM_VOICE_COMMUNICATION, "voice_call"}, + {STREAM_VOICE_RING, "ring"}, }; static int32_t CheckReturnIfinvalid(bool expr, const int32_t retVal) @@ -3024,6 +3025,7 @@ AudioVolumeType AudioServiceClient::GetVolumeTypeFromStreamType(AudioStreamType case STREAM_NOTIFICATION: case STREAM_SYSTEM_ENFORCED: case STREAM_DTMF: + case STREAM_VOICE_RING: return STREAM_RING; case STREAM_MUSIC: case STREAM_MEDIA: diff --git a/services/audio_service/client/src/audio_stream_manager.cpp b/services/audio_service/client/src/audio_stream_manager.cpp index 4fdab5c97ae660f4ce3bf6ca3d9c6ea4e4177b56..497e68b2be24458e1f2586a58f9a3f53edfd7087 100644 --- a/services/audio_service/client/src/audio_stream_manager.cpp +++ b/services/audio_service/client/src/audio_stream_manager.cpp @@ -138,6 +138,7 @@ bool AudioStreamManager::IsStreamActive(AudioVolumeType volumeType) const case STREAM_VOICE_ASSISTANT: case STREAM_ALARM: case STREAM_ACCESSIBILITY: + case STREAM_VOICE_RING: break; case STREAM_ULTRASONIC:{ bool ret = PermissionUtil::VerifySelfPermission(); diff --git a/services/audio_service/client/src/audio_system_manager.cpp b/services/audio_service/client/src/audio_system_manager.cpp index db42cef60ebaf16df674e07e6aaa5c2ef2c48064..a61676a44b6037133b3fa0b764fbb7ce7b25d047 100644 --- a/services/audio_service/client/src/audio_system_manager.cpp +++ b/services/audio_service/client/src/audio_system_manager.cpp @@ -122,6 +122,7 @@ map, AudioStreamType> AudioSystemManager::CreateS streamMap[make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_DTMF)] = STREAM_DTMF; streamMap[make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_ENFORCED_TONE)] = STREAM_SYSTEM_ENFORCED; streamMap[make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_ULTRASONIC)] = STREAM_ULTRASONIC; + streamMap[make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_VOICE_RINGTONE)] = STREAM_VOICE_RING; return streamMap; } @@ -278,6 +279,7 @@ bool AudioSystemManager::IsStreamActive(AudioVolumeType volumeType) const case STREAM_VOICE_ASSISTANT: case STREAM_ALARM: case STREAM_ACCESSIBILITY: + case STREAM_VOICE_RING: break; case STREAM_ULTRASONIC:{ bool ret = PermissionUtil::VerifySelfPermission(); @@ -377,6 +379,7 @@ int32_t AudioSystemManager::SetVolume(AudioVolumeType volumeType, int32_t volume case STREAM_ALARM: case STREAM_ACCESSIBILITY: case STREAM_VOICE_ASSISTANT: + case STREAM_VOICE_RING: break; case STREAM_ULTRASONIC: case STREAM_ALL:{ @@ -404,6 +407,7 @@ int32_t AudioSystemManager::GetVolume(AudioVolumeType volumeType) const case STREAM_VOICE_ASSISTANT: case STREAM_ALARM: case STREAM_ACCESSIBILITY: + case STREAM_VOICE_RING: break; case STREAM_ULTRASONIC: case STREAM_ALL:{ @@ -480,6 +484,7 @@ int32_t AudioSystemManager::SetMute(AudioVolumeType volumeType, bool mute) const case STREAM_VOICE_ASSISTANT: case STREAM_ALARM: case STREAM_ACCESSIBILITY: + case STREAM_VOICE_RING: break; case STREAM_ULTRASONIC: case STREAM_ALL:{ @@ -509,6 +514,7 @@ bool AudioSystemManager::IsStreamMute(AudioVolumeType volumeType) const case STREAM_VOICE_ASSISTANT: case STREAM_ALARM: case STREAM_ACCESSIBILITY: + case STREAM_VOICE_RING: break; case STREAM_ULTRASONIC: case STREAM_ALL:{ diff --git a/services/audio_service/client/src/i_audio_stream.cpp b/services/audio_service/client/src/i_audio_stream.cpp index afc9efc2890d001a272d32ff3264b35ba0cfd987..fce9c8358cebd35fc9f8623dd78a3e664f099dbf 100644 --- a/services/audio_service/client/src/i_audio_stream.cpp +++ b/services/audio_service/client/src/i_audio_stream.cpp @@ -86,6 +86,7 @@ std::map, AudioStreamType> IAudioStream::Cre streamMap[std::make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_DTMF)] = STREAM_DTMF; streamMap[std::make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_ENFORCED_TONE)] = STREAM_SYSTEM_ENFORCED; streamMap[std::make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_ULTRASONIC)] = STREAM_ULTRASONIC; + streamMap[std::make_pair(CONTENT_TYPE_UNKNOWN, STREAM_USAGE_VOICE_RINGTONE)] = STREAM_VOICE_RING; return streamMap; } diff --git a/services/audio_service/server/src/pa_adapter_manager.cpp b/services/audio_service/server/src/pa_adapter_manager.cpp index a1460d0ed3fc2b6e64304f92efa4dfa0ef0e984c..49a5ef74a84c99b88083dad2f765439591d5104d 100644 --- a/services/audio_service/server/src/pa_adapter_manager.cpp +++ b/services/audio_service/server/src/pa_adapter_manager.cpp @@ -56,7 +56,8 @@ static const std::unordered_map STREAM_TYPE_ENUM_S {STREAM_WAKEUP, "wakeup"}, {STREAM_VOICE_MESSAGE, "voice_message"}, {STREAM_NAVIGATION, "navigation"}, - {STREAM_VOICE_COMMUNICATION, "voice_call"} + {STREAM_VOICE_COMMUNICATION, "voice_call"}, + {STREAM_VOICE_RING, "ring"}, }; static int32_t CheckReturnIfinvalid(bool expr, const int32_t retVal) diff --git a/services/audio_service/server/src/policy_handler.cpp b/services/audio_service/server/src/policy_handler.cpp index b40794334d6a0a381cccc6e228c4ad4872d7e4f7..a26ad87cae6623c7f4451ea3d918de757d7f6f7f 100644 --- a/services/audio_service/server/src/policy_handler.cpp +++ b/services/audio_service/server/src/policy_handler.cpp @@ -122,6 +122,7 @@ AudioVolumeType PolicyHandler::GetVolumeTypeFromStreamType(AudioStreamType strea case STREAM_NOTIFICATION: case STREAM_SYSTEM_ENFORCED: case STREAM_DTMF: + case STREAM_VOICE_RING: return STREAM_RING; case STREAM_MUSIC: case STREAM_MEDIA: