1eace7efcSopenharmony_ci/* 2eace7efcSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 3eace7efcSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4eace7efcSopenharmony_ci * you may not use this file except in compliance with the License. 5eace7efcSopenharmony_ci * You may obtain a copy of the License at 6eace7efcSopenharmony_ci * 7eace7efcSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8eace7efcSopenharmony_ci * 9eace7efcSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10eace7efcSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11eace7efcSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12eace7efcSopenharmony_ci * See the License for the specific language governing permissions and 13eace7efcSopenharmony_ci * limitations under the License. 14eace7efcSopenharmony_ci */ 15eace7efcSopenharmony_ci 16eace7efcSopenharmony_ci#include "startup_util.h" 17eace7efcSopenharmony_ci 18eace7efcSopenharmony_ci#include "ability_info.h" 19eace7efcSopenharmony_ci#include "extension_ability_info.h" 20eace7efcSopenharmony_ci#include "global_constant.h" 21eace7efcSopenharmony_ci#include "server_constant.h" 22eace7efcSopenharmony_ci#include "want.h" 23eace7efcSopenharmony_ci 24eace7efcSopenharmony_cinamespace OHOS::AbilityRuntime { 25eace7efcSopenharmony_cinamespace { 26eace7efcSopenharmony_ciconstexpr int32_t REQUEST_CODE_LENGTH = 32; 27eace7efcSopenharmony_ciconstexpr int32_t PID_LENGTH = 16; 28eace7efcSopenharmony_ciconstexpr int32_t REQUEST_CODE_PID_LENGTH = 48; 29eace7efcSopenharmony_ciconstexpr int32_t VALID_REQUEST_CODE_LENGTH = 49; 30eace7efcSopenharmony_ci} 31eace7efcSopenharmony_cibool StartupUtil::GetAppIndex(const AAFwk::Want &want, int32_t &appIndex) 32eace7efcSopenharmony_ci{ 33eace7efcSopenharmony_ci appIndex = want.GetIntParam(ServerConstant::DLP_INDEX, 0); 34eace7efcSopenharmony_ci if (appIndex > GlobalConstant::MAX_APP_CLONE_INDEX) { 35eace7efcSopenharmony_ci return true; 36eace7efcSopenharmony_ci } 37eace7efcSopenharmony_ci if (appIndex == 0) { 38eace7efcSopenharmony_ci appIndex = want.GetIntParam(AAFwk::Want::PARAM_APP_CLONE_INDEX_KEY, 0); 39eace7efcSopenharmony_ci if (appIndex < 0 || appIndex > GlobalConstant::MAX_APP_CLONE_INDEX) { 40eace7efcSopenharmony_ci return false; 41eace7efcSopenharmony_ci } 42eace7efcSopenharmony_ci return true; 43eace7efcSopenharmony_ci } 44eace7efcSopenharmony_ci return false; 45eace7efcSopenharmony_ci} 46eace7efcSopenharmony_ci 47eace7efcSopenharmony_ciint32_t StartupUtil::BuildAbilityInfoFlag() 48eace7efcSopenharmony_ci{ 49eace7efcSopenharmony_ci return AppExecFwk::AbilityInfoFlag::GET_ABILITY_INFO_WITH_APPLICATION | 50eace7efcSopenharmony_ci AppExecFwk::AbilityInfoFlag::GET_ABILITY_INFO_WITH_PERMISSION | 51eace7efcSopenharmony_ci AppExecFwk::AbilityInfoFlag::GET_ABILITY_INFO_WITH_METADATA; 52eace7efcSopenharmony_ci} 53eace7efcSopenharmony_ci 54eace7efcSopenharmony_cibool StartupUtil::IsSupportAppClone(AppExecFwk::ExtensionAbilityType type) 55eace7efcSopenharmony_ci{ 56eace7efcSopenharmony_ci return type == AppExecFwk::ExtensionAbilityType::WORK_SCHEDULER || 57eace7efcSopenharmony_ci type == AppExecFwk::ExtensionAbilityType::BACKUP || 58eace7efcSopenharmony_ci type == AppExecFwk::ExtensionAbilityType::SHARE || 59eace7efcSopenharmony_ci type == AppExecFwk::ExtensionAbilityType::PUSH || 60eace7efcSopenharmony_ci type == AppExecFwk::ExtensionAbilityType::REMOTE_LOCATION || 61eace7efcSopenharmony_ci type == AppExecFwk::ExtensionAbilityType::REMOTE_NOTIFICATION || 62eace7efcSopenharmony_ci type == AppExecFwk::ExtensionAbilityType::VOIP; 63eace7efcSopenharmony_ci} 64eace7efcSopenharmony_ci 65eace7efcSopenharmony_civoid StartupUtil::InitAbilityInfoFromExtension(AppExecFwk::ExtensionAbilityInfo &extensionInfo, 66eace7efcSopenharmony_ci AppExecFwk::AbilityInfo &abilityInfo) 67eace7efcSopenharmony_ci{ 68eace7efcSopenharmony_ci abilityInfo.applicationName = extensionInfo.applicationInfo.name; 69eace7efcSopenharmony_ci abilityInfo.applicationInfo = extensionInfo.applicationInfo; 70eace7efcSopenharmony_ci abilityInfo.bundleName = extensionInfo.bundleName; 71eace7efcSopenharmony_ci abilityInfo.package = extensionInfo.moduleName; 72eace7efcSopenharmony_ci abilityInfo.moduleName = extensionInfo.moduleName; 73eace7efcSopenharmony_ci abilityInfo.name = extensionInfo.name; 74eace7efcSopenharmony_ci abilityInfo.srcEntrance = extensionInfo.srcEntrance; 75eace7efcSopenharmony_ci abilityInfo.srcPath = extensionInfo.srcEntrance; 76eace7efcSopenharmony_ci abilityInfo.iconPath = extensionInfo.icon; 77eace7efcSopenharmony_ci abilityInfo.iconId = extensionInfo.iconId; 78eace7efcSopenharmony_ci abilityInfo.label = extensionInfo.label; 79eace7efcSopenharmony_ci abilityInfo.labelId = extensionInfo.labelId; 80eace7efcSopenharmony_ci abilityInfo.description = extensionInfo.description; 81eace7efcSopenharmony_ci abilityInfo.descriptionId = extensionInfo.descriptionId; 82eace7efcSopenharmony_ci abilityInfo.priority = extensionInfo.priority; 83eace7efcSopenharmony_ci abilityInfo.permissions = extensionInfo.permissions; 84eace7efcSopenharmony_ci abilityInfo.readPermission = extensionInfo.readPermission; 85eace7efcSopenharmony_ci abilityInfo.writePermission = extensionInfo.writePermission; 86eace7efcSopenharmony_ci abilityInfo.uri = extensionInfo.uri; 87eace7efcSopenharmony_ci abilityInfo.extensionAbilityType = extensionInfo.type; 88eace7efcSopenharmony_ci abilityInfo.visible = extensionInfo.visible; 89eace7efcSopenharmony_ci abilityInfo.resourcePath = extensionInfo.resourcePath; 90eace7efcSopenharmony_ci abilityInfo.enabled = extensionInfo.enabled; 91eace7efcSopenharmony_ci abilityInfo.isModuleJson = true; 92eace7efcSopenharmony_ci abilityInfo.isStageBasedModel = true; 93eace7efcSopenharmony_ci abilityInfo.process = extensionInfo.process; 94eace7efcSopenharmony_ci abilityInfo.metadata = extensionInfo.metadata; 95eace7efcSopenharmony_ci abilityInfo.compileMode = extensionInfo.compileMode; 96eace7efcSopenharmony_ci abilityInfo.type = AppExecFwk::AbilityType::EXTENSION; 97eace7efcSopenharmony_ci abilityInfo.extensionTypeName = extensionInfo.extensionTypeName; 98eace7efcSopenharmony_ci if (!extensionInfo.hapPath.empty()) { 99eace7efcSopenharmony_ci abilityInfo.hapPath = extensionInfo.hapPath; 100eace7efcSopenharmony_ci } 101eace7efcSopenharmony_ci} 102eace7efcSopenharmony_ci 103eace7efcSopenharmony_ciint64_t StartupUtil::GenerateFullRequestCode(int32_t pid, bool backFlag, int32_t requestCode) 104eace7efcSopenharmony_ci{ 105eace7efcSopenharmony_ci if (requestCode <= 0 || pid <= 0) { 106eace7efcSopenharmony_ci return 0; 107eace7efcSopenharmony_ci } 108eace7efcSopenharmony_ci uint64_t fullRequestCode = static_cast<uint64_t>(requestCode); 109eace7efcSopenharmony_ci uint64_t tempNum = static_cast<uint64_t>(pid); 110eace7efcSopenharmony_ci fullRequestCode |= (tempNum << REQUEST_CODE_LENGTH); 111eace7efcSopenharmony_ci if (backFlag) { 112eace7efcSopenharmony_ci tempNum = 1; 113eace7efcSopenharmony_ci fullRequestCode |= (tempNum << REQUEST_CODE_PID_LENGTH); 114eace7efcSopenharmony_ci } 115eace7efcSopenharmony_ci return fullRequestCode; 116eace7efcSopenharmony_ci} 117eace7efcSopenharmony_ci 118eace7efcSopenharmony_ciCallerRequestInfo StartupUtil::ParseFullRequestCode(int64_t fullRequestCode) 119eace7efcSopenharmony_ci{ 120eace7efcSopenharmony_ci CallerRequestInfo requestInfo; 121eace7efcSopenharmony_ci if (fullRequestCode <= 0) { 122eace7efcSopenharmony_ci return requestInfo; 123eace7efcSopenharmony_ci } 124eace7efcSopenharmony_ci uint64_t tempFullRequestCode = static_cast<uint64_t>(fullRequestCode); 125eace7efcSopenharmony_ci if ((tempFullRequestCode >> VALID_REQUEST_CODE_LENGTH) > 0) { 126eace7efcSopenharmony_ci return requestInfo; 127eace7efcSopenharmony_ci } 128eace7efcSopenharmony_ci uint64_t tempNum = 1; 129eace7efcSopenharmony_ci requestInfo.requestCode = (tempFullRequestCode & ((tempNum << REQUEST_CODE_LENGTH) - 1)); 130eace7efcSopenharmony_ci tempFullRequestCode >>= REQUEST_CODE_LENGTH; 131eace7efcSopenharmony_ci requestInfo.pid = (tempFullRequestCode & ((tempNum << PID_LENGTH) - 1)); 132eace7efcSopenharmony_ci tempFullRequestCode >>= PID_LENGTH; 133eace7efcSopenharmony_ci requestInfo.backFlag = (tempFullRequestCode == 1); 134eace7efcSopenharmony_ci return requestInfo; 135eace7efcSopenharmony_ci} 136eace7efcSopenharmony_ci} // namespace OHOS::AbilityRuntime 137