From f0c215812041c3235875f6b5cdbad04dac8bc331 Mon Sep 17 00:00:00 2001 From: wanchengzhen Date: Wed, 16 Feb 2022 16:13:16 +0800 Subject: [PATCH 1/2] update code Signed-off-by: wanchengzhen --- frameworks/kits/ability/native/BUILD.gn | 1 + .../include/ability_runtime/js_ability.h | 2 + .../native/src/ability_runtime/js_ability.cpp | 54 +++++ frameworks/kits/appkit/BUILD.gn | 73 +++++- .../include/ability_delegator.h | 58 ++--- .../include/ability_delegator_infos.h | 33 +++ .../include/iability_monitor.h | 13 +- .../src/ability_delegator.cpp | 229 ++++++------------ .../src/iability_monitor.cpp | 30 +-- .../appkit/native/app/include/main_thread.h | 12 - .../appkit/native/app/src/main_thread.cpp | 30 +-- .../napi/aafwk/app/ability_delegator/BUILD.gn | 2 +- .../app/ability_delegator/ability_monitor.cpp | 16 +- .../app/ability_delegator/ability_monitor.h | 17 +- .../js_ability_delegator.cpp | 69 ++++-- .../ability_delegator/js_ability_delegator.h | 2 + .../js_ability_delegator_registry.cpp | 15 +- .../js_ability_delegator_utils.cpp | 27 +-- .../napi/aafwk/app/test_runner/test_runner.js | 4 +- .../src/ability_manager_service.cpp | 12 + .../abilitymgr/src/mission_list_manager.cpp | 26 +- 21 files changed, 393 insertions(+), 332 deletions(-) create mode 100644 frameworks/kits/appkit/native/ability_delegator/include/ability_delegator_infos.h diff --git a/frameworks/kits/ability/native/BUILD.gn b/frameworks/kits/ability/native/BUILD.gn index 3bfc269332c..03e29296500 100644 --- a/frameworks/kits/ability/native/BUILD.gn +++ b/frameworks/kits/ability/native/BUILD.gn @@ -247,6 +247,7 @@ ohos_shared_library("abilitykit_native") { "//foundation/aafwk/standard/common/task_dispatcher:task_dispatcher", "//foundation/aafwk/standard/frameworks/kits/ability/ability_runtime:ability_context_native", "//foundation/aafwk/standard/frameworks/kits/appkit:app_context", + "//foundation/aafwk/standard/frameworks/kits/appkit:appkit_delegator", "//foundation/aafwk/standard/interfaces/innerkits/ability_manager:ability_manager", "//foundation/aafwk/standard/interfaces/innerkits/app_manager:app_manager", "//foundation/aafwk/standard/interfaces/innerkits/dataobs_manager:dataobs_manager", diff --git a/frameworks/kits/ability/native/include/ability_runtime/js_ability.h b/frameworks/kits/ability/native/include/ability_runtime/js_ability.h index 59db1588763..851d6fa9f21 100755 --- a/frameworks/kits/ability/native/include/ability_runtime/js_ability.h +++ b/frameworks/kits/ability/native/include/ability_runtime/js_ability.h @@ -17,6 +17,7 @@ #define ABILITY_RUNTIME_JS_ABILITY_H #include "ability.h" +#include "ability_delegator_infos.h" class NativeReference; class NativeValue; @@ -69,6 +70,7 @@ private: void CallObjectMethod(const char *name, NativeValue *const *argv = nullptr, size_t argc = 0); std::unique_ptr CreateAppWindowStage(); void GetPageStackFromWant(const Want &want, std::string &pageStack); + std::shared_ptr CreateADelegatorAbilityProperty(); JsRuntime &jsRuntime_; std::shared_ptr shellContextRef_; diff --git a/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp b/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp index 46ad247b289..75eabeda3e1 100755 --- a/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp +++ b/frameworks/kits/ability/native/src/ability_runtime/js_ability.cpp @@ -15,6 +15,7 @@ #include #include "system_ability_definition.h" #include "if_system_ability_manager.h" +#include "ability_delegator_registry.h" #include "ability_runtime/js_ability.h" #include "ability_runtime/js_ability_context.h" @@ -144,6 +145,12 @@ void JsAbility::OnStart(const Want &want) CreateJsLaunchParam(nativeEngine, GetLaunchParam()), }; CallObjectMethod("onCreate", argv, ArraySize(argv)); + + auto delegator = AppExecFwk::AbilityDelegatorRegistry::GetAbilityDelegator(); + if (delegator) { + HILOG_INFO("Call AbilityDelegator::PostPerformStart"); + delegator->PostPerformStart(CreateADelegatorAbilityProperty()); + } } void JsAbility::OnStop() @@ -151,6 +158,13 @@ void JsAbility::OnStop() Ability::OnStop(); CallObjectMethod("onDestroy"); + + auto delegator = AppExecFwk::AbilityDelegatorRegistry::GetAbilityDelegator(); + if (delegator) { + HILOG_INFO("Call AbilityDelegator::PostPerformStop"); + delegator->PostPerformStop(CreateADelegatorAbilityProperty()); + } + bool ret = ConnectionManager::GetInstance().DisconnectCaller(AbilityContext::token_); if (ret) { HILOG_INFO("The service connection is not disconnected."); @@ -168,6 +182,12 @@ void JsAbility::OnSceneCreated() } NativeValue *argv[] = {jsAppWindowStage->Get()}; CallObjectMethod("onWindowStageCreate", argv, ArraySize(argv)); + + auto delegator = AppExecFwk::AbilityDelegatorRegistry::GetAbilityDelegator(); + if (delegator) { + HILOG_INFO("Call AbilityDelegator::PostPerformScenceCreated"); + delegator->PostPerformScenceCreated(CreateADelegatorAbilityProperty()); + } } void JsAbility::OnSceneRestored() @@ -181,6 +201,12 @@ void JsAbility::OnSceneRestored() } NativeValue *argv[] = {jsAppWindowStage->Get()}; CallObjectMethod("onWindowStageRestore", argv, ArraySize(argv)); + + auto delegator = AppExecFwk::AbilityDelegatorRegistry::GetAbilityDelegator(); + if (delegator) { + HILOG_INFO("Call AbilityDelegator::PostPerformScenceRestored"); + delegator->PostPerformScenceRestored(CreateADelegatorAbilityProperty()); + } } void JsAbility::onSceneDestroyed() @@ -188,6 +214,12 @@ void JsAbility::onSceneDestroyed() Ability::onSceneDestroyed(); CallObjectMethod("onWindowStageDestroy"); + + auto delegator = AppExecFwk::AbilityDelegatorRegistry::GetAbilityDelegator(); + if (delegator) { + HILOG_INFO("Call AbilityDelegator::PostPerformScenceDestroyed"); + delegator->PostPerformScenceDestroyed(CreateADelegatorAbilityProperty()); + } } void JsAbility::OnForeground(const Want &want) @@ -210,6 +242,12 @@ void JsAbility::OnForeground(const Want &want) obj->SetProperty("lastRequestWant", jsWant); CallObjectMethod("onForeground", &jsWant, 1); + + auto delegator = AppExecFwk::AbilityDelegatorRegistry::GetAbilityDelegator(); + if (delegator) { + HILOG_INFO("Call AbilityDelegator::PostPerformForeground"); + delegator->PostPerformForeground(CreateADelegatorAbilityProperty()); + } } void JsAbility::OnBackground() @@ -217,6 +255,12 @@ void JsAbility::OnBackground() Ability::OnBackground(); CallObjectMethod("onBackground"); + + auto delegator = AppExecFwk::AbilityDelegatorRegistry::GetAbilityDelegator(); + if (delegator) { + HILOG_INFO("Call AbilityDelegator::PostPerformBackground"); + delegator->PostPerformBackground(CreateADelegatorAbilityProperty()); + } } bool JsAbility::OnContinue(WantParams &wantParams) @@ -472,5 +516,15 @@ void JsAbility::DoOnForeground(const Want &want) scene_->GoForeground(Ability::sceneFlag_); HILOG_INFO("%{public}s end scene_->GoForeground.", __func__); } + +std::shared_ptr JsAbility::CreateADelegatorAbilityProperty() +{ + auto property = std::make_shared(); + property->token_ = GetAbilityContext()->GetToken(); + property->name_ = GetAbilityName(); + property->lifecycleState_ = GetState(); + + return property; +} } // namespace AbilityRuntime } // namespace OHOS diff --git a/frameworks/kits/appkit/BUILD.gn b/frameworks/kits/appkit/BUILD.gn index 372c6a06c46..e3992e2f4cd 100644 --- a/frameworks/kits/appkit/BUILD.gn +++ b/frameworks/kits/appkit/BUILD.gn @@ -95,7 +95,6 @@ ohos_shared_library("appkit_native") { "${aafwk_path}/frameworks/kits/appkit/native/ability_runtime/context", "${aafwk_path}/frameworks/kits/appkit/native", "${aafwk_path}/frameworks/kits/ability/native/include", - "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/include", "${aafwk_path}/interfaces/innerkits/ability_manager/include", "${aafwk_path}/services/abilitymgr/include", "//utils/native/base/include", @@ -125,15 +124,6 @@ ohos_shared_library("appkit_native") { "${aafwk_path}/frameworks/kits/appkit/native/app/src/application_impl.cpp", "${aafwk_path}/frameworks/kits/appkit/native/app/src/context_container.cpp", - #"${aafwk_path}/frameworks/kits/appkit/native/app/main.cpp", - "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator.cpp", - "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator_args.cpp", - "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator_registry.cpp", - "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/delegator_thread.cpp", - "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/iability_monitor.cpp", - "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/runner_runtime/js_test_runner.cpp", - "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/shell_cmd_result.cpp", - "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/test_runner.cpp", "${aafwk_path}/frameworks/kits/appkit/native/ability_runtime/app/ability_stage.cpp", "${aafwk_path}/frameworks/kits/appkit/native/ability_runtime/app/js_ability_stage.cpp", "${aafwk_path}/frameworks/kits/appkit/native/app/src/context_deal.cpp", @@ -149,6 +139,7 @@ ohos_shared_library("appkit_native") { cflags += [ "-DBINDER_IPC_32BIT" ] } deps = [ + ":appkit_delegator", "${aafwk_path}/common/task_dispatcher:task_dispatcher", "${aafwk_path}/frameworks/kits/ability/native:abilitykit_native", "${aafwk_path}/frameworks/kits/appkit:app_context", @@ -246,3 +237,65 @@ ohos_shared_library("app_context") { part_name = "ability_runtime" } + +# build so +ohos_shared_library("appkit_delegator") { + include_dirs = [ + "${appexecfwk_path}/common/log/include", + "${aafwk_path}/frameworks/kits/appkit/native/ability_runtime/app", + "${aafwk_path}/frameworks/kits/appkit/native/ability_runtime/context", + "${aafwk_path}/frameworks/kits/appkit/native", + "${aafwk_path}/frameworks/kits/ability/native/include", + "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/include", + "${aafwk_path}/interfaces/innerkits/ability_manager/include", + "//utils/native/base/include", + ] + + configs = [ ":appkit_config" ] + + public_configs = [ ":appkit_public_config" ] + + sources = [ + "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator.cpp", + "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator_args.cpp", + "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator_registry.cpp", + "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/delegator_thread.cpp", + "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/iability_monitor.cpp", + "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/runner_runtime/js_test_runner.cpp", + "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/shell_cmd_result.cpp", + "${aafwk_path}/frameworks/kits/appkit/native/ability_delegator/src/test_runner.cpp", + "//foundation/aafwk/standard/tools/aa/src/shell_command_result.cpp", + "//foundation/aafwk/standard/tools/aa/src/test_observer_proxy.cpp", + ] + + cflags = [] + if (target_cpu == "arm") { + cflags += [ "-DBINDER_IPC_32BIT" ] + } + + deps = [ + "${aafwk_path}/frameworks/kits/appkit:app_context", + "${aafwk_path}/interfaces/innerkits/ability_manager:ability_manager", + "${aafwk_path}/interfaces/innerkits/app_manager:app_manager", + "${aafwk_path}/interfaces/innerkits/want:want", + "${appexecfwk_path}/common:libappexecfwk_common", + "${appexecfwk_path}/interfaces/innerkits/appexecfwk_base:appexecfwk_base", + "${appexecfwk_path}/interfaces/innerkits/appexecfwk_core:appexecfwk_core", + "${appexecfwk_path}/interfaces/innerkits/libeventhandler:libeventhandler", + "//third_party/icu/icu4c:shared_icuuc", + "//utils/native/base:utils", + ] + + external_deps = [ + "ability_runtime:runtime", + "bytrace_standard:bytrace_core", + "hiviewdfx_hilog_native:libhilog", + "ipc:ipc_core", + ] + + public_deps = [ + "//foundation/ace/napi:ace_napi", + ] + + part_name = "ability_runtime" +} diff --git a/frameworks/kits/appkit/native/ability_delegator/include/ability_delegator.h b/frameworks/kits/appkit/native/ability_delegator/include/ability_delegator.h index d970c48d466..0a0a1f084a9 100644 --- a/frameworks/kits/appkit/native/ability_delegator/include/ability_delegator.h +++ b/frameworks/kits/appkit/native/ability_delegator/include/ability_delegator.h @@ -19,24 +19,21 @@ #include #include #include -#include #include -#include #include +#include "ability_delegator_infos.h" #include "iability_monitor.h" #include "delegator_thread.h" #include "shell_cmd_result.h" #include "test_runner.h" -#include "ability_lifecycle_callbacks.h" #include "ability_lifecycle_executor.h" #include "ability_runtime/context/context.h" -#include "main_thread.h" namespace OHOS { namespace AppExecFwk { -class AbilityDelegator : public AbilityLifecycleCallbacks, public std::enable_shared_from_this { +class AbilityDelegator : public std::enable_shared_from_this { public: enum class AbilityState : uint8_t { UNINITIALIZED = 0, @@ -46,24 +43,11 @@ public: STOPED }; - using ability_property = std::tuple, std::shared_ptr, AbilityDelegator::AbilityState>; - using list_ability_property = std::list; - public: - AbilityDelegator(const sptr &mainThread, std::unique_ptr runner, + AbilityDelegator(const std::shared_ptr &context, std::unique_ptr runner, const sptr &observer); ~AbilityDelegator(); - void Init(); - - void OnAbilityStart(const std::shared_ptr &ability) override; - void OnAbilityInactive(const std::shared_ptr &ability) override; - void OnAbilityBackground(const std::shared_ptr &ability) override; - void OnAbilityForeground(const std::shared_ptr &ability) override; - void OnAbilityActive(const std::shared_ptr &ability) override; - void OnAbilityStop(const std::shared_ptr &ability) override; - void OnAbilitySaveState(const PacMap &outState) override; - void AddAbilityMonitor(const std::shared_ptr &monitor); void RemoveAbilityMonitor(const std::shared_ptr &monitor); void ClearAllMonitors(); @@ -88,35 +72,29 @@ public: void Print(const std::string &msg); - void PrePerformStart(const std::shared_ptr &ability); - void PostPerformStart(const std::shared_ptr &ability); - void PrePerformScenceCreated(const std::shared_ptr &ability); - void PrePerformScenceRestored(const std::shared_ptr &ability); - void PrePerformScenceDestroyed(const std::shared_ptr &ability); - void PrePerformForeground(const std::shared_ptr &ability); - void PrePerformBackground(const std::shared_ptr &ability); - void PrePerformStop(const std::shared_ptr &ability); + void PostPerformStart(const std::shared_ptr &ability); + void PostPerformScenceCreated(const std::shared_ptr &ability); + void PostPerformScenceRestored(const std::shared_ptr &ability); + void PostPerformScenceDestroyed(const std::shared_ptr &ability); + void PostPerformForeground(const std::shared_ptr &ability); + void PostPerformBackground(const std::shared_ptr &ability); + void PostPerformStop(const std::shared_ptr &ability); -private: - AbilityDelegator::AbilityState ConvertAbilityState(const AbilityLifecycleExecutor::LifecycleState lifecycleState); - void ProcessAbilityProperties(const std::shared_ptr &ability); - sptr GetAbilityToken(const std::shared_ptr &ability); - std::optional DoesPropertyExist(const sptr &token); - void FinishUserTest(const int32_t resultCode); + void FinishUserTest(const std::string &msg, const int32_t resultCode); private: - static constexpr size_t FIRST_PROPERTY {0}; - static constexpr size_t SECOND_PROPERTY {1}; - static constexpr size_t THIRD_PROPERTY {2}; + AbilityDelegator::AbilityState ConvertAbilityState(const AbilityLifecycleExecutor::LifecycleState lifecycleState); + void ProcessAbilityProperties(const std::shared_ptr &ability); + std::shared_ptr DoesPropertyExist(const sptr &token); private: - sptr mainThread_; + std::shared_ptr appContext_; std::unique_ptr testRunner_; + sptr observer_; + std::unique_ptr delegatorThread_; - list_ability_property abilityProperties_; + std::list> abilityProperties_; std::vector> abilityMonitors_; - std::shared_ptr appContext_; - sptr observer_; std::mutex mutexMonitor_; std::mutex mutexAbilityProperties_; diff --git a/frameworks/kits/appkit/native/ability_delegator/include/ability_delegator_infos.h b/frameworks/kits/appkit/native/ability_delegator/include/ability_delegator_infos.h new file mode 100644 index 00000000000..f7f69cc39f5 --- /dev/null +++ b/frameworks/kits/appkit/native/ability_delegator/include/ability_delegator_infos.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2021 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef FOUNDATION_APPEXECFWK_OHOS_ABILITY_DELEGATOR_INFOS_H +#define FOUNDATION_APPEXECFWK_OHOS_ABILITY_DELEGATOR_INFOS_H + +#include +#include "ability_lifecycle_executor.h" +#include "iremote_object.h" + +namespace OHOS { +namespace AppExecFwk { +struct ADelegatorAbilityProperty { + sptr token_; + std::string name_; + AbilityLifecycleExecutor::LifecycleState lifecycleState_ {AbilityLifecycleExecutor::LifecycleState::UNINITIALIZED}; +}; +} // namespace AppExecFwk +} // namespace OHOS + +#endif // FOUNDATION_APPEXECFWK_OHOS_ABILITY_DELEGATOR_INFOS_H diff --git a/frameworks/kits/appkit/native/ability_delegator/include/iability_monitor.h b/frameworks/kits/appkit/native/ability_delegator/include/iability_monitor.h index 00a01e0dea9..337ab360567 100644 --- a/frameworks/kits/appkit/native/ability_delegator/include/iability_monitor.h +++ b/frameworks/kits/appkit/native/ability_delegator/include/iability_monitor.h @@ -17,14 +17,11 @@ #define FOUNDATION_APPEXECFWK_OHOS_IABILITY_MONITORE_H #include -#include #include #include #include -#include -#include "ability.h" -#include "want.h" +#include "ability_delegator_infos.h" namespace OHOS { namespace AppExecFwk { @@ -36,10 +33,10 @@ public: explicit IAbilityMonitor(const std::string &abilityName); virtual ~IAbilityMonitor() = default; - virtual bool Match(const std::shared_ptr &ability, const Want &want); + virtual bool Match(const std::shared_ptr &ability, bool isNotify = false); - virtual std::shared_ptr waitForAbility(); - virtual std::shared_ptr waitForAbility(const int64_t timeoutMs); + virtual std::shared_ptr waitForAbility(); + virtual std::shared_ptr waitForAbility(const int64_t timeoutMs); virtual void OnAbilityStart(); virtual void OnAbilityForeground(); @@ -52,7 +49,7 @@ public: private: std::string abilityName_; - std::shared_ptr matchedAbility_; + std::shared_ptr matchedAbility_; std::condition_variable cvMatch_; std::mutex mMatch_; diff --git a/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator.cpp b/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator.cpp index 471cda75eba..81bd3b47ed2 100644 --- a/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator.cpp +++ b/frameworks/kits/appkit/native/ability_delegator/src/ability_delegator.cpp @@ -23,67 +23,12 @@ namespace OHOS { namespace AppExecFwk { -AbilityDelegator::AbilityDelegator(const sptr &mainThread, std::unique_ptr runner, - const sptr &observer) - : mainThread_(mainThread), testRunner_(std::move(runner)), observer_(observer) +AbilityDelegator::AbilityDelegator(const std::shared_ptr &context, + std::unique_ptr runner, const sptr &observer) + : appContext_(context), testRunner_(std::move(runner)), observer_(observer) {} AbilityDelegator::~AbilityDelegator() -{ - if (mainThread_) { - auto app = mainThread_->GetApplication(); - if (app) { - app->UnregisterAbilityLifecycleCallbacks(shared_from_this()); - } - } -} - -void AbilityDelegator::Init() -{ - APP_LOGI("Enter"); - - if (!mainThread_) { - APP_LOGE("Invalid mainThread"); - return; - } - - auto app = mainThread_->GetApplication(); - if (!app) { - APP_LOGE("Invalid application"); - return; - } - - appContext_ = app->GetAppContext(); - app->RegisterAbilityLifecycleCallbacks(shared_from_this()); -} - -void AbilityDelegator::OnAbilityStart(const std::shared_ptr &ability) -{ - ProcessAbilityProperties(ability); -} - -void AbilityDelegator::OnAbilityInactive(const std::shared_ptr &ability) -{} - -void AbilityDelegator::OnAbilityBackground(const std::shared_ptr &ability) -{ - ProcessAbilityProperties(ability); -} - -void AbilityDelegator::OnAbilityForeground(const std::shared_ptr &ability) -{ - ProcessAbilityProperties(ability); -} - -void AbilityDelegator::OnAbilityActive(const std::shared_ptr &ability) -{} - -void AbilityDelegator::OnAbilityStop(const std::shared_ptr &ability) -{ - ProcessAbilityProperties(ability); -} - -void AbilityDelegator::OnAbilitySaveState(const PacMap &outState) {} void AbilityDelegator::AddAbilityMonitor(const std::shared_ptr &monitor) @@ -144,7 +89,7 @@ sptr AbilityDelegator::WaitAbilityMonitor(const std::shared_ptrtoken_; } sptr AbilityDelegator::WaitAbilityMonitor( @@ -163,7 +108,7 @@ sptr AbilityDelegator::WaitAbilityMonitor( return {}; } - return GetAbilityToken(obtainedAbility); + return obtainedAbility->token_; } std::shared_ptr AbilityDelegator::GetAppContext() const @@ -185,7 +130,7 @@ AbilityDelegator::AbilityState AbilityDelegator::GetAbilityState(const sptr(existedProperty.value()); + return ConvertAbilityState(existedProperty->lifecycleState_); } sptr AbilityDelegator::GetCurrentTopAbility() @@ -249,8 +194,9 @@ bool AbilityDelegator::DoAbilityForeground(const sptr &token) return false; } - if (AAFwk::AbilityManagerClient::GetInstance()->DelegatorDoAbilityForeground(token)) { - APP_LOGE("Failed to call DelegatorDoAbilityForeground"); + auto ret = AAFwk::AbilityManagerClient::GetInstance()->DelegatorDoAbilityForeground(token); + if (ret) { + APP_LOGE("Failed to call DelegatorDoAbilityForeground, reson : %{public}d", ret); return false; } @@ -264,8 +210,9 @@ bool AbilityDelegator::DoAbilityBackground(const sptr &token) return false; } - if (AAFwk::AbilityManagerClient::GetInstance()->DelegatorDoAbilityBackground(token)) { - APP_LOGE("Failed to call DelegatorDoAbilityBackground"); + auto ret = AAFwk::AbilityManagerClient::GetInstance()->DelegatorDoAbilityBackground(token); + if (ret) { + APP_LOGE("Failed to call DelegatorDoAbilityBackground, reson : %{public}d", ret); return false; } @@ -293,6 +240,7 @@ std::unique_ptr AbilityDelegator::ExecuteShellCommand(const std: void AbilityDelegator::Print(const std::string &msg) { + APP_LOGI("message to print : %{public}s", msg.data()); auto testObserver = iface_cast(observer_); if (!testObserver) { APP_LOGW("Invalid testObserver"); @@ -302,35 +250,14 @@ void AbilityDelegator::Print(const std::string &msg) testObserver->TestStatus(msg, 0); } -void AbilityDelegator::PrePerformStart(const std::shared_ptr &ability) +void AbilityDelegator::PostPerformStart(const std::shared_ptr &ability) { if (!ability) { APP_LOGW("Invalid input parameter"); return; } - std::unique_lock lck(mutexMonitor_); - if (abilityMonitors_.empty()) { - APP_LOGW("Empty abilityMonitors"); - return; - } - - for (auto &monitor : abilityMonitors_) { - if (!monitor) { - continue; - } - - monitor->Match(ability, {}); - monitor->OnAbilityStart(); - } -} - -void AbilityDelegator::PostPerformStart(const std::shared_ptr &ability) -{ - if (!ability) { - APP_LOGW("Invalid input parameter"); - return; - } + ProcessAbilityProperties(ability); std::unique_lock lck(mutexMonitor_); if (abilityMonitors_.empty()) { @@ -343,17 +270,21 @@ void AbilityDelegator::PostPerformStart(const std::shared_ptr &ability) continue; } - monitor->Match(ability, {}); + if (monitor->Match(ability, true)) { + monitor->OnAbilityStart(); + } } } -void AbilityDelegator::PrePerformScenceCreated(const std::shared_ptr &ability) +void AbilityDelegator::PostPerformScenceCreated(const std::shared_ptr &ability) { if (!ability) { APP_LOGW("Invalid input parameter"); return; } + ProcessAbilityProperties(ability); + std::unique_lock lck(mutexMonitor_); if (abilityMonitors_.empty()) { APP_LOGW("Empty abilityMonitors"); @@ -365,18 +296,21 @@ void AbilityDelegator::PrePerformScenceCreated(const std::shared_ptr &a continue; } - monitor->Match(ability, {}); - monitor->OnWindowStageCreate(); + if (monitor->Match(ability)) { + monitor->OnWindowStageCreate(); + } } } -void AbilityDelegator::PrePerformScenceRestored(const std::shared_ptr &ability) +void AbilityDelegator::PostPerformScenceRestored(const std::shared_ptr &ability) { if (!ability) { APP_LOGW("Invalid input parameter"); return; } + ProcessAbilityProperties(ability); + std::unique_lock lck(mutexMonitor_); if (abilityMonitors_.empty()) { APP_LOGW("Empty abilityMonitors"); @@ -388,18 +322,21 @@ void AbilityDelegator::PrePerformScenceRestored(const std::shared_ptr & continue; } - monitor->Match(ability, {}); - monitor->OnWindowStageRestore(); + if (monitor->Match(ability)) { + monitor->OnWindowStageRestore(); + } } } -void AbilityDelegator::PrePerformScenceDestroyed(const std::shared_ptr &ability) +void AbilityDelegator::PostPerformScenceDestroyed(const std::shared_ptr &ability) { if (!ability) { APP_LOGW("Invalid input parameter"); return; } + ProcessAbilityProperties(ability); + std::unique_lock lck(mutexMonitor_); if (abilityMonitors_.empty()) { APP_LOGW("Empty abilityMonitors"); @@ -411,18 +348,21 @@ void AbilityDelegator::PrePerformScenceDestroyed(const std::shared_ptr continue; } - monitor->Match(ability, {}); - monitor->OnWindowStageDestroy(); + if (monitor->Match(ability)) { + monitor->OnWindowStageDestroy(); + } } } -void AbilityDelegator::PrePerformForeground(const std::shared_ptr &ability) +void AbilityDelegator::PostPerformForeground(const std::shared_ptr &ability) { if (!ability) { APP_LOGW("Invalid input parameter"); return; } + ProcessAbilityProperties(ability); + std::unique_lock lck(mutexMonitor_); if (abilityMonitors_.empty()) { APP_LOGW("Empty abilityMonitors"); @@ -434,18 +374,21 @@ void AbilityDelegator::PrePerformForeground(const std::shared_ptr &abil continue; } - monitor->Match(ability, {}); - monitor->OnAbilityForeground(); + if (monitor->Match(ability)) { + monitor->OnAbilityForeground(); + } } } -void AbilityDelegator::PrePerformBackground(const std::shared_ptr &ability) +void AbilityDelegator::PostPerformBackground(const std::shared_ptr &ability) { if (!ability) { APP_LOGW("Invalid input parameter"); return; } + ProcessAbilityProperties(ability); + std::unique_lock lck(mutexMonitor_); if (abilityMonitors_.empty()) { APP_LOGW("Empty abilityMonitors"); @@ -457,18 +400,21 @@ void AbilityDelegator::PrePerformBackground(const std::shared_ptr &abil continue; } - monitor->Match(ability, {}); - monitor->OnAbilityBackground(); + if (monitor->Match(ability)) { + monitor->OnAbilityBackground(); + } } } -void AbilityDelegator::PrePerformStop(const std::shared_ptr &ability) +void AbilityDelegator::PostPerformStop(const std::shared_ptr &ability) { if (!ability) { APP_LOGW("Invalid input parameter"); return; } + ProcessAbilityProperties(ability); + std::unique_lock lck(mutexMonitor_); if (abilityMonitors_.empty()) { APP_LOGW("Empty abilityMonitors"); @@ -480,8 +426,9 @@ void AbilityDelegator::PrePerformStop(const std::shared_ptr &ability) continue; } - monitor->Match(ability, {}); - monitor->OnAbilityStop(); + if (monitor->Match(ability)) { + monitor->OnAbilityStop(); + } } } @@ -510,75 +457,53 @@ AbilityDelegator::AbilityState AbilityDelegator::ConvertAbilityState( return abilityState; } -void AbilityDelegator::ProcessAbilityProperties(const std::shared_ptr &ability) +void AbilityDelegator::ProcessAbilityProperties(const std::shared_ptr &ability) { if (!ability) { - APP_LOGW("Invalid ability"); + APP_LOGW("Invalid ability property"); return; } - auto abilityToken = GetAbilityToken(ability); - if (!abilityToken) { - APP_LOGE("Invalid ability token"); - return; - } + APP_LOGW("ability property : name : %{public}s, state : %{public}d", + ability->name_.data(), ability->lifecycleState_); std::unique_lock lck(mutexAbilityProperties_); - auto existedProperty = DoesPropertyExist(abilityToken); + auto existedProperty = DoesPropertyExist(ability->token_); if (existedProperty) { - abilityProperties_.remove(existedProperty.value()); - } - - auto abilityState = ConvertAbilityState(ability->GetState()); - if (abilityState == AbilityDelegator::AbilityState::FOREGROUND) { - abilityProperties_.emplace_front(abilityToken, ability, abilityState); - } else { - abilityProperties_.emplace_back(abilityToken, ability, abilityState); - } -} - -sptr AbilityDelegator::GetAbilityToken(const std::shared_ptr &ability) -{ - if (!ability) { - APP_LOGW("Invalid ability"); - return {}; - } - - auto abilityContext = ability->GetAbilityContext(); - if (!abilityContext) { - APP_LOGE("Invalid ability context"); - return {}; + // update + existedProperty->lifecycleState_ = ability->lifecycleState_; + return; } - return abilityContext->GetToken(); + abilityProperties_.emplace_back(ability); } -std::optional AbilityDelegator::DoesPropertyExist(const sptr &token) +std::shared_ptr AbilityDelegator::DoesPropertyExist(const sptr &token) { if (!token) { APP_LOGW("Invalid input parameter"); - return std::nullopt; + return {}; } for (auto &it : abilityProperties_) { - auto tmpToken = std::get(it); - if (token == tmpToken) { + if (!it) { + APP_LOGW("Invalid ability property"); + continue; + } + + if (token == it->token_) { + APP_LOGI("Porperty exists"); return it; } } - return std::nullopt; + return {}; } -void AbilityDelegator::FinishUserTest(const int32_t resultCode) +void AbilityDelegator::FinishUserTest(const std::string &msg, const int32_t resultCode) { APP_LOGI("Enter"); - if (!mainThread_) { - APP_LOGE("Invalid mainThread"); - return; - } - if (!observer_) { APP_LOGE("Invalid observer"); return; @@ -591,8 +516,10 @@ void AbilityDelegator::FinishUserTest(const int32_t resultCode) } const auto &bundleName = delegatorArgs->GetTestBundleName(); - - mainThread_->FinishUserTest("UserTest finished", resultCode, bundleName, observer_); + auto err = AAFwk::AbilityManagerClient::GetInstance()->FinishUserTest(msg, resultCode, bundleName, observer_); + if (err) { + APP_LOGE("MainThread::FinishUserTest is failed %{public}d", err); + } } } // namespace AppExecFwk } // namespace OHOS diff --git a/frameworks/kits/appkit/native/ability_delegator/src/iability_monitor.cpp b/frameworks/kits/appkit/native/ability_delegator/src/iability_monitor.cpp index c592bcd1e6a..1e52a05eb80 100644 --- a/frameworks/kits/appkit/native/ability_delegator/src/iability_monitor.cpp +++ b/frameworks/kits/appkit/native/ability_delegator/src/iability_monitor.cpp @@ -12,9 +12,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - -#include "iability_monitor.h" +#include #include "app_log_wrapper.h" +#include "iability_monitor.h" using namespace std::chrono_literals; @@ -23,15 +23,15 @@ namespace AppExecFwk { IAbilityMonitor::IAbilityMonitor(const std::string &abilityName) : abilityName_(abilityName) {} -bool IAbilityMonitor::Match(const std::shared_ptr &ability, const Want &want) +bool IAbilityMonitor::Match(const std::shared_ptr &ability, bool isNotify) { - std::string aName; - if (ability) { - aName = ability->GetAbilityName(); - } else { - aName = want.GetElement().GetAbilityName(); + if (!ability) { + APP_LOGW("Invalid ability property"); + return false; } + const auto &aName = ability->name_; + if (abilityName_.empty() || aName.empty()) { APP_LOGW("Invalid name"); return false; @@ -42,25 +42,27 @@ bool IAbilityMonitor::Match(const std::shared_ptr &ability, const Want return false; } - if (ability) { + APP_LOGI("Matched : ability name : %{public}s, isNotify : %{public}s", + abilityName_.data(), (isNotify ? "true" : "false")); + + if (isNotify) { + APP_LOGI("Matched : notify ability matched"); { std::lock_guard matchLock(mMatch_); matchedAbility_ = ability; } cvMatch_.notify_one(); - - return true; } - return false; + return true; } -std::shared_ptr IAbilityMonitor::waitForAbility() +std::shared_ptr IAbilityMonitor::waitForAbility() { return waitForAbility(MAX_TIME_OUT); } -std::shared_ptr IAbilityMonitor::waitForAbility(const int64_t timeoutMs) +std::shared_ptr IAbilityMonitor::waitForAbility(const int64_t timeoutMs) { auto realTime = timeoutMs; if (timeoutMs <= 0) { diff --git a/frameworks/kits/appkit/native/app/include/main_thread.h b/frameworks/kits/appkit/native/app/include/main_thread.h index 28e6e32b652..fea01d52b28 100644 --- a/frameworks/kits/appkit/native/app/include/main_thread.h +++ b/frameworks/kits/appkit/native/app/include/main_thread.h @@ -217,18 +217,6 @@ public: void ScheduleAcceptWant(const AAFwk::Want &want, const std::string &moduleName) override; - /** - * @brief Finish user test. - * @param msg user test message. - * @param resultCode user test result Code. - * @param bundleName user test bundleName. - * @param observer test observer callback. - * - * @return Returns ERR_OK on success, others on failure. - */ - int FinishUserTest(const std::string &msg, const int &resultCode, - const std::string &bundleName, const sptr &observer); - private: /** * diff --git a/frameworks/kits/appkit/native/app/src/main_thread.cpp b/frameworks/kits/appkit/native/app/src/main_thread.cpp index 9e9c7569465..59b41ee612e 100644 --- a/frameworks/kits/appkit/native/app/src/main_thread.cpp +++ b/frameworks/kits/appkit/native/app/src/main_thread.cpp @@ -834,6 +834,13 @@ void MainThread::HandleLaunchApplication(const AppLaunchData &appLaunchData, con return; } + // create contextImpl + std::shared_ptr contextImpl = std::make_shared(); + contextImpl->SetResourceManager(resourceManager); + contextImpl->SetApplicationInfo(std::make_shared(appInfo)); + contextImpl->InitAppContext(); + application_->SetApplicationContext(contextImpl); + bool moduelJson = false; bool isStageBased = false; if (!bundleInfo.hapModuleInfos.empty()) { @@ -883,13 +890,6 @@ void MainThread::HandleLaunchApplication(const AppLaunchData &appLaunchData, con application_->SetAbilityRecordMgr(abilityRecordMgr_); application_->SetConfiguration(config); - // create contextImpl - std::shared_ptr contextImpl = std::make_shared(); - contextImpl->SetResourceManager(resourceManager); - contextImpl->SetApplicationInfo(std::make_shared(appInfo)); - contextImpl->InitAppContext(); - application_->SetApplicationContext(contextImpl); - applicationImpl_->SetRecordId(appLaunchData.GetRecordId()); applicationImpl_->SetApplication(application_); mainThreadState_ = MainThreadState::READY; @@ -962,30 +962,18 @@ bool MainThread::AbilityDelegatorPrepare(const UserTestRecord &record) return false; } - auto delegator = std::make_shared(this, std::move(testRunner), record.observer); + auto delegator = std::make_shared( + application_->GetAppContext(), std::move(testRunner), record.observer); if (!delegator) { APP_LOGE("delegator is null"); return false; } - delegator->Init(); AbilityDelegatorRegistry::RegisterInstance(delegator, args); delegator->Prepare(); return true; } -int MainThread::FinishUserTest(const std::string &msg, const int &resultCode, - const std::string &bundleName, const sptr &observer) -{ - APP_LOGI("MainThread::FinishUserTest"); - ErrCode err = AAFwk::AbilityManagerClient::GetInstance()->FinishUserTest( - msg, resultCode, bundleName, observer); - if (err != ERR_OK) { - APP_LOGE("MainThread::FinishUserTest is failed %{public}d", err); - } - return ERR_OK; -} - /** * * @brief launch the ability. diff --git a/interfaces/kits/napi/aafwk/app/ability_delegator/BUILD.gn b/interfaces/kits/napi/aafwk/app/ability_delegator/BUILD.gn index da7a4cbcaaf..06853c2562b 100644 --- a/interfaces/kits/napi/aafwk/app/ability_delegator/BUILD.gn +++ b/interfaces/kits/napi/aafwk/app/ability_delegator/BUILD.gn @@ -36,7 +36,7 @@ ohos_shared_library("abilitydelegatorregistry") { deps = [ "//foundation/aafwk/standard/frameworks/kits/ability/native:abilitykit_native", "//foundation/aafwk/standard/frameworks/kits/appkit:app_context", - "//foundation/aafwk/standard/frameworks/kits/appkit:appkit_native", + "//foundation/aafwk/standard/frameworks/kits/appkit:appkit_delegator", "//foundation/aafwk/standard/interfaces/innerkits/ability_manager:ability_manager", "//foundation/aafwk/standard/interfaces/innerkits/base:base", ] diff --git a/interfaces/kits/napi/aafwk/app/ability_delegator/ability_monitor.cpp b/interfaces/kits/napi/aafwk/app/ability_delegator/ability_monitor.cpp index 600f104ba57..bc8f2cdb097 100644 --- a/interfaces/kits/napi/aafwk/app/ability_delegator/ability_monitor.cpp +++ b/interfaces/kits/napi/aafwk/app/ability_delegator/ability_monitor.cpp @@ -22,11 +22,11 @@ namespace OHOS { namespace AbilityDelegatorJs { using namespace OHOS::AbilityRuntime; -AbilityMonitor::AbilityMonitor(const std::string &name, JSAbilityMonitor *jsAbilityMonitor) +AbilityMonitor::AbilityMonitor(const std::string &name, const std::shared_ptr &jsAbilityMonitor) : IAbilityMonitor(name), jsMonitor_(jsAbilityMonitor) {} -void AbilityMonitor::onAbilityStart() +void AbilityMonitor::OnAbilityStart() { HILOG_INFO("onAbilityCreate is called"); @@ -39,7 +39,7 @@ void AbilityMonitor::onAbilityStart() HILOG_INFO("onAbilityCreate is called end"); } -void AbilityMonitor::onAbilityForeground() +void AbilityMonitor::OnAbilityForeground() { HILOG_INFO("onAbilityForeground is called"); @@ -52,7 +52,7 @@ void AbilityMonitor::onAbilityForeground() HILOG_INFO("onAbilityForeground is called end"); } -void AbilityMonitor::onAbilityBackground() +void AbilityMonitor::OnAbilityBackground() { HILOG_INFO("onAbilityBackground is called"); @@ -65,7 +65,7 @@ void AbilityMonitor::onAbilityBackground() HILOG_INFO("onAbilityBackground is called end"); } -void AbilityMonitor::onAbilityStop() +void AbilityMonitor::OnAbilityStop() { HILOG_INFO("onAbilityDestroy is called"); @@ -78,7 +78,7 @@ void AbilityMonitor::onAbilityStop() HILOG_INFO("onAbilityDestroy is called end"); } -void AbilityMonitor::onWindowStageCreate() +void AbilityMonitor::OnWindowStageCreate() { HILOG_INFO("onWindowStageCreate is called"); @@ -91,7 +91,7 @@ void AbilityMonitor::onWindowStageCreate() HILOG_INFO("onWindowStageCreate is called end"); } -void AbilityMonitor::onWindowStageRestore() +void AbilityMonitor::OnWindowStageRestore() { HILOG_INFO("onWindowStageRestore is called"); @@ -104,7 +104,7 @@ void AbilityMonitor::onWindowStageRestore() HILOG_INFO("onWindowStageRestore is called end"); } -void AbilityMonitor::onWindowStageDestroy() +void AbilityMonitor::OnWindowStageDestroy() { HILOG_INFO("onWindowStageDestroy is called"); diff --git a/interfaces/kits/napi/aafwk/app/ability_delegator/ability_monitor.h b/interfaces/kits/napi/aafwk/app/ability_delegator/ability_monitor.h index 1f00888d0e3..dd89eb0340d 100644 --- a/interfaces/kits/napi/aafwk/app/ability_delegator/ability_monitor.h +++ b/interfaces/kits/napi/aafwk/app/ability_delegator/ability_monitor.h @@ -27,19 +27,18 @@ class NativeValue; namespace OHOS { namespace AbilityDelegatorJs { using namespace OHOS::AppExecFwk; -using Function = void(*)(); class AbilityMonitor : public IAbilityMonitor { public: - AbilityMonitor(const std::string &name, JSAbilityMonitor *jsAbilityMonitor); + AbilityMonitor(const std::string &name, const std::shared_ptr &jsAbilityMonitor); ~AbilityMonitor() = default; - void onAbilityStart(); - void onAbilityForeground(); - void onAbilityBackground(); - void onAbilityStop(); - void onWindowStageCreate(); - void onWindowStageRestore(); - void onWindowStageDestroy(); + void OnAbilityStart() override; + void OnAbilityForeground() override; + void OnAbilityBackground() override; + void OnAbilityStop() override; + void OnWindowStageCreate() override; + void OnWindowStageRestore() override; + void OnWindowStageDestroy() override; private: std::shared_ptr jsMonitor_; diff --git a/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator.cpp b/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator.cpp index f7da618ea3c..9fbe7702c9a 100644 --- a/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator.cpp +++ b/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator.cpp @@ -29,7 +29,6 @@ namespace AbilityDelegatorJs { constexpr size_t ARGC_ONE = 1; constexpr size_t ARGC_TWO = 2; constexpr size_t ARGC_THREE = 3; -constexpr size_t ARGC_FOUR = 4; constexpr size_t INDEX_ZERO = 0; constexpr size_t INDEX_ONE = 1; constexpr size_t INDEX_TWO = 2; @@ -104,11 +103,17 @@ NativeValue *JSAbilityDelegator::ExecuteShellCommand(NativeEngine *engine, Nativ return (me != nullptr) ? me->OnExecuteShellCommand(*engine, *info) : nullptr; } +NativeValue *JSAbilityDelegator::FinishTest(NativeEngine *engine, NativeCallbackInfo *info) +{ + JSAbilityDelegator *me = CheckParamsAndGetThis(engine, info); + return (me != nullptr) ? me->OnFinishTest(*engine, *info) : nullptr; +} + NativeValue *JSAbilityDelegator::OnAddAbilityMonitor(NativeEngine &engine, NativeCallbackInfo &info) { HILOG_INFO("OnAddAbilityMonitor is called, argc = %{public}d", static_cast(info.argc)); - if (info.argc < ARGC_ONE || info.argc > ARGC_TWO) { + if (info.argc < ARGC_ONE) { HILOG_ERROR("Incorrect number of parameters"); return engine.CreateUndefined(); } @@ -134,7 +139,7 @@ NativeValue *JSAbilityDelegator::OnRemoveAbilityMonitor(NativeEngine &engine, Na { HILOG_INFO("OnRemoveAbilityMonitor is called, argc = %{public}d", static_cast(info.argc)); - if (info.argc < ARGC_ONE || info.argc > ARGC_TWO) { + if (info.argc < ARGC_ONE) { HILOG_ERROR("Incorrect number of parameters"); return engine.CreateUndefined(); } @@ -170,7 +175,7 @@ NativeValue *JSAbilityDelegator::OnWaitAbilityMonitor(NativeEngine &engine, Nati { HILOG_INFO("OnWaitAbilityMonitor is called, argc = %{public}d", static_cast(info.argc)); - if (info.argc < ARGC_ONE || info.argc > ARGC_THREE) { + if (info.argc < ARGC_ONE) { HILOG_ERROR("Incorrect number of parameters"); return engine.CreateUndefined(); } @@ -221,7 +226,7 @@ NativeValue *JSAbilityDelegator::OnPrint(NativeEngine &engine, NativeCallbackInf { HILOG_INFO("OnPrint is called, argc = %{public}d", static_cast(info.argc)); - if (info.argc < ARGC_ONE || info.argc > ARGC_TWO) { + if (info.argc < ARGC_ONE) { HILOG_ERROR("Incorrect number of parameters"); return engine.CreateUndefined(); } @@ -248,7 +253,7 @@ NativeValue *JSAbilityDelegator::OnExecuteShellCommand(NativeEngine &engine, Nat { HILOG_INFO("OnExecuteShellCommand is called, argc = %{public}d", static_cast(info.argc)); - if (info.argc < ARGC_ONE || info.argc > ARGC_FOUR) { + if (info.argc < ARGC_ONE) { HILOG_ERROR("Incorrect number of parameters"); return engine.CreateUndefined(); } @@ -285,11 +290,6 @@ NativeValue *JSAbilityDelegator::OnGetAppContext(NativeEngine &engine, NativeCal { HILOG_INFO("OnGetAppContext is called, argc = %{public}d", static_cast(info.argc)); - if (info.argc > ARGC_ONE) { - HILOG_ERROR("Incorrect number of parameters"); - return engine.CreateUndefined(); - } - AsyncTask::CompleteCallback complete = [](NativeEngine &engine, AsyncTask &task, int32_t status) { HILOG_INFO("OnGetAppContext AsyncTask is called"); std::shared_ptr context = @@ -307,7 +307,7 @@ NativeValue *JSAbilityDelegator::OnGetAbilityState(NativeEngine &engine, NativeC { HILOG_INFO("OnGetAbilityState is called, argc = %{public}d", static_cast(info.argc)); - if (info.argc < ARGC_ONE || info.argc > ARGC_TWO) { + if (info.argc < ARGC_ONE) { HILOG_ERROR("Incorrect number of parameters"); return engine.CreateUndefined(); } @@ -334,11 +334,6 @@ NativeValue *JSAbilityDelegator::OnGetCurrentTopAbility(NativeEngine &engine, Na { HILOG_INFO("OnGetCurrentTopAbility is called, argc = %{public}d", static_cast(info.argc)); - if (info.argc > ARGC_ONE) { - HILOG_ERROR("Incorrect number of parameters"); - return engine.CreateUndefined(); - } - AsyncTask::CompleteCallback complete = [this](NativeEngine &engine, AsyncTask &task, int32_t status) { HILOG_INFO("OnGetCurrentTopAbility AsyncTask is called"); sptr remoteObject = @@ -356,7 +351,7 @@ NativeValue *JSAbilityDelegator::OnDoAbilityForeground(NativeEngine &engine, Nat { HILOG_INFO("OnDoAbilityForeground is called, argc = %{public}d", static_cast(info.argc)); - if (info.argc < ARGC_ONE || info.argc > ARGC_TWO) { + if (info.argc < ARGC_ONE) { HILOG_ERROR("Incorrect number of parameters"); return engine.CreateUndefined(); } @@ -382,7 +377,7 @@ NativeValue *JSAbilityDelegator::OnDoAbilityBackground(NativeEngine &engine, Nat { HILOG_INFO("OnDoAbilityBackground is called, argc = %{public}d", static_cast(info.argc)); - if (info.argc < ARGC_ONE || info.argc > ARGC_TWO) { + if (info.argc < ARGC_ONE) { HILOG_ERROR("Incorrect number of parameters"); return engine.CreateUndefined(); } @@ -404,6 +399,38 @@ NativeValue *JSAbilityDelegator::OnDoAbilityBackground(NativeEngine &engine, Nat return result; } +NativeValue *JSAbilityDelegator::OnFinishTest(NativeEngine &engine, NativeCallbackInfo &info) +{ + HILOG_INFO("OnFinishTest is called, argc = %{public}d", static_cast(info.argc)); + + if (info.argc < ARGC_TWO) { + HILOG_ERROR("Incorrect number of parameters"); + return engine.CreateUndefined(); + } + + std::string msg; + int64_t code = 0; + if (!ConvertFromJsValue(engine, info.argv[INDEX_ZERO], msg)) { + HILOG_ERROR("Parse para failed"); + return engine.CreateUndefined(); + } + + if (!ConvertFromJsValue(engine, info.argv[INDEX_ONE], code)) { + HILOG_ERROR("Parse para argv[1] failed"); + return engine.CreateUndefined(); + } + + AsyncTask::CompleteCallback complete = [msg, code](NativeEngine &engine, AsyncTask &task, int32_t status) { + HILOG_INFO("OnFinishTest AsyncTask is called"); + AppExecFwk::AbilityDelegatorRegistry::GetAbilityDelegator()->FinishUserTest(msg, code); + task.Resolve(engine, engine.CreateUndefined()); + }; + NativeValue *lastParam = (info.argc == ARGC_THREE) ? info.argv[INDEX_TWO] : nullptr; + NativeValue *result = nullptr; + AsyncTask::Schedule(engine, CreateAsyncTaskWithLastParam(engine, lastParam, nullptr, std::move(complete), &result)); + return result; +} + NativeValue *JSAbilityDelegator::ParseJSMonitorPara( NativeEngine &engine, NativeValue *value, std::shared_ptr &monitor) { @@ -436,7 +463,7 @@ NativeValue *JSAbilityDelegator::ParseJSMonitorPara( abilityMonitor->SetJsAbilityMonitorEnv(&engine); abilityMonitor->SetJsAbilityMonitor(value); - monitor = std::make_shared(abilityName, abilityMonitor.get()); + monitor = std::make_shared(abilityName, abilityMonitor); if (!monitor) { HILOG_INFO("Failed to create monitor"); return nullptr; @@ -444,7 +471,7 @@ NativeValue *JSAbilityDelegator::ParseJSMonitorPara( std::shared_ptr refence = nullptr; refence.reset(engine.CreateReference(value, 1)); - monitorRecord[refence] = monitor; + monitorRecord.emplace(refence, monitor); return engine.CreateNull(); } diff --git a/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator.h b/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator.h index 4ad09f07960..06342d72ec8 100644 --- a/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator.h +++ b/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator.h @@ -39,6 +39,7 @@ public: static NativeValue *GetCurrentTopAbility(NativeEngine *engine, NativeCallbackInfo *info); static NativeValue *DoAbilityForeground(NativeEngine *engine, NativeCallbackInfo *info); static NativeValue *DoAbilityBackground(NativeEngine *engine, NativeCallbackInfo *info); + static NativeValue *FinishTest(NativeEngine *engine, NativeCallbackInfo *info); private: NativeValue *OnAddAbilityMonitor(NativeEngine &engine, NativeCallbackInfo &info); @@ -51,6 +52,7 @@ private: NativeValue *OnGetCurrentTopAbility(NativeEngine &engine, NativeCallbackInfo &info); NativeValue *OnDoAbilityForeground(NativeEngine &engine, NativeCallbackInfo &info); NativeValue *OnDoAbilityBackground(NativeEngine &engine, NativeCallbackInfo &info); + NativeValue *OnFinishTest(NativeEngine &engine, NativeCallbackInfo &info); private: NativeValue *CreateJsAbilityObject(NativeEngine &engine, const sptr &remoteObject); diff --git a/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator_registry.cpp b/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator_registry.cpp index 9dfcbef1e0a..41b4d16025b 100644 --- a/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator_registry.cpp +++ b/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator_registry.cpp @@ -28,7 +28,6 @@ using namespace OHOS::AppExecFwk; using namespace OHOS::AbilityRuntime; namespace { constexpr int32_t ARGC_ONE = 1; - class JsAbilityDelegatorRegistry { public: JsAbilityDelegatorRegistry() = default; @@ -55,16 +54,12 @@ public: private: NativeValue *OnGetAbilityDelegator(NativeEngine &engine, NativeCallbackInfo &info) { - HILOG_INFO("%{public}s is called", __FUNCTION__); - if (info.argc > ARGC_ONE) { - HILOG_ERROR("Params not match"); - return engine.CreateUndefined(); - } + HILOG_INFO("OnGetAbilityDelegator is called, argc = %{public}d", static_cast(info.argc)); AsyncTask::CompleteCallback complete = [](NativeEngine &engine, AsyncTask &task, int32_t status) { + HILOG_INFO("OnGetAbilityDelegator AsyncTask::CompleteCallback"); task.Resolve(engine, CreateJsAbilityDelegator(engine)); }; - NativeValue *lastParam = (info.argc == ARGC_ONE) ? info.argv[0] : nullptr; NativeValue *result = nullptr; AsyncTask::Schedule( @@ -74,11 +69,7 @@ private: NativeValue *OnGetArguments(NativeEngine &engine, NativeCallbackInfo &info) { - HILOG_INFO("%{public}s is called", __FUNCTION__); - if (info.argc > ARGC_ONE) { - HILOG_ERROR("Params not match"); - return engine.CreateUndefined(); - } + HILOG_INFO("OnGetArguments is called, argc = %{public}d", static_cast(info.argc)); AsyncTask::CompleteCallback complete = [](NativeEngine &engine, AsyncTask &task, int32_t status) { std::shared_ptr abilityDelegatorArgs = diff --git a/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator_utils.cpp b/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator_utils.cpp index 9af710d8deb..5918ce21b81 100644 --- a/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator_utils.cpp +++ b/interfaces/kits/napi/aafwk/app/ability_delegator/js_ability_delegator_utils.cpp @@ -48,29 +48,25 @@ NativeValue *CreateJsAbilityDelegator(NativeEngine &engine) BindNativeFunction(engine, *object, "doAbilityBackground", JSAbilityDelegator::DoAbilityBackground); BindNativeFunction(engine, *object, "print", JSAbilityDelegator::Print); BindNativeFunction(engine, *object, "executeShellCommand", JSAbilityDelegator::ExecuteShellCommand); + BindNativeFunction(engine, *object, "finishTest", JSAbilityDelegator::FinishTest); return objValue; } -napi_value WrapStringToJS(napi_env env, const std::string &value) -{ - napi_value result = nullptr; - NAPI_CALL(env, napi_create_string_utf8(env, value.c_str(), NAPI_AUTO_LENGTH, &result)); - return result; -} - -void SetAbilityDelegatorArgumentsPara(napi_env env, const std::map ¶s) +NativeValue *SetAbilityDelegatorArgumentsPara(NativeEngine &engine, const std::map ¶s) { HILOG_INFO("SetAbilityDelegatorArgumentsPara is called"); - napi_value parameter = nullptr; - napi_value result = nullptr; + NativeValue *objValue = engine.CreateObject(); + NativeObject *object = ConvertNativeValueTo(objValue); + if (object == nullptr) { + HILOG_ERROR("Failed to get object"); + return nullptr; + } auto iter = paras.begin(); for (; iter != paras.end(); ++iter) { - NAPI_CALL_RETURN_VOID( - env, napi_set_named_property(env, parameter, iter->first.c_str(), WrapStringToJS(env, iter->second))); + object->SetProperty(iter->first.c_str(), CreateJsValue(engine, iter->second)); } - napi_set_named_property(env, result, "parameters", parameter); - return; + return objValue; } NativeValue *CreateJsAbilityDelegatorArguments( @@ -86,7 +82,8 @@ NativeValue *CreateJsAbilityDelegatorArguments( } object->SetProperty("bundleName", CreateJsValue(engine, abilityDelegatorArgs->GetTestBundleName())); - SetAbilityDelegatorArgumentsPara(reinterpret_cast(&engine), abilityDelegatorArgs->GetTestParam()); + object->SetProperty("parameters", + SetAbilityDelegatorArgumentsPara(engine, abilityDelegatorArgs->GetTestParam())); object->SetProperty("testCaseNames", CreateJsValue(engine, abilityDelegatorArgs->GetTestCaseName())); object->SetProperty("testRunnerClassName", CreateJsValue(engine, abilityDelegatorArgs->GetTestRunnerClassName())); diff --git a/interfaces/kits/napi/aafwk/app/test_runner/test_runner.js b/interfaces/kits/napi/aafwk/app/test_runner/test_runner.js index 4bd372f4769..7e517c5b51b 100755 --- a/interfaces/kits/napi/aafwk/app/test_runner/test_runner.js +++ b/interfaces/kits/napi/aafwk/app/test_runner/test_runner.js @@ -15,8 +15,8 @@ class TestRunner { constructor() {} - onPrepare​() {} - onRun​() {} + onPrepare() {} + onRun() {} } export default TestRunner diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index 900d0ba43fc..4e43769e35f 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -4096,6 +4096,13 @@ int AbilityManagerService::GetCurrentTopAbility(sptr &token) } token = abilityRecord->GetToken(); + if (!token) { + HILOG_ERROR("Failed to get token"); + return ERR_INVALID_VALUE; + } + + HILOG_INFO("bundleName : %{public}s, abilityName : %{public}s", + bundleName.data(), abilityRecord->GetAbilityInfo().name.data()); return ERR_OK; } @@ -4105,6 +4112,11 @@ int AbilityManagerService::DelegatorDoAbilityForeground(const sptr std::shared_ptr MissionListManager::GetCurrentTopAbility(const std::string &bundleName) { + std::lock_guard guard(managerLock_); + for (auto &missionList : currentMissionLists_) { if (!missionList) { HILOG_WARN("Invalid missionList."); continue; } - auto abilityRecord = missionList->GetLauncherRoot(); - if (!abilityRecord) { - HILOG_ERROR("Invalid ability record."); - return {}; - } + auto missions = missionList->GetAllMissions(); + for (auto &mission : missions) { + if (!mission) { + HILOG_WARN("Invalid mission."); + continue; + } - auto appInfo = abilityRecord->GetApplicationInfo(); - if (bundleName.compare(appInfo.bundleName)) { - return abilityRecord; + auto abilityRecord = mission->GetAbilityRecord(); + if (!abilityRecord) { + HILOG_WARN("Invalid ability record."); + continue; + } + + auto appInfo = abilityRecord->GetApplicationInfo(); + if (bundleName.compare(appInfo.bundleName) == 0) { + return abilityRecord; + } } } -- Gitee From 0882a0d464273f73d0c9602c661e900782cba276 Mon Sep 17 00:00:00 2001 From: wanchengzhen Date: Wed, 16 Feb 2022 16:41:36 +0000 Subject: [PATCH 2/2] Fix format Signed-off-by: wanchengzhen --- frameworks/kits/appkit/BUILD.gn | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/frameworks/kits/appkit/BUILD.gn b/frameworks/kits/appkit/BUILD.gn index e3992e2f4cd..7eb7781ca19 100644 --- a/frameworks/kits/appkit/BUILD.gn +++ b/frameworks/kits/appkit/BUILD.gn @@ -115,6 +115,8 @@ ohos_shared_library("appkit_native") { public_configs = [ ":appkit_public_config" ] sources = [ + "${aafwk_path}/frameworks/kits/appkit/native/ability_runtime/app/ability_stage.cpp", + "${aafwk_path}/frameworks/kits/appkit/native/ability_runtime/app/js_ability_stage.cpp", "${aafwk_path}/frameworks/kits/appkit/native/app/src/ability_manager.cpp", "${aafwk_path}/frameworks/kits/appkit/native/app/src/ability_record_mgr.cpp", "${aafwk_path}/frameworks/kits/appkit/native/app/src/app_loader.cpp", @@ -123,9 +125,6 @@ ohos_shared_library("appkit_native") { "${aafwk_path}/frameworks/kits/appkit/native/app/src/application_env_impl.cpp", "${aafwk_path}/frameworks/kits/appkit/native/app/src/application_impl.cpp", "${aafwk_path}/frameworks/kits/appkit/native/app/src/context_container.cpp", - - "${aafwk_path}/frameworks/kits/appkit/native/ability_runtime/app/ability_stage.cpp", - "${aafwk_path}/frameworks/kits/appkit/native/ability_runtime/app/js_ability_stage.cpp", "${aafwk_path}/frameworks/kits/appkit/native/app/src/context_deal.cpp", "${aafwk_path}/frameworks/kits/appkit/native/app/src/main_thread.cpp", "${aafwk_path}/frameworks/kits/appkit/native/app/src/ohos_application.cpp", @@ -293,9 +292,7 @@ ohos_shared_library("appkit_delegator") { "ipc:ipc_core", ] - public_deps = [ - "//foundation/ace/napi:ace_napi", - ] + public_deps = [ "//foundation/ace/napi:ace_napi" ] part_name = "ability_runtime" } -- Gitee