From 2d22e7eb07cc77edd1386d1daf0bd01f68500545 Mon Sep 17 00:00:00 2001 From: "DESKTOP-UGVMD4B\\DawnComing" Date: Tue, 7 Jul 2026 22:38:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=9C=E6=B9=96=5F=E9=80=80=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E4=BC=A0=E5=85=A5isFromScreenOffBackground=5F=20Signe?= =?UTF-8?q?d-off-by:=20lidongrui=20=20Co-Authored-B?= =?UTF-8?q?y:=20Agent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../include/iability_manager_collaborator.h | 4 +++- .../include/ability_manager_collaborator_proxy.h | 4 +++- .../abilitymgr/src/ability_manager_collaborator_proxy.cpp | 7 ++++++- services/abilitymgr/src/ability_record.cpp | 6 ++++-- .../mock_ability_manager_collaborator.h | 3 ++- .../ability_manager_collaborator_proxy_test.cpp | 3 ++- .../ability_manager_collaborator_stub_mock.h | 2 +- .../ability_manager_proxy_second_test.cpp | 3 ++- 8 files changed, 23 insertions(+), 9 deletions(-) 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));