diff --git a/interfaces/inner_api/ability_manager/include/iability_manager_collaborator.h b/interfaces/inner_api/ability_manager/include/iability_manager_collaborator.h index 1a82c80961..20c5aa2338 100644 --- a/interfaces/inner_api/ability_manager/include/iability_manager_collaborator.h +++ b/interfaces/inner_api/ability_manager/include/iability_manager_collaborator.h @@ -99,9 +99,11 @@ public: * @brief Notify when notify app to background. * @param missionId missionId. * @param userId, the user id. + * @param isFromScreenOffBackground whether the background is caused by screen off. * @return 0 when notify move mission to background success or else failed. */ - virtual int32_t NotifyMoveMissionToBackground(int32_t missionId, int32_t userId = CURRENT_USER_ID) = 0; + virtual int32_t NotifyMoveMissionToBackground(int32_t missionId, int32_t userId = CURRENT_USER_ID, + bool isFromScreenOffBackground = false) = 0; /** * @brief Notify when notify app to foreground. diff --git a/services/abilitymgr/include/ability_manager_collaborator_proxy.h b/services/abilitymgr/include/ability_manager_collaborator_proxy.h index 1fafa4709f..17a5f43acd 100644 --- a/services/abilitymgr/include/ability_manager_collaborator_proxy.h +++ b/services/abilitymgr/include/ability_manager_collaborator_proxy.h @@ -83,9 +83,11 @@ public: * @brief Notify when notify app to background. * @param missionId missionId. * @param userId, the user id. + * @param isFromScreenOffBackground whether the background is caused by screen off. * @return 0 when notify move mission to background success or else failed. */ - virtual int32_t NotifyMoveMissionToBackground(int32_t missionId, int32_t userId = CURRENT_USER_ID) override; + virtual int32_t NotifyMoveMissionToBackground(int32_t missionId, int32_t userId = CURRENT_USER_ID, + bool isFromScreenOffBackground = false) override; /** * @brief Notify when notify app to foreground. diff --git a/services/abilitymgr/src/ability_manager_collaborator_proxy.cpp b/services/abilitymgr/src/ability_manager_collaborator_proxy.cpp index a5fe28d4ce..19aff360a0 100644 --- a/services/abilitymgr/src/ability_manager_collaborator_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_collaborator_proxy.cpp @@ -200,7 +200,8 @@ int32_t AbilityManagerCollaboratorProxy::NotifyLoadAbility( return NO_ERROR; } -int32_t AbilityManagerCollaboratorProxy::NotifyMoveMissionToBackground(int32_t missionId, int32_t userId) +int32_t AbilityManagerCollaboratorProxy::NotifyMoveMissionToBackground(int32_t missionId, int32_t userId, + bool isFromScreenOffBackground) { MessageParcel data; MessageParcel reply; @@ -218,6 +219,10 @@ int32_t AbilityManagerCollaboratorProxy::NotifyMoveMissionToBackground(int32_t m TAG_LOGE(AAFwkTag::ABILITYMGR, "userId write fail"); return ERR_INVALID_OPERATION; } + if (!data.WriteBool(isFromScreenOffBackground)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "isFromScreenOffBackground write fail"); + return ERR_INVALID_OPERATION; + } int32_t ret = SendTransactCmd( IAbilityManagerCollaborator::NOTIFY_MOVE_MISSION_TO_BACKGROUND, data, reply, option); if (ret != NO_ERROR) { diff --git a/services/abilitymgr/src/ability_record.cpp b/services/abilitymgr/src/ability_record.cpp index 685c2563a4..680e99fd2d 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -1003,7 +1003,8 @@ void AbilityRecord::SetAbilityStateInner(AbilityState state) int32_t persistentId = sessionInfo->persistentId; switch (state) { case AbilityState::BACKGROUNDING: { - ret = collaborator->NotifyMoveMissionToBackground(persistentId, GetOwnerMissionUserId()); + ret = collaborator->NotifyMoveMissionToBackground(persistentId, GetOwnerMissionUserId(), + isFromScreenOffBackground_); break; } case AbilityState::TERMINATING: { @@ -1024,7 +1025,8 @@ void AbilityRecord::SetAbilityStateInner(AbilityState state) break; } case AbilityState::BACKGROUNDING: { - ret = collaborator->NotifyMoveMissionToBackground(missionId_, GetOwnerMissionUserId()); + ret = collaborator->NotifyMoveMissionToBackground(missionId_, GetOwnerMissionUserId(), + isFromScreenOffBackground_); break; } case AbilityState::TERMINATING: { diff --git a/test/mock/ability_manager_collaborator/mock_ability_manager_collaborator.h b/test/mock/ability_manager_collaborator/mock_ability_manager_collaborator.h index 5f8364ed1b..d8005a993c 100644 --- a/test/mock/ability_manager_collaborator/mock_ability_manager_collaborator.h +++ b/test/mock/ability_manager_collaborator/mock_ability_manager_collaborator.h @@ -32,7 +32,8 @@ public: const Want &want)); MOCK_METHOD2(NotifyLoadAbility, int32_t(const AppExecFwk::AbilityInfo &abilityInfo, const sptr &sessionInfo)); - MOCK_METHOD2(NotifyMoveMissionToBackground, int32_t(int32_t missionId, int32_t userId)); + MOCK_METHOD3(NotifyMoveMissionToBackground, int32_t(int32_t missionId, int32_t userId, + bool isFromScreenOffBackground)); MOCK_METHOD2(NotifyMoveMissionToForeground, int32_t(int32_t missionId, int32_t userId)); MOCK_METHOD2(NotifyTerminateMission, int32_t(int32_t missionId, int32_t userId)); MOCK_METHOD2(NotifyClearMission, int32_t(int32_t missionId, int32_t userId)); diff --git a/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_proxy_test.cpp b/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_proxy_test.cpp index 25fce1a391..a8e0bb0e63 100644 --- a/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_proxy_test.cpp +++ b/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_proxy_test.cpp @@ -133,7 +133,8 @@ HWTEST_F(AbilityManagerCollaboratorProxyTest, NotifyMoveMissionToBackground_0100 .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerCollaboratorStubMock::InvokeSendRequest)); int32_t missionId = 0; int32_t userId = 100; - int32_t res = proxy_->NotifyMoveMissionToBackground(missionId, userId); + bool isFromScreenOffBackground = false; + int32_t res = proxy_->NotifyMoveMissionToBackground(missionId, userId, isFromScreenOffBackground); EXPECT_EQ(res, NO_ERROR); EXPECT_EQ(static_cast(IAbilityManagerCollaborator::NOTIFY_MOVE_MISSION_TO_BACKGROUND), mock_->GetCode()); } diff --git a/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_stub_mock.h b/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_stub_mock.h index 96b6df1c0a..88aaf1682c 100644 --- a/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_stub_mock.h +++ b/test/unittest/ability_manager_collaborator_proxy_test/ability_manager_collaborator_stub_mock.h @@ -59,7 +59,7 @@ public: return 0; } - int32_t NotifyMoveMissionToBackground(int32_t missionId, int32_t userId) + int32_t NotifyMoveMissionToBackground(int32_t missionId, int32_t userId, bool isFromScreenOffBackground) { return 0; } diff --git a/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp b/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp index a1ac297271..d461d135b8 100644 --- a/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp +++ b/test/unittest/ability_manager_proxy_second_test/ability_manager_proxy_second_test.cpp @@ -94,7 +94,8 @@ public: const Want &want)); MOCK_METHOD2(NotifyLoadAbility, int32_t(const AppExecFwk::AbilityInfo &abilityInfo, const sptr &sessionInfo)); - MOCK_METHOD2(NotifyMoveMissionToBackground, int32_t(int32_t missionId, int32_t userId)); + MOCK_METHOD3(NotifyMoveMissionToBackground, int32_t(int32_t missionId, int32_t userId, + bool isFromScreenOffBackground)); MOCK_METHOD2(NotifyMoveMissionToForeground, int32_t(int32_t missionId, int32_t userId)); MOCK_METHOD2(NotifyTerminateMission, int32_t(int32_t missionId, int32_t userId)); MOCK_METHOD2(NotifyClearMission, int32_t(int32_t missionId, int32_t userId));