From ae4b3068d5c712f73cef0f503625ca214c29576d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E8=80=80=E6=96=87?= Date: Fri, 12 Sep 2025 15:56:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=A5=E5=8F=A3=E8=80=97?= =?UTF-8?q?=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 陈耀文 --- .../include/audio_policy_server.h | 3 ++ .../src/audio_core_service_private.cpp | 3 ++ .../service_main/src/audio_policy_server.cpp | 35 +++++++++++++------ .../src/audio_policy_server_unit_test.cpp | 27 ++++++++++++++ 4 files changed, 57 insertions(+), 11 deletions(-) diff --git a/services/audio_policy/server/service/service_main/include/audio_policy_server.h b/services/audio_policy/server/service/service_main/include/audio_policy_server.h index 32313acdbb..64aea780cf 100644 --- a/services/audio_policy/server/service/service_main/include/audio_policy_server.h +++ b/services/audio_policy/server/service/service_main/include/audio_policy_server.h @@ -183,6 +183,9 @@ public: int32_t UnexcludeOutputDevices(int32_t audioDevUsage, const std::vector> &audioDeviceDescriptors) override; + + int32_t CheckAndGetApiVersion(std::vector> &deviceDescs, + bool hasSystemPermission); int32_t GetExcludedDevices(int32_t audioDevUsage, std::vector> &audioDeviceDescriptors) override; diff --git a/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp b/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp index 3adf00b374..cbfb39bb69 100644 --- a/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp +++ b/services/audio_policy/server/service/service_main/src/audio_core_service_private.cpp @@ -2946,6 +2946,9 @@ int32_t AudioCoreService::ActivateNearlinkDevice(const std::shared_ptr> &deviceDescs, + bool hasSystemPermission) +{ + if (hasSystemPermission && !HasUsbDevice(deviceDescs)) { + return 0; + } + return GetApiTargetVersion(); +} + int32_t AudioPolicyServer::GetExcludedDevices(int32_t audioDevUsageIn, vector> &device) { AudioDeviceUsage audioDevUsage = static_cast(audioDevUsageIn); - CHECK_AND_RETURN_RET_LOG(PermissionUtil::VerifySystemPermission(), ERR_PERMISSION_DENIED, + bool hasSystemPermission = PermissionUtil::VerifySystemPermission(); + CHECK_AND_RETURN_RET_LOG(hasSystemPermission, ERR_PERMISSION_DENIED, "No system permission"); device = audioDeviceLock_.GetExcludedDevices(audioDevUsage); - int32_t apiVersion = GetApiTargetVersion(); + int32_t apiVersion = CheckAndGetApiVersion(device, hasSystemPermission); AudioDeviceDescriptor::ClientInfo clientInfo { apiVersion }; clientInfo.isSupportedNearlink_ = audioPolicyUtils_.IsSupportedNearlink(AudioBundleManager::GetBundleName(), apiVersion, true); @@ -1952,7 +1962,7 @@ int32_t AudioPolicyServer::GetDevices(int32_t deviceFlagIn, deviceDescs = eventEntry_->GetDevices(deviceFlag); - int32_t apiVersion = GetApiTargetVersion(); + int32_t apiVersion = CheckAndGetApiVersion(deviceDescs, hasSystemPermission); AudioDeviceDescriptor::ClientInfo clientInfo { apiVersion }; clientInfo.isSupportedNearlink_ = audioPolicyUtils_.IsSupportedNearlink(AudioBundleManager::GetBundleName(), apiVersion, hasSystemPermission); @@ -1998,13 +2008,14 @@ int32_t AudioPolicyServer::GetDevicesInner(int32_t deviceFlagIn, int32_t AudioPolicyServer::GetOutputDevice(const sptr &audioRendererFilter, std::vector> &deviceDescs) { - if (!PermissionUtil::VerifySystemPermission()) { + bool hasSystemPermission = PermissionUtil::VerifySystemPermission(); + if (!hasSystemPermission) { AUDIO_ERR_LOG("only for system app"); return ERR_INVALID_OPERATION; } deviceDescs = audioPolicyService_.GetOutputDevice(audioRendererFilter); - int32_t apiVersion = GetApiTargetVersion(); + int32_t apiVersion = CheckAndGetApiVersion(deviceDescs, hasSystemPermission); AudioDeviceDescriptor::ClientInfo clientInfo { apiVersion }; clientInfo.isSupportedNearlink_ = audioPolicyUtils_.IsSupportedNearlink(AudioBundleManager::GetBundleName(), apiVersion, true); @@ -2022,13 +2033,14 @@ int32_t AudioPolicyServer::GetOutputDevice(const sptr &audi int32_t AudioPolicyServer::GetInputDevice(const sptr &audioCapturerFilter, std::vector> &deviceDescs) { - if (!PermissionUtil::VerifySystemPermission()) { + bool hasSystemPermission = PermissionUtil::VerifySystemPermission(); + if (!hasSystemPermission) { AUDIO_ERR_LOG("only for system app"); return ERR_INVALID_OPERATION; } deviceDescs = audioPolicyService_.GetInputDevice(audioCapturerFilter); - int32_t apiVersion = GetApiTargetVersion(); + int32_t apiVersion = CheckAndGetApiVersion(deviceDescs, hasSystemPermission); AudioDeviceDescriptor::ClientInfo clientInfo { apiVersion }; clientInfo.isSupportedNearlink_ = audioPolicyUtils_.IsSupportedNearlink(AudioBundleManager::GetBundleName(), apiVersion, true); @@ -2070,8 +2082,8 @@ int32_t AudioPolicyServer::GetPreferredOutputDeviceDescriptors(const AudioRender audioPolicyService_.UpdateDescWhenNoBTPermission(deviceDescs); } - int32_t apiVersion = GetApiTargetVersion(); bool hasSystemPermission = PermissionUtil::VerifySystemPermission(); + int32_t apiVersion = CheckAndGetApiVersion(deviceDescs, hasSystemPermission); AudioDeviceDescriptor::ClientInfo clientInfo { apiVersion }; clientInfo.isSupportedNearlink_ = audioPolicyUtils_.IsSupportedNearlink(AudioBundleManager::GetBundleName(), apiVersion, hasSystemPermission); @@ -2099,10 +2111,11 @@ int32_t AudioPolicyServer::GetPreferredInputDeviceDescriptors(const AudioCapture if (!hasBTPermission) { audioPolicyService_.UpdateDescWhenNoBTPermission(deviceDescs); } - int32_t apiVersion = GetApiTargetVersion(); + bool hasSystemPermission = PermissionUtil::VerifySystemPermission(); + int32_t apiVersion = CheckAndGetApiVersion(deviceDescs, hasSystemPermission); AudioDeviceDescriptor::ClientInfo clientInfo { apiVersion }; clientInfo.isSupportedNearlink_ = audioPolicyUtils_.IsSupportedNearlink(AudioBundleManager::GetBundleName(), - apiVersion, PermissionUtil::VerifySystemPermission()); + apiVersion, hasSystemPermission); for (auto &desc : deviceDescs) { CHECK_AND_RETURN_RET_LOG(desc, ERR_MEMORY_ALLOC_FAILED, "nullptr"); desc->SetClientInfo(clientInfo); @@ -3828,7 +3841,7 @@ int32_t AudioPolicyServer::GetAvailableDevices(int32_t usageIn, } } - int32_t apiVersion = GetApiTargetVersion(); + int32_t apiVersion = CheckAndGetApiVersion(deviceDevices, hasSystemPermission); AudioDeviceDescriptor::ClientInfo clientInfo { apiVersion }; clientInfo.isSupportedNearlink_ = audioPolicyUtils_.IsSupportedNearlink(AudioBundleManager::GetBundleName(), apiVersion, hasSystemPermission); diff --git a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_policy_server_unit_test.cpp b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_policy_server_unit_test.cpp index e098462fa6..24a648995e 100644 --- a/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_policy_server_unit_test.cpp +++ b/services/audio_policy/test/unittest/audio_interrupt_service_test/src/audio_policy_server_unit_test.cpp @@ -3700,5 +3700,32 @@ HWTEST(AudioPolicyUnitTest, IsIntelligentNoiseReductionEnabledForCurrentDevice_0 int32_t ret = server->IsIntelligentNoiseReductionEnabledForCurrentDevice(sourceType, isSupport); EXPECT_EQ(ret, SUCCESS); } + +/** +* @tc.name : Test AudioPolicyServer. +* @tc.number: CheckAndGetApiVersion_001 +* @tc.desc : AudioPolicyServer::CheckAndGetApiVersion. +*/ +HWTEST(AudioPolicyUnitTest, CheckAndGetApiVersion_001, TestSize.Level1) +{ + sptr server = GetPolicyServerUnitTest(); + ASSERT_TRUE(server != nullptr); + + bool hasSystemPermission = false; + + std::shared_ptr desc = std::make_shared(); + desc->deviceType_ = DEVICE_TYPE_USB_HEADSET; + desc->hasPair_ = false; + std::vector> deviceDescs; + + int32_t apiVersion = server->CheckAndGetApiVersion(deviceDescs, hasSystemPermission); + EXPECT_EQ(apiVersion, 0); + hasSystemPermission = true; + apiVersion = server->CheckAndGetApiVersion(deviceDescs, hasSystemPermission); + EXPECT_EQ(apiVersion, 0); + deviceDescs.push_back(desc); + apiVersion = server->CheckAndGetApiVersion(deviceDescs, hasSystemPermission); + EXPECT_EQ(apiVersion, 0); +} } // AudioStandard } // OHOS -- Gitee