diff --git a/services/abilitymgr/include/mission_list_manager.h b/services/abilitymgr/include/mission_list_manager.h index 9f8ecdd80d7c8684388b216e4e3a8314a2292d87..b03cb9b385b815179c90f6b07c483116b4e4fa92 100644 --- a/services/abilitymgr/include/mission_list_manager.h +++ b/services/abilitymgr/include/mission_list_manager.h @@ -71,8 +71,8 @@ public: int MoveMissionToFront(int32_t missionId, std::shared_ptr startOptions = nullptr); - int MoveMissionToFront(int32_t missionId, bool isCallerFromLauncher, - std::shared_ptr startOptions = nullptr); + int MoveMissionToFront(int32_t missionId, bool isCallerFromLauncher, bool isRecent, + std::shared_ptr callerAbility, std::shared_ptr startOptions = nullptr); /** * OnAbilityRequestDone, app manager service call this interface after ability request done. diff --git a/services/abilitymgr/src/mission_list_manager.cpp b/services/abilitymgr/src/mission_list_manager.cpp index 19c506df22f9f5479d7f32fd4356c0e9ce21200f..35b22824beb7650bd111a2120f6c895729b2ddd3 100644 --- a/services/abilitymgr/src/mission_list_manager.cpp +++ b/services/abilitymgr/src/mission_list_manager.cpp @@ -219,11 +219,11 @@ int MissionListManager::GetMissionInfo(int32_t missionId, MissionInfo &missionIn int MissionListManager::MoveMissionToFront(int32_t missionId, std::shared_ptr startOptions) { std::lock_guard guard(managerLock_); - return MoveMissionToFront(missionId, true, startOptions); + return MoveMissionToFront(missionId, true, true, nullptr, startOptions); } -int MissionListManager::MoveMissionToFront(int32_t missionId, bool isCallerFromLauncher, - std::shared_ptr startOptions) +int MissionListManager::MoveMissionToFront(int32_t missionId, bool isCallerFromLauncher, bool isRecent, + std::shared_ptr callerAbility, std::shared_ptr startOptions) { HILOG_INFO("move mission to front:%{public}d.", missionId); std::lock_guard guard(managerLock_); @@ -250,7 +250,7 @@ int MissionListManager::MoveMissionToFront(int32_t missionId, bool isCallerFromL #ifdef SUPPORT_GRAPHICS AbilityRequest abilityRequest; - targetAbilityRecord->ProcessForegroundAbility(true, abilityRequest, startOptions, nullptr); + targetAbilityRecord->ProcessForegroundAbility(isRecent, abilityRequest, startOptions, callerAbility); #else targetAbilityRecord->ProcessForegroundAbility(); #endif @@ -2040,7 +2040,7 @@ void MissionListManager::BackToCaller(const std::shared_ptr &call } // other , resume caller ability to top and foreground. - MoveMissionToFront(callerAbility->GetMissionId(), false); + MoveMissionToFront(callerAbility->GetMissionId(), false, false, nullptr); } void MissionListManager::MoveToTerminateList(const std::shared_ptr& abilityRecord) @@ -2887,8 +2887,11 @@ void MissionListManager::OnAcceptWantResponse(const AAFwk::Want &want, const std ability->SetWant(abilityRequest.want); ability->SetIsNewWant(true); UpdateAbilityRecordLaunchReason(abilityRequest, ability); + if (callerAbility == nullptr) { + callerAbility = Token::GetAbilityRecordByToken(abilityRequest.callerToken); + } auto isCallerFromLauncher = (callerAbility && callerAbility->IsLauncherAbility()); - MoveMissionToFront(mission->GetMissionId(), isCallerFromLauncher); + MoveMissionToFront(mission->GetMissionId(), isCallerFromLauncher, false, callerAbility); NotifyRestartSpecifiedAbility(abilityRequest, ability->GetToken()); return; } diff --git a/test/fuzztest/missionlistmanagerfirst_fuzzer/missionlistmanagerfirst_fuzzer.cpp b/test/fuzztest/missionlistmanagerfirst_fuzzer/missionlistmanagerfirst_fuzzer.cpp index 40c351f6ff8fd9694d15e109f08201a390580d35..ddb004f2c8046c3be3d6eef2062f09e4865ac1c5 100755 --- a/test/fuzztest/missionlistmanagerfirst_fuzzer/missionlistmanagerfirst_fuzzer.cpp +++ b/test/fuzztest/missionlistmanagerfirst_fuzzer/missionlistmanagerfirst_fuzzer.cpp @@ -107,7 +107,7 @@ bool DoSomethingInterestingWithMyAPI(const char* data, size_t size) missionListManager->GetMissionInfo(int32Param, missionInfo); std::shared_ptr startOptions = std::make_shared(); missionListManager->MoveMissionToFront(int32Param, startOptions); - missionListManager->MoveMissionToFront(int32Param, boolParam, startOptions); + missionListManager->MoveMissionToFront(int32Param, boolParam, boolParam, abilityRecord, startOptions); missionListManager->EnqueueWaitingAbility(abilityRequest); missionListManager->EnqueueWaitingAbilityToFront(abilityRequest); missionListManager->StartWaitingAbility();