1c8a96e64Sopenharmony_ci/* 2c8a96e64Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3c8a96e64Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4c8a96e64Sopenharmony_ci * you may not use this file except in compliance with the License. 5c8a96e64Sopenharmony_ci * You may obtain a copy of the License at 6c8a96e64Sopenharmony_ci * 7c8a96e64Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8c8a96e64Sopenharmony_ci * 9c8a96e64Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10c8a96e64Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11c8a96e64Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12c8a96e64Sopenharmony_ci * See the License for the specific language governing permissions and 13c8a96e64Sopenharmony_ci * limitations under the License. 14c8a96e64Sopenharmony_ci */ 15c8a96e64Sopenharmony_ci#include "advanced_ui_component/navpushpathhelper/include/hsp_silentinstall.h" 16c8a96e64Sopenharmony_ci#include "advanced_ui_component/navpushpathhelper/include/silent_install_callback.h" 17c8a96e64Sopenharmony_ci 18c8a96e64Sopenharmony_ci#include "iservice_registry.h" 19c8a96e64Sopenharmony_ci#include "system_ability_definition.h" 20c8a96e64Sopenharmony_ci#include "ability_runtime/context/context.h" 21c8a96e64Sopenharmony_ci#include "want.h" 22c8a96e64Sopenharmony_ci#include "adapter/ohos/entrance/ace_container.h" 23c8a96e64Sopenharmony_ci#include "core/pipeline_ng/pipeline_context.h" 24c8a96e64Sopenharmony_ci#include "base/log/log.h" 25c8a96e64Sopenharmony_ci#include "base/utils/utils.h" 26c8a96e64Sopenharmony_ci#include "core/components_ng/manager/navigation/navigation_manager.h" 27c8a96e64Sopenharmony_ci#include "core/components_ng/pattern/image/image_pattern.h" 28c8a96e64Sopenharmony_ci 29c8a96e64Sopenharmony_cinamespace OHOS::NavPushPathHelper { 30c8a96e64Sopenharmony_ci 31c8a96e64Sopenharmony_ciOHOS::sptr<OHOS::AppExecFwk::IBundleMgr> HspSilentInstall::GetBundleManager() 32c8a96e64Sopenharmony_ci{ 33c8a96e64Sopenharmony_ci auto systemAbilityMgr = OHOS::SystemAbilityManagerClient::GetInstance().GetSystemAbilityManager(); 34c8a96e64Sopenharmony_ci if (!systemAbilityMgr) { 35c8a96e64Sopenharmony_ci TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "get system ability failed"); 36c8a96e64Sopenharmony_ci return nullptr; 37c8a96e64Sopenharmony_ci } 38c8a96e64Sopenharmony_ci auto bundleObj = systemAbilityMgr->GetSystemAbility(OHOS::BUNDLE_MGR_SERVICE_SYS_ABILITY_ID); 39c8a96e64Sopenharmony_ci if (!bundleObj) { 40c8a96e64Sopenharmony_ci TAG_LOGE(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "get bundle service failed"); 41c8a96e64Sopenharmony_ci return nullptr; 42c8a96e64Sopenharmony_ci } 43c8a96e64Sopenharmony_ci return OHOS::iface_cast<OHOS::AppExecFwk::IBundleMgr>(bundleObj); 44c8a96e64Sopenharmony_ci} 45c8a96e64Sopenharmony_ci 46c8a96e64Sopenharmony_ciint32_t HspSilentInstall::SilentInstall(const std::string& moduleName, const std::function<void()>& callback, 47c8a96e64Sopenharmony_ci const std::function<void(int32_t, const std::string&)>& silentInstallErrorCallBack) 48c8a96e64Sopenharmony_ci{ 49c8a96e64Sopenharmony_ci auto pipeline = OHOS::Ace::NG::PipelineContext::GetCurrentContextSafely(); 50c8a96e64Sopenharmony_ci CHECK_NULL_RETURN(pipeline, -1); 51c8a96e64Sopenharmony_ci 52c8a96e64Sopenharmony_ci auto runtimeContext = OHOS::Ace::Platform::AceContainer::GetRuntimeContext(pipeline->GetInstanceId()); 53c8a96e64Sopenharmony_ci CHECK_NULL_RETURN(runtimeContext, -1); 54c8a96e64Sopenharmony_ci 55c8a96e64Sopenharmony_ci auto bundleName = runtimeContext->GetBundleName(); 56c8a96e64Sopenharmony_ci if (bundleName.empty()) { 57c8a96e64Sopenharmony_ci return -1; 58c8a96e64Sopenharmony_ci } 59c8a96e64Sopenharmony_ci 60c8a96e64Sopenharmony_ci auto appInfo = runtimeContext->GetApplicationInfo(); 61c8a96e64Sopenharmony_ci if (!appInfo) { 62c8a96e64Sopenharmony_ci return -1; 63c8a96e64Sopenharmony_ci } 64c8a96e64Sopenharmony_ci auto bms = GetBundleManager(); 65c8a96e64Sopenharmony_ci CHECK_NULL_RETURN(bms, -1); 66c8a96e64Sopenharmony_ci 67c8a96e64Sopenharmony_ci OHOS::AAFwk::Want want; 68c8a96e64Sopenharmony_ci want.SetBundle(bundleName); 69c8a96e64Sopenharmony_ci want.SetModuleName(moduleName); 70c8a96e64Sopenharmony_ci OHOS::sptr<AtomicServiceStatusCallback> routerCallback = new AtomicServiceStatusCallback(); 71c8a96e64Sopenharmony_ci routerCallback->SetActionEventHandler(callback); 72c8a96e64Sopenharmony_ci routerCallback->SetErrorEventHandler(silentInstallErrorCallBack); 73c8a96e64Sopenharmony_ci if (bms->SilentInstall(want, appInfo->uid / OHOS::AppExecFwk::Constants::BASE_USER_RANGE, routerCallback)) { 74c8a96e64Sopenharmony_ci TAG_LOGI(OHOS::Ace::AceLogTag::ACE_DEFAULT_DOMAIN, "Begin to silent install"); 75c8a96e64Sopenharmony_ci return 0; 76c8a96e64Sopenharmony_ci } 77c8a96e64Sopenharmony_ci return -1; 78c8a96e64Sopenharmony_ci} 79c8a96e64Sopenharmony_ci 80c8a96e64Sopenharmony_cibool HspSilentInstall::IsHspExist(const std::string &moduleName, const std::string &pathName) 81c8a96e64Sopenharmony_ci{ 82c8a96e64Sopenharmony_ci auto pipeline = OHOS::Ace::NG::PipelineContext::GetCurrentContextSafely(); 83c8a96e64Sopenharmony_ci CHECK_NULL_RETURN(pipeline, false); 84c8a96e64Sopenharmony_ci auto container = OHOS::Ace::Container::CurrentSafely(); 85c8a96e64Sopenharmony_ci CHECK_NULL_RETURN(container, false); 86c8a96e64Sopenharmony_ci auto navigationRoute = container->GetNavigationRoute(); 87c8a96e64Sopenharmony_ci CHECK_NULL_RETURN(navigationRoute, false); 88c8a96e64Sopenharmony_ci if (navigationRoute->IsNavigationItemExits(pathName)) { 89c8a96e64Sopenharmony_ci return true; 90c8a96e64Sopenharmony_ci } 91c8a96e64Sopenharmony_ci 92c8a96e64Sopenharmony_ci auto runtimeContext = OHOS::Ace::Platform::AceContainer::GetRuntimeContext(pipeline->GetInstanceId()); 93c8a96e64Sopenharmony_ci CHECK_NULL_RETURN(runtimeContext, false); 94c8a96e64Sopenharmony_ci 95c8a96e64Sopenharmony_ci auto appInfo = runtimeContext->GetApplicationInfo(); 96c8a96e64Sopenharmony_ci if (!appInfo) { 97c8a96e64Sopenharmony_ci return false; 98c8a96e64Sopenharmony_ci } 99c8a96e64Sopenharmony_ci std::vector<OHOS::AppExecFwk::ModuleInfo> moduleList = appInfo->moduleInfos; 100c8a96e64Sopenharmony_ci auto res = std::any_of(moduleList.begin(), moduleList.end(), [moduleName](const auto &module) { 101c8a96e64Sopenharmony_ci return module.moduleName == moduleName; 102c8a96e64Sopenharmony_ci }); 103c8a96e64Sopenharmony_ci if (res) { 104c8a96e64Sopenharmony_ci return true; 105c8a96e64Sopenharmony_ci } 106c8a96e64Sopenharmony_ci return false; 107c8a96e64Sopenharmony_ci} 108c8a96e64Sopenharmony_ci 109c8a96e64Sopenharmony_civoid HspSilentInstall::InitRouteMap() 110c8a96e64Sopenharmony_ci{ 111c8a96e64Sopenharmony_ci auto container = OHOS::Ace::Container::CurrentSafely(); 112c8a96e64Sopenharmony_ci CHECK_NULL_VOID(container); 113c8a96e64Sopenharmony_ci auto navigationRoute = container->GetNavigationRoute(); 114c8a96e64Sopenharmony_ci CHECK_NULL_VOID(navigationRoute); 115c8a96e64Sopenharmony_ci navigationRoute->InitRouteMap(); 116c8a96e64Sopenharmony_ci} 117c8a96e64Sopenharmony_ci} // namespace OHOS::NavPushPathHelper