From 9106860d1bd030544726551e2ee072754c2924e4 Mon Sep 17 00:00:00 2001 From: wangwei30043812 Date: Fri, 11 Apr 2025 17:44:23 +0800 Subject: [PATCH 1/8] video ring for contact Signed-off-by: wangwei30043812 --- services/audio/include/audio_control_manager.h | 2 ++ services/audio/src/audio_control_manager.cpp | 12 ++++++------ services/call/src/call_status_manager.cpp | 7 +++++++ 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/services/audio/include/audio_control_manager.h b/services/audio/include/audio_control_manager.h index 99335948..6adc00cc 100644 --- a/services/audio/include/audio_control_manager.h +++ b/services/audio/include/audio_control_manager.h @@ -31,6 +31,8 @@ namespace OHOS { namespace Telephony { +static constexpr const char *VIDEO_RING_PATH_FIX_TAIL = ".mp4"; +constexpr int32_t VIDEO_RING_PATH_FIX_TAIL_LENGTH = 4; class AudioControlManager : public CallStateListenerBase, public std::enable_shared_from_this { DECLARE_DELAYED_SINGLETON(AudioControlManager) diff --git a/services/audio/src/audio_control_manager.cpp b/services/audio/src/audio_control_manager.cpp index 954efa8a..79a07e74 100644 --- a/services/audio/src/audio_control_manager.cpp +++ b/services/audio/src/audio_control_manager.cpp @@ -559,6 +559,12 @@ int32_t AudioControlManager::HandleBluetoothAudioDevice(const AudioDevice &devic bool AudioControlManager::PlayRingtone() { + sptr incomingCall = CallObjectManager::GetOneCallObject(CallRunningState::CALL_RUNNING_STATE_RINGING); + if (incomingCall == nullptr) { + TELEPHONY_LOGE("incomingCall is nullptr"); + return false; + } + ContactInfo contactInfo = incomingCall->GetCallerInfo(); if (!ShouldPlayRingtone()) { TELEPHONY_LOGE("should not play ringtone"); return false; @@ -568,14 +574,8 @@ bool AudioControlManager::PlayRingtone() TELEPHONY_LOGE("create ring object failed"); return false; } - sptr incomingCall = CallObjectManager::GetOneCallObject(CallRunningState::CALL_RUNNING_STATE_RINGING); - if (incomingCall == nullptr) { - TELEPHONY_LOGE("incomingCall is nullptr"); - return false; - } CallAttributeInfo info; incomingCall->GetCallAttributeBaseInfo(info); - ContactInfo contactInfo = incomingCall->GetCallerInfo(); AudioStandard::AudioRingerMode ringMode = DelayedSingleton::GetInstance()->GetRingerMode(); if (incomingCall->GetCrsType() == CRS_TYPE) { if (!isCrsVibrating_ && (ringMode != AudioStandard::AudioRingerMode::RINGER_MODE_SILENT)) { diff --git a/services/call/src/call_status_manager.cpp b/services/call/src/call_status_manager.cpp index a0bff02a..3883f8ce 100644 --- a/services/call/src/call_status_manager.cpp +++ b/services/call/src/call_status_manager.cpp @@ -512,6 +512,13 @@ void CallStatusManager::SetContactInfo(sptr &call, std::string phoneNu // Get the contact data from the database ContactInfo contactInfoTemp = contactInfo; QueryCallerInfo(contactInfoTemp, phoneNum); + std::string ringtonePath = contactInfoTemp.ringtonePath; + if (ringtonePath.substr(ringtonePath.length() - VIDEO_RING_PATH_FIX_TAIL_LENGTH, + VIDEO_RING_PATH_FIX_TAIL_LENGTH) == VIDEO_RING_PATH_FIX_TAIL) { + AAFwk::WantParams params = call->GetExtraParams(); + params.SetParam("VideoRingPath", AAFwk::String::Box(ringtonePath)); + call->SetExtraParams(params); + } callObjectPtr->SetCallerInfo(contactInfoTemp); CallVoiceAssistantManager::GetInstance()->UpdateContactInfo(contactInfoTemp, callObjectPtr->GetCallID()); DelayedSingleton::GetInstance()->ProcessCallInfo(callObjectPtr, -- Gitee From 4bf9ba301fca1e2ac190f76f11649df608d72d89 Mon Sep 17 00:00:00 2001 From: wangwei30043812 Date: Fri, 11 Apr 2025 17:51:36 +0800 Subject: [PATCH 2/8] update Signed-off-by: wangwei30043812 --- services/audio/include/audio_control_manager.h | 2 +- services/audio/src/audio_control_manager.cpp | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/services/audio/include/audio_control_manager.h b/services/audio/include/audio_control_manager.h index 6adc00cc..d308679d 100644 --- a/services/audio/include/audio_control_manager.h +++ b/services/audio/include/audio_control_manager.h @@ -106,7 +106,7 @@ private: bool IsNumberAllowed(const std::string &phoneNum); sptr GetCallBase(int32_t callId); AudioInterruptState audioInterruptState_ = AudioInterruptState::INTERRUPT_STATE_DEACTIVATED; - bool ShouldPlayRingtone() const; + bool ShouldPlayRingtone(const std::string &ringtonePath) const; bool IsEmergencyCallExists(); void UpdateForegroundLiveCall(); bool IsBtOrWireHeadPlugin(); diff --git a/services/audio/src/audio_control_manager.cpp b/services/audio/src/audio_control_manager.cpp index 79a07e74..544471e7 100644 --- a/services/audio/src/audio_control_manager.cpp +++ b/services/audio/src/audio_control_manager.cpp @@ -933,7 +933,7 @@ bool AudioControlManager::IsNumberAllowed(const std::string &phoneNum) return true; } -bool AudioControlManager::ShouldPlayRingtone() const +bool AudioControlManager::ShouldPlayRingtone(const std::string &ringtonePath) const { auto processor = DelayedSingleton::GetInstance(); int32_t alertingCallNum = processor->GetCallNumber(TelCallState::CALL_STATUS_ALERTING); @@ -942,6 +942,12 @@ bool AudioControlManager::ShouldPlayRingtone() const || (soundState_ == SoundState::SOUNDING && CallObjectManager::HasIncomingCallCrsType())) { return false; } + if (ringtonePath.substr(ringtonePath.length() - VIDEO_RING_PATH_FIX_TAIL_LENGTH, + VIDEO_RING_PATH_FIX_TAIL_LENGTH) == VIDEO_RING_PATH_FIX_TAIL) { + AAFwk::WantParams params = call->GetExtraParams(); + params.SetParam("VideoRingPath", AAFwk::String::Box(ringtonePath)); + call->SetExtraParams(params); + } return true; } -- Gitee From 4366a4cc0e5ce565a06e06c8d6b81df3b0a38bfb Mon Sep 17 00:00:00 2001 From: wangwei30043812 Date: Fri, 11 Apr 2025 17:54:13 +0800 Subject: [PATCH 3/8] update Signed-off-by: wangwei30043812 --- services/audio/src/audio_control_manager.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/audio/src/audio_control_manager.cpp b/services/audio/src/audio_control_manager.cpp index 544471e7..6b2ba5ff 100644 --- a/services/audio/src/audio_control_manager.cpp +++ b/services/audio/src/audio_control_manager.cpp @@ -940,13 +940,13 @@ bool AudioControlManager::ShouldPlayRingtone(const std::string &ringtonePath) co int32_t incomingCallNum = processor->GetCallNumber(TelCallState::CALL_STATUS_INCOMING); if (incomingCallNum == EMPTY_VALUE || alertingCallNum > EMPTY_VALUE || ringState_ == RingState::RINGING || (soundState_ == SoundState::SOUNDING && CallObjectManager::HasIncomingCallCrsType())) { + TELEPHONY_LOGI("should not play ring tone."); return false; } if (ringtonePath.substr(ringtonePath.length() - VIDEO_RING_PATH_FIX_TAIL_LENGTH, VIDEO_RING_PATH_FIX_TAIL_LENGTH) == VIDEO_RING_PATH_FIX_TAIL) { - AAFwk::WantParams params = call->GetExtraParams(); - params.SetParam("VideoRingPath", AAFwk::String::Box(ringtonePath)); - call->SetExtraParams(params); + TELEPHONY_LOGI("video ring scene."); + return false; } return true; } -- Gitee From d67b15cacfd557f5b4f9c4c13af4871190e91d8f Mon Sep 17 00:00:00 2001 From: wangwei30043812 Date: Fri, 11 Apr 2025 17:55:29 +0800 Subject: [PATCH 4/8] update Signed-off-by: wangwei30043812 --- services/audio/src/audio_control_manager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/audio/src/audio_control_manager.cpp b/services/audio/src/audio_control_manager.cpp index 6b2ba5ff..5e5e2843 100644 --- a/services/audio/src/audio_control_manager.cpp +++ b/services/audio/src/audio_control_manager.cpp @@ -565,7 +565,7 @@ bool AudioControlManager::PlayRingtone() return false; } ContactInfo contactInfo = incomingCall->GetCallerInfo(); - if (!ShouldPlayRingtone()) { + if (!ShouldPlayRingtone(contactInfo.ringtonePath)) { TELEPHONY_LOGE("should not play ringtone"); return false; } -- Gitee From 764d58f65f941e9a96bd1cd7cf1fdf95e21063ea Mon Sep 17 00:00:00 2001 From: wangwei30043812 Date: Tue, 15 Apr 2025 20:09:21 +0800 Subject: [PATCH 5/8] update Signed-off-by: wangwei30043812 --- services/call/include/call_status_manager.h | 1 + services/call/src/call_status_manager.cpp | 25 ++++++++++++++++----- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/services/call/include/call_status_manager.h b/services/call/include/call_status_manager.h index 44816e7e..5740009b 100644 --- a/services/call/include/call_status_manager.h +++ b/services/call/include/call_status_manager.h @@ -107,6 +107,7 @@ private: bool IsContactPhoneNum(const std::string &phoneNum); int32_t UpdateDialingCallInfo(const CallDetailInfo &info); void SetContactInfo(sptr &call, std::string phoneNum); + void DealVideoRingPath(std::string &ringtonePath, sptr &callObjectPtr); int32_t HandleRejectCall(sptr &call, bool isBlock); bool ShouldRejectIncomingCall(); bool ShouldBlockIncomingCall(const sptr &call, const CallDetailInfo &info); diff --git a/services/call/src/call_status_manager.cpp b/services/call/src/call_status_manager.cpp index 3883f8ce..02eaf256 100644 --- a/services/call/src/call_status_manager.cpp +++ b/services/call/src/call_status_manager.cpp @@ -513,12 +513,7 @@ void CallStatusManager::SetContactInfo(sptr &call, std::string phoneNu ContactInfo contactInfoTemp = contactInfo; QueryCallerInfo(contactInfoTemp, phoneNum); std::string ringtonePath = contactInfoTemp.ringtonePath; - if (ringtonePath.substr(ringtonePath.length() - VIDEO_RING_PATH_FIX_TAIL_LENGTH, - VIDEO_RING_PATH_FIX_TAIL_LENGTH) == VIDEO_RING_PATH_FIX_TAIL) { - AAFwk::WantParams params = call->GetExtraParams(); - params.SetParam("VideoRingPath", AAFwk::String::Box(ringtonePath)); - call->SetExtraParams(params); - } + DealVideoRingPath(ringtonePath, callObjectPtr); callObjectPtr->SetCallerInfo(contactInfoTemp); CallVoiceAssistantManager::GetInstance()->UpdateContactInfo(contactInfoTemp, callObjectPtr->GetCallID()); DelayedSingleton::GetInstance()->ProcessCallInfo(callObjectPtr, @@ -526,6 +521,24 @@ void CallStatusManager::SetContactInfo(sptr &call, std::string phoneNu }); } +void CallStatusManager::DealVideoRingPath(std::string &ringtonePath, sptr &callObjectPtr) +{ + if (ringtonePath.empty()) { + auto settingHelper = SettingsDataShareHelper::GetInstance(); + if (settingHelper != nullptr) { + OHOS::Uri settingUri(SettingsDataShareHelper::SETTINGS_DATASHARE_URI); + settingHelper->Query(settingUri, "distributed_modem_state", ringtonePath); + TELEPHONY_LOGI("ringtonePath: %{public}s.", ringtonePath.c_str()); + } + } + if (ringtonePath.substr(ringtonePath.length() - VIDEO_RING_PATH_FIX_TAIL_LENGTH, + VIDEO_RING_PATH_FIX_TAIL_LENGTH) == VIDEO_RING_PATH_FIX_TAIL) { + AAFwk::WantParams params = call->GetExtraParams(); + params.SetParam("VideoRingPath", AAFwk::String::Box(ringtonePath)); + call->SetExtraParams(params); + } +} + int32_t CallStatusManager::HandleRejectCall(sptr &call, bool isBlock) { if (call == nullptr) { -- Gitee From 436b78ecb57b9a4da5659173185eca90dc92e751 Mon Sep 17 00:00:00 2001 From: wangwei30043812 Date: Tue, 15 Apr 2025 20:32:52 +0800 Subject: [PATCH 6/8] update Signed-off-by: wangwei30043812 --- services/call/src/call_status_manager.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/services/call/src/call_status_manager.cpp b/services/call/src/call_status_manager.cpp index 02eaf256..f8229d03 100644 --- a/services/call/src/call_status_manager.cpp +++ b/services/call/src/call_status_manager.cpp @@ -531,11 +531,13 @@ void CallStatusManager::DealVideoRingPath(std::string &ringtonePath, sptrGetExtraParams(); + TELEPHONY_LOGI("notify callui to play video ring."); + AAFwk::WantParams params = callObjectPtr->GetExtraParams(); params.SetParam("VideoRingPath", AAFwk::String::Box(ringtonePath)); - call->SetExtraParams(params); + callObjectPtr->SetExtraParams(params); } } -- Gitee From 4d5edf8fb73eb43f11f4de4db78a1f7cf9b0b88c Mon Sep 17 00:00:00 2001 From: wangwei30043812 Date: Wed, 30 Apr 2025 11:15:51 +0800 Subject: [PATCH 7/8] video ring for contact Signed-off-by: wangwei30043812 --- services/audio/src/audio_control_manager.cpp | 2 +- services/call/include/call_status_manager.h | 2 +- services/call/src/call_status_manager.cpp | 33 +++++++++++++++----- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/services/audio/src/audio_control_manager.cpp b/services/audio/src/audio_control_manager.cpp index 5e5e2843..1d86a0d1 100644 --- a/services/audio/src/audio_control_manager.cpp +++ b/services/audio/src/audio_control_manager.cpp @@ -944,7 +944,7 @@ bool AudioControlManager::ShouldPlayRingtone(const std::string &ringtonePath) co return false; } if (ringtonePath.substr(ringtonePath.length() - VIDEO_RING_PATH_FIX_TAIL_LENGTH, - VIDEO_RING_PATH_FIX_TAIL_LENGTH) == VIDEO_RING_PATH_FIX_TAIL) { + VIDEO_RING_PATH_FIX_TAIL_LENGTH) == VIDEO_RING_PATH_FIX_TAIL || ringtonePath.empty()) { TELEPHONY_LOGI("video ring scene."); return false; } diff --git a/services/call/include/call_status_manager.h b/services/call/include/call_status_manager.h index 5740009b..78b71d31 100644 --- a/services/call/include/call_status_manager.h +++ b/services/call/include/call_status_manager.h @@ -107,7 +107,7 @@ private: bool IsContactPhoneNum(const std::string &phoneNum); int32_t UpdateDialingCallInfo(const CallDetailInfo &info); void SetContactInfo(sptr &call, std::string phoneNum); - void DealVideoRingPath(std::string &ringtonePath, sptr &callObjectPtr); + void DealVideoRingPath(ContactInfo &ringtonePath, sptr &callObjectPtr); int32_t HandleRejectCall(sptr &call, bool isBlock); bool ShouldRejectIncomingCall(); bool ShouldBlockIncomingCall(const sptr &call, const CallDetailInfo &info); diff --git a/services/call/src/call_status_manager.cpp b/services/call/src/call_status_manager.cpp index f8229d03..25f4d533 100644 --- a/services/call/src/call_status_manager.cpp +++ b/services/call/src/call_status_manager.cpp @@ -512,7 +512,6 @@ void CallStatusManager::SetContactInfo(sptr &call, std::string phoneNu // Get the contact data from the database ContactInfo contactInfoTemp = contactInfo; QueryCallerInfo(contactInfoTemp, phoneNum); - std::string ringtonePath = contactInfoTemp.ringtonePath; DealVideoRingPath(ringtonePath, callObjectPtr); callObjectPtr->SetCallerInfo(contactInfoTemp); CallVoiceAssistantManager::GetInstance()->UpdateContactInfo(contactInfoTemp, callObjectPtr->GetCallID()); @@ -521,19 +520,37 @@ void CallStatusManager::SetContactInfo(sptr &call, std::string phoneNu }); } -void CallStatusManager::DealVideoRingPath(std::string &ringtonePath, sptr &callObjectPtr) +void CallStatusManager::DealVideoRingPath(ContactInfo &contactInfo, sptr &callObjectPtr) { + std::string ringtonePath = contactInfo.ringtonePath; if (ringtonePath.empty()) { - auto settingHelper = SettingsDataShareHelper::GetInstance(); - if (settingHelper != nullptr) { - OHOS::Uri settingUri(SettingsDataShareHelper::SETTINGS_DATASHARE_URI); - settingHelper->Query(settingUri, "distributed_modem_state", ringtonePath); - TELEPHONY_LOGI("ringtonePath: %{public}s.", ringtonePath.c_str()); + CallAttributeInfo info; + callObjectPtr->GetCallAttributeBaseInfo(info); + const std::shared_ptr context; + Media::RingtoneType type = info.accountId == DEFAULT_SIM_SLOT_ID ? Media::RingtoneType::RINGTONE_TYPE_SIM_CARD_0 : + Media::RingtoneType::RINGTONE_TYPE_SIM_CARD_1; + TELEPHONY_LOGI("type: %{public}d", type); + std::shared_ptr systemSoundManager = + Media::SystemSoundManagerFactory::CreateSystemSoundManager(); + if (systemSoundManager == nullptr) { + TELEPHONY_LOGE("get systemSoundManager failed"); + return; + } + ringtonePath = systemSoundManager->GetRingToneUri(context, type); + if (memset_s(&contactInfo.ringtonePath, sizeof(contactInfo.ringtonePath), 0, sizeof(contactInfo.ringtonePath)) + != EOK) { + TELEPHONY_LOGE("memset_s ringtonePath fail"); + return; + } + if (memcpy_s(contactInfo.ringtonePath, FILE_PATH_MAX_LEN, ringtonePath.c_str(), ringtonePath.length()) + != EOK) { + TELEPHONY_LOGE("memcpy_s ringtonePath fail"); + return; } } if (ringtonePath.substr(ringtonePath.length() - VIDEO_RING_PATH_FIX_TAIL_LENGTH, - VIDEO_RING_PATH_FIX_TAIL_LENGTH) == VIDEO_RING_PATH_FIX_TAIL) { + VIDEO_RING_PATH_FIX_TAIL_LENGTH) == VIDEO_RING_PATH_FIX_TAIL || ringtonePath.empty()) { TELEPHONY_LOGI("notify callui to play video ring."); AAFwk::WantParams params = callObjectPtr->GetExtraParams(); params.SetParam("VideoRingPath", AAFwk::String::Box(ringtonePath)); -- Gitee From 8fda2164a0adca26e7eeba74cebdacfb0a1549db Mon Sep 17 00:00:00 2001 From: wangwei30043812 Date: Wed, 30 Apr 2025 11:33:00 +0800 Subject: [PATCH 8/8] video ring for contact Signed-off-by: wangwei30043812 --- services/call/src/call_status_manager.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/services/call/src/call_status_manager.cpp b/services/call/src/call_status_manager.cpp index 25f4d533..837ec8ae 100644 --- a/services/call/src/call_status_manager.cpp +++ b/services/call/src/call_status_manager.cpp @@ -512,7 +512,7 @@ void CallStatusManager::SetContactInfo(sptr &call, std::string phoneNu // Get the contact data from the database ContactInfo contactInfoTemp = contactInfo; QueryCallerInfo(contactInfoTemp, phoneNum); - DealVideoRingPath(ringtonePath, callObjectPtr); + DealVideoRingPath(contactInfoTemp, callObjectPtr); callObjectPtr->SetCallerInfo(contactInfoTemp); CallVoiceAssistantManager::GetInstance()->UpdateContactInfo(contactInfoTemp, callObjectPtr->GetCallID()); DelayedSingleton::GetInstance()->ProcessCallInfo(callObjectPtr, @@ -527,8 +527,8 @@ void CallStatusManager::DealVideoRingPath(ContactInfo &contactInfo, sptrGetCallAttributeBaseInfo(info); const std::shared_ptr context; - Media::RingtoneType type = info.accountId == DEFAULT_SIM_SLOT_ID ? Media::RingtoneType::RINGTONE_TYPE_SIM_CARD_0 : - Media::RingtoneType::RINGTONE_TYPE_SIM_CARD_1; + Media::RingtoneType type = info.accountId == DEFAULT_SIM_SLOT_ID ? + Media::RingtoneType::RINGTONE_TYPE_SIM_CARD_0 : Media::RingtoneType::RINGTONE_TYPE_SIM_CARD_1; TELEPHONY_LOGI("type: %{public}d", type); std::shared_ptr systemSoundManager = Media::SystemSoundManagerFactory::CreateSystemSoundManager(); @@ -536,7 +536,8 @@ void CallStatusManager::DealVideoRingPath(ContactInfo &contactInfo, sptrGetRingToneUri(context, type); + ringtonePath = systemSoundManager->GetRingtoneUri(context, type); + TELEPHONY_LOGI("ringtonePath: %{public}s", ringtonePath.c_str()); if (memset_s(&contactInfo.ringtonePath, sizeof(contactInfo.ringtonePath), 0, sizeof(contactInfo.ringtonePath)) != EOK) { TELEPHONY_LOGE("memset_s ringtonePath fail"); -- Gitee