diff --git a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp index bc8182027013fdab24a885a4168b0a52a78d6d0d..a09fd3ac594f2040f287247fc58c73730b5d3b4b 100644 --- a/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp +++ b/services/abilitymgr/src/scene_board/ui_ability_lifecycle_manager.cpp @@ -222,12 +222,14 @@ int UIAbilityLifecycleManager::StartUIAbility(AbilityRequest &abilityRequest, sp uiAbilityRecord->lifeCycleStateInfo_.sceneFlagBak = sceneFlag; return ERR_OK; } + bool isNewWant = (static_cast(sessionInfo->scenarios) & + ServerConstant::SKIP_ON_NEW_WANT_SCENARIOS) == 0 ? sessionInfo->isNewWant : false; auto want = uiAbilityRecord->GetWant(); - if (want.GetBoolParam(IS_CALLING_FROM_DMS, false) && !(sessionInfo->isNewWant)) { + if (want.GetBoolParam(IS_CALLING_FROM_DMS, false) && !isNewWant) { want.RemoveParam(IS_CALLING_FROM_DMS); uiAbilityRecord->SetWant(want); } - TAG_LOGD(AAFwkTag::ABILITYMGR, "StartUIAbility"); + TAG_LOGD(AAFwkTag::ABILITYMGR, "StartUIAbility, specifyTokenId is %{public}u.", abilityRequest.specifyTokenId); uiAbilityRecord->SetSpecifyTokenId(abilityRequest.specifyTokenId); UpdateAbilityRecordLaunchReason(abilityRequest, uiAbilityRecord); NotifyAbilityToken(uiAbilityRecord->GetToken(), abilityRequest); @@ -235,22 +237,19 @@ int UIAbilityLifecycleManager::StartUIAbility(AbilityRequest &abilityRequest, sp ProcessColdStartBranch(abilityRequest, sessionInfo, uiAbilityRecord, isColdStart)) { return ERR_OK; } - auto scenarios = static_cast(uiAbilityRecord->GetOnNewWantSkipScenarios()) & - static_cast(sessionInfo->scenarios); if (uiAbilityRecord->GetPendingState() != AbilityState::INITIAL) { TAG_LOGI(AAFwkTag::ABILITYMGR, "pending state: FOREGROUND/ BACKGROUND, dropped"); uiAbilityRecord->SetPendingState(AbilityState::FOREGROUND); - if (scenarios == 0 && sessionInfo->isNewWant) { + if (isNewWant) { uiAbilityRecord->SetLastWant(std::make_shared(abilityRequest.want)); } return ERR_OK; - } else { - TAG_LOGD(AAFwkTag::ABILITYMGR, "pending state is not FOREGROUND or BACKGROUND."); - uiAbilityRecord->SetPendingState(AbilityState::FOREGROUND); } - if (!isColdStart && scenarios == 0) { - uiAbilityRecord->SetIsNewWant(sessionInfo->isNewWant); - if (sessionInfo->isNewWant) { + TAG_LOGD(AAFwkTag::ABILITYMGR, "pending state is not FOREGROUND or BACKGROUND."); + uiAbilityRecord->SetPendingState(AbilityState::FOREGROUND); + if (!isColdStart) { + uiAbilityRecord->SetIsNewWant(isNewWant); + if (isNewWant) { uiAbilityRecord->SetWant(abilityRequest.want); uiAbilityRecord->GetSessionInfo()->want.RemoveAllFd(); } else { @@ -258,7 +257,7 @@ int UIAbilityLifecycleManager::StartUIAbility(AbilityRequest &abilityRequest, sp } } - if (!uiAbilityRecord->IsReady() || sessionInfo->isNewWant) { + if (!uiAbilityRecord->IsReady() || isNewWant) { AddCallerRecord(abilityRequest, sessionInfo, uiAbilityRecord); } auto isShellCall = abilityRequest.want.GetBoolParam(IS_SHELL_CALL, false); diff --git a/utils/server/constant/server_constant.h b/utils/server/constant/server_constant.h index 4f994288f17abe3ce3268cd0431d45cf0f114594..c7c4a8693b6a5046737c693c8fdefd4c1511d877 100644 --- a/utils/server/constant/server_constant.h +++ b/utils/server/constant/server_constant.h @@ -20,9 +20,12 @@ namespace OHOS::AbilityRuntime { namespace ServerConstant { constexpr const char* DLP_INDEX = "ohos.dlp.params.index"; constexpr const char* IS_CALL_BY_SCB = "isCallBySCB"; -constexpr int32_t SCENARIO_MOVE_MISSION_TO_FRONT = 0x00000001; -constexpr int32_t SCENARIO_SHOW_ABILITY = 0x00000002; -constexpr int32_t SCENARIO_BACK_TO_CALLER_ABILITY_WITH_RESULT = 0x00000004; +constexpr uint32_t SCENARIO_MOVE_MISSION_TO_FRONT = 0x00000001; +constexpr uint32_t SCENARIO_SHOW_ABILITY = 0x00000002; +constexpr uint32_t SCENARIO_BACK_TO_CALLER_ABILITY_WITH_RESULT = 0x00000004; +// skip onNewWant in these scenerios +constexpr uint32_t SKIP_ON_NEW_WANT_SCENARIOS = SCENARIO_MOVE_MISSION_TO_FRONT | + SCENARIO_SHOW_ABILITY | SCENARIO_BACK_TO_CALLER_ABILITY_WITH_RESULT; } // namespace ServerConstant } // namespace OHOS::AbilityRuntime #endif // OHOS_ABILITY_RUNTIME_SERVER_CONSTANT_H \ No newline at end of file