From c92dd8232ac3c3815f31964a3fd8c3ca19bd813f Mon Sep 17 00:00:00 2001 From: wangbing Date: Fri, 22 Aug 2025 11:14:06 +0800 Subject: [PATCH] deeplink without hide dialog Signed-off-by: wangbing --- .../napi_common_open_link_options.cpp | 8 +- .../open_link/napi_common_open_link_options.h | 2 +- .../ability_runtime/ability_context_impl.cpp | 6 +- .../ability_runtime/js_ability_context.cpp | 27 +++--- .../native/js_service_extension_context.cpp | 8 +- .../js_ui_extension_context.cpp | 23 ++--- .../ui_extension_context.cpp | 5 +- .../service_extension_context.cpp | 4 +- .../include/ability_manager_client.h | 3 +- .../include/ability_manager_interface.h | 4 +- .../include/open_link_options.h | 5 +- .../ability/ability_runtime/ability_context.h | 2 +- .../ability_runtime/ability_context_impl.h | 2 +- .../ability_runtime/js_ability_context.h | 4 +- .../js_ui_extension_context.h | 2 +- .../ui_extension_base/ui_extension_context.h | 2 +- .../service_extension_context.h | 2 +- .../include/ability_manager_proxy.h | 4 +- .../include/ability_manager_service.h | 29 +++--- services/abilitymgr/include/ability_record.h | 2 + .../include/utils/start_ability_utils.h | 15 +++ .../abilitymgr/src/ability_manager_client.cpp | 6 +- .../abilitymgr/src/ability_manager_proxy.cpp | 8 +- .../src/ability_manager_service.cpp | 96 +++++++++++-------- .../abilitymgr/src/ability_manager_stub.cpp | 4 +- .../src/implicit_start_processor.cpp | 13 ++- .../src/open_link/open_link_options.cpp | 23 ++++- .../abilityappdebugmanager_fuzzer/BUILD.gn | 3 +- .../BUILD.gn | 3 +- .../screenunlockinterceptor_fuzzer/BUILD.gn | 3 +- .../startotherappinterceptor_fuzzer/BUILD.gn | 3 +- test/moduletest/call_module_test/BUILD.gn | 3 +- test/moduletest/ipc_ability_mgr_test/BUILD.gn | 3 +- .../on_new_want_module_test/BUILD.gn | 3 +- .../BUILD.gn | 1 + .../BUILD.gn | 1 + .../ability_manager_service_third_test.cpp | 6 +- .../BUILD.gn | 1 + test/unittest/ability_timeout_test/BUILD.gn | 3 +- .../app_mgr_client_first_test/BUILD.gn | 3 +- test/unittest/app_mgr_client_test/BUILD.gn | 3 +- .../app_running_manager_fourth_test/BUILD.gn | 1 + .../dialog_session_manager_test/BUILD.gn | 3 +- test/unittest/dlp_utils_test/BUILD.gn | 3 +- .../ability_context_impl_test.cpp | 18 ++++ .../ability_context_test.cpp | 2 +- .../mock_ability_manager_client.cpp | 2 +- .../free_install_manager_test/BUILD.gn | 3 +- .../free_install_manager_third_test/BUILD.gn | 1 + .../BUILD.gn | 4 +- .../BUILD.gn | 1 + test/unittest/kiosk_manager_test/BUILD.gn | 1 + .../multi_instance_utils_second_test/BUILD.gn | 1 + .../multi_instance_utils_test/BUILD.gn | 3 +- test/unittest/running_infos_test/BUILD.gn | 3 +- test/unittest/uri_utils_test/BUILD.gn | 1 + 56 files changed, 253 insertions(+), 142 deletions(-) diff --git a/frameworks/js/napi/inner/napi_common/open_link/napi_common_open_link_options.cpp b/frameworks/js/napi/inner/napi_common/open_link/napi_common_open_link_options.cpp index 430b99e1cf5..b0426012d64 100644 --- a/frameworks/js/napi/inner/napi_common/open_link/napi_common_open_link_options.cpp +++ b/frameworks/js/napi/inner/napi_common/open_link/napi_common_open_link_options.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 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 @@ -22,6 +22,7 @@ namespace OHOS { namespace AppExecFwk { +const std::string HIDE_FAILURE_TIP_DIALOG = "hideFailureTipDialog"; bool UnwrapOpenLinkOptions(napi_env env, napi_value param, AAFwk::OpenLinkOptions &openLinkOptions, AAFwk::Want &want) { @@ -49,6 +50,11 @@ bool UnwrapOpenLinkOptions(napi_env env, napi_value param, AAFwk::OpenLinkOption want.SetParam(APP_LINKING_ONLY, false); } + bool hideFailureTipDialog = false; + if (UnwrapBooleanByPropertyName(env, param, HIDE_FAILURE_TIP_DIALOG.c_str(), hideFailureTipDialog)) { + openLinkOptions.SetHideFailureTipDialog(hideFailureTipDialog); + } + return true; } } // namespace AppExecFwk diff --git a/frameworks/js/napi/inner/napi_common/open_link/napi_common_open_link_options.h b/frameworks/js/napi/inner/napi_common/open_link/napi_common_open_link_options.h index 78c381a6c3d..b266d847032 100644 --- a/frameworks/js/napi/inner/napi_common/open_link/napi_common_open_link_options.h +++ b/frameworks/js/napi/inner/napi_common/open_link/napi_common_open_link_options.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 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 diff --git a/frameworks/native/ability/ability_runtime/ability_context_impl.cpp b/frameworks/native/ability/ability_runtime/ability_context_impl.cpp index 39bc51ebfd0..292fa10700a 100644 --- a/frameworks/native/ability/ability_runtime/ability_context_impl.cpp +++ b/frameworks/native/ability/ability_runtime/ability_context_impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2024 Huawei Device Co., Ltd. + * Copyright (c) 2021-2025 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 @@ -1235,10 +1235,10 @@ bool AbilityContextImpl::GetRestoreEnabled() return restoreEnabled_.load(); } -ErrCode AbilityContextImpl::OpenLink(const AAFwk::Want& want, int requestCode) +ErrCode AbilityContextImpl::OpenLink(const AAFwk::Want &want, int requestCode, bool hideFailureTipDialog) { TAG_LOGD(AAFwkTag::CONTEXT, "called"); - return AAFwk::AbilityManagerClient::GetInstance()->OpenLink(want, token_, -1, requestCode); + return AAFwk::AbilityManagerClient::GetInstance()->OpenLink(want, token_, -1, requestCode, hideFailureTipDialog); } std::shared_ptr AbilityContextImpl::GetWant() diff --git a/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp b/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp index f273f8edd43..01b737800ee 100644 --- a/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp +++ b/frameworks/native/ability/native/ability_runtime/js_ability_context.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021-2024 Huawei Device Co., Ltd. + * Copyright (c) 2021-2025 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 @@ -983,22 +983,23 @@ napi_value JsAbilityContext::OnOpenLink(napi_env env, NapiCallbackInfo& info) TAG_LOGD(AAFwkTag::CONTEXT, "completionHandler is used"); CreateOpenLinkTask(env, info.argv[INDEX_TWO], want, requestCode); } - return OnOpenLinkInner(env, want, requestCode, startTime, linkValue); + return OnOpenLinkInner(env, want, requestCode, startTime, linkValue, openLinkOptions.GetHideFailureTipDialog()); } -napi_value JsAbilityContext::OnOpenLinkInner(napi_env env, const AAFwk::Want& want, - int requestCode, const std::string& startTime, const std::string& url) +napi_value JsAbilityContext::OnOpenLinkInner(napi_env env, const AAFwk::Want &want, int requestCode, + const std::string &startTime, const std::string &url, bool hideFailureTipDialog) { auto innerErrCode = std::make_shared(ERR_OK); - NapiAsyncTask::ExecuteCallback execute = [weak = context_, want, innerErrCode, requestCode]() { - auto context = weak.lock(); - if (!context) { - TAG_LOGW(AAFwkTag::CONTEXT, "null context"); - *innerErrCode = static_cast(AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT); - return; - } - *innerErrCode = context->OpenLink(want, requestCode); - }; + NapiAsyncTask::ExecuteCallback execute = + [weak = context_, want, innerErrCode, requestCode, hideFailureTipDialog]() { + auto context = weak.lock(); + if (!context) { + TAG_LOGW(AAFwkTag::CONTEXT, "null context"); + *innerErrCode = static_cast(AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT); + return; + } + *innerErrCode = context->OpenLink(want, requestCode, hideFailureTipDialog); + }; napi_value result = nullptr; AddFreeInstallObserver(env, want, nullptr, &result, false, true); NapiAsyncTask::CompleteCallback complete = [innerErrCode, requestCode, startTime, url, weak = context_, diff --git a/frameworks/native/ability/native/js_service_extension_context.cpp b/frameworks/native/ability/native/js_service_extension_context.cpp index 163c4c3a325..c7e1e8ecefe 100644 --- a/frameworks/native/ability/native/js_service_extension_context.cpp +++ b/frameworks/native/ability/native/js_service_extension_context.cpp @@ -351,21 +351,21 @@ private: system_clock::now().time_since_epoch()).count()); want.SetParam(Want::PARAM_RESV_START_TIME, startTime); - return OnOpenLinkInner(env, want, startTime, linkValue); + return OnOpenLinkInner(env, want, startTime, linkValue, openLinkOptions.GetHideFailureTipDialog()); } napi_value OnOpenLinkInner(napi_env env, const AAFwk::Want& want, - const std::string& startTime, const std::string& url) + const std::string &startTime, const std::string &url, bool hideFailureTipDialog) { auto innerErrorCode = std::make_shared(ERR_OK); - NapiAsyncTask::ExecuteCallback execute = [weak = context_, want, innerErrorCode]() { + NapiAsyncTask::ExecuteCallback execute = [weak = context_, want, innerErrorCode, hideFailureTipDialog]() { auto context = weak.lock(); if (!context) { TAG_LOGW(AAFwkTag::SERVICE_EXT, "context released"); *innerErrorCode = static_cast(AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT); return; } - *innerErrorCode = context->OpenLink(want, -1); + *innerErrorCode = context->OpenLink(want, -1, hideFailureTipDialog); }; NapiAsyncTask::CompleteCallback complete = [innerErrorCode, startTime, url, diff --git a/frameworks/native/ability/native/ui_extension_base/js_ui_extension_context.cpp b/frameworks/native/ability/native/ui_extension_base/js_ui_extension_context.cpp index bb48409d762..c5d9c98c211 100755 --- a/frameworks/native/ability/native/ui_extension_base/js_ui_extension_context.cpp +++ b/frameworks/native/ability/native/ui_extension_base/js_ui_extension_context.cpp @@ -365,22 +365,23 @@ napi_value JsUIExtensionContext::OnOpenLink(napi_env env, NapiCallbackInfo& info #ifdef SUPPORT_SCREEN InitDisplayId(want); #endif - return OnOpenLinkInner(env, want, requestCode, startTime, linkValue); + return OnOpenLinkInner(env, want, requestCode, startTime, linkValue, openLinkOptions.GetHideFailureTipDialog()); } napi_value JsUIExtensionContext::OnOpenLinkInner(napi_env env, const AAFwk::Want& want, - int requestCode, const std::string& startTime, const std::string& url) + int requestCode, const std::string &startTime, const std::string &url, bool hideFailureTipDialog) { auto innerErrorCode = std::make_shared(ERR_OK); - NapiAsyncTask::ExecuteCallback execute = [weak = context_, want, innerErrorCode, requestCode]() { - auto context = weak.lock(); - if (!context) { - TAG_LOGW(AAFwkTag::UI_EXT, "null context"); - *innerErrorCode = static_cast(AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT); - return; - } - *innerErrorCode = context->OpenLink(want, requestCode); - }; + NapiAsyncTask::ExecuteCallback execute = + [weak = context_, want, innerErrorCode, requestCode, hideFailureTipDialog]() { + auto context = weak.lock(); + if (!context) { + TAG_LOGW(AAFwkTag::UI_EXT, "null context"); + *innerErrorCode = static_cast(AbilityErrorCode::ERROR_CODE_INVALID_CONTEXT); + return; + } + *innerErrorCode = context->OpenLink(want, requestCode, hideFailureTipDialog); + }; napi_value result = nullptr; AddFreeInstallObserver(env, want, nullptr, &result, false, true); diff --git a/frameworks/native/ability/native/ui_extension_base/ui_extension_context.cpp b/frameworks/native/ability/native/ui_extension_base/ui_extension_context.cpp index d8f1a0a551a..d33f0fc8895 100755 --- a/frameworks/native/ability/native/ui_extension_base/ui_extension_context.cpp +++ b/frameworks/native/ability/native/ui_extension_base/ui_extension_context.cpp @@ -333,10 +333,9 @@ ErrCode UIExtensionContext::AddFreeInstallObserver(const sptrOpenLink(want, token_, -1, requestCode); + return AAFwk::AbilityManagerClient::GetInstance()->OpenLink(want, token_, -1, requestCode, hideFailureTipDialog); } std::shared_ptr UIExtensionContext::GetResourceManager() const diff --git a/frameworks/native/appkit/ability_runtime/service_extension_context.cpp b/frameworks/native/appkit/ability_runtime/service_extension_context.cpp index ac3fff62cf8..7fd75e93dbb 100644 --- a/frameworks/native/appkit/ability_runtime/service_extension_context.cpp +++ b/frameworks/native/appkit/ability_runtime/service_extension_context.cpp @@ -269,10 +269,10 @@ ErrCode ServiceExtensionContext::PreStartMission(const std::string& bundleName, return err; } -ErrCode ServiceExtensionContext::OpenLink(const AAFwk::Want& want, int requestCode) +ErrCode ServiceExtensionContext::OpenLink(const AAFwk::Want &want, int requestCode, bool hideFailureTipDialog) { TAG_LOGD(AAFwkTag::UI_EXT, "called"); - return AAFwk::AbilityManagerClient::GetInstance()->OpenLink(want, token_, -1, requestCode); + return AAFwk::AbilityManagerClient::GetInstance()->OpenLink(want, token_, -1, requestCode, hideFailureTipDialog); } ErrCode ServiceExtensionContext::OpenAtomicService(const AAFwk::Want &want, const AAFwk::StartOptions &options) diff --git a/interfaces/inner_api/ability_manager/include/ability_manager_client.h b/interfaces/inner_api/ability_manager/include/ability_manager_client.h index 60e6e80a814..b42b7abf479 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_client.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_client.h @@ -1678,7 +1678,8 @@ public: * @param requestCode Ability request code. * @return Returns ERR_OK on success, others on failure. */ - int32_t OpenLink(const Want& want, sptr callerToken, int32_t userId, int requestCode); + int32_t OpenLink(const Want &want, sptr callerToken, int32_t userId, int requestCode, + bool hideFailureTipDialog = false); /** * Terminate process by bundleName. diff --git a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h index c04c88ea43a..51466242483 100644 --- a/interfaces/inner_api/ability_manager/include/ability_manager_interface.h +++ b/interfaces/inner_api/ability_manager/include/ability_manager_interface.h @@ -1846,8 +1846,8 @@ public: * @param requestCode Ability request code. * @return Returns ERR_OK on success, others on failure. */ - virtual int32_t OpenLink(const Want& want, sptr callerToken, - int32_t userId = DEFAULT_INVAL_VALUE, int requestCode = DEFAULT_INVAL_VALUE) + virtual int32_t OpenLink(const Want &want, sptr callerToken, int32_t userId = DEFAULT_INVAL_VALUE, + int requestCode = DEFAULT_INVAL_VALUE, bool hideFailureTipDialog = false) { return 0; } diff --git a/interfaces/inner_api/ability_manager/include/open_link_options.h b/interfaces/inner_api/ability_manager/include/open_link_options.h index f01875662fc..58c1af02f9a 100644 --- a/interfaces/inner_api/ability_manager/include/open_link_options.h +++ b/interfaces/inner_api/ability_manager/include/open_link_options.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 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 @@ -35,12 +35,15 @@ public: void SetAppLinkingOnly(bool appLinkingOnly); bool GetAppLinkingOnly() const; + void SetHideFailureTipDialog(bool hideFailureTipDialog); + bool GetHideFailureTipDialog() const; void SetParameters(WantParams parameters); WantParams GetParameters() const; bool WriteParameters(const WantParams ¶meters, Parcel &parcel) const; private: bool appLinkingOnly_ = false; + bool hideFailureTipDialog_ = false; WantParams parameters_; // no object in parcel static constexpr int VALUE_NULL = -1; diff --git a/interfaces/kits/native/ability/ability_runtime/ability_context.h b/interfaces/kits/native/ability/ability_runtime/ability_context.h index 1bc0b053dec..643cef9e0c9 100644 --- a/interfaces/kits/native/ability/ability_runtime/ability_context.h +++ b/interfaces/kits/native/ability/ability_runtime/ability_context.h @@ -177,7 +177,7 @@ public: virtual ErrCode RequestModalUIExtension(const AAFwk::Want& want) = 0; - virtual ErrCode OpenLink(const AAFwk::Want& want, int requestCode) = 0; + virtual ErrCode OpenLink(const AAFwk::Want &want, int requestCode, bool hideFailureTipDialog = false) = 0; virtual ErrCode OpenAtomicService(AAFwk::Want& want, const AAFwk::StartOptions &options, int requestCode, RuntimeTask &&task) = 0; diff --git a/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h b/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h index 35bdfd8339a..6ab186f25f7 100644 --- a/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h +++ b/interfaces/kits/native/ability/ability_runtime/ability_context_impl.h @@ -239,7 +239,7 @@ public: ErrCode AddFreeInstallObserver(const sptr &observer) override; - ErrCode OpenLink(const AAFwk::Want& want, int requestCode) override; + ErrCode OpenLink(const AAFwk::Want &want, int requestCode, bool hideFailureTipDialog = false) override; ErrCode OpenAtomicService(AAFwk::Want& want, const AAFwk::StartOptions &options, int requestCode, RuntimeTask &&task) override; diff --git a/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h b/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h index b1e8c0b70fc..920224e2dee 100644 --- a/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h +++ b/interfaces/kits/native/ability/native/ability_runtime/js_ability_context.h @@ -106,8 +106,8 @@ private: const std::weak_ptr& abilityContext, const std::shared_ptr &callback); napi_value OnStartAbility(napi_env env, NapiCallbackInfo& info, bool isStartRecent = false); napi_value OnOpenLink(napi_env env, NapiCallbackInfo& info); - napi_value OnOpenLinkInner(napi_env env, const AAFwk::Want& want, - int requestCode, const std::string& startTime, const std::string& url); + napi_value OnOpenLinkInner(napi_env env, const AAFwk::Want &want, int requestCode, const std::string &startTime, + const std::string &url, bool hideFailureTipDialog = false); napi_value OnStartAbilityAsCallerInner(napi_env env, NapiCallbackInfo& info, const AAFwk::Want &want, size_t unwrapArgc, const AAFwk::StartOptions &startOptions); napi_value OnStartAbilityAsCaller(napi_env env, NapiCallbackInfo& info); diff --git a/interfaces/kits/native/ability/native/ui_extension_base/js_ui_extension_context.h b/interfaces/kits/native/ability/native/ui_extension_base/js_ui_extension_context.h index 41e074b89ae..64331220b18 100755 --- a/interfaces/kits/native/ability/native/ui_extension_base/js_ui_extension_context.h +++ b/interfaces/kits/native/ability/native/ui_extension_base/js_ui_extension_context.h @@ -100,7 +100,7 @@ private: AAFwk::Want &want, int &requestCode); napi_value OnOpenLink(napi_env env, NapiCallbackInfo& info); napi_value OnOpenLinkInner(napi_env env, const AAFwk::Want& want, - int requestCode, const std::string& startTime, const std::string& url); + int requestCode, const std::string &startTime, const std::string &url, bool hideFailureTipDialog = false); void UnWrapCompletionHandlerForAtomicService( napi_env env, napi_value param, AAFwk::StartOptions &options, const std::string &appId); #ifdef SUPPORT_SCREEN diff --git a/interfaces/kits/native/ability/native/ui_extension_base/ui_extension_context.h b/interfaces/kits/native/ability/native/ui_extension_base/ui_extension_context.h index 8dcd4477f0e..207ab6eb850 100755 --- a/interfaces/kits/native/ability/native/ui_extension_base/ui_extension_context.h +++ b/interfaces/kits/native/ability/native/ui_extension_base/ui_extension_context.h @@ -176,7 +176,7 @@ public: Ace::UIContent* GetUIContent() override; #endif // SUPPORT_SCREEN - ErrCode OpenLink(const AAFwk::Want& want, int reuqestCode); + ErrCode OpenLink(const AAFwk::Want &want, int reuqestCode, bool hideFailureTipDialog = false); ErrCode OpenAtomicService(AAFwk::Want& want, const AAFwk::StartOptions &options, int requestCode, RuntimeTask &&task); diff --git a/interfaces/kits/native/appkit/ability_runtime/service_extension_context.h b/interfaces/kits/native/appkit/ability_runtime/service_extension_context.h index b43da9bde5e..08b2ec85ea2 100644 --- a/interfaces/kits/native/appkit/ability_runtime/service_extension_context.h +++ b/interfaces/kits/native/appkit/ability_runtime/service_extension_context.h @@ -171,7 +171,7 @@ public: using SelfType = ServiceExtensionContext; static const size_t CONTEXT_TYPE_ID; - ErrCode OpenLink(const AAFwk::Want& want, int reuqestCode); + ErrCode OpenLink(const AAFwk::Want &want, int reuqestCode, bool hideFailureTipDialog = false); ErrCode OpenAtomicService(const AAFwk::Want &want, const AAFwk::StartOptions &options); ErrCode AddCompletionHandlerForAtomicService(const std::string &requestId, OnAtomicRequestSuccess onRequestSucc, diff --git a/services/abilitymgr/include/ability_manager_proxy.h b/services/abilitymgr/include/ability_manager_proxy.h index 90aa5002ea4..67b79176a92 100644 --- a/services/abilitymgr/include/ability_manager_proxy.h +++ b/services/abilitymgr/include/ability_manager_proxy.h @@ -1537,8 +1537,8 @@ public: * @param requestCode Ability request code. * @return Returns ERR_OK on success, others on failure. */ - virtual int32_t OpenLink(const Want& want, sptr callerToken, - int32_t userId = DEFAULT_INVAL_VALUE, int requestCode = DEFAULT_INVAL_VALUE) override; + virtual int32_t OpenLink(const Want &want, sptr callerToken, int32_t userId = DEFAULT_INVAL_VALUE, + int requestCode = DEFAULT_INVAL_VALUE, bool hideFailureTipDialog = false) override; /** * Terminate the mission. diff --git a/services/abilitymgr/include/ability_manager_service.h b/services/abilitymgr/include/ability_manager_service.h index 2a291424e2d..f966846db4e 100644 --- a/services/abilitymgr/include/ability_manager_service.h +++ b/services/abilitymgr/include/ability_manager_service.h @@ -94,6 +94,7 @@ constexpr const char* KEY_SESSION_ID = "com.ohos.param.sessionId"; constexpr const char* KEY_REQUEST_ID = "com.ohos.param.requestId"; using OHOS::AppExecFwk::IAbilityController; struct StartAbilityInfo; +struct StartAbilityWrapParam; class WindowFocusChangedListener; class WindowVisibilityChangedListener; class PreloadManagerService; @@ -408,8 +409,8 @@ public: * @param requestCode Ability request code. * @return Returns ERR_OK on success, others on failure. */ - virtual int32_t OpenLink(const Want& want, sptr callerToken, - int32_t userId = DEFAULT_INVAL_VALUE, int32_t requestCode = DEFAULT_INVAL_VALUE) override; + virtual int32_t OpenLink(const Want &want, sptr callerToken, int32_t userId = DEFAULT_INVAL_VALUE, + int32_t requestCode = DEFAULT_INVAL_VALUE, bool hideFailureTipDialog = false) override; /** * Pop-up launch of full-screen atomic service. @@ -1066,19 +1067,9 @@ public: const int32_t &resultCode, const int32_t &uniqueId, WantParams &wantParam); int32_t StartAbilityByFreeInstall(const Want &want, sptr callerToken, int32_t userId, - int32_t requestCode); + int32_t requestCode, const AAFwk::OpenLinkOptions &opt = {}); - int StartAbilityWrap( - const Want &want, - const sptr &callerToken, - int requestCode, - bool isPendingWantCaller, - int32_t userId = DEFAULT_INVAL_VALUE, - bool isStartAsCaller = false, - uint32_t specifyTokenId = 0, - bool isForegroundToRestartApp = false, - bool isImplicit = false, - bool isUIAbilityOnly = false); + int StartAbilityWrap(const StartAbilityWrapParam &startAbilityWrapParam); int StartAbilityInner( const Want &want, @@ -1090,7 +1081,8 @@ public: uint32_t specifyTokenId = 0, bool isForegroundToRestartApp = false, bool isImplicit = false, - bool isUIAbilityOnly = false); + bool isUIAbilityOnly = false, + const AAFwk::OpenLinkOptions &opt = {}); int32_t StartExtensionAbilityInner( const Want &want, @@ -2783,7 +2775,8 @@ private: void CloseAssertDialog(const std::string &assertSessionId); int32_t OpenLinkFreeInstallAtomicService(Want &convertedWant, const Want &originalWant, - sptr callerToken, int32_t userId, int32_t requestCode, bool removeInsightIntentFlag); + sptr callerToken, int32_t userId, int32_t requestCode, bool removeInsightIntentFlag, + const AAFwk::OpenLinkOptions &opt = {}); void ReportPreventStartAbilityResult(const AppExecFwk::AbilityInfo &callerAbilityInfo, const AppExecFwk::AbilityInfo &abilityInfo); @@ -2803,10 +2796,10 @@ private: const std::vector ¶mMappings, std::string &uri, AAFwk::Want &want); int StartAbilityWithRemoveIntentFlag(const Want &want, const sptr &callerToken, - int32_t userId, int requestCode, bool removeInsightIntentFlag); + int32_t userId, int requestCode, bool removeInsightIntentFlag, const AAFwk::OpenLinkOptions &opt = {}); int32_t OpenLinkInner(const Want &want, sptr callerToken, int32_t userId, int requestCode, - bool removeInsightIntentFlag); + bool removeInsightIntentFlag, const AAFwk::OpenLinkOptions &opt = {}); int32_t KillProcessWithReasonInner(int32_t pid, const ExitReason &reason, bool isKillPrecedeStart); #ifdef BGTASKMGR_CONTINUOUS_TASK_ENABLE std::shared_ptr bgtaskObserver_; diff --git a/services/abilitymgr/include/ability_record.h b/services/abilitymgr/include/ability_record.h index 79b765ebba5..721bf401e13 100644 --- a/services/abilitymgr/include/ability_record.h +++ b/services/abilitymgr/include/ability_record.h @@ -39,6 +39,7 @@ #include "ipc_skeleton.h" #include "lifecycle_deal.h" #include "lifecycle_state_info.h" +#include "open_link_options.h" #include "session_info.h" #include "ui_extension_window_command.h" #include "uri.h" @@ -285,6 +286,7 @@ struct AbilityRequest { AppExecFwk::AbilityInfo abilityInfo; AppExecFwk::ApplicationInfo appInfo; StartOptions startOptions; + OpenLinkOptions openLinkOptions; std::pair IsContinuation() const { auto flags = want.GetFlags(); diff --git a/services/abilitymgr/include/utils/start_ability_utils.h b/services/abilitymgr/include/utils/start_ability_utils.h index 8129583fb41..a60a349ba79 100644 --- a/services/abilitymgr/include/utils/start_ability_utils.h +++ b/services/abilitymgr/include/utils/start_ability_utils.h @@ -21,6 +21,7 @@ #include "ability_info.h" #include "extension_ability_info.h" +#include "open_link_options.h" #include "want.h" namespace OHOS { @@ -80,6 +81,20 @@ struct StartAbilityInfoWrap { ~StartAbilityInfoWrap(); void SetStartAbilityInfo(const AppExecFwk::AbilityInfo& abilityInfo); }; + +struct StartAbilityWrapParam { + Want want; + sptr callerToken; + int requestCode; + bool isPendingWantCaller; + int32_t userId = -1; + bool isStartAsCaller = false; + uint32_t specifyTokenId = 0; + bool isForegroundToRestartApp = false; + bool isImplicit = false; + bool isUIAbilityOnly = false; + AAFwk::OpenLinkOptions opt = {}; +}; } } #endif // OHOS_ABILITY_RUNTIME_START_ABILITY_UTILS_H \ No newline at end of file diff --git a/services/abilitymgr/src/ability_manager_client.cpp b/services/abilitymgr/src/ability_manager_client.cpp index e4149b294d1..0a9a15388a6 100644 --- a/services/abilitymgr/src/ability_manager_client.cpp +++ b/services/abilitymgr/src/ability_manager_client.cpp @@ -2099,12 +2099,12 @@ ErrCode AbilityManagerClient::PreStartMission(const std::string& bundleName, con return abms->PreStartMission(bundleName, moduleName, abilityName, startTime); } -ErrCode AbilityManagerClient::OpenLink(const Want& want, sptr callerToken, - int32_t userId, int requestCode) +ErrCode AbilityManagerClient::OpenLink(const Want &want, sptr callerToken, + int32_t userId, int requestCode, bool hideFailureTipDialog) { auto abms = GetAbilityManager(); CHECK_POINTER_RETURN_INVALID_VALUE(abms); - return abms->OpenLink(want, callerToken, userId, requestCode); + return abms->OpenLink(want, callerToken, userId, requestCode, hideFailureTipDialog); } ErrCode AbilityManagerClient::TerminateMission(int32_t missionId) diff --git a/services/abilitymgr/src/ability_manager_proxy.cpp b/services/abilitymgr/src/ability_manager_proxy.cpp index 8ab7a0ec36f..4d4ac71708c 100644 --- a/services/abilitymgr/src/ability_manager_proxy.cpp +++ b/services/abilitymgr/src/ability_manager_proxy.cpp @@ -5992,8 +5992,8 @@ int32_t AbilityManagerProxy::PreStartMission(const std::string& bundleName, cons return reply.ReadInt32(); } -ErrCode AbilityManagerProxy::OpenLink(const Want& want, sptr callerToken, - int32_t userId, int requestCode) +ErrCode AbilityManagerProxy::OpenLink(const Want &want, sptr callerToken, + int32_t userId, int requestCode, bool hideFailureTipDialog) { if (AppUtils::GetInstance().IsForbidStart()) { TAG_LOGW(AAFwkTag::ABILITYMGR, "forbid start: %{public}s", want.GetElement().GetBundleName().c_str()); @@ -6026,6 +6026,10 @@ ErrCode AbilityManagerProxy::OpenLink(const Want& want, sptr call TAG_LOGE(AAFwkTag::ABILITYMGR, "requestCode write fail"); return INNER_ERR; } + if (!data.WriteBool(hideFailureTipDialog)) { + TAG_LOGE(AAFwkTag::ABILITYMGR, "hideFailureTipDialog write failed."); + return INNER_ERR; + } auto error = SendRequest(AbilityManagerInterfaceCode::OPEN_LINK, data, reply, option); if (error != NO_ERROR) { TAG_LOGE(AAFwkTag::ABILITYMGR, "request error:%{public}d", error); diff --git a/services/abilitymgr/src/ability_manager_service.cpp b/services/abilitymgr/src/ability_manager_service.cpp index da29f8b836b..7db57d14240 100644 --- a/services/abilitymgr/src/ability_manager_service.cpp +++ b/services/abilitymgr/src/ability_manager_service.cpp @@ -622,7 +622,8 @@ int AbilityManagerService::StartAbility(const Want &want, int32_t userId, int re #ifdef SUPPORT_SCREEN DmsUtil::GetInstance().UpdateFlagForCollaboration(want); #endif - int32_t ret = StartAbilityWrap(want, nullptr, requestCode, false, userId); + StartAbilityWrapParam startAbilityWrapParam = { want, nullptr, requestCode, false, userId }; + int32_t ret = StartAbilityWrap(startAbilityWrapParam); AAFWK::ContinueRadar::GetInstance().ClickIconStartAbility("StartAbilityWrap", want.GetFlags(), ret); if (ret != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "StartAbilityError:%{public}d", eventInfo.errCode); @@ -637,7 +638,7 @@ int AbilityManagerService::StartAbility(const Want &want, const sptr &callerToken, - int32_t userId, int requestCode, bool removeInsightIntentFlag) + int32_t userId, int requestCode, bool removeInsightIntentFlag, const AAFwk::OpenLinkOptions &opt) { if (AppUtils::GetInstance().IsForbidStart()) { TAG_LOGW(AAFwkTag::ABILITYMGR, "forbid start: %{public}s", want.GetElement().GetBundleName().c_str()); @@ -654,11 +655,11 @@ int AbilityManagerService::StartAbilityWithRemoveIntentFlag(const Want &want, co #ifdef SUPPORT_SCREEN DmsUtil::GetInstance().UpdateFlagForCollaboration(want); #endif - return StartAbilityByFreeInstall(want, callerToken, userId, requestCode); + return StartAbilityByFreeInstall(want, callerToken, userId, requestCode, opt); } int32_t AbilityManagerService::StartAbilityByFreeInstall(const Want &want, sptr callerToken, - int32_t userId, int32_t requestCode) + int32_t userId, int32_t requestCode, const AAFwk::OpenLinkOptions &opt) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); bool startWithAccount = want.GetBoolParam(START_ABILITY_TYPE, false); @@ -679,8 +680,9 @@ int32_t AbilityManagerService::StartAbilityByFreeInstall(const Want &want, sptr< TAG_LOGD(AAFwkTag::ABILITYMGR, "Start ability come, ability is %{public}s, userId is %{public}d", want.GetElement().GetAbilityName().c_str(), userId); - - int32_t ret = StartAbilityWrap(want, callerToken, requestCode, false, userId); + StartAbilityWrapParam startAbilityWrapParam = { + want, callerToken, requestCode, false, userId, false, 0, false, false, false, opt }; + int32_t ret = StartAbilityWrap(startAbilityWrapParam); if (ret != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "StartAbilityByFreeInstall error:%{public}d", ret); } @@ -722,7 +724,9 @@ int AbilityManagerService::StartAbilityWithSpecifyTokenIdInner(const Want &want, TAG_LOGI(AAFwkTag::ABILITYMGR, "start ability come, ability:%{public}s, userId:%{public}d, specifyTokenId:%{public}u", want.GetElement().GetAbilityName().c_str(), userId, specifyTokenId); - int32_t ret = StartAbilityWrap(want, callerToken, requestCode, isPendingWantCaller, userId, false, specifyTokenId); + StartAbilityWrapParam startAbilityWrapParam = { + want, callerToken, requestCode, isPendingWantCaller, userId, false, specifyTokenId }; + int32_t ret = StartAbilityWrap(startAbilityWrapParam); if (ret != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "startAbility with specified token error:%{public}d", ret); } @@ -877,8 +881,9 @@ int AbilityManagerService::StartAbilityOnlyUIAbility(const Want &want, const spt TAG_LOGI(AAFwkTag::ABILITYMGR, "start, ability: %{public}s, userId: %{public}d, specifyTokenId: %{public}u", want.GetElement().GetAbilityName().c_str(), DEFAULT_INVAL_VALUE, specifyTokenId); - - int32_t ret = StartAbilityWrap(want, callerToken, DEFAULT_INVAL_VALUE, false, DEFAULT_INVAL_VALUE, false, specifyTokenId, false, false, true); + StartAbilityWrapParam startAbilityWrapParam = { + want, callerToken, DEFAULT_INVAL_VALUE, false, DEFAULT_INVAL_VALUE, false, specifyTokenId, false, false, true }; + int32_t ret = StartAbilityWrap(startAbilityWrapParam); if (ret != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "StartAbilityOnlyUIAbility error:%{public}d", ret); } @@ -936,8 +941,9 @@ int AbilityManagerService::StartAbilityAsCallerDetails(const Want &want, const s callerPkg.c_str(), targetPkg.c_str()); AbilityUtil::AddAbilityJumpRuleToBms(callerPkg, targetPkg, GetUserId()); } - int32_t ret = StartAbilityWrap(newWant, callerToken, requestCode, false, userId, true, - 0, false, isImplicit, false); + StartAbilityWrapParam startAbilityWrapParam = { + newWant, callerToken, requestCode, false, userId, true, 0, false, isImplicit, false }; + int32_t ret = StartAbilityWrap(startAbilityWrapParam); if (ret != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "start ability as caller failed:%{public}d", ret); } @@ -1010,25 +1016,26 @@ bool AbilityManagerService::StartAbilityInChain(StartAbilityParams ¶ms, int return true; } -int AbilityManagerService::StartAbilityWrap(const Want &want, const sptr &callerToken, - int requestCode, bool isPendingWantCaller, int32_t userId, bool isStartAsCaller, uint32_t specifyToken, - bool isForegroundToRestartApp, bool isImplicit, bool isUIAbilityOnly) +int AbilityManagerService::StartAbilityWrap(const StartAbilityWrapParam &startAbilityWrapParam) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); - StartAbilityParams startParams(const_cast(want)); - startParams.callerToken = callerToken; - startParams.userId = userId; - startParams.requestCode = requestCode; - startParams.isStartAsCaller = isStartAsCaller; - startParams.SetValidUserId(GetValidUserId(userId)); + StartAbilityParams startParams(const_cast(startAbilityWrapParam.want)); + startParams.callerToken = startAbilityWrapParam.callerToken; + startParams.userId = startAbilityWrapParam.userId; + startParams.requestCode = startAbilityWrapParam.requestCode; + startParams.isStartAsCaller = startAbilityWrapParam.isStartAsCaller; + startParams.SetValidUserId(GetValidUserId(startAbilityWrapParam.userId)); int result = ERR_OK; if (StartAbilityInChain(startParams, result)) { return result; } - return StartAbilityInner(want, callerToken, requestCode, isPendingWantCaller, userId, isStartAsCaller, specifyToken, - isForegroundToRestartApp, isImplicit, isUIAbilityOnly); + return StartAbilityInner(startAbilityWrapParam.want, startAbilityWrapParam.callerToken, + startAbilityWrapParam.requestCode, startAbilityWrapParam.isPendingWantCaller, startAbilityWrapParam.userId, + startAbilityWrapParam.isStartAsCaller, startAbilityWrapParam.specifyTokenId, + startAbilityWrapParam.isForegroundToRestartApp, startAbilityWrapParam.isImplicit, + startAbilityWrapParam.isUIAbilityOnly, startAbilityWrapParam.opt); } void AbilityManagerService::SetReserveInfo(const std::string &linkString, AbilityRequest& abilityRequest) @@ -1169,7 +1176,7 @@ void AbilityManagerService::CheckExtensionRateLimit() int AbilityManagerService::StartAbilityInner(const Want &want, const sptr &callerToken, int requestCode, bool isPendingWantCaller, int32_t userId, bool isStartAsCaller, uint32_t specifyTokenId, - bool isForegroundToRestartApp, bool isImplicit, bool isUIAbilityOnly) + bool isForegroundToRestartApp, bool isImplicit, bool isUIAbilityOnly, const AAFwk::OpenLinkOptions &opt) { HITRACE_METER_NAME(HITRACE_TAG_ABILITY_MANAGER, __PRETTY_FUNCTION__); if (!isStartAsCaller || isImplicit) { @@ -1282,6 +1289,7 @@ int AbilityManagerService::StartAbilityInner(const Want &want, const sptrGetUIExtensionSourceToken(callerToken); UpdateCallerInfoUtil::GetInstance().UpdateAsCallerSourceInfo(newWant, asCallerSourceToken, callerToken); - return StartAbilityWrap(newWant, callerToken, requestCode, false, userId, true); + StartAbilityWrapParam startAbilityWrapParam = { newWant, callerToken, requestCode, false, userId, true }; + return StartAbilityWrap(startAbilityWrapParam); } int AbilityManagerService::StartAbilityForResultAsCaller(const Want &want, const StartOptions &startOptions, @@ -12310,7 +12319,8 @@ int32_t AbilityManagerService::StartAbilityWithInsightIntent(const Want &want, i AbilityUtil::RemoveInstanceKey(const_cast(want)); EventInfo eventInfo = BuildEventInfo(want, userId); SendAbilityEvent(EventName::START_ABILITY, HiSysEventType::BEHAVIOR, eventInfo); - int32_t ret = StartAbilityWrap(want, nullptr, requestCode, false, userId); + StartAbilityWrapParam startAbilityWrapParam = { want, nullptr, requestCode, false, userId }; + int32_t ret = StartAbilityWrap(startAbilityWrapParam); if (ret != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "StartAbilityError:%{public}d", ret); } @@ -13069,7 +13079,9 @@ int32_t AbilityManagerService::RestartApp(const AAFwk::Want &want, bool isAppRec (const_cast(want)).SetParam(AAFwk::Want::PARAM_APP_CLONE_INDEX_KEY, processInfo.appCloneIndex); (const_cast(want)).SetParam(AAFwk::Want::APP_INSTANCE_KEY, processInfo.instanceKey); (const_cast(want)).RemoveParam(Want::CREATE_APP_INSTANCE_KEY); - result = StartAbilityWrap(want, nullptr, DEFAULT_INVAL_VALUE, false, DEFAULT_INVAL_VALUE, false, 0, true); + StartAbilityWrapParam startAbilityWrapParam = { + want, nullptr, DEFAULT_INVAL_VALUE, false, DEFAULT_INVAL_VALUE, false, 0, true }; + result = StartAbilityWrap(startAbilityWrapParam); if (result != ERR_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "startAbility error"); return result; @@ -14049,13 +14061,15 @@ ErrCode AbilityManagerService::IntentOpenLinkInner(const std::shared_ptr callerToken, - int32_t userId, int32_t requestCode) + int32_t userId, int32_t requestCode, bool hideFailureTipDialog) { - return OpenLinkInner(want, callerToken, userId, requestCode, true); + OpenLinkOptions openLinkOptions; + openLinkOptions.SetHideFailureTipDialog(hideFailureTipDialog); + return OpenLinkInner(want, callerToken, userId, requestCode, true, openLinkOptions); } ErrCode AbilityManagerService::OpenLinkInner(const Want& want, sptr callerToken, - int32_t userId, int32_t requestCode, bool removeInsightIntentFlag) + int32_t userId, int32_t requestCode, bool removeInsightIntentFlag, const AAFwk::OpenLinkOptions &opt) { if (AppUtils::GetInstance().IsForbidStart()) { TAG_LOGW(AAFwkTag::ABILITYMGR, "forbid start: %{public}s", want.GetElement().GetBundleName().c_str()); @@ -14067,33 +14081,33 @@ ErrCode AbilityManagerService::OpenLinkInner(const Want& want, sptr(want)); std::string callerBundleName; Want convertedWant = want; - if (!WantUtils::IsShortUrl(want) || - WantUtils::GetCallerBundleName(callerBundleName) != ERR_OK) { + TAG_LOGD(AAFwkTag::ABILITYMGR, "openLinkOptions hideFailureTipDialog: %{public}d", opt.GetHideFailureTipDialog()); + if (!WantUtils::IsShortUrl(want) || WantUtils::GetCallerBundleName(callerBundleName) != ERR_OK) { TAG_LOGI(AAFwkTag::ABILITYMGR, "start ability by default"); - int retCode = StartAbilityWithRemoveIntentFlag(want, callerToken, userId, requestCode, removeInsightIntentFlag); + int retCode = StartAbilityWithRemoveIntentFlag( + want, callerToken, userId, requestCode, removeInsightIntentFlag, opt); CHECK_RET_RETURN_RET(retCode, "startAbility failed"); return ERR_OPEN_LINK_START_ABILITY_DEFAULT_OK; } - TAG_LOGI(AAFwkTag::ABILITYMGR, "callerBundleName=%{public}s", callerBundleName.c_str()); convertedWant.SetParam(Want::PARAM_RESV_CALLER_BUNDLE_NAME, callerBundleName); uint32_t targetType = TARGET_TYPE_INIT; if (WantUtils::ConvertToExplicitWant(convertedWant, targetType) != ERR_OK) { TAG_LOGI(AAFwkTag::ABILITYMGR, "ConvertToExplicitWant fail. start ability by default"); - int retCode = StartAbilityWithRemoveIntentFlag(want, callerToken, userId, requestCode, removeInsightIntentFlag); + int retCode = StartAbilityWithRemoveIntentFlag(want, callerToken, userId, requestCode, + removeInsightIntentFlag, opt); CHECK_RET_RETURN_RET(retCode, "startAbility failed"); return ERR_OPEN_LINK_START_ABILITY_DEFAULT_OK; } - if (WantUtils::IsNormalApp(targetType)) { int retCode = StartAbilityWithRemoveIntentFlag(convertedWant, callerToken, userId, requestCode, - removeInsightIntentFlag); + removeInsightIntentFlag, opt); CHECK_RET_RETURN_RET(retCode, "startAbility failed"); return ERR_OPEN_LINK_START_ABILITY_DEFAULT_OK; } if (WantUtils::IsAtomicService(targetType)) { return OpenLinkFreeInstallAtomicService(convertedWant, want, callerToken, userId, requestCode, - removeInsightIntentFlag); + removeInsightIntentFlag, opt); } bool curAppLinkingOnlyFlag = convertedWant.GetBoolParam(APP_LINKING_ONLY, false); TAG_LOGD(AAFwkTag::ABILITYMGR, "openLink not specific app or atomicService. AppLinkingOnly: %{public}d", @@ -14102,19 +14116,19 @@ ErrCode AbilityManagerService::OpenLinkInner(const Want& want, sptr callerToken, int32_t userId, int32_t requestCode, - bool removeInsightIntentFlag) + bool removeInsightIntentFlag, const AAFwk::OpenLinkOptions &opt) { if (freeInstallManager_ == nullptr) { TAG_LOGI(AAFwkTag::ABILITYMGR, "freeInstallManager_ nullptr. start ability by default"); auto retCode = StartAbilityWithRemoveIntentFlag(originalWant, callerToken, userId, requestCode, - removeInsightIntentFlag); + removeInsightIntentFlag, opt); CHECK_RET_RETURN_RET(retCode, "startAbility failed"); return ERR_OPEN_LINK_START_ABILITY_DEFAULT_OK; } @@ -14133,7 +14147,7 @@ int32_t AbilityManagerService::OpenLinkFreeInstallAtomicService(Want &convertedW } TAG_LOGI(AAFwkTag::ABILITYMGR, "start ability by default"); retCode = StartAbilityWithRemoveIntentFlag(originalWant, callerToken, userId, requestCode, - removeInsightIntentFlag); + removeInsightIntentFlag, opt); CHECK_RET_RETURN_RET(retCode, "StartAbility failed"); return ERR_OPEN_LINK_START_ABILITY_DEFAULT_OK; } diff --git a/services/abilitymgr/src/ability_manager_stub.cpp b/services/abilitymgr/src/ability_manager_stub.cpp index e5d8a75a12e..72bf2dabdb8 100644 --- a/services/abilitymgr/src/ability_manager_stub.cpp +++ b/services/abilitymgr/src/ability_manager_stub.cpp @@ -4356,8 +4356,8 @@ int32_t AbilityManagerStub::OpenLinkInner(MessageParcel &data, MessageParcel &re sptr callerToken = data.ReadRemoteObject(); int32_t userId = data.ReadInt32(); int requestCode = data.ReadInt32(); - - int32_t result = OpenLink(*want, callerToken, userId, requestCode); + bool hideFailureTipDialog = data.ReadBool(); + int32_t result = OpenLink(*want, callerToken, userId, requestCode, hideFailureTipDialog); if (result != NO_ERROR && result != ERR_OPEN_LINK_START_ABILITY_DEFAULT_OK) { TAG_LOGE(AAFwkTag::ABILITYMGR, "openLink fail"); } diff --git a/services/abilitymgr/src/implicit_start_processor.cpp b/services/abilitymgr/src/implicit_start_processor.cpp index 64e0cd7c02e..45271a9d155 100644 --- a/services/abilitymgr/src/implicit_start_processor.cpp +++ b/services/abilitymgr/src/implicit_start_processor.cpp @@ -185,8 +185,12 @@ int ImplicitStartProcessor::ImplicitStartAbility(AbilityRequest &request, int32_ if (want.GetBoolParam("isCreateAppGallerySelector", false)) { want.RemoveParam("isCreateAppGallerySelector"); bool needGrantUriPermission = true; - DialogSessionManager::GetInstance().CreateImplicitSelectorModalDialog(request, want, userId, - dialogAppInfos, needGrantUriPermission); + TAG_LOGD(AAFwkTag::ABILITYMGR, "openLinkOptions hideFailureTipDialog: %{public}d", + request.openLinkOptions.GetHideFailureTipDialog()); + if (!request.openLinkOptions.GetHideFailureTipDialog()) { + DialogSessionManager::GetInstance().CreateImplicitSelectorModalDialog(request, want, userId, + dialogAppInfos, needGrantUriPermission); + } return ERR_IMPLICIT_START_ABILITY_FAIL; } TAG_LOGE(AAFwkTag::ABILITYMGR, "failed, show tips dialog"); @@ -782,8 +786,9 @@ int32_t ImplicitStartProcessor::ImplicitStartAbilityInner(const Want &targetWant targetWant, request.callerToken, userId, request.extensionType); break; default: - result = abilityMgr->StartAbilityWrap( - targetWant, request.callerToken, request.requestCode, false, userId, false, 0, false, true); + StartAbilityWrapParam startAbilityWrapParam = { + targetWant, request.callerToken, request.requestCode, false, userId, false, 0, false, true }; + result = abilityMgr->StartAbilityWrap(startAbilityWrapParam); break; } diff --git a/services/abilitymgr/src/open_link/open_link_options.cpp b/services/abilitymgr/src/open_link/open_link_options.cpp index b47db5d3cb5..bf8c5bef83e 100644 --- a/services/abilitymgr/src/open_link/open_link_options.cpp +++ b/services/abilitymgr/src/open_link/open_link_options.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2024 Huawei Device Co., Ltd. + * Copyright (c) 2024-2025 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 @@ -20,6 +20,7 @@ namespace AAFwk { OpenLinkOptions::OpenLinkOptions(const OpenLinkOptions &other) { appLinkingOnly_ = other.appLinkingOnly_; + hideFailureTipDialog_ = other.hideFailureTipDialog_; parameters_ = other.parameters_; } @@ -27,6 +28,7 @@ OpenLinkOptions &OpenLinkOptions::operator=(const OpenLinkOptions &other) { if (this != &other) { appLinkingOnly_ = other.appLinkingOnly_; + hideFailureTipDialog_ = other.hideFailureTipDialog_; parameters_ = other.parameters_; } return *this; @@ -59,7 +61,12 @@ bool OpenLinkOptions::ReadFromParcel(Parcel &parcel) if (!parcel.ReadBool(appLinkingOnly)) { return false; } + bool hideFailureTipDialog; + if (!parcel.ReadBool(hideFailureTipDialog)) { + return false; + } SetAppLinkingOnly(appLinkingOnly); + SetHideFailureTipDialog(hideFailureTipDialog); if (!ReadParameters(parcel)) { return false; @@ -107,6 +114,10 @@ bool OpenLinkOptions::Marshalling(Parcel &parcel) const if (!parcel.WriteBool(GetAppLinkingOnly())) { return false; } + // write GetHideFailureTipDialog + if (!parcel.WriteBool(GetHideFailureTipDialog())) { + return false; + } // write parameters if (!WriteParameters(GetParameters(), parcel)) { return false; @@ -125,6 +136,16 @@ bool OpenLinkOptions::GetAppLinkingOnly() const return appLinkingOnly_; } +void OpenLinkOptions::SetHideFailureTipDialog(bool hideFailureTipDialog) +{ + hideFailureTipDialog_ = hideFailureTipDialog; +} + +bool OpenLinkOptions::GetHideFailureTipDialog() const +{ + return hideFailureTipDialog_; +} + void OpenLinkOptions::SetParameters(WantParams parameters) { parameters_ = parameters; diff --git a/test/fuzztest/abilityappdebugmanager_fuzzer/BUILD.gn b/test/fuzztest/abilityappdebugmanager_fuzzer/BUILD.gn index ed4f64e3b8a..890c3360e73 100644 --- a/test/fuzztest/abilityappdebugmanager_fuzzer/BUILD.gn +++ b/test/fuzztest/abilityappdebugmanager_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 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 @@ -38,6 +38,7 @@ ohos_fuzztest("AbilityAppDebugManagerFuzzTest") { configs = [ "${ability_runtime_innerkits_path}/ability_manager:ability_manager_public_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_services_path}/appmgr:libappms", "${ability_runtime_services_path}/common:task_handler_wrap", diff --git a/test/fuzztest/abilityappdebugmanagerfirst_fuzzer/BUILD.gn b/test/fuzztest/abilityappdebugmanagerfirst_fuzzer/BUILD.gn index a2895e9393a..8a634b0c67b 100644 --- a/test/fuzztest/abilityappdebugmanagerfirst_fuzzer/BUILD.gn +++ b/test/fuzztest/abilityappdebugmanagerfirst_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 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 @@ -38,6 +38,7 @@ ohos_fuzztest("AbilityAppDebugManagerFirstFuzzTest") { configs = [ "${ability_runtime_innerkits_path}/ability_manager:ability_manager_public_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_services_path}/appmgr:libappms", "${ability_runtime_services_path}/common:task_handler_wrap", diff --git a/test/fuzztest/screenunlockinterceptor_fuzzer/BUILD.gn b/test/fuzztest/screenunlockinterceptor_fuzzer/BUILD.gn index b34ae91de40..8ee773d6f1b 100644 --- a/test/fuzztest/screenunlockinterceptor_fuzzer/BUILD.gn +++ b/test/fuzztest/screenunlockinterceptor_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 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 @@ -57,6 +57,7 @@ ohos_fuzztest("ScreenUnlockInterceptorFuzzTest") { cflags += [ "-DBINDER_IPC_32BIT" ] } deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_path}/utils/server/startup:startup_util", "${ability_runtime_services_path}/abilitymgr:abilityms", "${ability_runtime_services_path}/appmgr:libappms", diff --git a/test/fuzztest/startotherappinterceptor_fuzzer/BUILD.gn b/test/fuzztest/startotherappinterceptor_fuzzer/BUILD.gn index 62f129d7d9f..ff40a5522fd 100644 --- a/test/fuzztest/startotherappinterceptor_fuzzer/BUILD.gn +++ b/test/fuzztest/startotherappinterceptor_fuzzer/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 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 @@ -55,6 +55,7 @@ ohos_fuzztest("StartOtherappinterceptorFuzzTest") { cflags += [ "-DBINDER_IPC_32BIT" ] } deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_native_path}/appkit:appkit_manager_helper", "${ability_runtime_path}/utils/server/startup:startup_util", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/moduletest/call_module_test/BUILD.gn b/test/moduletest/call_module_test/BUILD.gn index afd91bca7ac..a5aea100880 100644 --- a/test/moduletest/call_module_test/BUILD.gn +++ b/test/moduletest/call_module_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2024 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 @@ -26,6 +26,7 @@ ohos_moduletest("call_ability_service_module_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/moduletest/ipc_ability_mgr_test/BUILD.gn b/test/moduletest/ipc_ability_mgr_test/BUILD.gn index a111c4b3aa0..ca61e88f054 100644 --- a/test/moduletest/ipc_ability_mgr_test/BUILD.gn +++ b/test/moduletest/ipc_ability_mgr_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2021-2024 Huawei Device Co., Ltd. +# Copyright (c) 2021-2025 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 @@ -29,6 +29,7 @@ ohos_moduletest("IpcAbilityMgrServiceModuleTest") { cflags += [ "-DBINDER_IPC_32BIT" ] } deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_services_path}/abilitymgr:abilityms", "${ability_runtime_services_path}/common:perm_verification", diff --git a/test/moduletest/on_new_want_module_test/BUILD.gn b/test/moduletest/on_new_want_module_test/BUILD.gn index 8479502127a..3cad2a42227 100644 --- a/test/moduletest/on_new_want_module_test/BUILD.gn +++ b/test/moduletest/on_new_want_module_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2024 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 @@ -26,6 +26,7 @@ ohos_moduletest("on_new_want_module_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/unittest/ability_manager_service_fourth_test/BUILD.gn b/test/unittest/ability_manager_service_fourth_test/BUILD.gn index a4d09d987de..f9d3ecb37c1 100644 --- a/test/unittest/ability_manager_service_fourth_test/BUILD.gn +++ b/test/unittest/ability_manager_service_fourth_test/BUILD.gn @@ -56,6 +56,7 @@ ohos_unittest("ability_manager_service_fourth_test") { "${ability_runtime_services_path}/abilitymgr/src/exit_reason.cpp", "${ability_runtime_services_path}/abilitymgr/src/insight_intent/insight_intent_execute_manager.cpp", "${ability_runtime_services_path}/abilitymgr/src/modal_system_dialog/modal_system_dialog_ui_extension.cpp", + "${ability_runtime_services_path}/abilitymgr/src/open_link/open_link_options.cpp", "${ability_runtime_services_path}/abilitymgr/src/utils/ability_event_util.cpp", "${ability_runtime_services_path}/abilitymgr/src/utils/modal_system_dialog_util.cpp", "${ability_runtime_services_path}/common/src/ffrt_task_handler_wrap.cpp", diff --git a/test/unittest/ability_manager_service_tenth_test/BUILD.gn b/test/unittest/ability_manager_service_tenth_test/BUILD.gn index ae432f006ab..09eb422bc64 100644 --- a/test/unittest/ability_manager_service_tenth_test/BUILD.gn +++ b/test/unittest/ability_manager_service_tenth_test/BUILD.gn @@ -40,6 +40,7 @@ ohos_unittest("ability_manager_service_tenth_test") { "${ability_runtime_path}/services/abilitymgr/src/ability_auto_startup_service.cpp", "${ability_runtime_path}/services/abilitymgr/src/auto_startup_info.cpp", "${ability_runtime_services_path}/abilitymgr/src/ability_connect_callback_stub.cpp", + "${ability_runtime_services_path}/abilitymgr/src/open_link/open_link_options.cpp", "${ability_runtime_test_path}/mock/task_handler_wrap_mock/src/mock_task_handler_wrap.cpp", "ability_manager_service_tenth_test.cpp", ] diff --git a/test/unittest/ability_manager_service_third_test/ability_manager_service_third_test.cpp b/test/unittest/ability_manager_service_third_test/ability_manager_service_third_test.cpp index 5ef97093c07..2ba1351f971 100644 --- a/test/unittest/ability_manager_service_third_test/ability_manager_service_third_test.cpp +++ b/test/unittest/ability_manager_service_third_test/ability_manager_service_third_test.cpp @@ -22,6 +22,7 @@ #include "ability_connection.h" #include "ability_start_setting.h" #include "recovery_param.h" +#include "start_ability_utils.h" #undef private #undef protected @@ -1641,8 +1642,9 @@ HWTEST_F(AbilityManagerServiceThirdTest, StartAbilityWrap_001, TestSize.Level1) uint32_t specifyToken = 0; bool isForegroundToRestartApp = true; bool isImplicit = true; - auto result = abilityMs->StartAbilityWrap(want, callerToken, requestCode, false, userId, isStartAsCaller, - specifyToken, isForegroundToRestartApp, isImplicit); + StartAbilityWrapParam startAbilityWrapParam = { want, callerToken, requestCode, false, userId, isStartAsCaller, + specifyToken, isForegroundToRestartApp, isImplicit }; + auto result = abilityMs->StartAbilityWrap(startAbilityWrapParam); EXPECT_EQ(result, ERR_NULL_INTERCEPTOR_EXECUTER); } diff --git a/test/unittest/ability_manager_service_twelfth_test/BUILD.gn b/test/unittest/ability_manager_service_twelfth_test/BUILD.gn index 106783e490d..1eef84f55d8 100644 --- a/test/unittest/ability_manager_service_twelfth_test/BUILD.gn +++ b/test/unittest/ability_manager_service_twelfth_test/BUILD.gn @@ -59,6 +59,7 @@ ohos_unittest("ability_manager_service_twelfth_test") { "${ability_runtime_services_path}/abilitymgr/src/exit_reason.cpp", "${ability_runtime_services_path}/abilitymgr/src/insight_intent/insight_intent_execute_manager.cpp", "${ability_runtime_services_path}/abilitymgr/src/modal_system_dialog/modal_system_dialog_ui_extension.cpp", + "${ability_runtime_services_path}/abilitymgr/src/open_link/open_link_options.cpp", "${ability_runtime_services_path}/abilitymgr/src/utils/ability_event_util.cpp", "${ability_runtime_services_path}/abilitymgr/src/utils/modal_system_dialog_util.cpp", "${ability_runtime_services_path}/common/src/ffrt_task_handler_wrap.cpp", diff --git a/test/unittest/ability_timeout_test/BUILD.gn b/test/unittest/ability_timeout_test/BUILD.gn index 7b49789e408..f5668731507 100644 --- a/test/unittest/ability_timeout_test/BUILD.gn +++ b/test/unittest/ability_timeout_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2024 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 @@ -26,6 +26,7 @@ ohos_unittest("ability_timeout_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/unittest/app_mgr_client_first_test/BUILD.gn b/test/unittest/app_mgr_client_first_test/BUILD.gn index dc867934d19..40afe6c0bc5 100644 --- a/test/unittest/app_mgr_client_first_test/BUILD.gn +++ b/test/unittest/app_mgr_client_first_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2024 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 @@ -40,6 +40,7 @@ ohos_unittest("app_mgr_client_first_test") { ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_services_path}/abilitymgr:abilityms", "${ability_runtime_services_path}/common:perm_verification", ] diff --git a/test/unittest/app_mgr_client_test/BUILD.gn b/test/unittest/app_mgr_client_test/BUILD.gn index 3066eaf37bb..ea2e8fb595f 100644 --- a/test/unittest/app_mgr_client_test/BUILD.gn +++ b/test/unittest/app_mgr_client_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2024 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 @@ -40,6 +40,7 @@ ohos_unittest("AppMgrClientTest") { ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_services_path}/abilitymgr:abilityms", "${ability_runtime_services_path}/common:perm_verification", ] diff --git a/test/unittest/app_running_manager_fourth_test/BUILD.gn b/test/unittest/app_running_manager_fourth_test/BUILD.gn index 8272bd4e799..5fcf54e4408 100644 --- a/test/unittest/app_running_manager_fourth_test/BUILD.gn +++ b/test/unittest/app_running_manager_fourth_test/BUILD.gn @@ -31,6 +31,7 @@ ohos_unittest("app_running_manager_fourth_test") { sources = [ "app_running_manager_fourth_test.cpp" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/unittest/dialog_session_manager_test/BUILD.gn b/test/unittest/dialog_session_manager_test/BUILD.gn index d24f472d80e..b8dfc573a77 100644 --- a/test/unittest/dialog_session_manager_test/BUILD.gn +++ b/test/unittest/dialog_session_manager_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 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 @@ -48,6 +48,7 @@ ohos_unittest("dialog_session_manager_test") { cflags = [] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_path}/utils/server/startup:startup_util", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/unittest/dlp_utils_test/BUILD.gn b/test/unittest/dlp_utils_test/BUILD.gn index dbfc9fee6ad..8a399533b1b 100644 --- a/test/unittest/dlp_utils_test/BUILD.gn +++ b/test/unittest/dlp_utils_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 @@ -24,6 +24,7 @@ ohos_unittest("dlp_utils_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_services_path}/abilitymgr:abilityms", "${ability_runtime_services_path}/common:perm_verification", ] diff --git a/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_impl_test.cpp b/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_impl_test.cpp index b8a005ca3b8..d307fa475e3 100644 --- a/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_impl_test.cpp +++ b/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_impl_test.cpp @@ -30,6 +30,7 @@ #include "mock_context.h" #include "mock_lifecycle_observer.h" #include "mock_serviceability_manager_service.h" +#include "open_link_options.h" #include "scene_board_judgement.h" #include "session/host/include/session.h" #include "sys_mgr_client.h" @@ -1850,6 +1851,23 @@ HWTEST_F(AbilityContextImplTest, Ability_Context_Impl_OpenLink_0100, Function | EXPECT_EQ(context_->GetRestoreEnabled(), true); } +/** + * @tc.number: Ability_Context_Impl_OpenLink_0200 + * @tc.name: OpenLink + * @tc.desc: OpenLink OpenLinkOptions + */ +HWTEST_F(AbilityContextImplTest, Ability_Context_Impl_OpenLink_0200, Function | MediumTest | Level1) +{ + AAFwk::Want want; + int requestCode = 0; + AAFwk::OpenLinkOptions openLinkOptions; + bool hideFailureTipDialog = true; + EXPECT_FALSE(openLinkOptions.GetHideFailureTipDialog()); + openLinkOptions.SetHideFailureTipDialog(hideFailureTipDialog); + context_->OpenLink(want, requestCode, hideFailureTipDialog); + EXPECT_EQ(openLinkOptions.GetHideFailureTipDialog(), hideFailureTipDialog); +} + /** * @tc.number: Ability_Context_Impl_StartUIServiceExtensionAbility_0100 * @tc.name: StartUIServiceExtensionAbility diff --git a/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_test.cpp b/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_test.cpp index 3a130c38573..5ba08fe7b2c 100644 --- a/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_test.cpp +++ b/test/unittest/frameworks_kits_ability_ability_runtime_test/ability_context_test.cpp @@ -282,7 +282,7 @@ public: { return ERR_OK; } - virtual ErrCode OpenLink(const AAFwk::Want& want, int requestCode) + virtual ErrCode OpenLink(const AAFwk::Want& want, int requestCode, bool hideFailureTipDialog = false) { return ERR_OK; } diff --git a/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_ability_manager_client.cpp b/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_ability_manager_client.cpp index b46525e93d3..3ad2ac25cdb 100644 --- a/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_ability_manager_client.cpp +++ b/test/unittest/frameworks_kits_ability_ability_runtime_test/mock_ability_manager_client.cpp @@ -998,7 +998,7 @@ ErrCode AbilityManagerClient::PreStartMission(const std::string& bundleName, con } ErrCode AbilityManagerClient::OpenLink(const Want& want, sptr callerToken, - int32_t userId, int requestCode) + int32_t userId, int requestCode, bool hideFailureTipDialog) { return ERR_OK; } diff --git a/test/unittest/free_install_manager_test/BUILD.gn b/test/unittest/free_install_manager_test/BUILD.gn index c98cea2784f..189bccbcf7c 100644 --- a/test/unittest/free_install_manager_test/BUILD.gn +++ b/test/unittest/free_install_manager_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2024 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 @@ -26,6 +26,7 @@ ohos_unittest("free_install_manager_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/unittest/free_install_manager_third_test/BUILD.gn b/test/unittest/free_install_manager_third_test/BUILD.gn index d8a0c953af7..51f4c893b54 100644 --- a/test/unittest/free_install_manager_third_test/BUILD.gn +++ b/test/unittest/free_install_manager_third_test/BUILD.gn @@ -41,6 +41,7 @@ ohos_unittest("free_install_manager_third_test") { ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/unittest/free_install_observer_manager_test/BUILD.gn b/test/unittest/free_install_observer_manager_test/BUILD.gn index 9db6381c5c8..d77c94b3112 100644 --- a/test/unittest/free_install_observer_manager_test/BUILD.gn +++ b/test/unittest/free_install_observer_manager_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 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 @@ -32,6 +32,8 @@ ohos_unittest("free_install_observer_manager_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", + "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/unittest/hidden_start_observer_manager_test/BUILD.gn b/test/unittest/hidden_start_observer_manager_test/BUILD.gn index f9a95f72ad1..0cd8d26aef4 100644 --- a/test/unittest/hidden_start_observer_manager_test/BUILD.gn +++ b/test/unittest/hidden_start_observer_manager_test/BUILD.gn @@ -35,6 +35,7 @@ ohos_unittest("hidden_start_observer_manager_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/unittest/kiosk_manager_test/BUILD.gn b/test/unittest/kiosk_manager_test/BUILD.gn index bc4ddad0a8f..5e478fde33d 100644 --- a/test/unittest/kiosk_manager_test/BUILD.gn +++ b/test/unittest/kiosk_manager_test/BUILD.gn @@ -77,6 +77,7 @@ ohos_unittest("kiosk_manager_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/ability_manager:ability_start_setting", "${ability_runtime_innerkits_path}/ability_manager:mission_info", "${ability_runtime_innerkits_path}/app_manager:app_manager", diff --git a/test/unittest/multi_instance_utils_second_test/BUILD.gn b/test/unittest/multi_instance_utils_second_test/BUILD.gn index 9d2e3cebea2..f6a45de7f14 100644 --- a/test/unittest/multi_instance_utils_second_test/BUILD.gn +++ b/test/unittest/multi_instance_utils_second_test/BUILD.gn @@ -24,6 +24,7 @@ ohos_unittest("multi_instance_utils_second_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_services_path}/abilitymgr:abilityms", "${ability_runtime_services_path}/common:app_util", ] diff --git a/test/unittest/multi_instance_utils_test/BUILD.gn b/test/unittest/multi_instance_utils_test/BUILD.gn index e7fd0321c60..85f9bd6fafd 100644 --- a/test/unittest/multi_instance_utils_test/BUILD.gn +++ b/test/unittest/multi_instance_utils_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2024 Huawei Device Co., Ltd. +# Copyright (c) 2024-2025 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 @@ -24,6 +24,7 @@ ohos_unittest("multi_instance_utils_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_services_path}/abilitymgr:abilityms", "${ability_runtime_services_path}/common:app_util", ] diff --git a/test/unittest/running_infos_test/BUILD.gn b/test/unittest/running_infos_test/BUILD.gn index ed9338a50ec..8683e620bdc 100644 --- a/test/unittest/running_infos_test/BUILD.gn +++ b/test/unittest/running_infos_test/BUILD.gn @@ -1,4 +1,4 @@ -# Copyright (c) 2022-2024 Huawei Device Co., Ltd. +# Copyright (c) 2022-2025 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 @@ -26,6 +26,7 @@ ohos_unittest("running_infos_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/deps_wrapper:ability_deps_wrapper", "${ability_runtime_services_path}/abilitymgr:abilityms", diff --git a/test/unittest/uri_utils_test/BUILD.gn b/test/unittest/uri_utils_test/BUILD.gn index 438d6b81f21..2b82d591a51 100644 --- a/test/unittest/uri_utils_test/BUILD.gn +++ b/test/unittest/uri_utils_test/BUILD.gn @@ -42,6 +42,7 @@ ohos_unittest("uri_utils_test") { configs = [ "${ability_runtime_services_path}/abilitymgr:abilityms_config" ] deps = [ + "${ability_runtime_innerkits_path}/ability_manager:ability_manager", "${ability_runtime_innerkits_path}/app_manager:app_manager", "${ability_runtime_innerkits_path}/uri_permission:uri_permission_mgr", "${ability_runtime_native_path}/appkit:appkit_manager_helper", -- Gitee