From 98a7b3c42b012e10493ac5c945aa3b5522873633 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B5=E5=A4=B7=E6=81=BA?= Date: Thu, 29 May 2025 11:43:31 +0800 Subject: [PATCH 1/4] stop call tone when call ended MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 邵夷恺 --- services/audio/src/audio_control_manager.cpp | 10 ++++++++++ services/call/src/call_status_manager.cpp | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/services/audio/src/audio_control_manager.cpp b/services/audio/src/audio_control_manager.cpp index bc9b95ab..05317fcb 100644 --- a/services/audio/src/audio_control_manager.cpp +++ b/services/audio/src/audio_control_manager.cpp @@ -839,6 +839,16 @@ void AudioControlManager::PlayCallEndedTone(CallEndedType type) AudioStandard::AudioRingerMode ringMode = DelayedSingleton::GetInstance()->GetRingerMode(); if (ringMode != AudioStandard::AudioRingerMode::RINGER_MODE_NORMAL) { TELEPHONY_LOGE("ringer mode is not normal"); + switch (type) { + case CallEndedType::CALL_ENDED_NORMALLY: + if (toneState_ == ToneState::TONEING) { + stopCallTone(); + TELEPHONY_LOGI("ringer mode is not normal, stop call tone!"); + } + break; + default: + break; + } return; } switch (type) { diff --git a/services/call/src/call_status_manager.cpp b/services/call/src/call_status_manager.cpp index 68951dbb..633ae59f 100644 --- a/services/call/src/call_status_manager.cpp +++ b/services/call/src/call_status_manager.cpp @@ -453,16 +453,18 @@ int32_t CallStatusManager::IncomingHandle(const CallDetailInfo &info) if (IsFromTheSameNumberAtTheSameTime(call)) { ModifyEsimType(); } + AddOneCallObject(call); SetContactInfo(call, std::string(info.phoneNum)); bool block = false; if (IsRejectCall(call, info, block)) { + DeleteOneCallObject(call); return HandleRejectCall(call, block); } if (info.callType != CallType::TYPE_VOIP && info.callType != CallType::TYPE_BLUETOOTH && IsRingOnceCall(call, info)) { + DeleteOneCallObject(call); return HandleRingOnceCall(call); } - AddOneCallObject(call); StartInComingCallMotionRecognition(); DelayedSingleton::GetInstance()->NotifyNewCallCreated(call); ret = UpdateCallState(call, info.state); -- Gitee From 004703d27af9c26ec219d0e44e473487c26c5b04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B5=E5=A4=B7=E6=81=BA?= Date: Thu, 29 May 2025 11:43:31 +0800 Subject: [PATCH 2/4] stop call tone when call ended MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 邵夷恺 --- services/audio/include/audio_control_manager.h | 1 + services/audio/src/audio_control_manager.cpp | 17 ++++++++++++++++- services/call/src/call_status_manager.cpp | 4 +++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/services/audio/include/audio_control_manager.h b/services/audio/include/audio_control_manager.h index 15b00174..c852913a 100644 --- a/services/audio/include/audio_control_manager.h +++ b/services/audio/include/audio_control_manager.h @@ -88,6 +88,7 @@ public: bool StopSoundtone(); bool PlaySoundtone(); void PlayCallEndedTone(CallEndedType type); + void HandleNotNormalRingerMode(CallEndedType type); bool IsDistributeCallSinkStatus(); void SetRingToneVolume(float volume); bool IsScoTemporarilyDisabled(); diff --git a/services/audio/src/audio_control_manager.cpp b/services/audio/src/audio_control_manager.cpp index bc9b95ab..18776e77 100644 --- a/services/audio/src/audio_control_manager.cpp +++ b/services/audio/src/audio_control_manager.cpp @@ -838,7 +838,7 @@ void AudioControlManager::PlayCallEndedTone(CallEndedType type) } AudioStandard::AudioRingerMode ringMode = DelayedSingleton::GetInstance()->GetRingerMode(); if (ringMode != AudioStandard::AudioRingerMode::RINGER_MODE_NORMAL) { - TELEPHONY_LOGE("ringer mode is not normal"); + return; } switch (type) { @@ -877,6 +877,21 @@ void AudioControlManager::PlayCallEndedTone(CallEndedType type) } } +void AudioControlManager::HandleNotNormalRingerMode(CallEndedType type) +{ + TELEPHONY_LOGE("ringer mode is not normal"); + switch (type) { + case CallEndedType::CALL_ENDED_NORMALLY: + if (toneState_ == ToneState::TONEING) { + stopCallTone(); + TELEPHONY_LOGI("ringer mode is not normal, stop call tone!"); + } + break; + default: + break; + } +} + std::set> AudioControlManager::GetCallList() { std::lock_guard lock(mutex_); diff --git a/services/call/src/call_status_manager.cpp b/services/call/src/call_status_manager.cpp index 68951dbb..633ae59f 100644 --- a/services/call/src/call_status_manager.cpp +++ b/services/call/src/call_status_manager.cpp @@ -453,16 +453,18 @@ int32_t CallStatusManager::IncomingHandle(const CallDetailInfo &info) if (IsFromTheSameNumberAtTheSameTime(call)) { ModifyEsimType(); } + AddOneCallObject(call); SetContactInfo(call, std::string(info.phoneNum)); bool block = false; if (IsRejectCall(call, info, block)) { + DeleteOneCallObject(call); return HandleRejectCall(call, block); } if (info.callType != CallType::TYPE_VOIP && info.callType != CallType::TYPE_BLUETOOTH && IsRingOnceCall(call, info)) { + DeleteOneCallObject(call); return HandleRingOnceCall(call); } - AddOneCallObject(call); StartInComingCallMotionRecognition(); DelayedSingleton::GetInstance()->NotifyNewCallCreated(call); ret = UpdateCallState(call, info.state); -- Gitee From 48a2b81287dfa384c9ded71490c5414abe65e7e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B5=E5=A4=B7=E6=81=BA?= Date: Thu, 29 May 2025 06:13:00 +0000 Subject: [PATCH 3/4] update services/audio/src/audio_control_manager.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 邵夷恺 --- services/audio/src/audio_control_manager.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/services/audio/src/audio_control_manager.cpp b/services/audio/src/audio_control_manager.cpp index 154314d5..82d94527 100644 --- a/services/audio/src/audio_control_manager.cpp +++ b/services/audio/src/audio_control_manager.cpp @@ -838,11 +838,7 @@ void AudioControlManager::PlayCallEndedTone(CallEndedType type) } AudioStandard::AudioRingerMode ringMode = DelayedSingleton::GetInstance()->GetRingerMode(); if (ringMode != AudioStandard::AudioRingerMode::RINGER_MODE_NORMAL) { -<<<<<<< HEAD HandleNotNormalRingerMode(type); -======= - HandleNotNormalRingerMode(type) ->>>>>>> 8b8d1e00202afaa05f5aa75e35de8284edf3664c return; } switch (type) { -- Gitee From 5ce92b83c4eebce39320df5410fb55503b7cceb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B5=E5=A4=B7=E6=81=BA?= Date: Thu, 29 May 2025 06:14:30 +0000 Subject: [PATCH 4/4] update services/call/src/call_status_manager.cpp. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 邵夷恺 --- services/call/src/call_status_manager.cpp | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/services/call/src/call_status_manager.cpp b/services/call/src/call_status_manager.cpp index c339dcd9..68951dbb 100644 --- a/services/call/src/call_status_manager.cpp +++ b/services/call/src/call_status_manager.cpp @@ -453,18 +453,16 @@ int32_t CallStatusManager::IncomingHandle(const CallDetailInfo &info) if (IsFromTheSameNumberAtTheSameTime(call)) { ModifyEsimType(); } - AddOneCallObject(call); SetContactInfo(call, std::string(info.phoneNum)); bool block = false; if (IsRejectCall(call, info, block)) { - DeleteOneCallObject(call); return HandleRejectCall(call, block); } if (info.callType != CallType::TYPE_VOIP && info.callType != CallType::TYPE_BLUETOOTH && IsRingOnceCall(call, info)) { - DeleteOneCallObject(call); return HandleRingOnceCall(call); } + AddOneCallObject(call); StartInComingCallMotionRecognition(); DelayedSingleton::GetInstance()->NotifyNewCallCreated(call); ret = UpdateCallState(call, info.state); @@ -509,13 +507,8 @@ void CallStatusManager::SetContactInfo(sptr &call, std::string phoneNu return; } } - int32_t callId = call->GetCallID(); - ffrt::submit([=, callId]() { - sptr callObjectPtr = GetOneCallObject(callId); - if (callObjectPtr == nullptr) { - TELEPHONY_LOGE("callObjectPtr is nullptr."); - return; - } + ffrt::submit([=, &call]() { + sptr callObjectPtr = call; // allow list filtering // Get the contact data from the database ContactInfo contactInfoTemp = contactInfo; -- Gitee