From 79b3a017eaa62777b4301d8848642e27c6ecf06f Mon Sep 17 00:00:00 2001 From: wangdongdong Date: Fri, 7 Jan 2022 16:32:59 +0800 Subject: [PATCH] migrate Change-Id: Ide98114e842e9b9ef8ccc4496e4b5d9f5e3933bc Signed-off-by: wangdongdong --- .../kits/ability/native/include/ability.h | 9 ++ .../ability/native/include/ability_impl.h | 9 ++ .../ability/native/include/ability_thread.h | 7 ++ .../distributed/continuation_handler.h | 1 + .../distributed/continuation_manager.h | 6 + .../kits/ability/native/src/ability.cpp | 24 +++- .../kits/ability/native/src/ability_impl.cpp | 9 ++ .../ability/native/src/ability_thread.cpp | 10 ++ .../distributed/continuation_handler.cpp | 46 ++++++- .../distributed/continuation_manager.cpp | 66 +++++++++- .../include/mock_ability_manager_client.h | 1 + .../include/mock_ability_manager_service.h | 8 +- .../mock_ability_scheduler_for_observer.h | 1 + .../mock/AMS/mock_ability_manager_service.h | 8 +- .../AMS/mock_serviceability_manager_service.h | 8 +- .../include/ability_manager_client.h | 27 +++- .../include/ability_manager_interface.h | 17 ++- .../include/ability_scheduler_interface.h | 4 + .../include/ability_manager_proxy.h | 11 +- .../include/ability_manager_service.h | 38 +++++- .../abilitymgr/include/ability_manager_stub.h | 3 + services/abilitymgr/include/ability_record.h | 2 +- .../include/ability_scheduler_proxy.h | 9 ++ .../include/ability_scheduler_stub.h | 1 + services/abilitymgr/include/lifecycle_deal.h | 1 + .../abilitymgr/src/ability_manager_client.cpp | 28 +++-- .../abilitymgr/src/ability_manager_proxy.cpp | 104 ++++++++++++++- .../src/ability_manager_service.cpp | 59 ++++++++- .../abilitymgr/src/ability_manager_stub.cpp | 65 ++++++++-- services/abilitymgr/src/ability_record.cpp | 8 ++ .../src/ability_scheduler_proxy.cpp | 22 +++- .../abilitymgr/src/ability_scheduler_stub.cpp | 8 ++ services/abilitymgr/src/lifecycle_deal.cpp | 7 ++ .../libs/aakit/include/ability_scheduler.h | 2 + .../ability_scheduler_mock.h | 1 + .../ability_manager_proxy_test.cpp | 10 +- .../ability_manager_stub_mock.h | 8 +- .../ability_manager_service_test.cpp | 45 ++----- .../ability_manager_stub_impl_mock.h | 15 ++- .../ability_manager_stub_test.cpp | 118 +----------------- .../ability_manager_stub_mock.h | 6 + .../ability_schedule_stub_mock.h | 2 + .../mock/include/mock_ability_mgr_service.h | 8 +- .../mock/include/mock_ability_scheduler.h | 1 + .../include/mock_ability_scheduler_stub.h | 1 + tools/test/mock/mock_ability_manager_stub.h | 8 +- 46 files changed, 625 insertions(+), 227 deletions(-) mode change 100644 => 100755 frameworks/kits/ability/native/include/ability_impl.h mode change 100644 => 100755 frameworks/kits/ability/native/src/ability_impl.cpp mode change 100644 => 100755 frameworks/kits/ability/native/test/mock/include/mock_ability_manager_client.h mode change 100644 => 100755 frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h mode change 100644 => 100755 frameworks/kits/ability/native/test/mock/include/mock_ability_scheduler_for_observer.h mode change 100644 => 100755 frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h mode change 100644 => 100755 interfaces/innerkits/ability_manager/include/ability_manager_client.h mode change 100644 => 100755 interfaces/innerkits/ability_manager/include/ability_manager_interface.h mode change 100644 => 100755 services/abilitymgr/include/ability_manager_proxy.h mode change 100644 => 100755 services/abilitymgr/include/ability_manager_service.h mode change 100644 => 100755 services/abilitymgr/include/ability_manager_stub.h mode change 100644 => 100755 services/abilitymgr/src/ability_manager_client.cpp mode change 100644 => 100755 services/abilitymgr/src/ability_manager_proxy.cpp mode change 100644 => 100755 services/abilitymgr/src/ability_manager_stub.cpp mode change 100644 => 100755 services/abilitymgr/src/ability_scheduler_proxy.cpp mode change 100644 => 100755 services/abilitymgr/src/lifecycle_deal.cpp mode change 100644 => 100755 services/abilitymgr/test/mock/libs/aakit/include/ability_scheduler.h mode change 100644 => 100755 services/abilitymgr/test/mock/libs/ability_scheduler_mock/ability_scheduler_mock.h mode change 100644 => 100755 services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h mode change 100644 => 100755 services/abilitymgr/test/unittest/phone/ability_manager_service_test/ability_manager_service_test.cpp mode change 100644 => 100755 services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h mode change 100644 => 100755 services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h mode change 100644 => 100755 services/abilitymgr/test/unittest/phone/ability_scheduler_stub_test/ability_schedule_stub_mock.h mode change 100644 => 100755 services/test/mock/include/mock_ability_mgr_service.h mode change 100644 => 100755 services/test/mock/include/mock_ability_scheduler.h mode change 100644 => 100755 services/test/mock/include/mock_ability_scheduler_stub.h mode change 100644 => 100755 tools/test/mock/mock_ability_manager_stub.h diff --git a/frameworks/kits/ability/native/include/ability.h b/frameworks/kits/ability/native/include/ability.h index c022d11b142..b25b3d31c63 100644 --- a/frameworks/kits/ability/native/include/ability.h +++ b/frameworks/kits/ability/native/include/ability.h @@ -1267,6 +1267,15 @@ public: */ std::weak_ptr GetContinuationRegisterManager(); + /** + * @brief Migrates this ability to the given device on the same distributed network. The ability to migrate and its + * ability slices must implement the IAbilityContinuation interface. + * + * @param deviceId Indicates the ID of the target device where this ability will be migrated to. + * + */ + virtual void ContinueAbilityWithStack(const std::string &deviceId) final; + /** * @brief Migrates this ability to the given device on the same distributed network. The ability to migrate and its * ability slices must implement the IAbilityContinuation interface. diff --git a/frameworks/kits/ability/native/include/ability_impl.h b/frameworks/kits/ability/native/include/ability_impl.h old mode 100644 new mode 100755 index fed8049a501..eceba3ece6d --- a/frameworks/kits/ability/native/include/ability_impl.h +++ b/frameworks/kits/ability/native/include/ability_impl.h @@ -319,6 +319,15 @@ public: virtual std::vector> ExecuteBatch(const std::vector> &operations); + /** + * @brief continue ability to target device. + * + * @param deviceId: target deviceId + * + * @return + */ + void ContinueAbility(const std::string& deviceId); + /** * @brief Notify continuation result to ability. * diff --git a/frameworks/kits/ability/native/include/ability_thread.h b/frameworks/kits/ability/native/include/ability_thread.h index 2c257b6f963..7a517645332 100644 --- a/frameworks/kits/ability/native/include/ability_thread.h +++ b/frameworks/kits/ability/native/include/ability_thread.h @@ -301,6 +301,13 @@ public: */ void NotifyTopActiveAbilityChanged(bool flag); + /** + * @brief continue ability to target device. + * + * @param deviceId: target deviceId + */ + void ContinueAbility(const std::string& deviceId); + /** * @brief notify this ability continuation result. * diff --git a/frameworks/kits/ability/native/include/continuation/distributed/continuation_handler.h b/frameworks/kits/ability/native/include/continuation/distributed/continuation_handler.h index a6ac93542e0..ad6b2f02d33 100644 --- a/frameworks/kits/ability/native/include/continuation/distributed/continuation_handler.h +++ b/frameworks/kits/ability/native/include/continuation/distributed/continuation_handler.h @@ -56,6 +56,7 @@ public: void SetAbilityInfo(std::shared_ptr &abilityInfo); void SetPrimaryStub(const sptr &Primary); bool ReverseContinueAbility(); + bool HandleStartContinuationWithStack(const sptr &token, const std::string &deviceId); static const std::string ORIGINAL_DEVICE_ID; diff --git a/frameworks/kits/ability/native/include/continuation/distributed/continuation_manager.h b/frameworks/kits/ability/native/include/continuation/distributed/continuation_manager.h index 19d8676d08f..2cf3a35a47b 100644 --- a/frameworks/kits/ability/native/include/continuation/distributed/continuation_manager.h +++ b/frameworks/kits/ability/native/include/continuation/distributed/continuation_manager.h @@ -43,12 +43,16 @@ public: std::string GetOriginalDeviceId(); + void ContinueAbilityWithStack(const std::string &deviceId); + void ContinueAbility(bool reversible, const std::string &deviceId); bool ReverseContinueAbility(); bool StartContinuation(); + bool OnContinue(WantParams &wantParams); + bool SaveData(WantParams &saveData); bool RestoreData(const WantParams &restoreData, bool reversible, const std::string &originalDeviceId); @@ -69,6 +73,8 @@ private: bool CheckContinuationIllegal(); + bool HandleContinueAbilityWithStack(const std::string &deviceId); + bool HandleContinueAbility(bool reversible, const std::string &deviceId); ProgressState GetProcessState(); diff --git a/frameworks/kits/ability/native/src/ability.cpp b/frameworks/kits/ability/native/src/ability.cpp index d5380085f16..49ef879dfde 100644 --- a/frameworks/kits/ability/native/src/ability.cpp +++ b/frameworks/kits/ability/native/src/ability.cpp @@ -1538,6 +1538,28 @@ std::weak_ptr Ability::GetContinuationRegisterMana return continuationRegisterManager; } +/** + * @brief Migrates this ability to the given device on the same distributed network. The ability to migrate and its + * ability slices must implement the IAbilityContinuation interface. + * + * @param deviceId Indicates the ID of the target device where this ability will be migrated to. If this parameter + * is null, this method has the same effect as continueAbility(). + * + */ +void Ability::ContinueAbilityWithStack(const std::string &deviceId) +{ + if (deviceId.empty()) { + APP_LOGE("ContinueAbilityWithStack(deviceId) failed. deviceId is empty"); + return; + } + + if (!VerifySupportForContinuation()) { + APP_LOGE("ContinueAbilityWithStack(deviceId) failed. VerifySupportForContinuation failed"); + return; + } + continuationManager_->ContinueAbilityWithStack(deviceId); +} + /** * @brief Migrates this ability to the given device on the same distributed network. The ability to migrate and its * ability slices must implement the IAbilityContinuation interface. @@ -1554,7 +1576,7 @@ void Ability::ContinueAbility(const std::string &deviceId) } if (!VerifySupportForContinuation()) { - APP_LOGE("Ability::ContinueAbility(deviceId) failed. VerifySupportForContinuation faled"); + APP_LOGE("Ability::ContinueAbility(deviceId) failed. VerifySupportForContinuation failed"); return; } continuationManager_->ContinueAbility(false, deviceId); diff --git a/frameworks/kits/ability/native/src/ability_impl.cpp b/frameworks/kits/ability/native/src/ability_impl.cpp old mode 100644 new mode 100755 index 821282f871c..40b12db09b4 --- a/frameworks/kits/ability/native/src/ability_impl.cpp +++ b/frameworks/kits/ability/native/src/ability_impl.cpp @@ -889,6 +889,15 @@ std::vector> AbilityImpl::ExecuteBatch( return results; } +void AbilityImpl::ContinueAbility(const std::string& deviceId) +{ + if (ability_ == nullptr) { + APP_LOGE("AbilityImpl::ContinueAbility ability_ is nullptr"); + return; + } + ability_->ContinueAbilityWithStack(deviceId); +} + void AbilityImpl::NotifyContinuationResult(const int32_t result) { if (ability_ == nullptr) { diff --git a/frameworks/kits/ability/native/src/ability_thread.cpp b/frameworks/kits/ability/native/src/ability_thread.cpp index a68298ca366..7e23ce2e55d 100644 --- a/frameworks/kits/ability/native/src/ability_thread.cpp +++ b/frameworks/kits/ability/native/src/ability_thread.cpp @@ -1154,6 +1154,16 @@ void AbilityThread::NotifyTopActiveAbilityChanged(bool flag) return; } +void AbilityThread::ContinueAbility(const std::string& deviceId) +{ + APP_LOGI("ContinueAbility, deviceId:%{public}s", deviceId.c_str()); + if (abilityImpl_ == nullptr) { + APP_LOGE("AbilityThread::ContinueAbility abilityImpl_ is nullptr"); + return; + } + abilityImpl_->ContinueAbility(deviceId); +} + void AbilityThread::NotifyContinuationResult(const int32_t result) { APP_LOGI("NotifyContinuationResult, result:%{public}d", result); diff --git a/frameworks/kits/ability/native/src/continuation/distributed/continuation_handler.cpp b/frameworks/kits/ability/native/src/continuation/distributed/continuation_handler.cpp index b2626a47e60..d0e424c9219 100644 --- a/frameworks/kits/ability/native/src/continuation/distributed/continuation_handler.cpp +++ b/frameworks/kits/ability/native/src/continuation/distributed/continuation_handler.cpp @@ -23,6 +23,7 @@ using OHOS::AAFwk::WantParams; namespace OHOS { namespace AppExecFwk { const std::string ContinuationHandler::ORIGINAL_DEVICE_ID("deviceId"); +const int32_t ABILITY_REJECTED = 29360197; ContinuationHandler::ContinuationHandler( std::weak_ptr &continuationManager, std::weak_ptr &ability) { @@ -30,6 +31,49 @@ ContinuationHandler::ContinuationHandler( continuationManager_ = continuationManager; } +bool ContinuationHandler::HandleStartContinuationWithStack(const sptr &token, + const std::string &deviceId) +{ + APP_LOGI("%{public}s called begin", __func__); + if (token == nullptr) { + APP_LOGE("HandleStartContinuationWithStack token is null."); + return false; + } + if (abilityInfo_ == nullptr) { + APP_LOGE("HandleStartContinuationWithStack abilityInfo is null."); + return false; + } + + abilityInfo_->deviceId = deviceId; + + std::shared_ptr continuationManagerTmp = nullptr; + continuationManagerTmp = continuationManager_.lock(); + if (continuationManagerTmp == nullptr) { + APP_LOGE("HandleStartContinuationWithStack: get continuationManagerTmp is nullptr"); + return false; + } + int32_t status = 0; + // decided to start continuation. Callback to ability. + WantParams wantParams; + if (!continuationManagerTmp->OnContinue(wantParams)) { + APP_LOGI("HandleStartContinuationWithStack: OnContinue failed, BundleName = %{public}s, ClassName= %{public}s", + abilityInfo_->bundleName.c_str(), + abilityInfo_->name.c_str()); + status = ABILITY_REJECTED; + } + + Want want = SetWantParams(wantParams); + want.SetElementName(deviceId, abilityInfo_->bundleName, abilityInfo_->name); + + int result = AAFwk::AbilityManagerClient::GetInstance()->StartContinuation(want, token, status); + if (result != ERR_OK) { + APP_LOGE("startContinuation failed."); + return false; + } + APP_LOGI("%{public}s called end", __func__); + return true; +} + bool ContinuationHandler::HandleStartContinuation(const sptr &token, const std::string &deviceId) { APP_LOGI("%{public}s called begin", __func__); @@ -72,7 +116,7 @@ bool ContinuationHandler::HandleStartContinuation(const sptr &tok Want want = SetWantParams(wantParams); want.SetElementName(deviceId, abilityInfo_->bundleName, abilityInfo_->name); - int result = AAFwk::AbilityManagerClient::GetInstance()->StartContinuation(want, token); + int result = AAFwk::AbilityManagerClient::GetInstance()->StartContinuation(want, token, 0); if (result != 0) { APP_LOGE("distClient_.startContinuation failed."); return false; diff --git a/frameworks/kits/ability/native/src/continuation/distributed/continuation_manager.cpp b/frameworks/kits/ability/native/src/continuation/distributed/continuation_manager.cpp index 31e7d96d03a..dcb69ac750f 100644 --- a/frameworks/kits/ability/native/src/continuation/distributed/continuation_manager.cpp +++ b/frameworks/kits/ability/native/src/continuation/distributed/continuation_manager.cpp @@ -17,6 +17,7 @@ #include "ability.h" #include "ability_continuation_interface.h" +#include "ability_manager_client.h" #include "app_log_wrapper.h" #include "continuation_handler.h" #include "distributed_client.h" @@ -26,8 +27,7 @@ namespace OHOS { namespace AppExecFwk { -const int ContinuationManager::TIMEOUT_MS_WAIT_DMS_SCHEDULE_START_CONTINUATION = 5000; -const int ContinuationManager::TIMEOUT_MS_WAIT_DMS_NOTIFY_CONTINUATION_COMPLETE = 6000; +const int ContinuationManager::TIMEOUT_MS_WAIT_DMS_NOTIFY_CONTINUATION_COMPLETE = 25000; const int ContinuationManager::TIMEOUT_MS_WAIT_REMOTE_NOTIFY_BACK = 6000; ContinuationManager::ContinuationManager() @@ -79,6 +79,58 @@ std::string ContinuationManager::GetOriginalDeviceId() return originalDeviceId_; } +void ContinuationManager::ContinueAbilityWithStack(const std::string &deviceId) +{ + APP_LOGI("%{public}s called begin", __func__); + if (CheckContinuationIllegal()) { + APP_LOGE("ContinueAbilityWithStack failed. Ability not available to continueAbility."); + return; + } + + HandleContinueAbilityWithStack(deviceId); + APP_LOGI("%{public}s called end", __func__); +} + +bool ContinuationManager::HandleContinueAbilityWithStack(const std::string &deviceId) +{ + APP_LOGI("%{public}s called begin", __func__); + + if (!CheckAbilityToken()) { + APP_LOGE("HandleContinueAbilityWithStack checkAbilityToken failed"); + return false; + } + + sptr continueToken = continueToken_; + std::shared_ptr continuationHandler = continuationHandler_.lock(); + if (continuationHandler == nullptr) { + APP_LOGE("HandleContinueAbilityWithStack continuationHandler is nullptr"); + return false; + } + + InitMainHandlerIfNeed(); + auto task = [continuationHandler, continueToken, deviceId]() { + continuationHandler->HandleStartContinuationWithStack(continueToken, deviceId); + }; + if (!mainHandler_->PostTask(task)) { + APP_LOGE("HandleContinueAbilityWithStack postTask failed"); + return false; + } + + APP_LOGI("%{public}s called end", __func__); + return true; +} + +bool ContinuationManager::OnContinue(WantParams &wantParams) +{ + std::shared_ptr ability = nullptr; + ability = ability_.lock(); + if (ability == nullptr) { + APP_LOGE("ContinuationManager::CheckContinuationIllegal failed. ability is nullptr"); + return false; + } + return true; +} + void ContinuationManager::ContinueAbility(bool reversible, const std::string &deviceId) { APP_LOGI("%{public}s called begin", __func__); @@ -102,8 +154,6 @@ void ContinuationManager::ContinueAbility(bool reversible, const std::string &de if (HandleContinueAbility(reversible, deviceId)) { reversible_ = reversible; ChangeProcessState(ProgressState::WAITING_SCHEDULE); - // Wait state change timeout. Restore state - RestoreStateWhenTimeout(TIMEOUT_MS_WAIT_DMS_SCHEDULE_START_CONTINUATION, ProgressState::WAITING_SCHEDULE); } APP_LOGI("%{public}s called end", __func__); } @@ -181,8 +231,8 @@ void ContinuationManager::NotifyCompleteContinuation( const std::string &originDeviceId, int sessionId, bool success, const sptr &reverseScheduler) { APP_LOGI("%{public}s called begin", __func__); - DistributedClient::GetInstance()->NotifyCompleteContinuation( - Str8ToStr16(originDeviceId), sessionId, success, reverseScheduler); + AAFwk::AbilityManagerClient::GetInstance()->NotifyCompleteContinuation( + originDeviceId, sessionId, success); APP_LOGI("%{public}s called end", __func__); } @@ -317,6 +367,10 @@ void ContinuationManager::ChangeProcessState(const ProgressState &newState) void ContinuationManager::ChangeProcessStateToInit() { + if (mainHandler_ != nullptr) { + mainHandler_->RemoveTask("Restore_State_When_Timeout"); + APP_LOGI("Restore_State_When_Timeout task removed"); + } ChangeProcessState(ProgressState::INITIAL); } diff --git a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_client.h b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_client.h old mode 100644 new mode 100755 index 03dd55a23cf..b26d91d8ad9 --- a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_client.h +++ b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_client.h @@ -126,6 +126,7 @@ public: return std::vector>(); }; virtual void NotifyContinuationResult(const int32_t result) {}; + virtual void ContinueAbility(const std::string& deviceId) {}; }; } // namespace AppExecFwk } // namespace OHOS diff --git a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h old mode 100644 new mode 100755 index d94401e2b8b..3930320096e --- a/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h +++ b/frameworks/kits/ability/native/test/mock/include/mock_ability_manager_service.h @@ -117,8 +117,12 @@ public: MOCK_METHOD1(SetMissionStackSetting, int(const StackSetting &stackSetting)); MOCK_METHOD1(GetPendinTerminateAbilityTestgRequestWant, void(int id)); MOCK_METHOD1(GetSystemMemoryAttr, void(AppExecFwk::SystemMemoryAttr &memoryInfo)); - MOCK_METHOD2(StartContinuation, int(const Want &want, const sptr &abilityToken)); - MOCK_METHOD2(NotifyContinuationResult, int(const sptr &abilityToken, const int32_t result)); + MOCK_METHOD3(StartContinuation, int(const Want &want, const sptr &abilityToken, int32_t status)); + MOCK_METHOD2(NotifyContinuationResult, int(int32_t missionId, const int32_t result)); + MOCK_METHOD5(ContinueMission, int(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams)); + MOCK_METHOD2(ContinueAbility, int(const std::string &deviceId, int32_t missionId)); + MOCK_METHOD3(NotifyCompleteContinuation, void(const std::string &deviceId, int32_t sessionId, bool isSuccess)); MOCK_METHOD1(LockMissionForCleanup, int(int32_t missionId)); MOCK_METHOD1(UnlockMissionForCleanup, int(int32_t missionId)); diff --git a/frameworks/kits/ability/native/test/mock/include/mock_ability_scheduler_for_observer.h b/frameworks/kits/ability/native/test/mock/include/mock_ability_scheduler_for_observer.h old mode 100644 new mode 100755 index 81081b90d05..5ebbf94d590 --- a/frameworks/kits/ability/native/test/mock/include/mock_ability_scheduler_for_observer.h +++ b/frameworks/kits/ability/native/test/mock/include/mock_ability_scheduler_for_observer.h @@ -59,6 +59,7 @@ public: MOCK_METHOD1(ScheduleNotifyChange, bool(const Uri &uri)); MOCK_METHOD1(ExecuteBatch, std::vector>(const std::vector> &operation)); MOCK_METHOD1(NotifyContinuationResult, void(const int32_t result)); + MOCK_METHOD1(ContinueAbility, void(const std::string& deviceId)); }; } // namespace AppExecFwk diff --git a/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h b/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h index b7bd262d5a5..fe9fa962d2d 100644 --- a/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h +++ b/frameworks/kits/test/mock/AMS/mock_ability_manager_service.h @@ -96,8 +96,12 @@ public: MOCK_METHOD1(CloseMultiWindow, int(int missionId)); MOCK_METHOD1(SetMissionStackSetting, int(const StackSetting &stackSetting)); MOCK_METHOD1(GetPendinTerminateAbilityTestgRequestWant, void(int id)); - MOCK_METHOD2(StartContinuation, int(const Want &want, const sptr &abilityToken)); - MOCK_METHOD2(NotifyContinuationResult, int(const sptr &abilityToken, const int32_t result)); + MOCK_METHOD3(StartContinuation, int(const Want &want, const sptr &abilityToken, int32_t status)); + MOCK_METHOD2(NotifyContinuationResult, int(int32_t missionId, const int32_t result)); + MOCK_METHOD5(ContinueMission, int(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams)); + MOCK_METHOD2(ContinueAbility, int(const std::string &deviceId, int32_t missionId)); + MOCK_METHOD3(NotifyCompleteContinuation, void(const std::string &deviceId, int32_t sessionId, bool isSuccess)); MOCK_METHOD1(LockMissionForCleanup, int(int32_t missionId)); MOCK_METHOD1(UnlockMissionForCleanup, int(int32_t missionId)); diff --git a/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h b/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h old mode 100644 new mode 100755 index fe52d4dec36..d3149fc9d60 --- a/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h +++ b/frameworks/kits/test/mock/AMS/mock_serviceability_manager_service.h @@ -91,8 +91,12 @@ public: MOCK_METHOD1(SetMissionStackSetting, int(const StackSetting &stackSetting)); MOCK_METHOD1(GetPendinTerminateAbilityTestgRequestWant, void(int id)); MOCK_METHOD1(GetSystemMemoryAttr, void(AppExecFwk::SystemMemoryAttr &memoryInfo)); - MOCK_METHOD2(StartContinuation, int(const Want &want, const sptr &abilityToken)); - MOCK_METHOD2(NotifyContinuationResult, int(const sptr &abilityToken, const int32_t result)); + MOCK_METHOD3(StartContinuation, int(const Want &want, const sptr &abilityToken, int32_t status)); + MOCK_METHOD2(NotifyContinuationResult, int(int32_t missionId, const int32_t result)); + MOCK_METHOD5(ContinueMission, int(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams)); + MOCK_METHOD2(ContinueAbility, int(const std::string &deviceId, int32_t missionId)); + MOCK_METHOD3(NotifyCompleteContinuation, void(const std::string &deviceId, int32_t sessionId, bool isSuccess)); MOCK_METHOD1(LockMissionForCleanup, int(int32_t missionId)); MOCK_METHOD1(UnlockMissionForCleanup, int(int32_t missionId)); diff --git a/interfaces/innerkits/ability_manager/include/ability_manager_client.h b/interfaces/innerkits/ability_manager/include/ability_manager_client.h old mode 100644 new mode 100755 index bea4e389a5f..497662152c7 --- a/interfaces/innerkits/ability_manager/include/ability_manager_client.h +++ b/interfaces/innerkits/ability_manager/include/ability_manager_client.h @@ -465,21 +465,36 @@ public: */ void GetSystemMemoryAttr(AppExecFwk::SystemMemoryAttr &memoryInfo); + /** + * ContinueMission, continue ability from mission center. + * + * @param srcDeviceId, origin deviceId. + * @param dstDeviceId, target deviceId. + * @param missionId, indicates which ability to continue. + * @param callBack, notify result back. + * @param wantParams, extended params. + * @return Returns ERR_OK on success, others on failure. + */ + ErrCode ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callback, AAFwk::WantParams &wantParams); + /** * start continuation. * @param want, used to start a ability. * @param abilityToken, ability token. + * @param status, continue status. * @return Returns ERR_OK on success, others on failure. */ - ErrCode StartContinuation(const Want &want, const sptr &abilityToken); + ErrCode StartContinuation(const Want &want, const sptr &abilityToken, int32_t status); /** - * notify continuation result. - * @param abilityToken, ability token. - * @param result, continuation result. - * @return Returns ERR_OK on success, others on failure. + * notify continuation complete to dms. + * @param deviceId, source device which start a continuation. + * @param sessionId, represent a continuaion. + * @param isSuccess, continuation result. + * @return */ - ErrCode NotifyContinuationResult(const sptr &abilityToken, const int32_t result); + void NotifyCompleteContinuation(const std::string &deviceId, int32_t sessionId, bool isSuccess); /** * @brief Lock specified mission. diff --git a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h old mode 100644 new mode 100755 index dc12965595c..8d85e5ac1a6 --- a/interfaces/innerkits/ability_manager/include/ability_manager_interface.h +++ b/interfaces/innerkits/ability_manager/include/ability_manager_interface.h @@ -504,9 +504,16 @@ public: */ virtual void GetSystemMemoryAttr(AppExecFwk::SystemMemoryAttr &memoryInfo) = 0; - virtual int StartContinuation(const Want &want, const sptr &abilityToken) = 0; + virtual int ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams) = 0; - virtual int NotifyContinuationResult(const sptr &abilityToken, const int32_t result) = 0; + virtual int ContinueAbility(const std::string &deviceId, int32_t missionId) = 0; + + virtual int StartContinuation(const Want &want, const sptr &abilityToken, int32_t status) = 0; + + virtual void NotifyCompleteContinuation(const std::string &deviceId, int32_t sessionId, bool isSuccess) = 0; + + virtual int NotifyContinuationResult(int32_t missionId, const int32_t result) = 0; virtual int LockMissionForCleanup(int32_t missionId) = 0; @@ -757,6 +764,12 @@ public: NOTIFY_CONTINUATION_RESULT = 1102, + NOTIFY_COMPLETE_CONTINUATION = 1103, + + CONTINUE_ABILITY = 1104, + + CONTINUE_MISSION = 1105, + // ipc id for mission manager(1110) REGISTER_REMOTE_MISSION_LISTENER = 1110, UNREGISTER_REMOTE_MISSION_LISTENER = 1111, diff --git a/interfaces/innerkits/ability_manager/include/ability_scheduler_interface.h b/interfaces/innerkits/ability_manager/include/ability_scheduler_interface.h index 1188b4cab16..d66d7020974 100644 --- a/interfaces/innerkits/ability_manager/include/ability_scheduler_interface.h +++ b/interfaces/innerkits/ability_manager/include/ability_scheduler_interface.h @@ -272,6 +272,7 @@ public: virtual Uri DenormalizeUri(const Uri &uri) = 0; virtual std::vector> ExecuteBatch( const std::vector> &operations) = 0; + virtual void ContinueAbility(const std::string& deviceId) = 0; virtual void NotifyContinuationResult(const int32_t result) = 0; enum { // ipc id for scheduling ability to a state of life cycle @@ -353,6 +354,9 @@ public: // ipc id for notify continuation result NOTIFY_CONTINUATION_RESULT, + + // ipc id for continue ability + CONTINUE_ABILITY, }; }; } // namespace AAFwk diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h old mode 100644 new mode 100755 index 2d7dd2080e8..495833df74f --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -486,9 +486,16 @@ public: */ virtual void GetSystemMemoryAttr(AppExecFwk::SystemMemoryAttr &memoryInfo) override; - virtual int StartContinuation(const Want &want, const sptr &abilityToken) override; + virtual int ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams) override; - virtual int NotifyContinuationResult(const sptr &abilityToken, const int32_t result) override; + virtual int ContinueAbility(const std::string &deviceId, int32_t missionId) override; + + virtual int StartContinuation(const Want &want, const sptr &abilityToken, int32_t status) override; + + virtual void NotifyCompleteContinuation(const std::string &deviceId, int32_t sessionId, bool isSuccess) override; + + virtual int NotifyContinuationResult(int32_t missionId, const int32_t result) override; virtual int StartSyncRemoteMissions(const std::string& devId, bool fixConflict, int64_t tag) override; diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h old mode 100644 new mode 100755 index 2fd9f2e9a02..dd416144c42 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -145,23 +145,55 @@ public: virtual int ConnectAbility( const Want &want, const sptr &connect, const sptr &callerToken) override; + /** + * ContinueMission, continue ability from mission center. + * + * @param srcDeviceId, origin deviceId. + * @param dstDeviceId, target deviceId. + * @param missionId, indicates which ability to continue. + * @param callBack, notify result back. + * @param wantParams, extended params. + * @return Returns ERR_OK on success, others on failure. + */ + virtual int ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams) override; + + /** + * ContinueAbility, continue ability to ability. + * + * @param deviceId, target deviceId. + * @param missionId, indicates which ability to continue. + * @return Returns ERR_OK on success, others on failure. + */ + virtual int ContinueAbility(const std::string &deviceId, int32_t missionId) override; + /** * StartContinuation, continue ability to remote. * * @param want, Indicates the ability to start. * @param abilityToken, Caller ability token. + * @param status, continue status. * @return Returns ERR_OK on success, others on failure. */ - virtual int StartContinuation(const Want &want, const sptr &abilityToken) override; + virtual int StartContinuation(const Want &want, const sptr &abilityToken, int32_t status) override; + + /** + * NotifyCompleteContinuation, notify continuation complete to dms. + * @param deviceId, source device which start a continuation. + * @param sessionId, represent a continuaion. + * @param isSuccess, continuation result. + * @return + */ + virtual void NotifyCompleteContinuation(const std::string &deviceId, int32_t sessionId, bool isSuccess) override; /** * NotifyContinuationResult, notify continue result to ability. * - * @param abilityToken, Caller ability token. + * @param missionId, Caller mission id. * @param result, continuation result. * @return Returns ERR_OK on success, others on failure. */ - virtual int NotifyContinuationResult(const sptr &abilityToken, const int32_t result) override; + virtual int NotifyContinuationResult(int32_t missionId, const int32_t result) override; virtual int DisconnectAbility(const sptr &connect) override; diff --git a/services/abilitymgr/include/ability_manager_stub.h b/services/abilitymgr/include/ability_manager_stub.h old mode 100644 new mode 100755 index 17215b29c69..0fb85575a27 --- a/services/abilitymgr/include/ability_manager_stub.h +++ b/services/abilitymgr/include/ability_manager_stub.h @@ -106,7 +106,10 @@ private: int GetSystemMemoryAttrInner(MessageParcel &data, MessageParcel &reply); int ClearUpApplicationDataInner(MessageParcel &data, MessageParcel &reply); + int ContinueMissionInner(MessageParcel &data, MessageParcel &reply); + int ContinueAbilityInner(MessageParcel &data, MessageParcel &reply); int StartContinuationInner(MessageParcel &data, MessageParcel &reply); + int NotifyCompleteContinuationInner(MessageParcel &data, MessageParcel &reply); int NotifyContinuationResultInner(MessageParcel &data, MessageParcel &reply); int LockMissionForCleanupInner(MessageParcel &data, MessageParcel &reply); diff --git a/services/abilitymgr/include/ability_record.h b/services/abilitymgr/include/ability_record.h index ac5cd1fa9ef..ad725c794fb 100644 --- a/services/abilitymgr/include/ability_record.h +++ b/services/abilitymgr/include/ability_record.h @@ -720,7 +720,7 @@ public: bool IsNewVersion(); void SetLaunchReason(const LaunchReason &reason); void SetLastExitReason(const LastExitReason &reason); - + void ContinueAbility(const std::string& deviceId); void NotifyContinuationResult(const int32_t result); std::shared_ptr GetOwnedMissionList() const; diff --git a/services/abilitymgr/include/ability_scheduler_proxy.h b/services/abilitymgr/include/ability_scheduler_proxy.h index be76285f167..ff961fb7429 100644 --- a/services/abilitymgr/include/ability_scheduler_proxy.h +++ b/services/abilitymgr/include/ability_scheduler_proxy.h @@ -281,6 +281,15 @@ public: std::vector> ExecuteBatch( const std::vector> &operations) override; + /** + * ContinueAbility, call ContinueAbility() through proxy project, + * Notify continue ability. + * + * @param The target deviceId. + * @return + */ + void ContinueAbility(const std::string& deviceId) override; + /** * NotifyContinuationResult, call NotifyContinuationResult() through proxy project, * Notify continuation result to ability. diff --git a/services/abilitymgr/include/ability_scheduler_stub.h b/services/abilitymgr/include/ability_scheduler_stub.h index ee4f4a12fec..ea8c9eb581e 100644 --- a/services/abilitymgr/include/ability_scheduler_stub.h +++ b/services/abilitymgr/include/ability_scheduler_stub.h @@ -64,6 +64,7 @@ private: int MutiWinModeChangedInner(MessageParcel &data, MessageParcel &reply); int TopActiveAbilityChangedInner(MessageParcel &data, MessageParcel &reply); int NotifyContinuationResultInner(MessageParcel &data, MessageParcel &reply); + int ContinueAbilityInner(MessageParcel &data, MessageParcel &reply); using RequestFuncType = int (AbilitySchedulerStub::*)(MessageParcel &data, MessageParcel &reply); std::map requestFuncMap_; }; diff --git a/services/abilitymgr/include/lifecycle_deal.h b/services/abilitymgr/include/lifecycle_deal.h index b9345a8a6e2..dfca7756eda 100644 --- a/services/abilitymgr/include/lifecycle_deal.h +++ b/services/abilitymgr/include/lifecycle_deal.h @@ -57,6 +57,7 @@ public: void UpdateConfiguration(const AppExecFwk::Configuration &config); void ForegroundNew(const Want &want, LifeCycleStateInfo &stateInfo); void BackgroundNew(const Want &want, LifeCycleStateInfo &stateInfo); + void ContinueAbility(const std::string& deviceId); void NotifyContinuationResult(const int32_t result); private: diff --git a/services/abilitymgr/src/ability_manager_client.cpp b/services/abilitymgr/src/ability_manager_client.cpp old mode 100644 new mode 100755 index 4e363003208..55862e1f49a --- a/services/abilitymgr/src/ability_manager_client.cpp +++ b/services/abilitymgr/src/ability_manager_client.cpp @@ -628,25 +628,37 @@ void AbilityManagerClient::GetSystemMemoryAttr(AppExecFwk::SystemMemoryAttr &mem return; } -ErrCode AbilityManagerClient::StartContinuation(const Want &want, const sptr &abilityToken) +ErrCode AbilityManagerClient::ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callback, AAFwk::WantParams &wantParams) { + if (srcDeviceId.empty() || dstDeviceId.empty() || callback == nullptr) { + HILOG_ERROR("srcDeviceId or dstDeviceId or callback is null!"); + return ERR_INVALID_VALUE; + } CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); sptr abms = iface_cast(remoteObject_); - int result = abms->StartContinuation(want, abilityToken); - if (result != ERR_OK) { - HILOG_ERROR("StartContinuation failed, notify caller"); - NotifyContinuationResult(abilityToken, result); - } + int result = abms->ContinueMission(srcDeviceId, dstDeviceId, missionId, callback, wantParams); return result; } -ErrCode AbilityManagerClient::NotifyContinuationResult(const sptr &abilityToken, const int32_t result) +ErrCode AbilityManagerClient::StartContinuation(const Want &want, const sptr &abilityToken, + int32_t status) { CHECK_REMOTE_OBJECT_AND_RETURN(remoteObject_, ABILITY_SERVICE_NOT_CONNECTED); sptr abms = iface_cast(remoteObject_); - return abms->NotifyContinuationResult(abilityToken, result); + int result = abms->StartContinuation(want, abilityToken, status); + return result; +} + +void AbilityManagerClient::NotifyCompleteContinuation(const std::string &deviceId, + int32_t sessionId, bool isSuccess) +{ + CHECK_REMOTE_OBJECT(remoteObject_); + + sptr abms = iface_cast(remoteObject_); + abms->NotifyCompleteContinuation(deviceId, sessionId, isSuccess); } ErrCode AbilityManagerClient::LockMissionForCleanup(int32_t missionId) diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp old mode 100644 new mode 100755 index 3fc73c92000..e4582d5bc56 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -1503,7 +1503,70 @@ void AbilityManagerProxy::GetSystemMemoryAttr(AppExecFwk::SystemMemoryAttr &memo memoryInfo = *remoteRetsult; } -int AbilityManagerProxy::StartContinuation(const Want &want, const sptr &abilityToken) +int AbilityManagerProxy::ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!WriteInterfaceToken(data)) { + return INNER_ERR; + } + if (!data.WriteString(srcDeviceId)) { + HILOG_ERROR("srcDeviceId write failed."); + return INNER_ERR; + } + if (!data.WriteString(dstDeviceId)) { + HILOG_ERROR("dstDeviceId write failed."); + return INNER_ERR; + } + if (!data.WriteInt32(missionId)) { + HILOG_ERROR("missionId write failed."); + return INNER_ERR; + } + if (!data.WriteRemoteObject(callBack)) { + HILOG_ERROR("callBack write failed."); + return INNER_ERR; + } + if (!data.WriteParcelable(&wantParams)) { + HILOG_ERROR("wantParams write failed."); + return INNER_ERR; + } + + auto error = Remote()->SendRequest(IAbilityManager::CONTINUE_MISSION, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("Send request error: %{public}d", error); + return error; + } + return reply.ReadInt32(); +} + +int AbilityManagerProxy::ContinueAbility(const std::string &deviceId, int32_t missionId) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!WriteInterfaceToken(data)) { + return INNER_ERR; + } + if (!data.WriteString(deviceId)) { + HILOG_ERROR("deviceId write failed."); + return INNER_ERR; + } + if (!data.WriteInt32(missionId)) { + HILOG_ERROR("missionId write failed."); + return INNER_ERR; + } + + auto error = Remote()->SendRequest(IAbilityManager::CONTINUE_ABILITY, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("Send request error: %{public}d", error); + return error; + } + return reply.ReadInt32(); +} + +int AbilityManagerProxy::StartContinuation(const Want &want, const sptr &abilityToken, int32_t status) { MessageParcel data; MessageParcel reply; @@ -1519,7 +1582,10 @@ int AbilityManagerProxy::StartContinuation(const Want &want, const sptrSendRequest(IAbilityManager::START_CONTINUATION, data, reply, option); if (error != NO_ERROR) { HILOG_ERROR("Send request error: %{public}d", error); @@ -1528,7 +1594,35 @@ int AbilityManagerProxy::StartContinuation(const Want &want, const sptr &abilityToken, const int32_t result) +void AbilityManagerProxy::NotifyCompleteContinuation(const std::string &deviceId, int32_t sessionId, bool isSuccess) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!WriteInterfaceToken(data)) { + return; + } + if (!data.WriteString(deviceId)) { + HILOG_ERROR("deviceId write failed."); + return; + } + if (!data.WriteInt32(sessionId)) { + HILOG_ERROR("sessionId write failed."); + return; + } + if (!data.WriteBool(isSuccess)) { + HILOG_ERROR("result write failed."); + return; + } + + auto error = Remote()->SendRequest(IAbilityManager::NOTIFY_COMPLETE_CONTINUATION, data, reply, option); + if (error != NO_ERROR) { + HILOG_ERROR("Send request error: %{public}d", error); + return; + } +} + +int AbilityManagerProxy::NotifyContinuationResult(int32_t missionId, const int32_t result) { MessageParcel data; MessageParcel reply; @@ -1536,8 +1630,8 @@ int AbilityManagerProxy::NotifyContinuationResult(const sptr &abi if (!WriteInterfaceToken(data)) { return INNER_ERR; } - if (!data.WriteParcelable(abilityToken)) { - HILOG_ERROR("abilityToken write failed."); + if (!data.WriteInt32(missionId)) { + HILOG_ERROR("missionId write failed."); return INNER_ERR; } if (!data.WriteInt32(result)) { diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 268b83f1170..2270924e6f5 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -825,7 +825,35 @@ int AbilityManagerService::DisconnectRemoteAbility(const sptr &co return dms->DisconnectRemoteAbility(connect); } -int AbilityManagerService::StartContinuation(const Want &want, const sptr &abilityToken) +int AbilityManagerService::ContinueMission(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams) +{ + HILOG_INFO("ContinueMission srcDeviceId: %{public}s, dstDeviceId: %{public}s, missionId: %{public}d", + srcDeviceId.c_str(), dstDeviceId.c_str(), missionId); + + sptr dmsProxy = GetDmsProxy(); + if (dmsProxy == nullptr) { + HILOG_ERROR("ContinueMission failed to get dms."); + return ERR_INVALID_VALUE; + } + return dmsProxy->ContinueMission(srcDeviceId, dstDeviceId, missionId, callBack, wantParams); +} + +int AbilityManagerService::ContinueAbility(const std::string &deviceId, int32_t missionId) +{ + HILOG_INFO("ContinueAbility deviceId : %{public}s, missionId = %{public}d.", deviceId.c_str(), missionId); + + sptr abilityToken = GetAbilityTokenByMissionId(missionId); + CHECK_POINTER_AND_RETURN(abilityToken, ERR_INVALID_VALUE); + + auto abilityRecord = Token::GetAbilityRecordByToken(abilityToken); + CHECK_POINTER_AND_RETURN(abilityRecord, ERR_INVALID_VALUE); + + abilityRecord->ContinueAbility(deviceId); + return ERR_OK; +} + +int AbilityManagerService::StartContinuation(const Want &want, const sptr &abilityToken, int32_t status) { HILOG_INFO("Start Continuation."); if (!CheckIfOperateRemote(want)) { @@ -841,12 +869,37 @@ int AbilityManagerService::StartContinuation(const Want &want, const sptrStartContinuation(want, abilityToken, appUid); + int32_t missionId = GetMissionIdByAbilityToken(abilityToken); + if (missionId == -1) { + HILOG_ERROR("AbilityManagerService::StartContinuation failed to get missionId."); + return ERR_INVALID_VALUE; + } + auto result = dmsProxy->StartContinuation(want, missionId, appUid, status); + if (result != ERR_OK) { + HILOG_ERROR("StartContinuation failed, result = %{public}d, notify caller", result); + NotifyContinuationResult(missionId, result); + } + return result; +} + +void AbilityManagerService::NotifyCompleteContinuation(const std::string &deviceId, + int32_t sessionId, bool isSuccess) +{ + HILOG_INFO("NotifyCompleteContinuation."); + + sptr dmsProxy = GetDmsProxy(); + if (dmsProxy == nullptr) { + HILOG_ERROR("AbilityManagerService::NotifyCompleteContinuation failed to get dms."); + return; + } + dmsProxy->NotifyCompleteContinuation(Str8ToStr16(deviceId), sessionId, isSuccess); } -int AbilityManagerService::NotifyContinuationResult(const sptr &abilityToken, const int32_t result) +int AbilityManagerService::NotifyContinuationResult(int32_t missionId, const int32_t result) { HILOG_INFO("Notify Continuation Result : %{public}d.", result); + + auto abilityToken = GetAbilityTokenByMissionId(missionId); CHECK_POINTER_AND_RETURN(abilityToken, ERR_INVALID_VALUE); auto abilityRecord = Token::GetAbilityRecordByToken(abilityToken); diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp old mode 100644 new mode 100755 index ab3815f6b25..392337f4b90 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -68,7 +68,10 @@ void AbilityManagerStub::FirstStepInit() requestFuncMap_[STOP_SERVICE_ABILITY] = &AbilityManagerStub::StopServiceAbilityInner; requestFuncMap_[DUMP_STATE] = &AbilityManagerStub::DumpStateInner; requestFuncMap_[START_ABILITY_FOR_SETTINGS] = &AbilityManagerStub::StartAbilityForSettingsInner; + requestFuncMap_[CONTINUE_MISSION] = &AbilityManagerStub::ContinueMissionInner; + requestFuncMap_[CONTINUE_ABILITY] = &AbilityManagerStub::ContinueAbilityInner; requestFuncMap_[START_CONTINUATION] = &AbilityManagerStub::StartContinuationInner; + requestFuncMap_[NOTIFY_COMPLETE_CONTINUATION] = &AbilityManagerStub::NotifyCompleteContinuationInner; requestFuncMap_[NOTIFY_CONTINUATION_RESULT] = &AbilityManagerStub::NotifyContinuationResultInner; requestFuncMap_[MOVE_MISSION_TO_FLOATING_STACK] = &AbilityManagerStub::MoveMissionToFloatingStackInner; requestFuncMap_[MOVE_MISSION_TO_SPLITSCREEN_STACK] = &AbilityManagerStub::MoveMissionToSplitScreenStackInner; @@ -904,35 +907,73 @@ int AbilityManagerStub::GetSystemMemoryAttrInner(MessageParcel &data, MessagePar return NO_ERROR; } +int AbilityManagerStub::ContinueMissionInner(MessageParcel &data, MessageParcel &reply) +{ + std::string srcDeviceId = data.ReadString(); + std::string dstDeviceId = data.ReadString(); + int32_t missionId = data.ReadInt32(); + sptr callback = data.ReadRemoteObject(); + if (callback == nullptr) { + HILOG_ERROR("ContinueMissionInner callback readParcelable failed!"); + return ERR_NULL_OBJECT; + } + std::unique_ptr wantParams(data.ReadParcelable()); + if (wantParams == nullptr) { + HILOG_ERROR("ContinueMissionInner wantParams readParcelable failed!"); + return ERR_NULL_OBJECT; + } + int32_t result = ContinueMission(srcDeviceId, dstDeviceId, missionId, callback, *wantParams); + HILOG_INFO("ContinueMissionInner result = %{public}d", result); + return result; +} + +int AbilityManagerStub::ContinueAbilityInner(MessageParcel &data, MessageParcel &reply) +{ + std::string deviceId = data.ReadString(); + int32_t missionId = data.ReadInt32(); + int32_t result = ContinueAbility(deviceId, missionId); + HILOG_INFO("ContinueAbilityInner result = %{public}d", result); + return result; +} + int AbilityManagerStub::StartContinuationInner(MessageParcel &data, MessageParcel &reply) { std::unique_ptr want(data.ReadParcelable()); if (want == nullptr) { - HILOG_ERROR("DistributedSchedStub: StartContinuationInner want readParcelable failed!"); + HILOG_ERROR("StartContinuationInner want readParcelable failed!"); return ERR_NULL_OBJECT; } sptr abilityToken = data.ReadParcelable(); if (abilityToken == nullptr) { - HILOG_ERROR("DistributedSchedStub: StartContinuationInner abilityToken readParcelable failed!"); + HILOG_ERROR("AbilityManagerStub: StartContinuationInner abilityToken readParcelable failed!"); return ERR_NULL_OBJECT; } - int32_t result = StartContinuation(*want, abilityToken); - HILOG_INFO("DistributedSchedStub: StartContinuationInner result = %{public}d", result); + int32_t status = data.ReadInt32(); + int32_t result = StartContinuation(*want, abilityToken, status); + HILOG_INFO("StartContinuationInner result = %{public}d", result); + return result; } +int AbilityManagerStub::NotifyCompleteContinuationInner(MessageParcel &data, MessageParcel &reply) +{ + std::string devId = data.ReadString(); + int32_t sessionId = data.ReadInt32(); + bool isSuccess = data.ReadBool(); + + NotifyCompleteContinuation(devId, sessionId, isSuccess); + HILOG_INFO("NotifyCompleteContinuationInner end"); + return NO_ERROR; +} + int AbilityManagerStub::NotifyContinuationResultInner(MessageParcel &data, MessageParcel &reply) { - sptr abilityToken = data.ReadParcelable(); - if (abilityToken == nullptr) { - HILOG_ERROR("DistributedSchedStub: NotifyContinuationResultInner abilityToken readParcelable failed!"); - return ERR_NULL_OBJECT; - } - int continuationResult = data.ReadInt32(); + int32_t missionId = data.ReadInt32(); + int32_t continuationResult = data.ReadInt32(); - int32_t result = NotifyContinuationResult(abilityToken, continuationResult); - HILOG_INFO("DistributedSchedStub: StartContinuationInner result = %{public}d", result); + int32_t result = NotifyContinuationResult(missionId, continuationResult); + HILOG_INFO("StartContinuationInner result = %{public}d", result); return result; } diff --git a/services/abilitymgr/src/ability_record.cpp b/services/abilitymgr/src/ability_record.cpp index c779d7f6e70..d07294c6092 100644 --- a/services/abilitymgr/src/ability_record.cpp +++ b/services/abilitymgr/src/ability_record.cpp @@ -1331,5 +1331,13 @@ void AbilityRecordNew::BackgroundNew(const Closure &task) currentState_ = AbilityState::BACKGROUNDING_NEW; lifecycleDeal_->BackgroundNew(want_, lifeCycleStateInfo_); } + +void AbilityRecord::ContinueAbility(const std::string& deviceId) +{ + HILOG_INFO("ContinueAbility."); + CHECK_POINTER(lifecycleDeal_); + + lifecycleDeal_->ContinueAbility(deviceId); +} } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/src/ability_scheduler_proxy.cpp b/services/abilitymgr/src/ability_scheduler_proxy.cpp old mode 100644 new mode 100755 index 0ac149a246e..b091bb8ae6a --- a/services/abilitymgr/src/ability_scheduler_proxy.cpp +++ b/services/abilitymgr/src/ability_scheduler_proxy.cpp @@ -933,7 +933,27 @@ std::vector> AbilitySchedulerProx return results; } -void AbilitySchedulerProxy::NotifyContinuationResult(const int32_t result) +void AbilitySchedulerProxy::ContinueAbility(const std::string& deviceId) +{ + MessageParcel data; + MessageParcel reply; + MessageOption option; + if (!WriteInterfaceToken(data)) { + HILOG_ERROR("ContinueAbility fail to write token"); + return; + } + if (!data.WriteString(deviceId)) { + HILOG_ERROR("ContinueAbility fail to write deviceId"); + return; + } + + int32_t err = Remote()->SendRequest(IAbilityScheduler::CONTINUE_ABILITY, data, reply, option); + if (err != NO_ERROR) { + HILOG_ERROR("ContinueAbility fail to SendRequest. err: %d", err); + } +} + +void AbilitySchedulerProxy::NotifyContinuationResult(int32_t result) { MessageParcel data; MessageParcel reply; diff --git a/services/abilitymgr/src/ability_scheduler_stub.cpp b/services/abilitymgr/src/ability_scheduler_stub.cpp index 40336ee069d..aa0e7774230 100644 --- a/services/abilitymgr/src/ability_scheduler_stub.cpp +++ b/services/abilitymgr/src/ability_scheduler_stub.cpp @@ -58,6 +58,7 @@ AbilitySchedulerStub::AbilitySchedulerStub() requestFuncMap_[SCHEDULE_EXECUTEBATCH] = &AbilitySchedulerStub::ExecuteBatchInner; requestFuncMap_[TOP_ACTIVE_ABILITY_CHANGED] = &AbilitySchedulerStub::TopActiveAbilityChangedInner; requestFuncMap_[NOTIFY_CONTINUATION_RESULT] = &AbilitySchedulerStub::NotifyContinuationResultInner; + requestFuncMap_[CONTINUE_ABILITY] = &AbilitySchedulerStub::ContinueAbilityInner; } AbilitySchedulerStub::~AbilitySchedulerStub() @@ -557,6 +558,13 @@ int AbilitySchedulerStub::ExecuteBatchInner(MessageParcel &data, MessageParcel & return NO_ERROR; } +int AbilitySchedulerStub::ContinueAbilityInner(MessageParcel &data, MessageParcel &reply) +{ + std::string deviceId = data.ReadString(); + ContinueAbility(deviceId); + return NO_ERROR; +} + int AbilitySchedulerStub::NotifyContinuationResultInner(MessageParcel &data, MessageParcel &reply) { int32_t result = data.ReadInt32(); diff --git a/services/abilitymgr/src/lifecycle_deal.cpp b/services/abilitymgr/src/lifecycle_deal.cpp old mode 100644 new mode 100755 index 4929f774d97..3e5160e9f9a --- a/services/abilitymgr/src/lifecycle_deal.cpp +++ b/services/abilitymgr/src/lifecycle_deal.cpp @@ -153,6 +153,13 @@ void LifecycleDeal::BackgroundNew(const Want &want, LifeCycleStateInfo &stateInf abilityScheduler->ScheduleAbilityTransaction(want, stateInfo); } +void LifecycleDeal::ContinueAbility(const std::string& deviceId) +{ + HILOG_INFO("ContinueAbility."); + CHECK_POINTER(abilityScheduler_); + abilityScheduler_->ContinueAbility(deviceId); +} + void LifecycleDeal::NotifyContinuationResult(const int32_t result) { HILOG_INFO("NotifyContinuationResult."); diff --git a/services/abilitymgr/test/mock/libs/aakit/include/ability_scheduler.h b/services/abilitymgr/test/mock/libs/aakit/include/ability_scheduler.h old mode 100644 new mode 100755 index 3c430a8a1b8..53d3ee13b37 --- a/services/abilitymgr/test/mock/libs/aakit/include/ability_scheduler.h +++ b/services/abilitymgr/test/mock/libs/aakit/include/ability_scheduler.h @@ -99,6 +99,8 @@ public: }; virtual void NotifyContinuationResult(const int32_t result) override {}; + virtual void ContinueAbility(const std::string& deviceId) override + {}; private: AbilityResult result_; }; diff --git a/services/abilitymgr/test/mock/libs/ability_scheduler_mock/ability_scheduler_mock.h b/services/abilitymgr/test/mock/libs/ability_scheduler_mock/ability_scheduler_mock.h old mode 100644 new mode 100755 index d25009f1d57..3d9b8a8f2c7 --- a/services/abilitymgr/test/mock/libs/ability_scheduler_mock/ability_scheduler_mock.h +++ b/services/abilitymgr/test/mock/libs/ability_scheduler_mock/ability_scheduler_mock.h @@ -42,6 +42,7 @@ public: MOCK_METHOD1(NotifyTopActiveAbilityChanged, void(bool flag)); MOCK_METHOD2(NotifyMultiWinModeChanged, void(int32_t winModeKey, bool flag)); MOCK_METHOD1(NotifyContinuationResult, void(const int32_t result)); + MOCK_METHOD1(ContinueAbility, void(const std::string& deviceId)); int InvokeSendRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_proxy_test.cpp b/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_proxy_test.cpp index aeb06172e5d..68a16ff1078 100644 --- a/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_proxy_test.cpp +++ b/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_proxy_test.cpp @@ -592,7 +592,7 @@ HWTEST_F(AbilityManagerProxyTest, AbilityManagerProxy_028, TestSize.Level0) .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerStubMock::InvokeSendRequest)); Want want; sptr abilityToken = nullptr; - int res = proxy_->StartContinuation(want, abilityToken); + int res = proxy_->StartContinuation(want, abilityToken, 0); EXPECT_EQ(res, NO_ERROR); EXPECT_EQ(IAbilityManager::START_CONTINUATION, mock_->code_); } @@ -610,7 +610,7 @@ HWTEST_F(AbilityManagerProxyTest, AbilityManagerProxy_029, TestSize.Level0) .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerStubMock::InvokeErrorSendRequest)); const Want want; sptr abilityToken = nullptr; - int res = proxy_->StartContinuation(want, abilityToken); + int res = proxy_->StartContinuation(want, abilityToken, 0); EXPECT_EQ(IAbilityManager::START_CONTINUATION, mock_->code_); EXPECT_NE(res, NO_ERROR); @@ -627,9 +627,8 @@ HWTEST_F(AbilityManagerProxyTest, AbilityManagerProxy_030, TestSize.Level0) EXPECT_CALL(*mock_, SendRequest(_, _, _, _)) .Times(1) .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerStubMock::InvokeSendRequest)); - sptr abilityToken = nullptr; int32_t result = 0; - int res = proxy_->NotifyContinuationResult(abilityToken, result); + int res = proxy_->NotifyContinuationResult(0, result); EXPECT_EQ(res, NO_ERROR); EXPECT_EQ(IAbilityManager::NOTIFY_CONTINUATION_RESULT, mock_->code_); } @@ -645,9 +644,8 @@ HWTEST_F(AbilityManagerProxyTest, AbilityManagerProxy_031, TestSize.Level0) EXPECT_CALL(*mock_, SendRequest(_, _, _, _)) .Times(1) .WillOnce(Invoke(mock_.GetRefPtr(), &AbilityManagerStubMock::InvokeErrorSendRequest)); - sptr abilityToken = nullptr; int32_t result = 0; - int res = proxy_->NotifyContinuationResult(abilityToken, result); + int res = proxy_->NotifyContinuationResult(0, result); EXPECT_EQ(IAbilityManager::NOTIFY_CONTINUATION_RESULT, mock_->code_); EXPECT_NE(res, NO_ERROR); diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h old mode 100644 new mode 100755 index 3307bcab023..b299300fb70 --- a/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_proxy_test/ability_manager_stub_mock.h @@ -331,8 +331,12 @@ public: MOCK_METHOD2(UnregisterCancelListener, void(const sptr &sender, const sptr &receiver)); MOCK_METHOD2(GetPendingRequestWant, int(const sptr &target, std::shared_ptr &want)); MOCK_METHOD1(GetSystemMemoryAttr, void(AppExecFwk::SystemMemoryAttr &memoryInfo)); - MOCK_METHOD2(StartContinuation, int(const Want &want, const sptr &abilityToken)); - MOCK_METHOD2(NotifyContinuationResult, int(const sptr &abilityToken, const int32_t result)); + MOCK_METHOD3(StartContinuation, int(const Want &want, const sptr &abilityToken, int32_t status)); + MOCK_METHOD2(NotifyContinuationResult, int(int32_t missionId, const int32_t result)); + MOCK_METHOD5(ContinueMission, int(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams)); + MOCK_METHOD2(ContinueAbility, int(const std::string &deviceId, int32_t missionId)); + MOCK_METHOD3(NotifyCompleteContinuation, void(const std::string &deviceId, int32_t sessionId, bool isSuccess)); MOCK_METHOD1(LockMissionForCleanup, int(int32_t missionId)); MOCK_METHOD1(UnlockMissionForCleanup, int(int32_t missionId)); diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_service_test/ability_manager_service_test.cpp b/services/abilitymgr/test/unittest/phone/ability_manager_service_test/ability_manager_service_test.cpp old mode 100644 new mode 100755 index 130138a8845..6be88291273 --- a/services/abilitymgr/test/unittest/phone/ability_manager_service_test/ability_manager_service_test.cpp +++ b/services/abilitymgr/test/unittest/phone/ability_manager_service_test/ability_manager_service_test.cpp @@ -1596,7 +1596,7 @@ HWTEST_F(AbilityManagerServiceTest, startContinuation_001, TestSize.Level1) want.SetElement(element); sptr abilityToken = new (std::nothrow) MockAbilityToken(); - auto result = abilityMs_->StartContinuation(want, abilityToken); + auto result = abilityMs_->StartContinuation(want, abilityToken, 0); EXPECT_EQ(OHOS::ERR_INVALID_VALUE, result); } @@ -1616,7 +1616,7 @@ HWTEST_F(AbilityManagerServiceTest, startContinuation_002, TestSize.Level1) want.SetElement(element); sptr abilityToken = new (std::nothrow) MockAbilityToken(); - auto result = abilityMs_->StartContinuation(want, abilityToken); + auto result = abilityMs_->StartContinuation(want, abilityToken, 0); EXPECT_NE(OHOS::ERR_OK, result); } @@ -1633,7 +1633,7 @@ HWTEST_F(AbilityManagerServiceTest, startContinuation_003, TestSize.Level1) want.SetElement(element); sptr abilityToken = nullptr; - auto result = abilityMs_->StartContinuation(want, abilityToken); + auto result = abilityMs_->StartContinuation(want, abilityToken, 0); EXPECT_NE(OHOS::ERR_OK, result); } @@ -1649,23 +1649,23 @@ HWTEST_F(AbilityManagerServiceTest, startContinuation_004, TestSize.Level1) ElementName element("", "com.ix.hiMusic", "MusicAbility"); want.SetElement(element); sptr abilityToken = new (std::nothrow) MockAbilityToken(); - auto result = abilityMs_->StartContinuation(want, abilityToken); + auto result = abilityMs_->StartContinuation(want, abilityToken, 0); EXPECT_NE(OHOS::ERR_OK, result); ElementName element1("device", "", "MusicAbility"); want.SetElement(element1); - auto result1 = abilityMs_->StartContinuation(want, abilityToken); + auto result1 = abilityMs_->StartContinuation(want, abilityToken, 0); EXPECT_NE(OHOS::ERR_OK, result1); ElementName element2("device", "com.ix.hiMusic", ""); want.SetElement(element2); - auto result2 = abilityMs_->StartContinuation(want, abilityToken); + auto result2 = abilityMs_->StartContinuation(want, abilityToken, 0); EXPECT_NE(OHOS::ERR_OK, result2); } /** * @tc.name: NotifyContinuationResult_001 - * @tc.desc: test NotifyContinuationResult when abilityRecord not exist + * @tc.desc: test NotifyContinuationResult when abilityToken not exist * @tc.type: FUNC * @tc.require: AR000GI8IL */ @@ -1675,50 +1675,29 @@ HWTEST_F(AbilityManagerServiceTest, NotifyContinuationResult_001, TestSize.Level ElementName element("device", "com.ix.musicService", "MusicService"); want.SetElement(element); - std::shared_ptr ability = nullptr; - const sptr abilityToken = new Token(ability); + int32_t missionId = 0; int32_t isSuccess = 0; - auto result = abilityMs_->NotifyContinuationResult(abilityToken, isSuccess); + auto result = abilityMs_->NotifyContinuationResult(missionId, isSuccess); EXPECT_EQ(OHOS::ERR_INVALID_VALUE, result); } /** * @tc.name: NotifyContinuationResult_002 - * @tc.desc: test NotifyContinuationResult when abilityToken is null - * @tc.type: FUNC - * @tc.require: AR000GI8IL - */ -HWTEST_F(AbilityManagerServiceTest, NotifyContinuationResult_002, TestSize.Level1) -{ - Want want; - ElementName element("device", "com.ix.musicService", "MusicService"); - want.SetElement(element); - - sptr abilityToken = nullptr; - int32_t isSuccess = 0; - auto result = abilityMs_->NotifyContinuationResult(abilityToken, isSuccess); - EXPECT_EQ(OHOS::ERR_INVALID_VALUE, result); -} - -/** - * @tc.name: NotifyContinuationResult_003 * @tc.desc: test NotifyContinuationResult * @tc.type: FUNC * @tc.require: AR000GI8IL */ -HWTEST_F(AbilityManagerServiceTest, NotifyContinuationResult_003, TestSize.Level1) +HWTEST_F(AbilityManagerServiceTest, NotifyContinuationResult_002, TestSize.Level1) { Want want; ElementName element("device", "com.ix.hiMusic", "MusicAbility"); want.SetElement(element); auto result = StartAbility(want); EXPECT_EQ(OHOS::ERR_OK, result); - auto stackManager = abilityMs_->GetStackManager(); - auto ability = stackManager->GetCurrentTopAbility(); - auto abilityToken = ability->GetToken(); + auto topMissionId = abilityMs_->GetStackManager()->GetTopMissionRecord()->GetMissionRecordId(); int32_t isSuccess = 0; - result = abilityMs_->NotifyContinuationResult(abilityToken, isSuccess); + result = abilityMs_->NotifyContinuationResult(topMissionId, isSuccess); EXPECT_EQ(OHOS::ERR_OK, result); } diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h old mode 100644 new mode 100755 index f9c2624c9fe..04322ae0b76 --- a/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_impl_mock.h @@ -47,6 +47,13 @@ public: MOCK_METHOD1(GetSystemMemoryAttr, void(AppExecFwk::SystemMemoryAttr &memoryInfo)); MOCK_METHOD2(GetWantSenderInfo, int(const sptr &target, std::shared_ptr &info)); + MOCK_METHOD3(StartContinuation, int(const Want &want, const sptr &abilityToken, int32_t status)); + MOCK_METHOD2(NotifyContinuationResult, int(int32_t missionId, const int32_t result)); + MOCK_METHOD5(ContinueMission, int(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams)); + MOCK_METHOD2(ContinueAbility, int(const std::string &deviceId, int32_t missionId)); + MOCK_METHOD3(NotifyCompleteContinuation, void(const std::string &deviceId, int32_t sessionId, bool isSuccess)); + int InvokeSendRequest(uint32_t code, MessageParcel &data, MessageParcel &reply, MessageOption &option) { code_ = code; @@ -297,14 +304,6 @@ public: { return 0; } - virtual int StartContinuation(const Want &want, const sptr &abilityToken) override - { - return 0; - } - virtual int NotifyContinuationResult(const sptr &abilityToken, const int32_t result) override - { - return 0; - } virtual int LockMissionForCleanup(int32_t missionId) override { return 0; diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_test.cpp b/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_test.cpp index 1180def500a..b95f55bd057 100644 --- a/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_test.cpp +++ b/services/abilitymgr/test/unittest/phone/ability_manager_stub_test/ability_manager_stub_test.cpp @@ -449,121 +449,5 @@ HWTEST_F(AbilityManagerStubTest, AbilityManagerStub_017, TestSize.Level1) EXPECT_EQ(res, NO_ERROR); } - -/** - * @tc.name: AbilityManagerStub_018 - * @tc.desc: test OnRemoteRequest from StartContinuation - * @tc.type: FUNC - * @tc.require: AR000GI8IL - */ -HWTEST_F(AbilityManagerStubTest, AbilityManagerStub_018, TestSize.Level0) -{ - MessageParcel data; - MessageParcel reply; - MessageOption option; - - Want want; - sptr abilityToken = new (std::nothrow) AppExecFwk::MockAbilityToken(); - int callerUid = 0; - WriteInterfaceToken(data); - data.WriteParcelable(&want); - data.WriteParcelable(abilityToken); - data.WriteInt32(callerUid); - int res = stub_->OnRemoteRequest(IAbilityManager::START_CONTINUATION, data, reply, option); - - EXPECT_EQ(res, NO_ERROR); -} - -/** - * @tc.name: AbilityManagerStub_019 - * @tc.desc: test OnRemoteRequest from StartContinuation when abilityToken is null - * @tc.type: FUNC - * @tc.require: AR000GI8IL - */ -HWTEST_F(AbilityManagerStubTest, AbilityManagerStub_019, TestSize.Level0) -{ - MessageParcel data; - MessageParcel reply; - MessageOption option; - - Want want; - sptr abilityToken = nullptr; - int callerUid = 0; - WriteInterfaceToken(data); - data.WriteParcelable(&want); - data.WriteParcelable(abilityToken); - data.WriteInt32(callerUid); - int res = stub_->OnRemoteRequest(IAbilityManager::START_CONTINUATION, data, reply, option); - - EXPECT_NE(res, NO_ERROR); -} - -/** - * @tc.name: AbilityManagerStub_020 - * @tc.desc: test OnRemoteRequest from StartContinuation when want is null - * @tc.type: FUNC - * @tc.require: AR000GI8IL - */ -HWTEST_F(AbilityManagerStubTest, AbilityManagerStub_020, TestSize.Level0) -{ - MessageParcel data; - MessageParcel reply; - MessageOption option; - - - sptr abilityToken = new (std::nothrow) AppExecFwk::MockAbilityToken(); - int callerUid = 0; - WriteInterfaceToken(data); - data.WriteParcelable(nullptr); - data.WriteParcelable(abilityToken); - data.WriteInt32(callerUid); - int res = stub_->OnRemoteRequest(IAbilityManager::START_CONTINUATION, data, reply, option); - - EXPECT_NE(res, NO_ERROR); -} - -/** - * @tc.name: AbilityManagerStub_021 - * @tc.desc: test OnRemoteRequest from NotifyContinuationResult when abilityToken is null - * @tc.type: FUNC - * @tc.require: AR000GI8IL - */ -HWTEST_F(AbilityManagerStubTest, AbilityManagerStub_021, TestSize.Level0) -{ - MessageParcel data; - MessageParcel reply; - MessageOption option; - - sptr abilityToken = nullptr; - int32_t result = 0; - WriteInterfaceToken(data); - data.WriteParcelable(abilityToken); - data.WriteInt32(result); - int res = stub_->OnRemoteRequest(IAbilityManager::NOTIFY_CONTINUATION_RESULT, data, reply, option); - - EXPECT_NE(res, NO_ERROR); -} - -/** - * @tc.name: AbilityManagerStub_022 - * @tc.desc: test OnRemoteRequest from NotifyContinuationResult - * @tc.type: FUNC - * @tc.require: AR000GI8IL - */ -HWTEST_F(AbilityManagerStubTest, AbilityManagerStub_022, TestSize.Level0) -{ - MessageParcel data; - MessageParcel reply; - MessageOption option; - - sptr abilityToken = new (std::nothrow) AppExecFwk::MockAbilityToken(); - int32_t result = 0; - WriteInterfaceToken(data); - data.WriteParcelable(abilityToken); - data.WriteInt32(result); - int res = stub_->OnRemoteRequest(IAbilityManager::NOTIFY_CONTINUATION_RESULT, data, reply, option); - - EXPECT_EQ(res, NO_ERROR); -} } // namespace AAFwk -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h b/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h old mode 100644 new mode 100755 index c0ce32c53be..4fa5ca90f11 --- a/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_manager_test/ability_manager_stub_mock.h @@ -114,6 +114,12 @@ public: { return 0; } + MOCK_METHOD3(StartContinuation, int(const Want &want, const sptr &abilityToken, int32_t status)); + MOCK_METHOD2(NotifyContinuationResult, int(int32_t missionId, const int32_t result)); + MOCK_METHOD5(ContinueMission, int(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams)); + MOCK_METHOD2(ContinueAbility, int(const std::string &deviceId, int32_t missionId)); + MOCK_METHOD3(NotifyCompleteContinuation, void(const std::string &deviceId, int32_t sessionId, bool isSuccess)); }; } // namespace AAFwk } // namespace OHOS diff --git a/services/abilitymgr/test/unittest/phone/ability_scheduler_stub_test/ability_schedule_stub_mock.h b/services/abilitymgr/test/unittest/phone/ability_scheduler_stub_test/ability_schedule_stub_mock.h old mode 100644 new mode 100755 index 5cab08c0801..1237f1c8ec8 --- a/services/abilitymgr/test/unittest/phone/ability_scheduler_stub_test/ability_schedule_stub_mock.h +++ b/services/abilitymgr/test/unittest/phone/ability_scheduler_stub_test/ability_schedule_stub_mock.h @@ -131,6 +131,8 @@ public: } virtual void NotifyContinuationResult(const int32_t result) override {} + virtual void ContinueAbility(const std::string& deviceId) override + {} }; } // namespace AAFwk } // namespace OHOS diff --git a/services/test/mock/include/mock_ability_mgr_service.h b/services/test/mock/include/mock_ability_mgr_service.h old mode 100644 new mode 100755 index 9f03a2918f1..c9d11bb92ca --- a/services/test/mock/include/mock_ability_mgr_service.h +++ b/services/test/mock/include/mock_ability_mgr_service.h @@ -88,8 +88,12 @@ public: MOCK_METHOD1(SetMissionStackSetting, int(const StackSetting &stackSetting)); MOCK_METHOD1(SetShowOnLockScreen, int(bool isAllow)); MOCK_METHOD1(GetSystemMemoryAttr, void(AppExecFwk::SystemMemoryAttr &memoryInfo)); - MOCK_METHOD2(StartContinuation, int(const Want &want, const sptr &abilityToken)); - MOCK_METHOD2(NotifyContinuationResult, int(const sptr &abilityToken, const int32_t result)); + MOCK_METHOD3(StartContinuation, int(const Want &want, const sptr &abilityToken, int32_t status)); + MOCK_METHOD2(NotifyContinuationResult, int(int32_t missionId, const int32_t result)); + MOCK_METHOD5(ContinueMission, int(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams)); + MOCK_METHOD2(ContinueAbility, int(const std::string &deviceId, int32_t missionId)); + MOCK_METHOD3(NotifyCompleteContinuation, void(const std::string &deviceId, int32_t sessionId, bool isSuccess)); MOCK_METHOD1(LockMissionForCleanup, int(int32_t missionId)); MOCK_METHOD1(UnlockMissionForCleanup, int(int32_t missionId)); diff --git a/services/test/mock/include/mock_ability_scheduler.h b/services/test/mock/include/mock_ability_scheduler.h old mode 100644 new mode 100755 index e1e99ba6ea8..2d651247b8f --- a/services/test/mock/include/mock_ability_scheduler.h +++ b/services/test/mock/include/mock_ability_scheduler.h @@ -43,6 +43,7 @@ public: MOCK_METHOD1(ScheduleNotifyChange, bool(const Uri &uri)); MOCK_METHOD1(ExecuteBatch, std::vector>(const std::vector> &operations)); MOCK_METHOD1(NotifyContinuationResult, void(const int32_t result)); + MOCK_METHOD1(ContinueAbility, void(const std::string& deviceId)); std::vector GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter) { std::vector types; diff --git a/services/test/mock/include/mock_ability_scheduler_stub.h b/services/test/mock/include/mock_ability_scheduler_stub.h old mode 100644 new mode 100755 index 31527401ef2..ac33739b0d9 --- a/services/test/mock/include/mock_ability_scheduler_stub.h +++ b/services/test/mock/include/mock_ability_scheduler_stub.h @@ -52,6 +52,7 @@ public: MOCK_METHOD1(ExecuteBatch, std::vector>( const std::vector> &operations)); MOCK_METHOD1(NotifyContinuationResult, void(const int32_t result)); + MOCK_METHOD1(ContinueAbility, void(const std::string& deviceId)); }; } // namespace AAFwk } // namespace OHOS diff --git a/tools/test/mock/mock_ability_manager_stub.h b/tools/test/mock/mock_ability_manager_stub.h old mode 100644 new mode 100755 index 135e1292f95..60e3577666a --- a/tools/test/mock/mock_ability_manager_stub.h +++ b/tools/test/mock/mock_ability_manager_stub.h @@ -114,8 +114,12 @@ public: MOCK_METHOD1(GetPendinTerminateAbilityTestgRequestWant, void(int id)); MOCK_METHOD1(SetShowOnLockScreen, int(bool isAllow)); MOCK_METHOD1(GetSystemMemoryAttr, void(AppExecFwk::SystemMemoryAttr &memoryInfo)); - MOCK_METHOD2(StartContinuation, int(const Want &want, const sptr &abilityToken)); - MOCK_METHOD2(NotifyContinuationResult, int(const sptr &abilityToken, const int32_t result)); + MOCK_METHOD3(StartContinuation, int(const Want &want, const sptr &abilityToken, int32_t status)); + MOCK_METHOD2(NotifyContinuationResult, int(int32_t missionId, const int32_t result)); + MOCK_METHOD5(ContinueMission, int(const std::string &srcDeviceId, const std::string &dstDeviceId, + int32_t missionId, const sptr &callBack, AAFwk::WantParams &wantParams)); + MOCK_METHOD2(ContinueAbility, int(const std::string &deviceId, int32_t missionId)); + MOCK_METHOD3(NotifyCompleteContinuation, void(const std::string &deviceId, int32_t sessionId, bool isSuccess)); MOCK_METHOD1(LockMissionForCleanup, int(int32_t missionId)); MOCK_METHOD1(UnlockMissionForCleanup, int(int32_t missionId)); -- Gitee