From b1ae9309cd13802d0125eab292c2f0963549db27 Mon Sep 17 00:00:00 2001 From: wuliubao Date: Thu, 13 Jan 2022 11:43:40 +0800 Subject: [PATCH] add return code of context api Signed-off-by: wuliubao --- .../kits/ability/native/include/ability.h | 24 ++++++-- .../ability/native/include/ability_context.h | 16 +++-- .../ability/native/include/ability_process.h | 2 +- .../kits/ability/native/src/ability.cpp | 61 ++++++++++++------- .../ability/native/src/ability_context.cpp | 30 ++++++--- .../ability/native/src/ability_process.cpp | 15 +++-- .../src/js_service_extension_context.cpp | 26 ++++++-- 7 files changed, 120 insertions(+), 54 deletions(-) diff --git a/frameworks/kits/ability/native/include/ability.h b/frameworks/kits/ability/native/include/ability.h index b078ab08d93..2a7ff13a853 100644 --- a/frameworks/kits/ability/native/include/ability.h +++ b/frameworks/kits/ability/native/include/ability.h @@ -135,8 +135,10 @@ public: * @brief Destroys this Page or Service ability. * After a Page or Service ability performs all operations, it can use this method to destroy itself * to free up memory. This method can be called only after the ability is initialized. + * + * @return errCode ERR_OK on success, others on failure. */ - virtual void TerminateAbility() final; + virtual ErrCode TerminateAbility() final; /** * @brief Obtains the Lifecycle object of the current ability. @@ -172,8 +174,10 @@ public: * * @param want information of other ability * @param requestCode request code for abilityMS to return result + * + * @return errCode ERR_OK on success, others on failure. */ - virtual void StartAbilityForResult(const Want &want, int requestCode) final; + virtual ErrCode StartAbilityForResult(const Want &want, int requestCode) final; /** * Starts an ability with specific start settings and returns the execution result when the ability is destroyed. @@ -185,8 +189,10 @@ public: * @param requestCode Indicates the request code returned after the ability is started. You can define the request * code to identify the results returned by abilities. The value ranges from 0 to 65535. * @param abilityStartSetting Indicates the setting ability used to start. + * + * @return errCode ERR_OK on success, others on failure. */ - virtual void StartAbilityForResult( + virtual ErrCode StartAbilityForResult( const Want &want, int requestCode, AbilityStartSetting abilityStartSetting) final; /** @@ -198,8 +204,10 @@ public: * * @param want Indicates the ability to start. * @param abilityStartSetting Indicates the setting ability used to start. + * + * @return errCode ERR_OK on success, others on failure. */ - void StartAbility(const Want &want, AbilityStartSetting abilityStartSetting); + ErrCode StartAbility(const Want &want, AbilityStartSetting abilityStartSetting); // lifecycle callback virtual void Init(const std::shared_ptr &abilityInfo, @@ -846,9 +854,11 @@ public: * the ability to start using the intent parameter. * * @param intent Indicates the ability to start. + * + * @return errCode ERR_OK on success, others on failure. */ using AbilityContext::StartAbility; - virtual void StartAbility(const Want &want) final; + virtual ErrCode StartAbility(const Want &want) final; /** * @brief Connects the current ability to an ability using the AbilityInfo.AbilityType.SERVICE template. @@ -866,8 +876,10 @@ public: * * @param conn Indicates the IAbilityConnection callback object passed by connectAbility after the connection * is set up. The IAbilityConnection object uniquely identifies a connection between two abilities. + * + * @return errCode ERR_OK on success, others on failure. */ - void DisconnectAbility(const sptr &conn) override; + ErrCode DisconnectAbility(const sptr &conn) override; /** * @brief Destroys another ability that uses the AbilityInfo.AbilityType.SERVICE template. diff --git a/frameworks/kits/ability/native/include/ability_context.h b/frameworks/kits/ability/native/include/ability_context.h index cd986558997..cffdb835c91 100644 --- a/frameworks/kits/ability/native/include/ability_context.h +++ b/frameworks/kits/ability/native/include/ability_context.h @@ -135,9 +135,10 @@ public: * ranges from 0 to 65535. This parameter takes effect only on abilities using the AbilityInfo.AbilityType.PAGE * template. * + * @return errCode ERR_OK on success, others on failure. */ using ContextContainer::StartAbility; - void StartAbility(const AAFwk::Want &Want, int requestCode) override; + ErrCode StartAbility(const AAFwk::Want &Want, int requestCode) override; /** * @brief Starts a new ability with special ability start setting. @@ -147,8 +148,9 @@ public: * code to identify the results returned by abilities. The value ranges from 0 to 65535. * @param abilityStartSetting Indicates the special start setting used in starting ability. * + * @return errCode ERR_OK on success, others on failure. */ - void StartAbility(const Want &want, int requestCode, const AbilityStartSetting &abilityStartSetting) override; + ErrCode StartAbility(const Want &want, int requestCode, const AbilityStartSetting &abilityStartSetting) override; /** * @brief Destroys another ability you had previously started by calling Ability.startAbilityForResult @@ -157,14 +159,16 @@ public: * * @param requestCode Indicates the request code passed for starting the ability. * + * @return errCode ERR_OK on success, others on failure. */ - void TerminateAbility(int requestCode) override; + ErrCode TerminateAbility(int requestCode) override; /** * @brief Destroys the current ability. * + * @return errCode ERR_OK on success, others on failure. */ - void TerminateAbility() override; + ErrCode TerminateAbility() override; /** * @brief Obtains the bundle name of the ability that called the current ability. @@ -206,8 +210,10 @@ public: * * @param conn Indicates the IAbilityConnection callback object passed by connectAbility after the connection * is set up. The IAbilityConnection object uniquely identifies a connection between two abilities. + * + * @return errCode ERR_OK on success, others on failure. */ - void DisconnectAbility(const sptr &conn) override; + ErrCode DisconnectAbility(const sptr &conn) override; /** * @brief Destroys another ability that uses the AbilityInfo.AbilityType.SERVICE template. diff --git a/frameworks/kits/ability/native/include/ability_process.h b/frameworks/kits/ability/native/include/ability_process.h index e8a4bb40235..0cdd83475fb 100644 --- a/frameworks/kits/ability/native/include/ability_process.h +++ b/frameworks/kits/ability/native/include/ability_process.h @@ -32,7 +32,7 @@ public: virtual ~AbilityProcess(); static std::shared_ptr GetInstance(); - void StartAbility(Ability *ability, CallAbilityParam param, CallbackInfo callbackInfo); + ErrCode StartAbility(Ability *ability, CallAbilityParam param, CallbackInfo callbackInfo); void OnAbilityResult(Ability *ability, int requestCode, int resultCode, const Want &resultData); void RequestPermissionsFromUser(Ability *ability, CallAbilityPermissionParam ¶m, CallbackInfo callbackInfo); diff --git a/frameworks/kits/ability/native/src/ability.cpp b/frameworks/kits/ability/native/src/ability.cpp index d266dca5e9c..6b794b76410 100755 --- a/frameworks/kits/ability/native/src/ability.cpp +++ b/frameworks/kits/ability/native/src/ability.cpp @@ -505,19 +505,24 @@ void Ability::OnDisconnect(const Want &want) * * @param want information of other ability * @param requestCode request code for abilityMS to return result + * + * @return errCode ERR_OK on success, others on failure. */ -void Ability::StartAbilityForResult(const Want &want, int requestCode) +ErrCode Ability::StartAbilityForResult(const Want &want, int requestCode) { APP_LOGI("%{public}s begin.", __func__); if (abilityInfo_ == nullptr) { APP_LOGE("Ability::StartAbilityForResult abilityInfo_ == nullptr"); - return; + return ERR_NULL_OBJECT; } APP_LOGI("Ability::StartAbilityForResult called type = %{public}d", abilityInfo_->type); - if (abilityInfo_->type == AppExecFwk::AbilityType::PAGE) { - AbilityContext::StartAbility(want, requestCode); + if (abilityInfo_->type != AppExecFwk::AbilityType::PAGE) { + APP_LOGE("Ability::StartAbility ability type: %{public}d", abilityInfo_->type); + return ERR_INVALID_VALUE; } + ErrCode err = AbilityContext::StartAbility(want, requestCode); APP_LOGI("%{public}s end.", __func__); + return err; } /** @@ -530,19 +535,24 @@ void Ability::StartAbilityForResult(const Want &want, int requestCode) * @param requestCode Indicates the request code returned after the ability is started. You can define the request * code to identify the results returned by abilities. The value ranges from 0 to 65535. * @param abilityStartSetting Indicates the setting ability used to start. + * + * @return errCode ERR_OK on success, others on failure. */ -void Ability::StartAbilityForResult(const Want &want, int requestCode, AbilityStartSetting abilityStartSetting) +ErrCode Ability::StartAbilityForResult(const Want &want, int requestCode, AbilityStartSetting abilityStartSetting) { APP_LOGI("%{public}s begin.", __func__); if (abilityInfo_ == nullptr) { APP_LOGE("Ability::StartAbilityForResult abilityInfo_ == nullptr"); - return; + return ERR_NULL_OBJECT; } APP_LOGI("Ability::StartAbilityForResult called type = %{public}d", abilityInfo_->type); - if (abilityInfo_->type == AppExecFwk::AbilityType::PAGE) { - AbilityContext::StartAbility(want, requestCode, abilityStartSetting); + if (abilityInfo_->type != AppExecFwk::AbilityType::PAGE) { + APP_LOGE("Ability::StartAbility ability type: %{public}d", abilityInfo_->type); + return ERR_INVALID_VALUE; } + ErrCode err = AbilityContext::StartAbility(want, requestCode, abilityStartSetting); APP_LOGI("%{public}s end.", __func__); + return err; } /** @@ -554,19 +564,24 @@ void Ability::StartAbilityForResult(const Want &want, int requestCode, AbilitySt * * @param want Indicates the ability to start. * @param abilityStartSetting Indicates the setting ability used to start. + * + * @return errCode ERR_OK on success, others on failure. */ -void Ability::StartAbility(const Want &want, AbilityStartSetting abilityStartSetting) +ErrCode Ability::StartAbility(const Want &want, AbilityStartSetting abilityStartSetting) { APP_LOGI("%{public}s beign.", __func__); if (abilityInfo_ == nullptr) { APP_LOGE("Ability::StartAbility abilityInfo_ == nullptr"); - return; + return ERR_NULL_OBJECT; } APP_LOGI("Ability::StartAbility called type = %{public}d", abilityInfo_->type); - if (abilityInfo_->type == AppExecFwk::AbilityType::PAGE || abilityInfo_->type == AppExecFwk::AbilityType::SERVICE) { - AbilityContext::StartAbility(want, -1, abilityStartSetting); + if (abilityInfo_->type != AppExecFwk::AbilityType::PAGE && abilityInfo_->type != AppExecFwk::AbilityType::SERVICE) { + APP_LOGE("Ability::StartAbility ability type: %{public}d", abilityInfo_->type); + return ERR_INVALID_VALUE; } + ErrCode err = AbilityContext::StartAbility(want, -1, abilityStartSetting); APP_LOGI("%{public}s end.", __func__); + return err; } /** @@ -1458,24 +1473,26 @@ AbilityLifecycleExecutor::LifecycleState Ability::GetState() * the ability to start using the intent parameter. * * @param intent Indicates the ability to start. + * + * @return errCode ERR_OK on success, others on failure. */ -void Ability::StartAbility(const Want &want) +ErrCode Ability::StartAbility(const Want &want) { - APP_LOGI("%{public}s begin.", __func__); - AbilityContext::StartAbility(want, -1); - APP_LOGI("%{public}s end.", __func__); + APP_LOGI("%{public}s begin Ability::StartAbility", __func__); + return AbilityContext::StartAbility(want, -1); } /** * @brief Destroys this Page or Service ability. * After a Page or Service ability performs all operations, it can use this method to destroy itself * to free up memory. This method can be called only after the ability is initialized. + * + * @return errCode ERR_OK on success, others on failure. */ -void Ability::TerminateAbility() +ErrCode Ability::TerminateAbility() { - APP_LOGI("%{public}s begin.", __func__); - AbilityContext::TerminateAbility(); - APP_LOGI("%{public}s end.", __func__); + APP_LOGI("%{public}s begin Ability::TerminateAbility", __func__); + return AbilityContext::TerminateAbility(); } /** @@ -1552,8 +1569,10 @@ bool Ability::ConnectAbility(const Want &want, const sptr &conn) +ErrCode Ability::DisconnectAbility(const sptr &conn) { return AbilityContext::DisconnectAbility(conn); } diff --git a/frameworks/kits/ability/native/src/ability_context.cpp b/frameworks/kits/ability/native/src/ability_context.cpp index d2924983343..4b22e859553 100644 --- a/frameworks/kits/ability/native/src/ability_context.cpp +++ b/frameworks/kits/ability/native/src/ability_context.cpp @@ -41,8 +41,10 @@ int AbilityContext::ABILITY_CONTEXT_DEFAULT_REQUEST_CODE(0); * ranges from 0 to 65535. This parameter takes effect only on abilities using the AbilityInfo.AbilityType.PAGE * template. * + * @return errCode ERR_OK on success, others on failure. + * */ -void AbilityContext::StartAbility(const AAFwk::Want &want, int requestCode) +ErrCode AbilityContext::StartAbility(const AAFwk::Want &want, int requestCode) { APP_LOGI("%{public}s begin.", __func__); APP_LOGI("AbilityContext::StartAbility called, requestCode = %{public}d", requestCode); @@ -50,7 +52,7 @@ void AbilityContext::StartAbility(const AAFwk::Want &want, int requestCode) AppExecFwk::AbilityType type = GetAbilityInfoType(); if (type != AppExecFwk::AbilityType::PAGE && type != AppExecFwk::AbilityType::SERVICE) { APP_LOGE("AbilityContext::StartAbility AbilityType = %{public}d", type); - return; + return ERR_INVALID_VALUE; } APP_LOGI("%{public}s. Start calling ams->StartAbility.", __func__); @@ -60,6 +62,7 @@ void AbilityContext::StartAbility(const AAFwk::Want &want, int requestCode) APP_LOGE("AbilityContext::StartAbility is failed %{public}d", err); } APP_LOGI("%{public}s end.", __func__); + return err; } /** @@ -70,14 +73,15 @@ void AbilityContext::StartAbility(const AAFwk::Want &want, int requestCode) * to identify the results returned by abilities. The value ranges from 0 to 65535. * @param abilityStartSetting Indicates the special start setting used in starting ability. * + * @return errCode ERR_OK on success, others on failure. */ -void AbilityContext::StartAbility(const Want &want, int requestCode, const AbilityStartSetting &abilityStartSetting) +ErrCode AbilityContext::StartAbility(const Want &want, int requestCode, const AbilityStartSetting &abilityStartSetting) { APP_LOGI("%{public}s begin.", __func__); AppExecFwk::AbilityType type = GetAbilityInfoType(); if (AppExecFwk::AbilityType::PAGE != type && AppExecFwk::AbilityType::SERVICE != type) { APP_LOGE("AbilityContext::StartAbility AbilityType = %{public}d", type); - return; + return ERR_INVALID_VALUE; } APP_LOGI("%{public}s. Start calling ams->StartAbility.", __func__); @@ -89,6 +93,7 @@ void AbilityContext::StartAbility(const Want &want, int requestCode, const Abili } APP_LOGI("%{public}s end.", __func__); + return err; } /** @@ -97,8 +102,9 @@ void AbilityContext::StartAbility(const Want &want, int requestCode, const Abili * * @param requestCode Indicates the request code passed for starting the ability. * + * @return errCode ERR_OK on success, others on failure. */ -void AbilityContext::TerminateAbility(int requestCode) +ErrCode AbilityContext::TerminateAbility(int requestCode) { APP_LOGI("%{public}s begin.", __func__); ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->TerminateAbility(token_, requestCode); @@ -106,19 +112,21 @@ void AbilityContext::TerminateAbility(int requestCode) APP_LOGE("AbilityContext::TerminateAbility is failed %{public}d", err); } APP_LOGI("%{public}s end.", __func__); + return err; } /** * @brief Destroys the current ability. * + * @return errCode ERR_OK on success, others on failure. */ -void AbilityContext::TerminateAbility() +ErrCode AbilityContext::TerminateAbility() { APP_LOGI("%{public}s begin.", __func__); std::shared_ptr info = GetAbilityInfo(); if (info == nullptr) { APP_LOGE("AbilityContext::TerminateAbility info == nullptr"); - return; + return ERR_NULL_OBJECT; } ErrCode err = ERR_OK; @@ -143,6 +151,7 @@ void AbilityContext::TerminateAbility() APP_LOGE("AbilityContext::TerminateAbility is failed %{public}d", err); } APP_LOGI("%{public}s end.", __func__); + return err; } /** @@ -245,15 +254,17 @@ bool AbilityContext::ConnectAbility(const Want &want, const sptr &conn) +ErrCode AbilityContext::DisconnectAbility(const sptr &conn) { APP_LOGI("%{public}s begin.", __func__); AppExecFwk::AbilityType type = GetAbilityInfoType(); if (AppExecFwk::AbilityType::PAGE != type && AppExecFwk::AbilityType::SERVICE != type) { APP_LOGE("AbilityContext::DisconnectAbility AbilityType = %{public}d", type); - return; + return ERR_INVALID_VALUE; } ErrCode ret = AAFwk::AbilityManagerClient::GetInstance()->DisconnectAbility(conn); @@ -262,6 +273,7 @@ void AbilityContext::DisconnectAbility(const sptr &co APP_LOGE("AbilityContext::DisconnectAbility error"); } APP_LOGD("AbilityContext::DisconnectAbility end"); + return ret; } /** diff --git a/frameworks/kits/ability/native/src/ability_process.cpp b/frameworks/kits/ability/native/src/ability_process.cpp index 615be602ccb..6d8015d0ff9 100644 --- a/frameworks/kits/ability/native/src/ability_process.cpp +++ b/frameworks/kits/ability/native/src/ability_process.cpp @@ -49,21 +49,23 @@ AbilityProcess::AbilityProcess() AbilityProcess::~AbilityProcess() {} -void AbilityProcess::StartAbility(Ability *ability, CallAbilityParam param, CallbackInfo callback) +ErrCode AbilityProcess::StartAbility(Ability *ability, CallAbilityParam param, CallbackInfo callback) { APP_LOGI("AbilityProcess::StartAbility begin"); if (ability == nullptr) { APP_LOGE("AbilityProcess::StartAbility ability is nullptr"); - return; + return ERR_NULL_OBJECT; } + ErrCode err = ERR_OK; + if (param.forResultOption == true) { if (param.setting == nullptr) { APP_LOGI("%{public}s param.setting == nullptr call StartAbilityForResult.", __func__); - ability->StartAbilityForResult(param.want, param.requestCode); + err = ability->StartAbilityForResult(param.want, param.requestCode); } else { APP_LOGI("%{public}s param.setting != nullptr call StartAbilityForResult.", __func__); - ability->StartAbilityForResult(param.want, param.requestCode, *(param.setting)); + err = ability->StartAbilityForResult(param.want, param.requestCode, *(param.setting)); } std::lock_guard lock_l(mutex_); @@ -82,13 +84,14 @@ void AbilityProcess::StartAbility(Ability *ability, CallAbilityParam param, Call } else { if (param.setting == nullptr) { APP_LOGI("%{public}s param.setting == nullptr call StartAbility.", __func__); - ability->StartAbility(param.want); + err = ability->StartAbility(param.want); } else { APP_LOGI("%{public}s param.setting != nullptr call StartAbility.", __func__); - ability->StartAbility(param.want, *(param.setting)); + err = ability->StartAbility(param.want, *(param.setting)); } } APP_LOGI("AbilityProcess::StartAbility end"); + return err; } void AbilityProcess::OnAbilityResult(Ability *ability, int requestCode, int resultCode, const Want &resultData) diff --git a/frameworks/kits/ability/native/src/js_service_extension_context.cpp b/frameworks/kits/ability/native/src/js_service_extension_context.cpp index 091db3037e3..f0a2cb8fa91 100644 --- a/frameworks/kits/ability/native/src/js_service_extension_context.cpp +++ b/frameworks/kits/ability/native/src/js_service_extension_context.cpp @@ -112,8 +112,14 @@ private: return; } - (unwrapArgc == 1) ? context->StartAbility(want) : context->StartAbility(want, startOptions); - task.Resolve(engine, engine.CreateUndefined()); + ErrCode errcode = ERR_OK; + (unwrapArgc == 1) ? errcode = context->StartAbility(want) : + errcode = context->StartAbility(want, startOptions); + if (errcode == 0) { + task.Resolve(engine, engine.CreateUndefined()); + } else { + task.Reject(engine, CreateJsError(engine, errcode, "Start Ability failed.")); + } }; NativeValue* lastParam = (info.argc == unwrapArgc) ? nullptr : info.argv[unwrapArgc]; @@ -142,8 +148,12 @@ private: return; } - context->TerminateAbility(); - task.Resolve(engine, engine.CreateUndefined()); + auto errcode = context->TerminateAbility(); + if (errcode == 0) { + task.Resolve(engine, engine.CreateUndefined()); + } else { + task.Reject(engine, CreateJsError(engine, errcode, "Terminate Ability failed.")); + } }; NativeValue* lastParam = (info.argc == ARGC_ZERO) ? nullptr : info.argv[INDEX_ZERO]; @@ -253,8 +263,12 @@ private: return; } HILOG_INFO("context->DisconnectAbility"); - context->DisconnectAbility(want, connection); - task.Resolve(engine, engine.CreateUndefined()); + auto errcode = context->DisconnectAbility(want, connection); + if (errcode == 0) { + task.Resolve(engine, engine.CreateUndefined()); + } else { + task.Reject(engine, CreateJsError(engine, errcode, "Disconnect Ability failed.")); + } }; NativeValue* lastParam = (info.argc == ARGC_ONE) ? nullptr : info.argv[INDEX_ONE]; -- Gitee