From e579bc720534b71ddfa60e5350dca8ddf97d11ca Mon Sep 17 00:00:00 2001 From: zhaoyuan17 Date: Wed, 20 Oct 2021 10:36:36 +0000 Subject: [PATCH] clear ability flag and DataAbilityHelper tools interface fix Signed-off-by: zhaoyuan17 --- .../kits/ability/native/src/ability_impl.cpp | 11 +++ .../native/src/data_ability_helper.cpp | 10 +- .../aafwk/featureAbility/feature_ability.cpp | 23 +++-- .../napi_data_ability_helper.cpp | 99 ++++++++----------- .../featureAbility/napi_data_ability_helper.h | 1 + .../inner/napi_common/napi_common_ability.cpp | 12 ++- .../inner/napi_common/napi_common_ability.h | 2 +- .../inner/napi_common/napi_common_util.cpp | 4 + .../kits/napi/aafwk/particleAbility/BUILD.gn | 14 +++ .../aafwk/particleAbility/native_module.cpp | 10 +- .../src/ability_scheduler_proxy.cpp | 22 +---- .../abilitymgr/src/ability_stack_manager.cpp | 11 +-- services/abilitymgr/src/mission_record.cpp | 1 + services/dataobsmgr/src/dataobs_mgr_inner.cpp | 10 +- .../dataobsmgr/src/dataobs_mgr_service.cpp | 2 +- tools/aa/src/ability_command.cpp | 2 +- 16 files changed, 121 insertions(+), 113 deletions(-) diff --git a/frameworks/kits/ability/native/src/ability_impl.cpp b/frameworks/kits/ability/native/src/ability_impl.cpp index 1126bd8e857..4c1c74e8ce1 100644 --- a/frameworks/kits/ability/native/src/ability_impl.cpp +++ b/frameworks/kits/ability/native/src/ability_impl.cpp @@ -443,6 +443,7 @@ void AbilityImpl::NewWant(const Want &want) */ std::vector AbilityImpl::GetFileTypes(const Uri &uri, const std::string &mimeTypeFilter) { + APP_LOGI("AbilityImpl::GetFileTypes"); std::vector types; return types; } @@ -460,6 +461,7 @@ std::vector AbilityImpl::GetFileTypes(const Uri &uri, const std::st */ int AbilityImpl::OpenFile(const Uri &uri, const std::string &mode) { + APP_LOGI("AbilityImpl::OpenFile"); return -1; } @@ -477,6 +479,7 @@ int AbilityImpl::OpenFile(const Uri &uri, const std::string &mode) */ int AbilityImpl::OpenRawFile(const Uri &uri, const std::string &mode) { + APP_LOGI("AbilityImpl::OpenRawFile"); return -1; } @@ -490,6 +493,7 @@ int AbilityImpl::OpenRawFile(const Uri &uri, const std::string &mode) */ int AbilityImpl::Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) { + APP_LOGI("AbilityImpl::Insert"); return -1; } @@ -505,6 +509,7 @@ int AbilityImpl::Insert(const Uri &uri, const NativeRdb::ValuesBucket &value) int AbilityImpl::Update( const Uri &uri, const NativeRdb::ValuesBucket &value, const NativeRdb::DataAbilityPredicates &predicates) { + APP_LOGI("AbilityImpl::Update"); return -1; } @@ -518,6 +523,7 @@ int AbilityImpl::Update( */ int AbilityImpl::Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates &predicates) { + APP_LOGI("AbilityImpl::Delete"); return -1; } @@ -533,6 +539,7 @@ int AbilityImpl::Delete(const Uri &uri, const NativeRdb::DataAbilityPredicates & std::shared_ptr AbilityImpl::Query( const Uri &uri, std::vector &columns, const NativeRdb::DataAbilityPredicates &predicates) { + APP_LOGI("AbilityImpl::Query"); return nullptr; } @@ -546,6 +553,7 @@ std::shared_ptr AbilityImpl::Query( */ std::string AbilityImpl::GetType(const Uri &uri) { + APP_LOGI("AbilityImpl::GetType"); return ""; } @@ -574,6 +582,7 @@ bool AbilityImpl::Reload(const Uri &uri, const PacMap &extras) */ int AbilityImpl::BatchInsert(const Uri &uri, const std::vector &values) { + APP_LOGI("AbilityImpl::BatchInsert"); return -1; } @@ -661,6 +670,7 @@ void AbilityImpl::SetCallingContext( */ Uri AbilityImpl::NormalizeUri(const Uri &uri) { + APP_LOGI("AbilityImpl::NormalizeUri"); return uri; } @@ -676,6 +686,7 @@ Uri AbilityImpl::NormalizeUri(const Uri &uri) */ Uri AbilityImpl::DenormalizeUri(const Uri &uri) { + APP_LOGI("AbilityImpl::DenormalizeUri"); return uri; } diff --git a/frameworks/kits/ability/native/src/data_ability_helper.cpp b/frameworks/kits/ability/native/src/data_ability_helper.cpp index 46322630ea7..3cc28c17c47 100644 --- a/frameworks/kits/ability/native/src/data_ability_helper.cpp +++ b/frameworks/kits/ability/native/src/data_ability_helper.cpp @@ -837,6 +837,7 @@ bool DataAbilityHelper::CheckOhosUri(const Uri &uri) */ void DataAbilityHelper::RegisterObserver(const Uri &uri, const sptr &dataObserver) { + APP_LOGI("DataAbilityHelper::RegisterObserver start."); if (!CheckUriParam(uri)) { APP_LOGE("%{public}s called. CheckUriParam uri failed", __func__); return; @@ -877,6 +878,7 @@ void DataAbilityHelper::RegisterObserver(const Uri &uri, const sptrScheduleRegisterObserver(uri, dataObserver); + APP_LOGI("DataAbilityHelper::RegisterObserver end."); } /** @@ -887,6 +889,7 @@ void DataAbilityHelper::RegisterObserver(const Uri &uri, const sptr &dataObserver) { + APP_LOGI("DataAbilityHelper::UnregisterObserver start."); if (!CheckUriParam(uri)) { APP_LOGE("%{public}s called. CheckUriParam uri failed", __func__); return; @@ -917,17 +920,18 @@ void DataAbilityHelper::UnregisterObserver(const Uri &uri, const sptrScheduleUnregisterObserver(uri, dataObserver); int err = AbilityManagerClient::GetInstance()->ReleaseDataAbility(dataAbilityProxy, token_); if (err != ERR_OK) { - APP_LOGE("DataAbilityHelper::RegisterObserver failed to ReleaseDataAbility err = %{public}d", err); + APP_LOGE("DataAbilityHelper::UnregisterObserver failed to ReleaseDataAbility err = %{public}d", err); } registerMap_.erase(dataObserver); uriMap_.erase(dataObserver); + APP_LOGI("DataAbilityHelper::UnregisterObserver end."); } /** @@ -937,6 +941,7 @@ void DataAbilityHelper::UnregisterObserver(const Uri &uri, const sptruri, &uri)); NAPI_CALL_RETURN_VOID(env, napi_get_reference_value(env, dataAbilityHelperCB->cbBase.cbInfo.callback, &callback)); NAPI_CALL_RETURN_VOID( - env, napi_new_instance(env, GetGlobalDataAbilityHelper(), 1, &uri, &dataAbilityHelperCB->result)); - + env, napi_new_instance(env, *(GetGlobalDataAbilityHelper()), 1, &uri, &dataAbilityHelperCB->result)); + if (IsTypeForNapiValue(env, dataAbilityHelperCB->result, napi_object)) { + result[PARAM1] = dataAbilityHelperCB->result; + } else { + HILOG_INFO("NAPI_GetDataAbilityHelper, helper is nullptr."); + result[PARAM1] = WrapVoidToJS(env); + } result[PARAM0] = GetCallbackErrorValue(env, NO_ERROR); - result[PARAM1] = dataAbilityHelperCB->result; NAPI_CALL_RETURN_VOID(env, napi_call_function(env, undefined, callback, ARGS_TWO, &result[PARAM0], &callResult)); if (dataAbilityHelperCB->cbBase.cbInfo.callback != nullptr) { @@ -1301,10 +1305,15 @@ void GetDataAbilityHelperPromiseCompleteCB(napi_env env, napi_status status, voi napi_value result = nullptr; NAPI_CALL_RETURN_VOID(env, napi_get_reference_value(env, dataAbilityHelperCB->uri, &uri)); NAPI_CALL_RETURN_VOID( - env, napi_new_instance(env, GetGlobalDataAbilityHelper(), 1, &uri, &dataAbilityHelperCB->result)); - result = dataAbilityHelperCB->result; - - NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, dataAbilityHelperCB->cbBase.deferred, result)); + env, napi_new_instance(env, *(GetGlobalDataAbilityHelper()), 1, &uri, &dataAbilityHelperCB->result)); + if (IsTypeForNapiValue(env, dataAbilityHelperCB->result, napi_object)) { + result = dataAbilityHelperCB->result; + NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, dataAbilityHelperCB->cbBase.deferred, result)); + } else { + result = GetCallbackErrorValue(env, dataAbilityHelperCB->cbBase.errCode); + napi_reject_deferred(env, dataAbilityHelperCB->cbBase.deferred, result); + HILOG_INFO("NAPI_GetDataAbilityHelper, helper is nullptr."); + } NAPI_CALL_RETURN_VOID(env, napi_delete_async_work(env, dataAbilityHelperCB->cbBase.asyncWork)); delete dataAbilityHelperCB; dataAbilityHelperCB = nullptr; diff --git a/interfaces/kits/napi/aafwk/featureAbility/napi_data_ability_helper.cpp b/interfaces/kits/napi/aafwk/featureAbility/napi_data_ability_helper.cpp index 8f343b34a6b..ac5c34b4f58 100644 --- a/interfaces/kits/napi/aafwk/featureAbility/napi_data_ability_helper.cpp +++ b/interfaces/kits/napi/aafwk/featureAbility/napi_data_ability_helper.cpp @@ -73,7 +73,7 @@ napi_value DataAbilityHelperInit(napi_env env, napi_value exports) nullptr, sizeof(properties) / sizeof(*properties), properties, - &GetGlobalDataAbilityHelper())); + GetGlobalDataAbilityHelper())); g_dataAbilityHelperList.clear(); return exports; } @@ -101,6 +101,10 @@ napi_value DataAbilityHelperConstructor(napi_env env, napi_callback_info info) HILOG_INFO("dataAbilityHelperList.size = %{public}zu", g_dataAbilityHelperList.size()); std::shared_ptr dataAbilityHelper = DataAbilityHelper::Creator(ability->GetContext(), std::make_shared(strUri)); + if (dataAbilityHelper == nullptr) { + HILOG_INFO("%{public}s, dataAbilityHelper is nullptr", __func__); + return nullptr; + } HILOG_INFO("dataAbilityHelper = %{public}p", dataAbilityHelper.get()); g_dataAbilityHelperList.emplace_back(dataAbilityHelper); HILOG_INFO("dataAbilityHelperList.size = %{public}zu", g_dataAbilityHelperList.size()); @@ -579,6 +583,13 @@ void NotifyChangeAsyncCompleteCB(napi_env env, napi_status status, void *data) NAPI_CALL_RETURN_VOID(env, napi_get_undefined(env, &undefined)); NAPI_CALL_RETURN_VOID(env, napi_get_reference_value(env, notifyChangeCB->cbBase.cbInfo.callback, &callback)); + if (!IsTypeForNapiValue(env, callback, napi_function)) { + delete notifyChangeCB; + notifyChangeCB = nullptr; + HILOG_INFO("NAPI_NotifyChange, callback is invalid."); + return; + } + result[PARAM0] = GetCallbackErrorValue(env, NO_ERROR); napi_create_int32(env, 0, &result[PARAM1]); NAPI_CALL_RETURN_VOID(env, napi_call_function(env, undefined, callback, ARGS_TWO, &result[PARAM0], &callResult)); @@ -924,6 +935,9 @@ void UnRegisterCompleteCB(napi_env env, napi_status status, void *data) if (offCB->uri == uri.ToString()) { // match callback, or match both callback and uri (*helper)->dataAbilityHelper->UnregisterObserver(uri, (*helper)->observer); + if ((*helper)->observer != nullptr) { + (*helper)->observer->ReleaseJSCallback(); + } delete *helper; *helper = nullptr; registerInstances_.erase(helper); @@ -951,6 +965,9 @@ void UnRegisterCompleteCB(napi_env env, napi_status status, void *data) // match uri OHOS::Uri uri((*helper)->uri); (*helper)->dataAbilityHelper->UnregisterObserver(uri, (*helper)->observer); + if ((*helper)->observer != nullptr) { + (*helper)->observer->ReleaseJSCallback(); + } delete *helper; *helper = nullptr; registerInstances_.erase(helper); @@ -970,6 +987,15 @@ void UnRegisterCompleteCB(napi_env env, napi_status status, void *data) } } +void NAPIDataAbilityObserver::ReleaseJSCallback() +{ + if (ref_ == nullptr) { + HILOG_INFO("NAPIDataAbilityObserver::ReleaseJSCallback, ref_ is null."); + return; + } + napi_delete_reference(env_, ref_); +} + void NAPIDataAbilityObserver::SetEnv(const napi_env &env) { env_ = env; @@ -990,61 +1016,14 @@ void NAPIDataAbilityObserver::OnChange() HILOG_ERROR("%{public}s, loop == nullptr.", __func__); return; } - - uv_work_t *work = new uv_work_t; - if (work == nullptr) { - HILOG_ERROR("%{public}s, work==nullptr.", __func__); - return; - } - - DAHelperOnOffCB *onCB = new (std::nothrow) DAHelperOnOffCB; - if (onCB == nullptr) { - HILOG_ERROR("%{public}s, onCB == nullptr.", __func__); - if (work != nullptr) { - delete work; - work = nullptr; - } - return; - } - onCB->cbBase.cbInfo.env = env_; - onCB->cbBase.cbInfo.callback = ref_; - work->data = (void *)onCB; - - int rev = uv_queue_work( - loop, - work, - [](uv_work_t *work) {}, - [](uv_work_t *work, int status) { - HILOG_INFO("OnChange, uv_queue_work"); - // JS Thread - DAHelperOnOffCB *onCB = (DAHelperOnOffCB *)work->data; - napi_value result[ARGS_TWO] = {0}; - result[PARAM0] = GetCallbackErrorValue(onCB->cbBase.cbInfo.env, NO_ERROR); - napi_value callback = 0; - napi_value undefined = 0; - napi_get_undefined(onCB->cbBase.cbInfo.env, &undefined); - napi_value callResult = 0; - napi_get_reference_value(onCB->cbBase.cbInfo.env, onCB->cbBase.cbInfo.callback, &callback); - napi_call_function(onCB->cbBase.cbInfo.env, undefined, callback, ARGS_TWO, &result[PARAM0], &callResult); - if (onCB != nullptr) { - delete onCB; - onCB = nullptr; - } - if (work != nullptr) { - delete work; - work = nullptr; - } - }); - if (rev != 0) { - if (onCB != nullptr) { - delete onCB; - onCB = nullptr; - } - if (work != nullptr) { - delete work; - work = nullptr; - } - } + napi_value result[ARGS_TWO] = {0}; + result[PARAM0] = GetCallbackErrorValue(env_, NO_ERROR); + napi_value callback = 0; + napi_value undefined = 0; + napi_get_undefined(env_, &undefined); + napi_value callResult = 0; + napi_get_reference_value(env_, ref_, &callback); + napi_call_function(env_, undefined, callback, ARGS_TWO, &result[PARAM0], &callResult); } napi_value NAPI_GetType(napi_env env, napi_callback_info info) @@ -3128,7 +3107,8 @@ void ExecuteBatchExecuteCB(napi_env env, void *data) if (executeBatchCB->dataAbilityHelper != nullptr) { OHOS::Uri uri(executeBatchCB->uri); executeBatchCB->result = executeBatchCB->dataAbilityHelper->ExecuteBatch(uri, executeBatchCB->operations); - HILOG_INFO("%{public}s, dataAbilityHelper is not nullptr.", __func__); + HILOG_INFO("%{public}s, dataAbilityHelper is not nullptr. %{public}zu", + __func__, executeBatchCB->result.size()); } HILOG_INFO("%{public}s,NAPI_ExecuteBatch, worker pool thread execute end.", __func__); } @@ -3175,7 +3155,8 @@ void ExecuteBatchPromiseCompleteCB(napi_env env, napi_status status, void *data) void GetDataAbilityResultForResult( napi_env env, const std::vector> dataAbilityResult, napi_value result) { - HILOG_INFO("%{public}s, NAPI_ExecuteBatch, getDataAbilityResultForResult start.", __func__); + HILOG_INFO("%{public}s, NAPI_ExecuteBatch, getDataAbilityResultForResult start. %{public}zu", + __func__, dataAbilityResult.size()); int32_t index = 0; std::vector> entities = dataAbilityResult; for (const auto &item : entities) { @@ -3200,4 +3181,4 @@ void GetDataAbilityResultForResult( } } // namespace AppExecFwk -} // namespace OHOS \ No newline at end of file +} // namespace OHOS diff --git a/interfaces/kits/napi/aafwk/featureAbility/napi_data_ability_helper.h b/interfaces/kits/napi/aafwk/featureAbility/napi_data_ability_helper.h index 57230c2b78a..470acb7b6b2 100644 --- a/interfaces/kits/napi/aafwk/featureAbility/napi_data_ability_helper.h +++ b/interfaces/kits/napi/aafwk/featureAbility/napi_data_ability_helper.h @@ -25,6 +25,7 @@ public: void OnChange() override; void SetEnv(const napi_env &env); void SetCallbackRef(const napi_ref &ref); + void ReleaseJSCallback(); private: napi_env env_ = nullptr; diff --git a/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_ability.cpp b/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_ability.cpp index a8daab08525..9c5920e9515 100755 --- a/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_ability.cpp +++ b/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_ability.cpp @@ -33,9 +33,9 @@ napi_value *GetGlobalClassContext(void) return &g_classContext; } -napi_value &GetGlobalDataAbilityHelper(void) +napi_value *GetGlobalDataAbilityHelper(void) { - return g_dataAbilityHelper; + return &g_dataAbilityHelper; } bool CheckAbilityType(AbilityType typeInAbility, AbilityType typeWant) @@ -3433,7 +3433,13 @@ napi_value AcquireDataAbilityHelperWrap(napi_env env, napi_callback_info info, D } napi_value result = nullptr; - NAPI_CALL(env, napi_new_instance(env, GetGlobalDataAbilityHelper(), 1, &args[PARAM0], &result)); + NAPI_CALL(env, napi_new_instance(env, *(GetGlobalDataAbilityHelper()), 1, &args[PARAM0], &result)); + + if (!IsTypeForNapiValue(env, result, napi_object)) { + HILOG_ERROR("%{public}s, IsTypeForNapiValue retval is false", __func__); + return nullptr; + } + delete dataAbilityHelperCB; dataAbilityHelperCB = nullptr; HILOG_INFO("%{public}s,end", __func__); diff --git a/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_ability.h b/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_ability.h index b21e28d5a68..b22088ea805 100755 --- a/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_ability.h +++ b/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_ability.h @@ -25,7 +25,7 @@ namespace AppExecFwk { const std::int32_t STR_MAX_SIZE = 128; napi_value *GetGlobalClassContext(void); -napi_value &GetGlobalDataAbilityHelper(void); +napi_value *GetGlobalDataAbilityHelper(void); void SaveAppInfo(AppInfo_ &appInfo, const ApplicationInfo &appInfoOrg); napi_value WrapAppInfo(napi_env env, const AppInfo_ &appInfo); diff --git a/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_util.cpp b/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_util.cpp index d3166b17b16..a66f7c2b73f 100755 --- a/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_util.cpp +++ b/interfaces/kits/napi/aafwk/inner/napi_common/napi_common_util.cpp @@ -27,6 +27,10 @@ bool IsTypeForNapiValue(napi_env env, napi_value param, napi_valuetype expectTyp { napi_valuetype valueType = napi_undefined; + if (param == nullptr) { + return false; + } + if (napi_typeof(env, param, &valueType) != napi_ok) { return false; } diff --git a/interfaces/kits/napi/aafwk/particleAbility/BUILD.gn b/interfaces/kits/napi/aafwk/particleAbility/BUILD.gn index db9864702e1..58855e0158d 100755 --- a/interfaces/kits/napi/aafwk/particleAbility/BUILD.gn +++ b/interfaces/kits/napi/aafwk/particleAbility/BUILD.gn @@ -20,11 +20,21 @@ ohos_shared_library("particleability") { "//third_party/libuv/include", "//foundation/aafwk/standard/frameworks/kits/ability/native/include", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/inner/napi_common", + "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/featureAbility", "//foundation/aafwk/standard/services/common/include", "//foundation/aafwk/standard/interfaces/innerkits/ability_manager/include", + "//foundation/distributeddatamgr/appdatamgr/frameworks/jskitsimpl/native_rdb", + "//foundation/distributeddatamgr/appdatamgr/frameworks/jskitsimpl/common", + "//foundation/distributeddatamgr/appdatamgr/frameworks/jskitsimpl/native_dataability", ] sources = [ + "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/featureAbility/napi_context.cpp", + "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/featureAbility/napi_data_ability_helper.cpp", + "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/featureAbility/napi_data_ability_operation.cpp", + "//foundation/distributeddatamgr/appdatamgr/frameworks/jskitsimpl/common/js_utils.cpp", + "//foundation/distributeddatamgr/appdatamgr/frameworks/jskitsimpl/native_dataability/napi_data_ability_predicates.cpp", + "//foundation/distributeddatamgr/appdatamgr/frameworks/jskitsimpl/native_rdb/napi_result_set.cpp", "native_module.cpp", "particle_ability.cpp", ] @@ -32,6 +42,7 @@ ohos_shared_library("particleability") { deps = [ "//foundation/aafwk/standard/frameworks/kits/ability/native:abilitykit_native", "//foundation/aafwk/standard/interfaces/innerkits/base:base", + "//foundation/aafwk/standard/interfaces/innerkits/dataobs_manager:dataobs_manager", "//foundation/aafwk/standard/interfaces/kits/napi/aafwk/inner/napi_common:napi_common", "//foundation/ace/napi:ace_napi", "//foundation/appexecfwk/standard/kits:appkit_native", @@ -48,6 +59,9 @@ ohos_shared_library("particleability") { "appexecfwk_standard:libeventhandler", "hiviewdfx_hilog_native:libhilog", "ipc:ipc_core", + "native_appdatamgr:native_appdatafwk", + "native_appdatamgr:native_dataability", + "native_appdatamgr:native_rdb", ] relative_install_dir = "module/ability" diff --git a/interfaces/kits/napi/aafwk/particleAbility/native_module.cpp b/interfaces/kits/napi/aafwk/particleAbility/native_module.cpp index fd1578e82d0..910e81a4dd9 100755 --- a/interfaces/kits/napi/aafwk/particleAbility/native_module.cpp +++ b/interfaces/kits/napi/aafwk/particleAbility/native_module.cpp @@ -20,6 +20,8 @@ #include "napi/native_api.h" #include "napi/native_node_api.h" #include "particle_ability.h" +#include "napi_context.h" +#include "napi_data_ability_helper.h" namespace OHOS { namespace AppExecFwk { EXTERN_C_START @@ -29,6 +31,8 @@ EXTERN_C_START static napi_value ParticleInit(napi_env env, napi_value exports) { ParticleAbilityInit(env, exports); + ContextPermissionInit(env, exports); + DataAbilityHelperInit(env, exports); return exports; } EXTERN_C_END @@ -36,15 +40,13 @@ EXTERN_C_END /* * The module definition. */ -static napi_module _module = { - .nm_version = 1, +static napi_module _module = {.nm_version = 1, .nm_flags = 0, .nm_filename = nullptr, .nm_register_func = ParticleInit, .nm_modname = "ability.particleAbility", .nm_priv = ((void *)0), - .reserved = {0} -}; + .reserved = {0}}; /* * The module registration. diff --git a/services/abilitymgr/src/ability_scheduler_proxy.cpp b/services/abilitymgr/src/ability_scheduler_proxy.cpp index 533c0545777..365b29d99ad 100644 --- a/services/abilitymgr/src/ability_scheduler_proxy.cpp +++ b/services/abilitymgr/src/ability_scheduler_proxy.cpp @@ -885,8 +885,6 @@ std::vector> AbilitySchedulerProx MessageParcel reply; MessageOption option; - MessageParcel datatemp; - std::vector> results; results.clear(); @@ -900,14 +898,12 @@ std::vector> AbilitySchedulerProx HILOG_ERROR("AbilitySchedulerProxy::ExecuteBatch fail to WriteInt32 ret"); return results; } - datatemp.WriteInt32(count); for (int i = 0; i < count; i++) { if (!data.WriteParcelable(operations[i].get())) { HILOG_ERROR("AbilitySchedulerProxy::ExecuteBatch fail to WriteParcelable ret, index = %{public}d", i); return results; } - datatemp.WriteParcelable(operations[i].get()); } int32_t err = Remote()->SendRequest(IAbilityScheduler::SCHEDULE_EXECUTEBATCH, data, reply, option); @@ -915,22 +911,6 @@ std::vector> AbilitySchedulerProx HILOG_ERROR("AbilitySchedulerProxy::ExecuteBatch fail to SendRequest. err: %{public}d", err); } - int tempCount = 0; - if (!datatemp.ReadInt32(tempCount)) { - HILOG_ERROR("AbilitySchedulerProxy::ExecuteBatchInner fail to ReadInt32 count"); - return results; - } - HILOG_ERROR("AbilitySchedulerProxy::ExecuteBatchInner datatemp.ReadInt32(tempCount) to %{public}d", tempCount); - - for (int i = 0; i < tempCount; ++i) { - AppExecFwk::DataAbilityOperation *operation = datatemp.ReadParcelable(); - if (operation == nullptr) { - HILOG_ERROR("AbilitySchedulerProxy::ExecuteBatchInner operation is nullptr, index = %{public}d", i); - return results; - } - } - HILOG_INFO("AbilitySchedulerProxy::ExecuteBatchInner operation->testShow done "); - int total = 0; if (!reply.ReadInt32(total)) { HILOG_ERROR("AbilitySchedulerProxy::ExecuteBatch fail to ReadInt32 count %{public}d", total); @@ -946,7 +926,7 @@ std::vector> AbilitySchedulerProx std::shared_ptr dataAbilityResult(result); results.push_back(dataAbilityResult); } - HILOG_INFO("AbilitySchedulerProxy::ExecuteBatch end"); + HILOG_INFO("AbilitySchedulerProxy::ExecuteBatch end %{public}d", total); return results; } } // namespace AAFwk diff --git a/services/abilitymgr/src/ability_stack_manager.cpp b/services/abilitymgr/src/ability_stack_manager.cpp index 2653933312a..0b6a5b5eedc 100644 --- a/services/abilitymgr/src/ability_stack_manager.cpp +++ b/services/abilitymgr/src/ability_stack_manager.cpp @@ -347,14 +347,6 @@ int AbilityStackManager::TerminateAbility(const sptr &token, int return LOCK_MISSION_STATE_DENY_REQUEST; } - // if ability is in multiwindow stack, and is bottom ability of this mission, - // just background, don't schedule terminate - if (!IsFullScreenStack(abilityRecord->GetMissionStackId()) && - missionRecord->GetBottomAbilityRecord() == abilityRecord) { - HILOG_INFO("Mulitwindow stack , bottom ability of mission .just background, don't schedule terminate."); - return MoveMissionToEndLocked(missionRecord->GetMissionRecordId()); - } - HILOG_INFO("Schedule normal terminate process."); abilityRecord->SetTerminatingState(); return TerminateAbilityLocked(abilityRecord, resultCode, resultWant); @@ -1147,6 +1139,7 @@ void AbilityStackManager::CompleteActive(const std::shared_ptr &a return; } if (isActiveAbility) { + abilityRecord->SetPowerState(false); return; } HILOG_DEBUG("Not top ability, need complete inactive."); @@ -2119,7 +2112,6 @@ void AbilityStackManager::OnAbilityDiedByLauncher(std::shared_ptr // Process the dead ability record if (mission->GetBottomAbilityRecord() == abilityRecord && abilityRecord->IsLauncherRoot()) { HILOG_DEBUG("Root launcher ability died, set state: INITIAL."); - abilityRecord->ClearFlag(); abilityRecord->SetAbilityState(AbilityState::INITIAL); } else { mission->RemoveAbilityRecord(abilityRecord); @@ -2212,7 +2204,6 @@ void AbilityStackManager::OnAbilityDiedByDefault(std::shared_ptr } else { if (mission->GetBottomAbilityRecord() == abilityRecord) { HILOG_INFO("Ability died, state: INITIAL, %{public}d", __LINE__); - abilityRecord->ClearFlag(); abilityRecord->SetAbilityState(AbilityState::INITIAL); } else { HILOG_INFO("Ability died, remove record, %{public}d", __LINE__); diff --git a/services/abilitymgr/src/mission_record.cpp b/services/abilitymgr/src/mission_record.cpp index 5f324ba9869..9a129637773 100644 --- a/services/abilitymgr/src/mission_record.cpp +++ b/services/abilitymgr/src/mission_record.cpp @@ -341,6 +341,7 @@ void MissionRecord::Resume(const std::shared_ptr &backup) for (auto &ability : abilities_) { if (ability->IsAbilityState(AbilityState::INITIAL)) { + ability->ClearFlag(); ability->SetRestarting(true); } } diff --git a/services/dataobsmgr/src/dataobs_mgr_inner.cpp b/services/dataobsmgr/src/dataobs_mgr_inner.cpp index 9d390ad79f1..0e6036f7220 100644 --- a/services/dataobsmgr/src/dataobs_mgr_inner.cpp +++ b/services/dataobsmgr/src/dataobs_mgr_inner.cpp @@ -45,10 +45,12 @@ int DataObsMgrInner::HandleRegisterObserver(const Uri &uri, const sptrAsObject() == dataObserver->AsObject()) { + HILOG_ERROR("DataObsMgrInner::HandleRegisterObserver the obs exist. no need to register."); + return OBS_EXIST; + } } obslist.push_back(dataObserver); diff --git a/services/dataobsmgr/src/dataobs_mgr_service.cpp b/services/dataobsmgr/src/dataobs_mgr_service.cpp index 44295c8de81..18d399bd483 100644 --- a/services/dataobsmgr/src/dataobs_mgr_service.cpp +++ b/services/dataobsmgr/src/dataobs_mgr_service.cpp @@ -164,7 +164,7 @@ int DataObsMgrService::UnregisterObserver(const Uri &uri, const sptrAtomicAddTaskCount(); - bool ret = handler_->PostTask(unregisterObserverFunc); + bool ret = handler_->PostSyncTask(unregisterObserverFunc); if (!ret) { dataObsMgrInner_->AtomicSubTaskCount(); HILOG_ERROR("DataObsMgrService::UnregisterObserver PostTask error"); diff --git a/tools/aa/src/ability_command.cpp b/tools/aa/src/ability_command.cpp index ec2a5ec494a..3c4c3ceca44 100755 --- a/tools/aa/src/ability_command.cpp +++ b/tools/aa/src/ability_command.cpp @@ -24,7 +24,7 @@ using namespace OHOS::AppExecFwk; namespace OHOS { namespace AAFwk { namespace { -const std::string SHORT_OPTIONS = "h:d:a:b:p:s:"; +const std::string SHORT_OPTIONS = "hd:a:b:p:s:"; const struct option LONG_OPTIONS[] = { {"help", no_argument, nullptr, 'h'}, {"device", required_argument, nullptr, 'd'}, -- Gitee