From ded8c1cf5dacca6571f826ccfa2f30a5f35f002e Mon Sep 17 00:00:00 2001 From: wangzhen Date: Sat, 29 Nov 2025 16:20:10 +0800 Subject: [PATCH] No appCloneSelector for scb Signed-off-by: wangzhen --- .../include/utils/start_ability_utils.h | 1 + .../src/ability_manager_service.cpp | 5 ++- .../src/utils/start_ability_utils.cpp | 5 +-- .../start_ability_utils_test.cpp | 33 +++++++++++++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/services/abilitymgr/include/utils/start_ability_utils.h b/services/abilitymgr/include/utils/start_ability_utils.h index 281db1772d..984e6e8d59 100644 --- a/services/abilitymgr/include/utils/start_ability_utils.h +++ b/services/abilitymgr/include/utils/start_ability_utils.h @@ -70,6 +70,7 @@ struct StartAbilityUtils { static thread_local int32_t ermsResultCode; static thread_local bool isWantWithAppCloneIndex; static thread_local bool ermsSupportBackToCallerFlag; + static thread_local bool startSpecifiedBySCB; }; struct StartAbilityInfoWrap { diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 7418d2be19..23bf5b5d8a 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -12330,8 +12330,11 @@ int32_t AbilityManagerService::StartSpecifiedAbilityBySCB(const Want &want) TAG_LOGE(AAFwkTag::ABILITYMGR, "no sceneboard called, no allowed"); return ERR_PERMISSION_DENIED; } - return StartAbilityInner(want, nullptr, DEFAULT_INVAL_VALUE, false, DEFAULT_INVAL_VALUE, false, 0, false, + StartAbilityUtils::startSpecifiedBySCB = true; + auto ret = StartAbilityInner(want, nullptr, DEFAULT_INVAL_VALUE, false, DEFAULT_INVAL_VALUE, false, 0, false, false, false, false, false, true); + StartAbilityUtils::startSpecifiedBySCB = false; + return ret; } int32_t AbilityManagerService::RegisterIAbilityManagerCollaborator( diff --git a/services/abilitymgr/src/utils/start_ability_utils.cpp b/services/abilitymgr/src/utils/start_ability_utils.cpp index b50a6447da..57426c260f 100644 --- a/services/abilitymgr/src/utils/start_ability_utils.cpp +++ b/services/abilitymgr/src/utils/start_ability_utils.cpp @@ -37,6 +37,7 @@ thread_local bool StartAbilityUtils::skipErms = false; thread_local int32_t StartAbilityUtils::ermsResultCode = ERMS_ISALLOW_RESULTCODE; thread_local bool StartAbilityUtils::isWantWithAppCloneIndex = false; thread_local bool StartAbilityUtils::ermsSupportBackToCallerFlag = false; +thread_local bool StartAbilityUtils::startSpecifiedBySCB = false; bool StartAbilityUtils::GetAppIndex(const Want &want, sptr callerToken, int32_t &appIndex) { @@ -162,8 +163,8 @@ StartAbilityInfoWrap::StartAbilityInfoWrap(const Want &want, int32_t validUserId StartAbilityUtils::ermsResultCode = ERMS_ISALLOW_RESULTCODE; StartAbilityUtils::isWantWithAppCloneIndex = false; - if (want.HasParameter(AAFwk::Want::PARAM_APP_CLONE_INDEX_KEY) && appIndex >= 0 && - appIndex < AbilityRuntime::GlobalConstant::MAX_APP_CLONE_INDEX) { + if ((want.HasParameter(AAFwk::Want::PARAM_APP_CLONE_INDEX_KEY) && appIndex >= 0 && + appIndex < AbilityRuntime::GlobalConstant::MAX_APP_CLONE_INDEX) || StartAbilityUtils::startSpecifiedBySCB) { StartAbilityUtils::isWantWithAppCloneIndex = true; } } diff --git a/test/unittest/start_ability_utils_test/start_ability_utils_test.cpp b/test/unittest/start_ability_utils_test/start_ability_utils_test.cpp index 3e138ce663..af374f7436 100644 --- a/test/unittest/start_ability_utils_test/start_ability_utils_test.cpp +++ b/test/unittest/start_ability_utils_test/start_ability_utils_test.cpp @@ -271,6 +271,39 @@ HWTEST_F(StartAbilityUtilsTest, SetStartAbilityInfo_001, TestSize.Level1) EXPECT_NE(abilityName, abilityInfo.name); } +/** + * @tc.name: StartAbilityInfoWrap_001 + * @tc.desc: test class StartAbilityUtil StartAbilityInfoWrap constructor + * @tc.type: FUNC + */ +HWTEST_F(StartAbilityUtilsTest, StartAbilityInfoWrap_001, TestSize.Level1) +{ + Want want; + int32_t userId = 0; + int32_t appIndex = 0; + int32_t validUserId = 0; + StartAbilityUtils::startSpecifiedBySCB = true; + StartAbilityInfoWrap threadLocalInfo(want, validUserId, appIndex, nullptr); + EXPECT_TRUE(StartAbilityUtils::isWantWithAppCloneIndex); + StartAbilityUtils::startSpecifiedBySCB = false; +} + +/** + * @tc.name: StartAbilityInfoWrap_002 + * @tc.desc: test class StartAbilityUtil StartAbilityInfoWrap constructor + * @tc.type: FUNC + */ +HWTEST_F(StartAbilityUtilsTest, StartAbilityInfoWrap_002, TestSize.Level1) +{ + Want want; + int32_t userId = 0; + int32_t appIndex = 0; + int32_t validUserId = 0; + StartAbilityUtils::startSpecifiedBySCB = false; + StartAbilityInfoWrap threadLocalInfo(want, validUserId, appIndex, nullptr); + EXPECT_FALSE(StartAbilityUtils::isWantWithAppCloneIndex); +} + /** * @tc.name: CreateStartAbilityInfo_001 * @tc.desc: test class StartAbilityUtil CreateStartAbilityInfo function