1 /* 2 * Copyright (c) 2021-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef FOUNDATION_APPEXECFWK_SERVICES_BUNDLEMGR_INCLUDE_INNER_BUNDLE_INFO_H 17 #define FOUNDATION_APPEXECFWK_SERVICES_BUNDLEMGR_INCLUDE_INNER_BUNDLE_INFO_H 18 19 #include "nocopyable.h" 20 21 #include "ability_info.h" 22 #include "access_token.h" 23 #include "bundle_constants.h" 24 #include "bundle_info.h" 25 #include "common_event_info.h" 26 #include "common_profile.h" 27 #include "data_group_info.h" 28 #include "distributed_bundle_info.h" 29 #include "extension_ability_info.h" 30 #include "form_info.h" 31 #include "hap_module_info.h" 32 #include "inner_app_quick_fix.h" 33 #include "inner_bundle_user_info.h" 34 #include "json_util.h" 35 #include "quick_fix/app_quick_fix.h" 36 #include "quick_fix/hqf_info.h" 37 #include "shared/base_shared_bundle_info.h" 38 #include "shared/shared_bundle_info.h" 39 #include "shortcut_info.h" 40 #include "want.h" 41 42 namespace OHOS { 43 namespace AppExecFwk { 44 struct Distro { 45 bool deliveryWithInstall = false; 46 std::string moduleName; 47 std::string moduleType; 48 bool installationFree = false; 49 }; 50 51 struct DefinePermission { 52 std::string name; 53 std::string grantMode = Profile::DEFINEPERMISSION_GRANT_MODE_SYSTEM_GRANT; 54 std::string availableLevel = Profile::DEFINEPERMISSION_AVAILABLE_LEVEL_DEFAULT_VALUE; 55 bool provisionEnable = true; 56 bool distributedSceneEnable = false; 57 std::string label; 58 int32_t labelId = 0; 59 std::string description; 60 int32_t descriptionId = 0; 61 }; 62 63 struct InnerModuleInfo { 64 std::string name; 65 std::string modulePackage; 66 std::string moduleName; 67 std::string modulePath; 68 std::string moduleDataDir; 69 std::string moduleResPath; 70 std::string label; 71 std::string hapPath; 72 int32_t labelId = 0; 73 std::string description; 74 int32_t descriptionId = 0; 75 std::string icon; 76 int32_t iconId = 0; 77 std::string mainAbility; // config.json : mainAbility; module.json : mainElement 78 std::string entryAbilityKey; // skills contains "action.system.home" and "entity.system.home" 79 std::string srcPath; 80 std::string hashValue; 81 bool isEntry = false; 82 bool installationFree = false; 83 // all user's value of isRemovable 84 // key:userId 85 // value:isRemovable true or flase 86 std::map<std::string, bool> isRemovable; 87 MetaData metaData; 88 ModuleColorMode colorMode = ModuleColorMode::AUTO; 89 Distro distro; 90 std::vector<std::string> reqCapabilities; 91 std::vector<std::string> abilityKeys; 92 std::vector<std::string> skillKeys; 93 // new version fields 94 std::string pages; 95 std::string process; 96 std::string srcEntrance; 97 std::string uiSyntax; 98 std::string virtualMachine; 99 bool isModuleJson = false; 100 bool isStageBasedModel = false; 101 std::vector<DefinePermission> definePermissions; 102 std::vector<RequestPermission> requestPermissions; 103 std::vector<std::string> deviceTypes; 104 std::vector<std::string> extensionKeys; 105 std::vector<std::string> extensionSkillKeys; 106 std::vector<Metadata> metadata; 107 int32_t upgradeFlag = 0; 108 std::vector<Dependency> dependencies; 109 std::string compileMode; 110 bool isLibIsolated = false; 111 std::string nativeLibraryPath; 112 std::string cpuAbi; 113 std::string targetModuleName; 114 int32_t targetPriority; 115 std::vector<OverlayModuleInfo> overlayModuleInfo; 116 AtomicServiceModuleType atomicServiceModuleType; 117 std::vector<std::string> preloads; 118 BundleType bundleType = BundleType::SHARED; 119 uint32_t versionCode = 0; 120 std::string versionName; 121 std::vector<ProxyData> proxyDatas; 122 std::string buildHash; 123 std::string isolationMode; 124 bool compressNativeLibs = true; 125 std::vector<std::string> nativeLibraryFileNames; 126 AOTCompileStatus aotCompileStatus = AOTCompileStatus::NOT_COMPILED; 127 }; 128 129 struct SkillUri { 130 std::string scheme; 131 std::string host; 132 std::string port; 133 std::string path; 134 std::string pathStartWith; 135 std::string pathRegex; 136 std::string type; 137 }; 138 139 struct Skill { 140 public: 141 std::vector<std::string> actions; 142 std::vector<std::string> entities; 143 std::vector<SkillUri> uris; 144 bool Match(const OHOS::AAFwk::Want &want) const; 145 bool MatchLauncher(const OHOS::AAFwk::Want &want) const; 146 bool MatchType(const std::string &type, const std::string &skillUriType) const; 147 private: 148 bool MatchAction(const std::string &action) const; 149 bool MatchEntities(const std::vector<std::string> ¶mEntities) const; 150 bool MatchUriAndType(const std::string &uriString, const std::string &type) const; 151 bool MatchUri(const std::string &uriString, const SkillUri &skillUri) const; 152 bool StartsWith(const std::string &sourceString, const std::string &targetPrefix) const; 153 bool MatchMimeType(const std::string &uriString) const; 154 std::string GetOptParamUri(const std::string &uriString) const; 155 }; 156 157 enum InstallExceptionStatus : int32_t { 158 INSTALL_START = 1, 159 INSTALL_FINISH, 160 UPDATING_EXISTED_START, 161 UPDATING_NEW_START, 162 UPDATING_FINISH, 163 UNINSTALL_BUNDLE_START, 164 UNINSTALL_PACKAGE_START, 165 UNKNOWN_STATUS, 166 }; 167 168 struct InstallMark { 169 std::string bundleName; 170 std::string packageName; 171 int32_t status = InstallExceptionStatus::UNKNOWN_STATUS; 172 }; 173 class InnerBundleInfo { 174 public: 175 enum class BundleStatus { 176 ENABLED = 1, 177 DISABLED, 178 }; 179 180 InnerBundleInfo(); 181 InnerBundleInfo &operator=(const InnerBundleInfo &info); 182 ~InnerBundleInfo(); 183 /** 184 * @brief Transform the InnerBundleInfo object to json. 185 * @param jsonObject Indicates the obtained json object. 186 * @return 187 */ 188 void ToJson(nlohmann::json &jsonObject) const; 189 /** 190 * @brief Transform the json object to InnerBundleInfo object. 191 * @param jsonObject Indicates the obtained json object. 192 * @return Returns 0 if the json object parsed successfully; returns error code otherwise. 193 */ 194 int32_t FromJson(const nlohmann::json &jsonObject); 195 /** 196 * @brief Add module info to old InnerBundleInfo object. 197 * @param newInfo Indicates the new InnerBundleInfo object. 198 * @return Returns true if the module successfully added; returns false otherwise. 199 */ 200 bool AddModuleInfo(const InnerBundleInfo &newInfo); 201 /** 202 * @brief Update module info to old InnerBundleInfo object. 203 * @param newInfo Indicates the new InnerBundleInfo object. 204 * @return 205 */ 206 void UpdateModuleInfo(const InnerBundleInfo &newInfo); 207 /** 208 * @brief Remove module info from InnerBundleInfo object. 209 * @param modulePackage Indicates the module package to be remove. 210 * @return 211 */ 212 void RemoveModuleInfo(const std::string &modulePackage); 213 /** 214 * @brief Find hap module info by module package. 215 * @param modulePackage Indicates the module package. 216 * @param userId Indicates the user ID. 217 * @return Returns the HapModuleInfo object if find it; returns null otherwise. 218 */ 219 std::optional<HapModuleInfo> FindHapModuleInfo( 220 const std::string &modulePackage, int32_t userId = Constants::UNSPECIFIED_USERID) const; 221 /** 222 * @brief Get module hashValue. 223 * @param modulePackage Indicates the module package. 224 * @param hapModuleInfo Indicates the hapModuleInfo. 225 * @return 226 */ 227 void GetModuleWithHashValue( 228 int32_t flags, const std::string &modulePackage, HapModuleInfo &hapModuleInfo) const; 229 /** 230 * @brief Find abilityInfo by bundle name and ability name. 231 * @param moduleName Indicates the module name 232 * @param abilityName Indicates the ability name. 233 * @param userId Indicates the user ID. 234 * @return Returns the AbilityInfo object if find it; returns null otherwise. 235 */ 236 std::optional<AbilityInfo> FindAbilityInfo( 237 const std::string &moduleName, 238 const std::string &abilityName, 239 int32_t userId = Constants::UNSPECIFIED_USERID) const; 240 /** 241 * @brief Find abilityInfo by bundle name and ability name. 242 * @param moduleName Indicates the module name 243 * @param abilityName Indicates the ability name. 244 * @return Returns the AbilityInfo object if find it; returns null otherwise. 245 */ 246 std::optional<AbilityInfo> FindAbilityInfoV9( 247 const std::string &moduleName, const std::string &abilityName) const; 248 /** 249 * @brief Find abilityInfo by bundle name module name and ability name. 250 * @param moduleName Indicates the module name 251 * @param abilityName Indicates the ability name. 252 * @return Returns ERR_OK if abilityInfo find successfully obtained; returns other ErrCode otherwise. 253 */ 254 ErrCode FindAbilityInfo( 255 const std::string &moduleName, const std::string &abilityName, AbilityInfo &info) const; 256 /** 257 * @brief Find abilityInfo of list by bundle name. 258 * @param bundleName Indicates the bundle name. 259 * @param userId Indicates the user ID. 260 * @return Returns the AbilityInfo of list if find it; returns null otherwise. 261 */ 262 std::optional<std::vector<AbilityInfo>> FindAbilityInfos( 263 int32_t userId = Constants::UNSPECIFIED_USERID) const; 264 /** 265 * @brief Find extensionInfo by bundle name and extension name. 266 * @param moduleName Indicates the module name. 267 * @param extensionName Indicates the extension name 268 * @return Returns the ExtensionAbilityInfo object if find it; returns null otherwise. 269 */ 270 std::optional<ExtensionAbilityInfo> FindExtensionInfo( 271 const std::string &moduleName, const std::string &extensionName) const; 272 /** 273 * @brief Find extensionInfos by bundle name. 274 * @param bundleName Indicates the bundle name. 275 * @return Returns the ExtensionAbilityInfo array if find it; returns null otherwise. 276 */ 277 std::optional<std::vector<ExtensionAbilityInfo>> FindExtensionInfos() const; 278 /** 279 * @brief Transform the InnerBundleInfo object to string. 280 * @return Returns the string object 281 */ 282 std::string ToString() const; 283 /** 284 * @brief Add ability infos to old InnerBundleInfo object. 285 * @param abilityInfos Indicates the AbilityInfo object to be add. 286 * @return 287 */ AddModuleAbilityInfo(const std::map<std::string,AbilityInfo> & abilityInfos)288 void AddModuleAbilityInfo(const std::map<std::string, AbilityInfo> &abilityInfos) 289 { 290 for (const auto &ability : abilityInfos) { 291 baseAbilityInfos_.try_emplace(ability.first, ability.second); 292 } 293 } 294 AddModuleExtensionInfos(const std::map<std::string,ExtensionAbilityInfo> & extensionInfos)295 void AddModuleExtensionInfos(const std::map<std::string, ExtensionAbilityInfo> &extensionInfos) 296 { 297 for (const auto &extensionInfo : extensionInfos) { 298 baseExtensionInfos_.try_emplace(extensionInfo.first, extensionInfo.second); 299 } 300 } 301 /** 302 * @brief Add skill infos to old InnerBundleInfo object. 303 * @param skillInfos Indicates the Skill object to be add. 304 * @return 305 */ AddModuleSkillInfo(const std::map<std::string,std::vector<Skill>> & skillInfos)306 void AddModuleSkillInfo(const std::map<std::string, std::vector<Skill>> &skillInfos) 307 { 308 for (const auto &skills : skillInfos) { 309 skillInfos_.try_emplace(skills.first, skills.second); 310 } 311 } AddModuleExtensionSkillInfos(const std::map<std::string,std::vector<Skill>> & extensionSkillInfos)312 void AddModuleExtensionSkillInfos(const std::map<std::string, std::vector<Skill>> &extensionSkillInfos) 313 { 314 for (const auto &skills : extensionSkillInfos) { 315 extensionSkillInfos_.try_emplace(skills.first, skills.second); 316 } 317 } 318 /** 319 * @brief Add form infos to old InnerBundleInfo object. 320 * @param formInfos Indicates the Forms object to be add. 321 * @return 322 */ AddModuleFormInfo(const std::map<std::string,std::vector<FormInfo>> & formInfos)323 void AddModuleFormInfo(const std::map<std::string, std::vector<FormInfo>> &formInfos) 324 { 325 for (const auto &forms : formInfos) { 326 formInfos_.try_emplace(forms.first, forms.second); 327 } 328 } 329 /** 330 * @brief Add common events to old InnerBundleInfo object. 331 * @param commonEvents Indicates the Common Event object to be add. 332 * @return 333 */ AddModuleCommonEvent(const std::map<std::string,CommonEventInfo> & commonEvents)334 void AddModuleCommonEvent(const std::map<std::string, CommonEventInfo> &commonEvents) 335 { 336 for (const auto &commonEvent : commonEvents) { 337 commonEvents_.try_emplace(commonEvent.first, commonEvent.second); 338 } 339 } 340 /** 341 * @brief Add shortcut infos to old InnerBundleInfo object. 342 * @param shortcutInfos Indicates the Shortcut object to be add. 343 * @return 344 */ AddModuleShortcutInfo(const std::map<std::string,ShortcutInfo> & shortcutInfos)345 void AddModuleShortcutInfo(const std::map<std::string, ShortcutInfo> &shortcutInfos) 346 { 347 for (const auto &shortcut : shortcutInfos) { 348 shortcutInfos_.try_emplace(shortcut.first, shortcut.second); 349 } 350 } 351 /** 352 * @brief Add innerModuleInfos to old InnerBundleInfo object. 353 * @param innerModuleInfos Indicates the InnerModuleInfo object to be add. 354 * @return 355 */ AddInnerModuleInfo(const std::map<std::string,InnerModuleInfo> & innerModuleInfos)356 void AddInnerModuleInfo(const std::map<std::string, InnerModuleInfo> &innerModuleInfos) 357 { 358 for (const auto &info : innerModuleInfos) { 359 innerModuleInfos_.try_emplace(info.first, info.second); 360 } 361 } 362 /** 363 * @brief Get application name. 364 * @return Return application name 365 */ GetApplicationName()366 std::string GetApplicationName() const 367 { 368 return baseApplicationInfo_->name; 369 } 370 /** 371 * @brief Set bundle status. 372 * @param status Indicates the BundleStatus object to set. 373 * @return 374 */ SetBundleStatus(const BundleStatus & status)375 void SetBundleStatus(const BundleStatus &status) 376 { 377 bundleStatus_ = status; 378 } 379 /** 380 * @brief Get bundle status. 381 * @return Return the BundleStatus object 382 */ GetBundleStatus()383 BundleStatus GetBundleStatus() const 384 { 385 return bundleStatus_; 386 } 387 /** 388 * @brief Set bundle install time. 389 * @param time Indicates the install time to set. 390 * @param userId Indicates the user ID. 391 * @return 392 */ 393 void SetBundleInstallTime( 394 const int64_t time, int32_t userId = Constants::UNSPECIFIED_USERID); 395 /** 396 * @brief Get bundle install time. 397 * @param userId Indicates the user ID. 398 * @return Return the bundle install time. 399 */ 400 int64_t GetBundleInstallTime(int32_t userId = Constants::UNSPECIFIED_USERID) const 401 { 402 InnerBundleUserInfo innerBundleUserInfo; 403 if (!GetInnerBundleUserInfo(userId, innerBundleUserInfo)) { 404 APP_LOGE("can not find userId %{public}d when GetBundleInstallTime", userId); 405 return -1; 406 } 407 return innerBundleUserInfo.installTime; 408 } 409 /** 410 * @brief Set bundle update time. 411 * @param time Indicates the update time to set. 412 * @param userId Indicates the user ID. 413 * @return 414 */ 415 void SetBundleUpdateTime(const int64_t time, int32_t userId = Constants::UNSPECIFIED_USERID); 416 /** 417 * @brief Get bundle update time. 418 * @param userId Indicates the user ID. 419 * @return Return the bundle update time. 420 */ 421 int64_t GetBundleUpdateTime(int32_t userId = Constants::UNSPECIFIED_USERID) const 422 { 423 InnerBundleUserInfo innerBundleUserInfo; 424 if (!GetInnerBundleUserInfo(userId, innerBundleUserInfo)) { 425 APP_LOGE("can not find userId %{public}d when GetBundleUpdateTime", userId); 426 return -1; 427 } 428 return innerBundleUserInfo.updateTime; 429 } 430 /** 431 * @brief Get bundle name. 432 * @return Return bundle name 433 */ GetBundleName()434 const std::string GetBundleName() const 435 { 436 return baseApplicationInfo_->bundleName; 437 } 438 /** 439 * @brief Get baseBundleInfo. 440 * @return Return the BundleInfo object. 441 */ GetBaseBundleInfo()442 BundleInfo GetBaseBundleInfo() const 443 { 444 return *baseBundleInfo_; 445 } 446 /** 447 * @brief Set baseBundleInfo. 448 * @param bundleInfo Indicates the BundleInfo object. 449 */ SetBaseBundleInfo(const BundleInfo & bundleInfo)450 void SetBaseBundleInfo(const BundleInfo &bundleInfo) 451 { 452 *baseBundleInfo_ = bundleInfo; 453 } 454 /** 455 * @brief Update baseBundleInfo. 456 * @param bundleInfo Indicates the new BundleInfo object. 457 * @return 458 */ 459 void UpdateBaseBundleInfo(const BundleInfo &bundleInfo, bool isEntry); 460 /** 461 * @brief Get baseApplicationInfo. 462 * @return Return the ApplicationInfo object. 463 */ GetBaseApplicationInfo()464 ApplicationInfo GetBaseApplicationInfo() const 465 { 466 return *baseApplicationInfo_; 467 } 468 /** 469 * @brief Set baseApplicationInfo. 470 * @param applicationInfo Indicates the ApplicationInfo object. 471 */ SetBaseApplicationInfo(const ApplicationInfo & applicationInfo)472 void SetBaseApplicationInfo(const ApplicationInfo &applicationInfo) 473 { 474 *baseApplicationInfo_ = applicationInfo; 475 } 476 /** 477 * @brief Update baseApplicationInfo. 478 * @param applicationInfo Indicates the ApplicationInfo object. 479 * @param isEntry Indicates the isEntry. 480 */ 481 void UpdateBaseApplicationInfo(const ApplicationInfo &applicationInfo, bool isEntry); 482 /** 483 * @brief Get application enabled. 484 * @param userId Indicates the user ID. 485 * @return Return whether the application is enabled. 486 */ 487 bool GetApplicationEnabled(int32_t userId = Constants::UNSPECIFIED_USERID) const 488 { 489 InnerBundleUserInfo innerBundleUserInfo; 490 if (!GetInnerBundleUserInfo(userId, innerBundleUserInfo)) { 491 APP_LOGD("can not find userId %{public}d when GetApplicationEnabled", userId); 492 return false; 493 } 494 495 return innerBundleUserInfo.bundleUserInfo.enabled; 496 } GetApplicationEnabledV9(int32_t userId,bool & isEnabled)497 ErrCode GetApplicationEnabledV9(int32_t userId, bool &isEnabled) const 498 { 499 InnerBundleUserInfo innerBundleUserInfo; 500 if (!GetInnerBundleUserInfo(userId, innerBundleUserInfo)) { 501 APP_LOGD("can not find bundleUserInfo in userId: %{public}d when GetApplicationEnabled", userId); 502 return ERR_BUNDLE_MANAGER_BUNDLE_NOT_EXIST; 503 } 504 isEnabled = innerBundleUserInfo.bundleUserInfo.enabled; 505 return ERR_OK; 506 } 507 /** 508 * @brief Set application enabled. 509 * @param userId Indicates the user ID. 510 * @return Returns ERR_OK if the SetApplicationEnabled is successfully; returns error code otherwise. 511 */ 512 ErrCode SetApplicationEnabled(bool enabled, int32_t userId = Constants::UNSPECIFIED_USERID); 513 /** 514 * @brief Get application code path. 515 * @return Return the string object. 516 */ GetAppCodePath()517 const std::string GetAppCodePath() const 518 { 519 return baseApplicationInfo_->codePath; 520 } 521 /** 522 * @brief Set application code path. 523 * @param codePath Indicates the code path to be set. 524 */ SetAppCodePath(const std::string codePath)525 void SetAppCodePath(const std::string codePath) 526 { 527 baseApplicationInfo_->codePath = codePath; 528 } 529 /** 530 * @brief Insert innerModuleInfos. 531 * @param modulePackage Indicates the modulePackage object as key. 532 * @param innerModuleInfo Indicates the InnerModuleInfo object as value. 533 */ InsertInnerModuleInfo(const std::string & modulePackage,const InnerModuleInfo & innerModuleInfo)534 void InsertInnerModuleInfo(const std::string &modulePackage, const InnerModuleInfo &innerModuleInfo) 535 { 536 innerModuleInfos_.try_emplace(modulePackage, innerModuleInfo); 537 } 538 /** 539 * @brief Insert AbilityInfo. 540 * @param key bundleName.moduleName.abilityName 541 * @param abilityInfo value. 542 */ InsertAbilitiesInfo(const std::string & key,const AbilityInfo & abilityInfo)543 void InsertAbilitiesInfo(const std::string &key, const AbilityInfo &abilityInfo) 544 { 545 baseAbilityInfos_.emplace(key, abilityInfo); 546 } 547 /** 548 * @brief Insert ExtensionAbilityInfo. 549 * @param key bundleName.moduleName.extensionName 550 * @param extensionInfo value. 551 */ InsertExtensionInfo(const std::string & key,const ExtensionAbilityInfo & extensionInfo)552 void InsertExtensionInfo(const std::string &key, const ExtensionAbilityInfo &extensionInfo) 553 { 554 baseExtensionInfos_.emplace(key, extensionInfo); 555 } 556 /** 557 * @brief Insert ability skillInfos. 558 * @param key bundleName.moduleName.abilityName 559 * @param skills ability skills. 560 */ InsertSkillInfo(const std::string & key,const std::vector<Skill> & skills)561 void InsertSkillInfo(const std::string &key, const std::vector<Skill> &skills) 562 { 563 skillInfos_.emplace(key, skills); 564 } 565 /** 566 * @brief Insert extension skillInfos. 567 * @param key bundleName.moduleName.extensionName 568 * @param skills extension skills. 569 */ InsertExtensionSkillInfo(const std::string & key,const std::vector<Skill> & skills)570 void InsertExtensionSkillInfo(const std::string &key, const std::vector<Skill> &skills) 571 { 572 extensionSkillInfos_.emplace(key, skills); 573 } 574 /** 575 * @brief Find AbilityInfo object by Uri. 576 * @param abilityUri Indicates the ability uri. 577 * @param userId Indicates the user ID. 578 * @return Returns the AbilityInfo object if find it; returns null otherwise. 579 */ FindAbilityInfoByUri(const std::string & abilityUri)580 std::optional<AbilityInfo> FindAbilityInfoByUri(const std::string &abilityUri) const 581 { 582 APP_LOGD("Uri is %{public}s", abilityUri.c_str()); 583 for (const auto &ability : baseAbilityInfos_) { 584 auto abilityInfo = ability.second; 585 if (abilityInfo.uri.size() < strlen(Constants::DATA_ABILITY_URI_PREFIX)) { 586 continue; 587 } 588 589 auto configUri = abilityInfo.uri.substr(strlen(Constants::DATA_ABILITY_URI_PREFIX)); 590 APP_LOGD("configUri is %{public}s", configUri.c_str()); 591 if (configUri == abilityUri) { 592 return abilityInfo; 593 } 594 } 595 return std::nullopt; 596 } 597 FindExtensionAbilityInfoByUri(const std::string & uri,ExtensionAbilityInfo & extensionAbilityInfo)598 bool FindExtensionAbilityInfoByUri(const std::string &uri, ExtensionAbilityInfo &extensionAbilityInfo) const 599 { 600 for (const auto &item : baseExtensionInfos_) { 601 if (uri == item.second.uri) { 602 extensionAbilityInfo = item.second; 603 APP_LOGD("find target extension, bundleName : %{public}s, moduleName : %{public}s, name : %{public}s", 604 extensionAbilityInfo.bundleName.c_str(), extensionAbilityInfo.moduleName.c_str(), 605 extensionAbilityInfo.name.c_str()); 606 return true; 607 } 608 } 609 return false; 610 } 611 612 /** 613 * @brief Find AbilityInfo object by Uri. 614 * @param abilityUri Indicates the ability uri. 615 * @param userId Indicates the user ID. 616 * @return Returns the AbilityInfo object if find it; returns null otherwise. 617 */ 618 void FindAbilityInfosByUri(const std::string &abilityUri, 619 std::vector<AbilityInfo> &abilityInfos, int32_t userId = Constants::UNSPECIFIED_USERID) 620 { 621 APP_LOGI("Uri is %{public}s", abilityUri.c_str()); 622 for (auto &ability : baseAbilityInfos_) { 623 auto abilityInfo = ability.second; 624 if (abilityInfo.uri.size() < strlen(Constants::DATA_ABILITY_URI_PREFIX)) { 625 continue; 626 } 627 628 auto configUri = abilityInfo.uri.substr(strlen(Constants::DATA_ABILITY_URI_PREFIX)); 629 APP_LOGI("configUri is %{public}s", configUri.c_str()); 630 if (configUri == abilityUri) { 631 GetApplicationInfo( 632 ApplicationFlag::GET_APPLICATION_INFO_WITH_PERMISSION, userId, abilityInfo.applicationInfo); 633 abilityInfos.emplace_back(abilityInfo); 634 } 635 } 636 return; 637 } 638 /** 639 * @brief Get all ability names in application. 640 * @return Returns ability names. 641 */ GetAbilityNames()642 auto GetAbilityNames() const 643 { 644 std::vector<std::string> abilityNames; 645 for (auto &ability : baseAbilityInfos_) { 646 abilityNames.emplace_back(ability.second.name); 647 } 648 return abilityNames; 649 } 650 /** 651 * @brief Get version code in application. 652 * @return Returns version code. 653 */ GetVersionCode()654 uint32_t GetVersionCode() const 655 { 656 return baseBundleInfo_->versionCode; 657 } 658 /** 659 * @brief Get version name in application. 660 * @return Returns version name. 661 */ GetVersionName()662 std::string GetVersionName() const 663 { 664 return baseBundleInfo_->versionName; 665 } 666 /** 667 * @brief Get vendor in application. 668 * @return Returns vendor. 669 */ GetVendor()670 std::string GetVendor() const 671 { 672 return baseBundleInfo_->vendor; 673 } 674 /** 675 * @brief Get comparible version in application. 676 * @return Returns comparible version. 677 */ GetCompatibleVersion()678 uint32_t GetCompatibleVersion() const 679 { 680 return baseBundleInfo_->compatibleVersion; 681 } 682 /** 683 * @brief Get target version in application. 684 * @return Returns target version. 685 */ GetTargetVersion()686 uint32_t GetTargetVersion() const 687 { 688 return baseBundleInfo_->targetVersion; 689 } 690 /** 691 * @brief Get release type in application. 692 * @return Returns release type. 693 */ GetReleaseType()694 std::string GetReleaseType() const 695 { 696 return baseBundleInfo_->releaseType; 697 } 698 /** 699 * @brief Get minCompatibleVersionCode in base bundleInfo. 700 * @return Returns release type. 701 */ GetMinCompatibleVersionCode()702 uint32_t GetMinCompatibleVersionCode() const 703 { 704 return baseBundleInfo_->minCompatibleVersionCode; 705 } 706 /** 707 * @brief Get install mark in application. 708 * @return Returns install mark. 709 */ SetInstallMark(const std::string & bundleName,const std::string & packageName,const InstallExceptionStatus & status)710 void SetInstallMark(const std::string &bundleName, const std::string &packageName, 711 const InstallExceptionStatus &status) 712 { 713 mark_.bundleName = bundleName; 714 mark_.packageName = packageName; 715 mark_.status = status; 716 } 717 /** 718 * @brief Get install mark in application. 719 * @return Returns install mark. 720 */ GetInstallMark()721 InstallMark GetInstallMark() const 722 { 723 return mark_; 724 } 725 /** 726 * @brief Get application data dir. 727 * @return Return the string object. 728 */ GetAppDataDir()729 std::string GetAppDataDir() const 730 { 731 return baseApplicationInfo_->dataDir; 732 } 733 /** 734 * @brief Set application data dir. 735 * @param dataDir Indicates the data Dir to be set. 736 */ SetAppDataDir(std::string dataDir)737 void SetAppDataDir(std::string dataDir) 738 { 739 baseApplicationInfo_->dataDir = dataDir; 740 } 741 /** 742 * @brief Set application data base dir. 743 * @param dataBaseDir Indicates the data base Dir to be set. 744 */ SetAppDataBaseDir(std::string dataBaseDir)745 void SetAppDataBaseDir(std::string dataBaseDir) 746 { 747 baseApplicationInfo_->dataBaseDir = dataBaseDir; 748 } 749 /** 750 * @brief Set application cache dir. 751 * @param cacheDir Indicates the cache Dir to be set. 752 */ SetAppCacheDir(std::string cacheDir)753 void SetAppCacheDir(std::string cacheDir) 754 { 755 baseApplicationInfo_->cacheDir = cacheDir; 756 } 757 /** 758 * @brief Set application uid. 759 * @param uid Indicates the uid to be set. 760 */ SetUid(int uid)761 void SetUid(int uid) {} 762 /** 763 * @brief Get application uid. 764 * @param userId Indicates the user ID. 765 * @return Returns the uid. 766 */ 767 int GetUid(int32_t userId = Constants::UNSPECIFIED_USERID) const 768 { 769 InnerBundleUserInfo innerBundleUserInfo; 770 if (!GetInnerBundleUserInfo(userId, innerBundleUserInfo)) { 771 return Constants::INVALID_UID; 772 } 773 774 return innerBundleUserInfo.uid; 775 } 776 /** 777 * @brief Get application gid. 778 * @param userId Indicates the user ID. 779 * @return Returns the gid. 780 */ 781 int GetGid(int32_t userId = Constants::UNSPECIFIED_USERID) const 782 { 783 InnerBundleUserInfo innerBundleUserInfo; 784 if (!GetInnerBundleUserInfo(userId, innerBundleUserInfo)) { 785 return Constants::INVALID_GID; 786 } 787 788 if (innerBundleUserInfo.gids.empty()) { 789 return Constants::INVALID_GID; 790 } 791 792 return innerBundleUserInfo.gids[0]; 793 } 794 /** 795 * @brief Set application gid. 796 * @param gid Indicates the gid to be set. 797 */ SetGid(int gid)798 void SetGid(int gid) {} 799 /** 800 * @brief Get application AppType. 801 * @return Returns the AppType. 802 */ GetAppType()803 Constants::AppType GetAppType() const 804 { 805 return appType_; 806 } 807 /** 808 * @brief Set application AppType. 809 * @param gid Indicates the AppType to be set. 810 */ SetAppType(Constants::AppType appType)811 void SetAppType(Constants::AppType appType) 812 { 813 appType_ = appType; 814 if (appType_ == Constants::AppType::SYSTEM_APP) { 815 baseApplicationInfo_->isSystemApp = true; 816 } else { 817 baseApplicationInfo_->isSystemApp = false; 818 } 819 } 820 /** 821 * @brief Get application user id. 822 * @return Returns the user id. 823 */ GetUserId()824 int GetUserId() const 825 { 826 return userId_; 827 } 828 /** 829 * @brief Set application user id. 830 * @param gid Indicates the user id to be set. 831 */ SetUserId(int userId)832 void SetUserId(int userId) 833 { 834 userId_ = userId; 835 } 836 837 // only used in install progress with newInfo GetCurrentModulePackage()838 std::string GetCurrentModulePackage() const 839 { 840 return currentPackage_; 841 } SetCurrentModulePackage(const std::string & modulePackage)842 void SetCurrentModulePackage(const std::string &modulePackage) 843 { 844 currentPackage_ = modulePackage; 845 } AddModuleSrcDir(const std::string & moduleSrcDir)846 void AddModuleSrcDir(const std::string &moduleSrcDir) 847 { 848 if (innerModuleInfos_.count(currentPackage_) == 1) { 849 innerModuleInfos_.at(currentPackage_).modulePath = moduleSrcDir; 850 } 851 } AddModuleDataDir(const std::string & moduleDataDir)852 void AddModuleDataDir(const std::string &moduleDataDir) 853 { 854 if (innerModuleInfos_.count(currentPackage_) == 1) { 855 innerModuleInfos_.at(currentPackage_).moduleDataDir = moduleDataDir; 856 } 857 } 858 AddModuleResPath(const std::string & moduleSrcDir)859 void AddModuleResPath(const std::string &moduleSrcDir) 860 { 861 if (innerModuleInfos_.count(currentPackage_) == 1) { 862 std::string moduleResPath; 863 if (isNewVersion_) { 864 moduleResPath = moduleSrcDir + Constants::PATH_SEPARATOR + Constants::RESOURCES_INDEX; 865 } else { 866 moduleResPath = moduleSrcDir + Constants::PATH_SEPARATOR + Constants::ASSETS_DIR + 867 Constants::PATH_SEPARATOR +innerModuleInfos_.at(currentPackage_).distro.moduleName + 868 Constants::PATH_SEPARATOR + Constants::RESOURCES_INDEX; 869 } 870 871 innerModuleInfos_.at(currentPackage_).moduleResPath = moduleResPath; 872 for (auto &abilityInfo : baseAbilityInfos_) { 873 abilityInfo.second.resourcePath = moduleResPath; 874 } 875 for (auto &extensionInfo : baseExtensionInfos_) { 876 extensionInfo.second.resourcePath = moduleResPath; 877 } 878 } 879 } 880 881 void SetModuleHapPath(const std::string &hapPath); 882 GetModuleHapPath(const std::string & modulePackage)883 const std::string &GetModuleHapPath(const std::string &modulePackage) const 884 { 885 if (innerModuleInfos_.find(modulePackage) != innerModuleInfos_.end()) { 886 return innerModuleInfos_.at(modulePackage).hapPath; 887 } 888 889 return Constants::EMPTY_STRING; 890 } 891 GetModuleName(const std::string & modulePackage)892 const std::string &GetModuleName(const std::string &modulePackage) const 893 { 894 if (innerModuleInfos_.find(modulePackage) != innerModuleInfos_.end()) { 895 return innerModuleInfos_.at(modulePackage).moduleName; 896 } 897 898 return Constants::EMPTY_STRING; 899 } 900 901 const std::string &GetCurModuleName() const; 902 GetDefinePermissions()903 std::vector<DefinePermission> GetDefinePermissions() const 904 { 905 std::vector<DefinePermission> definePermissions; 906 if (innerModuleInfos_.count(currentPackage_) == 1) { 907 definePermissions = innerModuleInfos_.at(currentPackage_).definePermissions; 908 } 909 return definePermissions; 910 } 911 GetRequestPermissions()912 std::vector<RequestPermission> GetRequestPermissions() const 913 { 914 std::vector<RequestPermission> requestPermissions; 915 if (innerModuleInfos_.count(currentPackage_) == 1) { 916 requestPermissions = innerModuleInfos_.at(currentPackage_).requestPermissions; 917 } 918 return requestPermissions; 919 } 920 921 std::vector<DefinePermission> GetAllDefinePermissions() const; 922 923 std::vector<RequestPermission> GetAllRequestPermissions() const; 924 FindModule(std::string modulePackage)925 bool FindModule(std::string modulePackage) const 926 { 927 return (innerModuleInfos_.find(modulePackage) != innerModuleInfos_.end()); 928 } 929 IsEntryModule(std::string modulePackage)930 bool IsEntryModule(std::string modulePackage) const 931 { 932 if (FindModule(modulePackage)) { 933 return innerModuleInfos_.at(modulePackage).isEntry; 934 } 935 return false; 936 } 937 938 std::string GetEntryModuleName() const; 939 GetIsKeepAlive()940 bool GetIsKeepAlive() const 941 { 942 return baseBundleInfo_->isKeepAlive; 943 } 944 SetIsFreeInstallApp(bool isFreeInstall)945 void SetIsFreeInstallApp(bool isFreeInstall) 946 { 947 baseApplicationInfo_->isFreeInstallApp = isFreeInstall; 948 } 949 GetIsFreeInstallApp()950 bool GetIsFreeInstallApp() const 951 { 952 return baseApplicationInfo_->isFreeInstallApp; 953 } 954 955 std::string GetMainAbility() const; 956 957 void GetMainAbilityInfo(AbilityInfo &abilityInfo) const; 958 GetModuleDir(std::string modulePackage)959 std::string GetModuleDir(std::string modulePackage) const 960 { 961 if (innerModuleInfos_.find(modulePackage) != innerModuleInfos_.end()) { 962 return innerModuleInfos_.at(modulePackage).modulePath; 963 } 964 return Constants::EMPTY_STRING; 965 } 966 GetModuleDataDir(std::string modulePackage)967 std::string GetModuleDataDir(std::string modulePackage) const 968 { 969 if (innerModuleInfos_.find(modulePackage) != innerModuleInfos_.end()) { 970 return innerModuleInfos_.at(modulePackage).moduleDataDir; 971 } 972 return Constants::EMPTY_STRING; 973 } 974 IsDisabled()975 bool IsDisabled() const 976 { 977 return (bundleStatus_ == BundleStatus::DISABLED); 978 } 979 IsEnabled()980 bool IsEnabled() const 981 { 982 return (bundleStatus_ == BundleStatus::ENABLED); 983 } 984 IsOnlyModule(const std::string & modulePackage)985 bool IsOnlyModule(const std::string &modulePackage) 986 { 987 if ((innerModuleInfos_.size() == 1) && (innerModuleInfos_.count(modulePackage) == 1)) { 988 return true; 989 } 990 return false; 991 } 992 SetProvisionId(const std::string & provisionId)993 void SetProvisionId(const std::string &provisionId) 994 { 995 baseBundleInfo_->appId = baseBundleInfo_->name + Constants::FILE_UNDERLINE + provisionId; 996 } 997 GetProvisionId()998 std::string GetProvisionId() const 999 { 1000 if (!baseBundleInfo_->appId.empty()) { 1001 return baseBundleInfo_->appId.substr(baseBundleInfo_->name.size() + 1); 1002 } 1003 return ""; 1004 } 1005 GetAppId()1006 std::string GetAppId() const 1007 { 1008 return baseBundleInfo_->appId; 1009 } 1010 SetAppFeature(const std::string & appFeature)1011 void SetAppFeature(const std::string &appFeature) 1012 { 1013 appFeature_ = appFeature; 1014 } 1015 GetAppFeature()1016 std::string GetAppFeature() const 1017 { 1018 return appFeature_; 1019 } 1020 SetAppPrivilegeLevel(const std::string & appPrivilegeLevel)1021 void SetAppPrivilegeLevel(const std::string &appPrivilegeLevel) 1022 { 1023 if (appPrivilegeLevel.empty()) { 1024 return; 1025 } 1026 baseApplicationInfo_->appPrivilegeLevel = appPrivilegeLevel; 1027 } 1028 GetAppPrivilegeLevel()1029 std::string GetAppPrivilegeLevel() const 1030 { 1031 return baseApplicationInfo_->appPrivilegeLevel; 1032 } 1033 1034 bool HasEntry() const; 1035 1036 /** 1037 * @brief Insert formInfo. 1038 * @param keyName Indicates object as key. 1039 * @param formInfos Indicates the formInfo object as value. 1040 */ InsertFormInfos(const std::string & keyName,const std::vector<FormInfo> & formInfos)1041 void InsertFormInfos(const std::string &keyName, const std::vector<FormInfo> &formInfos) 1042 { 1043 formInfos_.emplace(keyName, formInfos); 1044 } 1045 /** 1046 * @brief Insert commonEvent. 1047 * @param keyName Indicates object as key. 1048 * @param commonEvents Indicates the common event object as value. 1049 */ InsertCommonEvents(const std::string & keyName,const CommonEventInfo & commonEvents)1050 void InsertCommonEvents(const std::string &keyName, const CommonEventInfo &commonEvents) 1051 { 1052 commonEvents_.emplace(keyName, commonEvents); 1053 } 1054 /** 1055 * @brief Insert shortcutInfos. 1056 * @param keyName Indicates object as key. 1057 * @param shortcutInfos Indicates the shortcutInfos object as value. 1058 */ InsertShortcutInfos(const std::string & keyName,const ShortcutInfo & shortcutInfos)1059 void InsertShortcutInfos(const std::string &keyName, const ShortcutInfo &shortcutInfos) 1060 { 1061 shortcutInfos_.emplace(keyName, shortcutInfos); 1062 } 1063 // use for new Info in updating progress RestoreFromOldInfo(const InnerBundleInfo & oldInfo)1064 void RestoreFromOldInfo(const InnerBundleInfo &oldInfo) 1065 { 1066 SetAppCodePath(oldInfo.GetAppCodePath()); 1067 SetUid(oldInfo.GetUid()); 1068 SetGid(oldInfo.GetGid()); 1069 } RestoreModuleInfo(const InnerBundleInfo & oldInfo)1070 void RestoreModuleInfo(const InnerBundleInfo &oldInfo) 1071 { 1072 if (oldInfo.FindModule(currentPackage_)) { 1073 innerModuleInfos_.at(currentPackage_).moduleDataDir = oldInfo.GetModuleDataDir(currentPackage_); 1074 } 1075 } 1076 SetModuleHashValue(const std::string & hashValue)1077 void SetModuleHashValue(const std::string &hashValue) 1078 { 1079 if (innerModuleInfos_.count(currentPackage_) == 1) { 1080 innerModuleInfos_.at(currentPackage_).hashValue = hashValue; 1081 } 1082 } 1083 SetModuleCpuAbi(const std::string & cpuAbi)1084 void SetModuleCpuAbi(const std::string &cpuAbi) 1085 { 1086 if (innerModuleInfos_.count(currentPackage_) == 1) { 1087 innerModuleInfos_.at(currentPackage_).cpuAbi = cpuAbi; 1088 } 1089 } 1090 SetModuleNativeLibraryPath(const std::string & nativeLibraryPath)1091 void SetModuleNativeLibraryPath(const std::string &nativeLibraryPath) 1092 { 1093 if (innerModuleInfos_.count(currentPackage_) == 1) { 1094 innerModuleInfos_.at(currentPackage_).nativeLibraryPath = nativeLibraryPath; 1095 } 1096 } 1097 1098 /** 1099 * @brief Set ability enabled. 1100 * @param moduleName Indicates the moduleName. 1101 * @param abilityName Indicates the abilityName. 1102 * @param isEnabled Indicates the ability enabled. 1103 * @param userId Indicates the user id. 1104 * @return Returns ERR_OK if the setAbilityEnabled is successfully; returns error code otherwise. 1105 */ 1106 ErrCode SetAbilityEnabled( 1107 const std::string &moduleName, 1108 const std::string &abilityName, 1109 bool isEnabled, 1110 int32_t userId); 1111 /** 1112 * @brief Set the Application Need Recover object 1113 * @param moduleName Indicates the module name of the application. 1114 * @param upgradeFlag Indicates the module is need update or not. 1115 * @return Return ERR_OK if set data successfully. 1116 */ 1117 ErrCode SetModuleUpgradeFlag(std::string moduleName, int32_t upgradeFlag); 1118 1119 /** 1120 * @brief Get the Application Need Recover object 1121 * @param moduleName Indicates the module name of the application. 1122 * @return upgradeFlag type,NOT_UPGRADE means not need to be upgraded,SINGLE_UPGRADE means 1123 * single module need to be upgraded,RELATION_UPGRADE means relation module need to be upgraded. 1124 */ 1125 int32_t GetModuleUpgradeFlag(std::string moduleName) const; 1126 1127 /** 1128 * @brief Obtains configuration information about an application. 1129 * @param flags Indicates the flag used to specify information contained 1130 * in the ApplicationInfo object that will be returned. 1131 * @param userId Indicates the user ID. 1132 * @param appInfo Indicates the obtained ApplicationInfo object. 1133 */ 1134 void GetApplicationInfo(int32_t flags, int32_t userId, ApplicationInfo &appInfo) const; 1135 /** 1136 * @brief Obtains configuration information about an application. 1137 * @param flags Indicates the flag used to specify information contained 1138 * in the ApplicationInfo object that will be returned. 1139 * @param userId Indicates the user ID. 1140 * @param appInfo Indicates the obtained ApplicationInfo object. 1141 * @return return ERR_OK if getApplicationInfo successfully, return error code otherwise. 1142 */ 1143 ErrCode GetApplicationInfoV9(int32_t flags, int32_t userId, ApplicationInfo &appInfo) const; 1144 /** 1145 * @brief Obtains configuration information about an bundle. 1146 * @param flags Indicates the flag used to specify information contained in the BundleInfo that will be returned. 1147 * @param bundleInfos Indicates all of the obtained BundleInfo objects. 1148 * @param userId Indicates the user ID. 1149 */ 1150 bool GetBundleInfo(int32_t flags, BundleInfo &bundleInfo, int32_t userId = Constants::UNSPECIFIED_USERID) const; 1151 /** 1152 * @brief Obtains configuration information about an bundle. 1153 * @param flags Indicates the flag used to specify information contained in the BundleInfo that will be returned. 1154 * @param bundleInfos Indicates all of the obtained BundleInfo objects. 1155 * @param userId Indicates the user ID. 1156 * @return Returns ERR_OK if the BundleInfo is successfully obtained; returns error code otherwise. 1157 */ 1158 ErrCode GetBundleInfoV9(int32_t flags, 1159 BundleInfo &bundleInfo, int32_t userId = Constants::UNSPECIFIED_USERID) const; 1160 /** 1161 * @brief Check if special metadata is in the application. 1162 * @param metaData Indicates the special metaData. 1163 * @param bundleInfos Returns true if the metadata in application; returns false otherwise. 1164 */ 1165 bool CheckSpecialMetaData(const std::string &metaData) const; 1166 /** 1167 * @brief Obtains the FormInfo objects provided by all applications on the device. 1168 * @param moduleName Indicates the module name of the application. 1169 * @param formInfos List of FormInfo objects if obtained; 1170 */ 1171 void GetFormsInfoByModule(const std::string &moduleName, std::vector<FormInfo> &formInfos) const; 1172 /** 1173 * @brief Obtains the FormInfo objects provided by a specified application on the device. 1174 * @param formInfos List of FormInfo objects if obtained; 1175 */ 1176 void GetFormsInfoByApp(std::vector<FormInfo> &formInfos) const; 1177 /** 1178 * @brief Obtains the ShortcutInfo objects provided by a specified application on the device. 1179 * @param shortcutInfos List of ShortcutInfo objects if obtained. 1180 */ 1181 void GetShortcutInfos(std::vector<ShortcutInfo> &shortcutInfos) const; 1182 /** 1183 * @brief Obtains the common event objects provided by a specified application on the device. 1184 * @param commonEvents List of common event objects if obtained. 1185 */ 1186 void GetCommonEvents(const std::string &eventKey, std::vector<CommonEventInfo> &commonEvents) const; 1187 1188 1189 std::optional<InnerModuleInfo> GetInnerModuleInfoByModuleName(const std::string &moduleName) const; 1190 1191 void GetModuleNames(std::vector<std::string> &moduleNames) const; 1192 GetInnerModuleInfos()1193 const std::map<std::string, InnerModuleInfo> &GetInnerModuleInfos() const 1194 { 1195 return innerModuleInfos_; 1196 } 1197 /** 1198 * @brief Fetch all innerModuleInfos, can be modify. 1199 */ FetchInnerModuleInfos()1200 std::map<std::string, InnerModuleInfo> &FetchInnerModuleInfos() 1201 { 1202 return innerModuleInfos_; 1203 } 1204 /** 1205 * @brief Fetch all abilityInfos, can be modify. 1206 */ FetchAbilityInfos()1207 std::map<std::string, AbilityInfo> &FetchAbilityInfos() 1208 { 1209 return baseAbilityInfos_; 1210 } 1211 /** 1212 * @brief Obtains all abilityInfos. 1213 */ GetInnerAbilityInfos()1214 const std::map<std::string, AbilityInfo> &GetInnerAbilityInfos() const 1215 { 1216 return baseAbilityInfos_; 1217 } 1218 /** 1219 * @brief Obtains all skillInfos. 1220 */ GetInnerSkillInfos()1221 const std::map<std::string, std::vector<Skill>> &GetInnerSkillInfos() const 1222 { 1223 return skillInfos_; 1224 } 1225 /** 1226 * @brief Fetch all extensionAbilityInfos, can be modify. 1227 */ FetchInnerExtensionInfos()1228 std::map<std::string, ExtensionAbilityInfo> &FetchInnerExtensionInfos() 1229 { 1230 return baseExtensionInfos_; 1231 } 1232 /** 1233 * @brief Obtains all extensionAbilityInfos. 1234 */ GetInnerExtensionInfos()1235 const std::map<std::string, ExtensionAbilityInfo> &GetInnerExtensionInfos() const 1236 { 1237 return baseExtensionInfos_; 1238 } 1239 /** 1240 * @brief Obtains all extensionSkillInfos. 1241 */ GetExtensionSkillInfos()1242 const std::map<std::string, std::vector<Skill>> &GetExtensionSkillInfos() const 1243 { 1244 return extensionSkillInfos_; 1245 } 1246 /** 1247 * @brief Get the bundle is whether removable. 1248 * @return Return whether the bundle is removable. 1249 */ IsRemovable()1250 bool IsRemovable() const 1251 { 1252 return baseApplicationInfo_->removable; 1253 } SetIsPreInstallApp(bool isPreInstallApp)1254 void SetIsPreInstallApp(bool isPreInstallApp) 1255 { 1256 baseBundleInfo_->isPreInstallApp = isPreInstallApp; 1257 } IsPreInstallApp()1258 bool IsPreInstallApp() const 1259 { 1260 return baseBundleInfo_->isPreInstallApp; 1261 } 1262 /** 1263 * @brief Get whether the bundle is a system app. 1264 * @return Return whether the bundle is a system app. 1265 */ IsSystemApp()1266 bool IsSystemApp() const 1267 { 1268 return baseApplicationInfo_->isSystemApp; 1269 } 1270 /** 1271 * @brief Get all InnerBundleUserInfo. 1272 * @return Return about all userinfo under the app. 1273 */ GetInnerBundleUserInfos()1274 const std::map<std::string, InnerBundleUserInfo>& GetInnerBundleUserInfos() const 1275 { 1276 return innerBundleUserInfos_; 1277 } 1278 /** 1279 * @brief Reset bundle state. 1280 * @param userId Indicates the userId to set. 1281 */ 1282 void ResetBundleState(int32_t userId); 1283 /** 1284 * @brief Set userId to remove userinfo. 1285 * @param userId Indicates the userId to set. 1286 */ 1287 void RemoveInnerBundleUserInfo(int32_t userId); 1288 /** 1289 * @brief Set userId to add userinfo. 1290 * @param userId Indicates the userInfo to set. 1291 */ 1292 void AddInnerBundleUserInfo(const InnerBundleUserInfo& userInfo); 1293 /** 1294 * @brief Set userId to add userinfo. 1295 * @param userId Indicates the userInfo to set. 1296 * @param userInfo Indicates the userInfo to get. 1297 * @return Return whether the user information is obtained successfully. 1298 */ 1299 bool GetInnerBundleUserInfo(int32_t userId, InnerBundleUserInfo& userInfo) const; 1300 /** 1301 * @brief Check whether the user exists. 1302 * @param userId Indicates the userInfo to set. 1303 * @return Return whether the user exists.. 1304 */ 1305 bool HasInnerBundleUserInfo(int32_t userId) const; 1306 /** 1307 * @brief Check whether onlyCreateBundleUser. 1308 * @return Return onlyCreateBundleUser. 1309 */ IsOnlyCreateBundleUser()1310 bool IsOnlyCreateBundleUser() const 1311 { 1312 return onlyCreateBundleUser_; 1313 } 1314 /** 1315 * @brief Set onlyCreateBundleUser. 1316 * @param onlyCreateBundleUser Indicates the onlyCreateBundleUser. 1317 */ SetOnlyCreateBundleUser(bool onlyCreateBundleUser)1318 void SetOnlyCreateBundleUser(bool onlyCreateBundleUser) 1319 { 1320 onlyCreateBundleUser_ = onlyCreateBundleUser; 1321 } 1322 /** 1323 * @brief Check whether isSingleton. 1324 * @return Return isSingleton. 1325 */ IsSingleton()1326 bool IsSingleton() const 1327 { 1328 return baseApplicationInfo_->singleton; 1329 } 1330 /** 1331 * @brief Get response userId. 1332 * @param userId Indicates the request userId.. 1333 * @return Return response userId. 1334 */ 1335 int32_t GetResponseUserId(int32_t requestUserId) const; 1336 GetModuleNameVec()1337 std::vector<std::string> GetModuleNameVec() const 1338 { 1339 std::vector<std::string> moduleVec; 1340 for (const auto &it : innerModuleInfos_) { 1341 moduleVec.emplace_back(it.first); 1342 } 1343 return moduleVec; 1344 } 1345 GetAccessTokenId(const int32_t userId)1346 uint32_t GetAccessTokenId(const int32_t userId) const 1347 { 1348 InnerBundleUserInfo userInfo; 1349 if (GetInnerBundleUserInfo(userId, userInfo)) { 1350 return userInfo.accessTokenId; 1351 } 1352 return 0; 1353 } 1354 1355 void SetAccessTokenId(uint32_t accessToken, const int32_t userId); 1356 GetAccessTokenIdEx(const int32_t userId)1357 uint64_t GetAccessTokenIdEx(const int32_t userId) const 1358 { 1359 InnerBundleUserInfo userInfo; 1360 if (GetInnerBundleUserInfo(userId, userInfo)) { 1361 return userInfo.accessTokenIdEx; 1362 } 1363 return 0; 1364 } 1365 1366 void SetAccessTokenIdEx(const Security::AccessToken::AccessTokenIDEx accessTokenIdEx, const int32_t userId); 1367 SetIsNewVersion(bool flag)1368 void SetIsNewVersion(bool flag) 1369 { 1370 isNewVersion_ = flag; 1371 } 1372 GetIsNewVersion()1373 bool GetIsNewVersion() const 1374 { 1375 return isNewVersion_; 1376 } 1377 GetAsanEnabled()1378 bool GetAsanEnabled() const 1379 { 1380 return baseApplicationInfo_->asanEnabled; 1381 } 1382 SetAsanEnabled(bool asanEnabled)1383 void SetAsanEnabled(bool asanEnabled) 1384 { 1385 baseApplicationInfo_->asanEnabled = asanEnabled; 1386 } 1387 SetAllowedAcls(const std::vector<std::string> & allowedAcls)1388 void SetAllowedAcls(const std::vector<std::string> &allowedAcls) 1389 { 1390 allowedAcls_.clear(); 1391 for (const auto &acl : allowedAcls) { 1392 if (!acl.empty()) { 1393 allowedAcls_.emplace_back(acl); 1394 } 1395 } 1396 } 1397 GetAllowedAcls()1398 std::vector<std::string> GetAllowedAcls() const 1399 { 1400 return allowedAcls_; 1401 } 1402 1403 /** 1404 * @brief ability is enabled. 1405 * @param abilityInfo Indicates the abilityInfo. 1406 * @param userId Indicates the user Id. 1407 * @return Return set ability enabled result. 1408 */ 1409 bool IsAbilityEnabled(const AbilityInfo &abilityInfo, int32_t userId) const; 1410 1411 ErrCode IsAbilityEnabledV9(const AbilityInfo &abilityInfo, int32_t userId, bool &isEnable) const; 1412 IsAccessible()1413 bool IsAccessible() const 1414 { 1415 return baseApplicationInfo_->accessible; 1416 } 1417 1418 bool GetDependentModuleNames(const std::string &moduleName, std::vector<std::string> &dependentModuleNames) const; 1419 1420 bool GetAllDependentModuleNames(const std::string &moduleName, 1421 std::vector<std::string> &dependentModuleNames) const; 1422 1423 void GetUriPrefixList(std::vector<std::string> &uriPrefixList, const std::string &excludeModule = "") const; 1424 void GetUriPrefixList(std::vector<std::string> &uriPrefixList, int32_t userId, 1425 const std::string &excludeModule = "") const; 1426 1427 bool IsBundleRemovable() const; 1428 /** 1429 * @brief Which modules can be removed. 1430 * @param moduleToDelete Indicates the modules. 1431 * @return Return get module isRemoved result 1432 */ 1433 bool GetRemovableModules(std::vector<std::string> &moduleToDelete) const; 1434 /** 1435 * @brief Get freeInstall module. 1436 * @param freeInstallModule Indicates the modules. 1437 * @return Return get freeInstall module result 1438 */ 1439 bool GetFreeInstallModules(std::vector<std::string> &freeInstallModule) const; 1440 /** 1441 * @brief Whether module of userId is exist. 1442 * @param moduleName Indicates the moduleName. 1443 * @param userId Indicates the userId. 1444 * @return Return get module exist result. 1445 */ 1446 bool IsUserExistModule(const std::string &moduleName, int32_t userId) const; 1447 /** 1448 * @brief whether userId's module should be removed. 1449 * @param moduleName Indicates the moduleName. 1450 * @param userId Indicates the userId. 1451 * @param isRemovable Indicates the module whether is removable. 1452 * @return Return get module isRemoved result. 1453 */ 1454 ErrCode IsModuleRemovable(const std::string &moduleName, int32_t userId, bool &isRemovable) const; 1455 /** 1456 * @brief Add module removable info 1457 * @param info Indicates the innerModuleInfo of module. 1458 * @param stringUserId Indicates the string userId add to isRemovable map. 1459 * @param isEnable Indicates the value of enable module is removed. 1460 * @return Return add module isRemovable info result. 1461 */ 1462 bool AddModuleRemovableInfo(InnerModuleInfo &info, const std::string &stringUserId, bool isEnable) const; 1463 /** 1464 * @brief Set userId's module value of isRemoved. 1465 * @param moduleName Indicates the moduleName. 1466 * @param isEnable Indicates the module isRemovable is enable. 1467 * @param userId Indicates the userId. 1468 * @return Return set module isRemoved result. 1469 */ 1470 bool SetModuleRemovable(const std::string &moduleName, bool isEnable, int32_t userId); 1471 /** 1472 * @brief Delete userId isRemoved info from module. 1473 * @param moduleName Indicates the moduleName. 1474 * @param userId Indicates the userId. 1475 * @return 1476 */ 1477 void DeleteModuleRemovable(const std::string &moduleName, int32_t userId); 1478 /** 1479 * @brief Delete removable info. 1480 * @param info Indicates the innerModuleInfo of module. 1481 * @param stringUserId Indicates the string userId of isRemovable map. 1482 * @return 1483 */ 1484 void DeleteModuleRemovableInfo(InnerModuleInfo &info, const std::string &stringUserId); 1485 SetEntryInstallationFree(bool installationFree)1486 void SetEntryInstallationFree(bool installationFree) 1487 { 1488 baseBundleInfo_->entryInstallationFree = installationFree; 1489 if (installationFree) { 1490 baseApplicationInfo_->needAppDetail = false; 1491 baseApplicationInfo_->appDetailAbilityLibraryPath = Constants::EMPTY_STRING; 1492 } 1493 } 1494 GetEntryInstallationFree()1495 bool GetEntryInstallationFree() const 1496 { 1497 return baseBundleInfo_->entryInstallationFree; 1498 } 1499 SetBundlePackInfo(const BundlePackInfo & bundlePackInfo)1500 void SetBundlePackInfo(const BundlePackInfo &bundlePackInfo) 1501 { 1502 *bundlePackInfo_ = bundlePackInfo; 1503 } 1504 GetBundlePackInfo()1505 BundlePackInfo GetBundlePackInfo() const 1506 { 1507 return *bundlePackInfo_; 1508 } 1509 SetAppIndex(int32_t appIndex)1510 void SetAppIndex(int32_t appIndex) 1511 { 1512 appIndex_ = appIndex; 1513 } 1514 GetAppIndex()1515 int32_t GetAppIndex() const 1516 { 1517 return appIndex_; 1518 } 1519 SetIsSandbox(bool isSandbox)1520 void SetIsSandbox(bool isSandbox) 1521 { 1522 isSandboxApp_ = isSandbox; 1523 } 1524 GetIsSandbox()1525 bool GetIsSandbox() const 1526 { 1527 return isSandboxApp_; 1528 } 1529 CleanInnerBundleUserInfos()1530 void CleanInnerBundleUserInfos() 1531 { 1532 innerBundleUserInfos_.clear(); 1533 } 1534 GetCertificateFingerprint()1535 std::string GetCertificateFingerprint() const 1536 { 1537 return baseApplicationInfo_->fingerprint; 1538 } 1539 SetCertificateFingerprint(const std::string & fingerprint)1540 void SetCertificateFingerprint(const std::string &fingerprint) 1541 { 1542 baseApplicationInfo_->fingerprint = fingerprint; 1543 } 1544 GetNativeLibraryPath()1545 const std::string &GetNativeLibraryPath() const 1546 { 1547 return baseApplicationInfo_->nativeLibraryPath; 1548 } 1549 SetNativeLibraryPath(const std::string & nativeLibraryPath)1550 void SetNativeLibraryPath(const std::string &nativeLibraryPath) 1551 { 1552 baseApplicationInfo_->nativeLibraryPath = nativeLibraryPath; 1553 } 1554 GetArkNativeFileAbi()1555 const std::string &GetArkNativeFileAbi() const 1556 { 1557 return baseApplicationInfo_->arkNativeFileAbi; 1558 } 1559 SetArkNativeFileAbi(const std::string & arkNativeFileAbi)1560 void SetArkNativeFileAbi(const std::string &arkNativeFileAbi) 1561 { 1562 baseApplicationInfo_->arkNativeFileAbi = arkNativeFileAbi; 1563 } 1564 GetArkNativeFilePath()1565 const std::string &GetArkNativeFilePath() const 1566 { 1567 return baseApplicationInfo_->arkNativeFilePath; 1568 } 1569 SetArkNativeFilePath(const std::string & arkNativeFilePath)1570 void SetArkNativeFilePath(const std::string &arkNativeFilePath) 1571 { 1572 baseApplicationInfo_->arkNativeFilePath = arkNativeFilePath; 1573 } 1574 GetCpuAbi()1575 const std::string &GetCpuAbi() const 1576 { 1577 return baseApplicationInfo_->cpuAbi; 1578 } 1579 SetCpuAbi(const std::string & cpuAbi)1580 void SetCpuAbi(const std::string &cpuAbi) 1581 { 1582 baseApplicationInfo_->cpuAbi = cpuAbi; 1583 } 1584 SetRemovable(bool removable)1585 void SetRemovable(bool removable) 1586 { 1587 baseApplicationInfo_->removable = removable; 1588 } 1589 SetKeepAlive(bool keepAlive)1590 void SetKeepAlive(bool keepAlive) 1591 { 1592 baseApplicationInfo_->keepAlive = keepAlive; 1593 baseBundleInfo_->isKeepAlive = keepAlive; 1594 } 1595 SetSingleton(bool singleton)1596 void SetSingleton(bool singleton) 1597 { 1598 baseApplicationInfo_->singleton = singleton; 1599 baseBundleInfo_->singleton = singleton; 1600 } 1601 SetRunningResourcesApply(bool runningResourcesApply)1602 void SetRunningResourcesApply(bool runningResourcesApply) 1603 { 1604 baseApplicationInfo_->runningResourcesApply = runningResourcesApply; 1605 } 1606 SetAssociatedWakeUp(bool associatedWakeUp)1607 void SetAssociatedWakeUp(bool associatedWakeUp) 1608 { 1609 baseApplicationInfo_->associatedWakeUp = associatedWakeUp; 1610 } 1611 SetUserDataClearable(bool userDataClearable)1612 void SetUserDataClearable(bool userDataClearable) 1613 { 1614 baseApplicationInfo_->userDataClearable = userDataClearable; 1615 } 1616 SetHideDesktopIcon(bool hideDesktopIcon)1617 void SetHideDesktopIcon(bool hideDesktopIcon) 1618 { 1619 baseApplicationInfo_->hideDesktopIcon = hideDesktopIcon; 1620 if (hideDesktopIcon) { 1621 baseApplicationInfo_->needAppDetail = false; 1622 baseApplicationInfo_->appDetailAbilityLibraryPath = Constants::EMPTY_STRING; 1623 } 1624 } 1625 SetFormVisibleNotify(bool formVisibleNotify)1626 void SetFormVisibleNotify(bool formVisibleNotify) 1627 { 1628 baseApplicationInfo_->formVisibleNotify = formVisibleNotify; 1629 } 1630 SetAllowCommonEvent(const std::vector<std::string> & allowCommonEvent)1631 void SetAllowCommonEvent(const std::vector<std::string> &allowCommonEvent) 1632 { 1633 baseApplicationInfo_->allowCommonEvent.clear(); 1634 for (const auto &event : allowCommonEvent) { 1635 baseApplicationInfo_->allowCommonEvent.emplace_back(event); 1636 } 1637 } 1638 GetOverlayBundleInfo()1639 std::vector<OverlayBundleInfo> GetOverlayBundleInfo() const 1640 { 1641 return overlayBundleInfo_; 1642 } 1643 AddOverlayBundleInfo(const OverlayBundleInfo & overlayBundleInfo)1644 void AddOverlayBundleInfo(const OverlayBundleInfo &overlayBundleInfo) 1645 { 1646 auto iterator = std::find_if(overlayBundleInfo_.begin(), overlayBundleInfo_.end(), 1647 [&overlayBundleInfo](const auto &overlayInfo) { 1648 return overlayInfo.bundleName == overlayBundleInfo.bundleName; 1649 }); 1650 if (iterator != overlayBundleInfo_.end()) { 1651 overlayBundleInfo_.erase(iterator); 1652 } 1653 overlayBundleInfo_.emplace_back(overlayBundleInfo); 1654 } 1655 RemoveOverLayBundleInfo(const std::string & bundleName)1656 void RemoveOverLayBundleInfo(const std::string &bundleName) 1657 { 1658 auto iterator = std::find_if(overlayBundleInfo_.begin(), overlayBundleInfo_.end(), 1659 [&bundleName](const auto &overlayInfo) { 1660 return overlayInfo.bundleName == bundleName; 1661 }); 1662 if (iterator != overlayBundleInfo_.end()) { 1663 overlayBundleInfo_.erase(iterator); 1664 } 1665 } 1666 CleanOverLayBundleInfo()1667 void CleanOverLayBundleInfo() 1668 { 1669 overlayBundleInfo_.clear(); 1670 } 1671 GetTargetBundleName()1672 std::string GetTargetBundleName() const 1673 { 1674 return baseApplicationInfo_->targetBundleName; 1675 } 1676 SetTargetBundleName(const std::string & targetBundleName)1677 void SetTargetBundleName(const std::string &targetBundleName) 1678 { 1679 baseApplicationInfo_->targetBundleName = targetBundleName; 1680 } 1681 GetTargetPriority()1682 int32_t GetTargetPriority() const 1683 { 1684 return baseApplicationInfo_->targetPriority; 1685 } 1686 SetTargetPriority(int32_t priority)1687 void SetTargetPriority(int32_t priority) 1688 { 1689 baseApplicationInfo_->targetPriority = priority; 1690 } 1691 GetOverlayState()1692 int32_t GetOverlayState() const 1693 { 1694 return baseApplicationInfo_->overlayState; 1695 } 1696 SetOverlayState(int32_t state)1697 void SetOverlayState(int32_t state) 1698 { 1699 baseApplicationInfo_->overlayState = state; 1700 } 1701 GetOverlayType()1702 int32_t GetOverlayType() const 1703 { 1704 return overlayType_; 1705 } 1706 SetOverlayType(int32_t type)1707 void SetOverlayType(int32_t type) 1708 { 1709 overlayType_ = type; 1710 } 1711 AddOverlayModuleInfo(const OverlayModuleInfo & overlayModuleInfo)1712 void AddOverlayModuleInfo(const OverlayModuleInfo &overlayModuleInfo) 1713 { 1714 auto iterator = innerModuleInfos_.find(overlayModuleInfo.targetModuleName); 1715 if (iterator == innerModuleInfos_.end()) { 1716 return; 1717 } 1718 auto innerModuleInfo = iterator->second; 1719 auto overlayModuleInfoIt = std::find_if(innerModuleInfo.overlayModuleInfo.begin(), 1720 innerModuleInfo.overlayModuleInfo.end(), [&overlayModuleInfo](const auto &overlayInfo) { 1721 return (overlayInfo.moduleName == overlayModuleInfo.moduleName) && 1722 (overlayInfo.bundleName == overlayModuleInfo.bundleName); 1723 }); 1724 if (overlayModuleInfoIt != innerModuleInfo.overlayModuleInfo.end()) { 1725 innerModuleInfo.overlayModuleInfo.erase(overlayModuleInfoIt); 1726 } 1727 innerModuleInfo.overlayModuleInfo.emplace_back(overlayModuleInfo); 1728 innerModuleInfos_.erase(iterator); 1729 innerModuleInfos_.try_emplace(overlayModuleInfo.targetModuleName, innerModuleInfo); 1730 } 1731 RemoveOverlayModuleInfo(const std::string & targetModuleName,const std::string & bundleName,const std::string & moduleName)1732 void RemoveOverlayModuleInfo(const std::string &targetModuleName, const std::string &bundleName, 1733 const std::string &moduleName) 1734 { 1735 auto iterator = innerModuleInfos_.find(targetModuleName); 1736 if (iterator == innerModuleInfos_.end()) { 1737 return; 1738 } 1739 auto innerModuleInfo = iterator->second; 1740 auto overlayModuleInfoIt = std::find_if(innerModuleInfo.overlayModuleInfo.begin(), 1741 innerModuleInfo.overlayModuleInfo.end(), [&moduleName, &bundleName](const auto &overlayInfo) { 1742 return (overlayInfo.moduleName == moduleName) && (overlayInfo.bundleName == bundleName); 1743 }); 1744 if (overlayModuleInfoIt == innerModuleInfo.overlayModuleInfo.end()) { 1745 return; 1746 } 1747 innerModuleInfo.overlayModuleInfo.erase(overlayModuleInfoIt); 1748 innerModuleInfos_.erase(iterator); 1749 innerModuleInfos_.try_emplace(targetModuleName, innerModuleInfo); 1750 } 1751 RemoveAllOverlayModuleInfo(const std::string & bundleName)1752 void RemoveAllOverlayModuleInfo(const std::string &bundleName) 1753 { 1754 for (auto &innerModuleInfo : innerModuleInfos_) { 1755 innerModuleInfo.second.overlayModuleInfo.erase(std::remove_if( 1756 innerModuleInfo.second.overlayModuleInfo.begin(), innerModuleInfo.second.overlayModuleInfo.end(), 1757 [&bundleName](const auto &overlayInfo) { 1758 return overlayInfo.bundleName == bundleName; 1759 }), innerModuleInfo.second.overlayModuleInfo.end()); 1760 } 1761 } 1762 CleanAllOverlayModuleInfo()1763 void CleanAllOverlayModuleInfo() 1764 { 1765 for (auto &innerModuleInfo : innerModuleInfos_) { 1766 innerModuleInfo.second.overlayModuleInfo.clear(); 1767 } 1768 } 1769 isOverlayModule(const std::string & moduleName)1770 bool isOverlayModule(const std::string &moduleName) const 1771 { 1772 if (innerModuleInfos_.find(moduleName) == innerModuleInfos_.end()) { 1773 return true; 1774 } 1775 return !innerModuleInfos_.at(moduleName).targetModuleName.empty(); 1776 } 1777 isExistedOverlayModule()1778 bool isExistedOverlayModule() const 1779 { 1780 for (const auto &innerModuleInfo : innerModuleInfos_) { 1781 if (!innerModuleInfo.second.targetModuleName.empty()) { 1782 return true; 1783 } 1784 } 1785 return false; 1786 } 1787 KeepOldOverlayConnection(InnerBundleInfo & info)1788 void KeepOldOverlayConnection(InnerBundleInfo &info) 1789 { 1790 auto &newInnerModuleInfos = info.FetchInnerModuleInfos(); 1791 for (const auto &innerModuleInfo : innerModuleInfos_) { 1792 if ((!innerModuleInfo.second.overlayModuleInfo.empty()) && 1793 (newInnerModuleInfos.find(innerModuleInfo.second.moduleName) != newInnerModuleInfos.end())) { 1794 newInnerModuleInfos[innerModuleInfo.second.moduleName].overlayModuleInfo = 1795 innerModuleInfo.second.overlayModuleInfo; 1796 return; 1797 } 1798 } 1799 } 1800 SetAsanLogPath(const std::string & asanLogPath)1801 void SetAsanLogPath(const std::string& asanLogPath) 1802 { 1803 baseApplicationInfo_->asanLogPath = asanLogPath; 1804 } 1805 GetAsanLogPath()1806 std::string GetAsanLogPath() const 1807 { 1808 return baseApplicationInfo_->asanLogPath; 1809 } 1810 SetApplicationBundleType(BundleType type)1811 void SetApplicationBundleType(BundleType type) 1812 { 1813 baseApplicationInfo_->bundleType = type; 1814 } 1815 GetApplicationBundleType()1816 BundleType GetApplicationBundleType() const 1817 { 1818 return baseApplicationInfo_->bundleType; 1819 } 1820 SetInnerModuleAtomicPreload(const std::string & moduleName,const std::vector<std::string> & preloads)1821 bool SetInnerModuleAtomicPreload(const std::string &moduleName, const std::vector<std::string> &preloads) 1822 { 1823 if (innerModuleInfos_.find(moduleName) == innerModuleInfos_.end()) { 1824 APP_LOGE("innerBundleInfo does not contain the module."); 1825 return false; 1826 } 1827 innerModuleInfos_.at(moduleName).preloads = preloads; 1828 return true; 1829 } 1830 SetInnerModuleAtomicType(const std::string & moduleName,AtomicServiceModuleType type)1831 bool SetInnerModuleAtomicType(const std::string &moduleName, AtomicServiceModuleType type) 1832 { 1833 if (innerModuleInfos_.find(moduleName) == innerModuleInfos_.end()) { 1834 APP_LOGE("innerBundleInfo does not contain the module."); 1835 return false; 1836 } 1837 innerModuleInfos_.at(moduleName).atomicServiceModuleType = type; 1838 return true; 1839 } 1840 SetAppProvisionMetadata(const std::vector<Metadata> & metadatas)1841 void SetAppProvisionMetadata(const std::vector<Metadata> &metadatas) 1842 { 1843 provisionMetadatas_ = metadatas; 1844 } 1845 GetAppProvisionMetadata()1846 std::vector<Metadata> GetAppProvisionMetadata() const 1847 { 1848 return provisionMetadatas_; 1849 } 1850 GetInnerSharedModuleInfos()1851 const std::map<std::string, std::vector<InnerModuleInfo>> &GetInnerSharedModuleInfos() const 1852 { 1853 return innerSharedModuleInfos_; 1854 } 1855 GetDependencies()1856 std::vector<Dependency> GetDependencies() const 1857 { 1858 std::vector<Dependency> dependenciesList; 1859 for (auto it = innerModuleInfos_.begin(); it != innerModuleInfos_.end(); it++) { 1860 for (const auto &item : it->second.dependencies) { 1861 dependenciesList.emplace_back(item); 1862 } 1863 } 1864 return dependenciesList; 1865 } 1866 GetAllHspModuleNamesForVersion(uint32_t versionCode)1867 std::vector<std::string> GetAllHspModuleNamesForVersion(uint32_t versionCode) const 1868 { 1869 std::vector<std::string> hspModuleNames; 1870 for (const auto &[moduleName, modules] : innerSharedModuleInfos_) { 1871 for (const auto &item : modules) { 1872 if (item.versionCode == versionCode) { 1873 hspModuleNames.emplace_back(moduleName); 1874 } 1875 } 1876 } 1877 return hspModuleNames; 1878 } 1879 GetModuleBuildHash(const std::string & moduleName,std::string & buildHash)1880 bool GetModuleBuildHash(const std::string &moduleName, std::string &buildHash) const 1881 { 1882 if (innerModuleInfos_.find(moduleName) == innerModuleInfos_.end()) { 1883 APP_LOGE("innerBundleInfo does not contain the module."); 1884 return false; 1885 } 1886 buildHash = innerModuleInfos_.at(moduleName).buildHash; 1887 return true; 1888 } 1889 GetDataGroupInfos()1890 const std::unordered_map<std::string, std::vector<DataGroupInfo>> GetDataGroupInfos() const 1891 { 1892 return dataGroupInfos_; 1893 } 1894 AddDataGroupInfo(const std::string & dataGroupId,const DataGroupInfo & info)1895 void AddDataGroupInfo(const std::string &dataGroupId, const DataGroupInfo &info) 1896 { 1897 APP_LOGD("AddDataGroupInfo, dataGroupId: %{public}s, dataGroupInfo: %{public}s", 1898 dataGroupId.c_str(), info.ToString().c_str()); 1899 auto dataGroupInfosItem = dataGroupInfos_.find(dataGroupId); 1900 if (dataGroupInfosItem == dataGroupInfos_.end()) { 1901 APP_LOGD("AddDataGroupInfo add new dataGroupInfo for dataGroupId: %{public}s", dataGroupId.c_str()); 1902 dataGroupInfos_[dataGroupId] = std::vector<DataGroupInfo> { info }; 1903 return; 1904 } 1905 1906 int32_t userId = info.userId; 1907 auto iter = std::find_if(std::begin(dataGroupInfos_[dataGroupId]), std::end(dataGroupInfos_[dataGroupId]), 1908 [userId](const DataGroupInfo &dataGroupinfo) { return dataGroupinfo.userId == userId; }); 1909 if (iter != std::end(dataGroupInfos_[dataGroupId])) { 1910 return; 1911 } 1912 1913 APP_LOGD("AddDataGroupInfo add new dataGroupInfo for user: %{public}d", info.userId); 1914 dataGroupInfos_[dataGroupId].emplace_back(info); 1915 } 1916 RemoveGroupInfos(int32_t userId,const std::string & dataGroupId)1917 void RemoveGroupInfos(int32_t userId, const std::string &dataGroupId) 1918 { 1919 auto iter = dataGroupInfos_.find(dataGroupId); 1920 if (iter == dataGroupInfos_.end()) { 1921 return; 1922 } 1923 for (auto dataGroupIter = iter->second.begin(); dataGroupIter != iter->second.end(); dataGroupIter++) { 1924 if (dataGroupIter->userId == userId) { 1925 iter->second.erase(dataGroupIter); 1926 return; 1927 } 1928 } 1929 } 1930 UpdateDataGroupInfos(const std::unordered_map<std::string,std::vector<DataGroupInfo>> & dataGroupInfos)1931 void UpdateDataGroupInfos(const std::unordered_map<std::string, std::vector<DataGroupInfo>> &dataGroupInfos) 1932 { 1933 std::set<int32_t> userIdList; 1934 for (auto item = dataGroupInfos.begin(); item != dataGroupInfos.end(); item++) { 1935 for (const DataGroupInfo &info : item->second) { 1936 userIdList.insert(info.userId); 1937 } 1938 } 1939 1940 std::vector<std::string> deletedGroupIds; 1941 for (auto &item : dataGroupInfos_) { 1942 if (dataGroupInfos.find(item.first) == dataGroupInfos.end()) { 1943 for (int32_t userId : userIdList) { 1944 RemoveGroupInfos(userId, item.first); 1945 } 1946 } 1947 if (item.second.empty()) { 1948 deletedGroupIds.emplace_back(item.first); 1949 } 1950 } 1951 for (std::string groupId : deletedGroupIds) { 1952 dataGroupInfos_.erase(groupId); 1953 } 1954 for (auto item = dataGroupInfos.begin(); item != dataGroupInfos.end(); item++) { 1955 std::string dataGroupId = item->first; 1956 for (const DataGroupInfo &info : item->second) { 1957 AddDataGroupInfo(dataGroupId, info); 1958 } 1959 } 1960 } 1961 1962 void SetAppDistributionType(const std::string &appDistributionType); 1963 1964 std::string GetAppDistributionType() const; 1965 1966 void SetAppProvisionType(const std::string &appProvisionType); 1967 1968 std::string GetAppProvisionType() const; 1969 1970 void SetAppCrowdtestDeadline(int64_t crowdtestDeadline); 1971 1972 int64_t GetAppCrowdtestDeadline() const; 1973 1974 std::vector<std::string> GetDistroModuleName() const; 1975 1976 std::string GetModuleNameByPackage(const std::string &packageName) const; 1977 1978 std::string GetModuleTypeByPackage(const std::string &packageName) const; 1979 1980 AppQuickFix GetAppQuickFix() const; 1981 1982 void SetAppQuickFix(const AppQuickFix &appQuickFix); 1983 1984 std::vector<HqfInfo> GetQuickFixHqfInfos() const; 1985 1986 void SetQuickFixHqfInfos(const std::vector<HqfInfo> &hqfInfos); 1987 1988 void UpdatePrivilegeCapability(const ApplicationInfo &applicationInfo); 1989 void UpdateRemovable(bool isPreInstall, bool removable); 1990 bool FetchNativeSoAttrs( 1991 const std::string &requestPackage, std::string &cpuAbi, std::string &nativeLibraryPath) const; 1992 void UpdateNativeLibAttrs(const ApplicationInfo &applicationInfo); 1993 void UpdateArkNativeAttrs(const ApplicationInfo &applicationInfo); 1994 bool IsLibIsolated(const std::string &moduleName) const; 1995 std::vector<std::string> GetDeviceType(const std::string &packageName) const; 1996 int64_t GetLastInstallationTime() const; 1997 void UpdateAppDetailAbilityAttrs(); 1998 bool IsHideDesktopIcon() const; 1999 void AddApplyQuickFixFrequency(); 2000 int32_t GetApplyQuickFixFrequency() const; 2001 void ResetApplyQuickFixFrequency(); 2002 2003 bool GetOverlayModuleState(const std::string &moduleName, int32_t userId, int32_t &state) const; 2004 2005 void SetOverlayModuleState(const std::string &moduleName, int32_t state, int32_t userId); 2006 2007 void SetOverlayModuleState(const std::string &moduleName, int32_t state); 2008 2009 void ClearOverlayModuleStates(const std::string &moduleName); 2010 2011 bool GetBaseSharedBundleInfo(const std::string &moduleName, uint32_t versionCode, 2012 BaseSharedBundleInfo &baseSharedBundleInfo) const; 2013 bool GetMaxVerBaseSharedBundleInfo(const std::string &moduleName, 2014 BaseSharedBundleInfo &baseSharedBundleInfo) const; 2015 void InsertInnerSharedModuleInfo(const std::string &moduleName, const InnerModuleInfo &innerModuleInfo); 2016 void SetSharedModuleNativeLibraryPath(const std::string &nativeLibraryPath); 2017 bool GetSharedBundleInfo(SharedBundleInfo &sharedBundleInfo) const; 2018 bool GetSharedDependencies(const std::string &moduleName, std::vector<Dependency> &dependencies) const; 2019 bool GetAllSharedDependencies(const std::string &moduleName, std::vector<Dependency> &dependencies) const; 2020 std::vector<uint32_t> GetAllHspVersion() const; 2021 void DeleteHspModuleByVersion(int32_t versionCode); 2022 bool GetSharedBundleInfo(int32_t flags, BundleInfo &bundleInfo) const; 2023 ErrCode GetProxyDataInfos(const std::string &moduleName, std::vector<ProxyData> &proxyDatas) const; 2024 void GetAllProxyDataInfos(std::vector<ProxyData> &proxyDatas) const; 2025 bool IsCompressNativeLibs(const std::string &moduleName) const; 2026 void SetNativeLibraryFileNames(const std::string &moduleName, const std::vector<std::string> &fileNames); 2027 void UpdateSharedModuleInfo(); 2028 AOTCompileStatus GetAOTCompileStatus(const std::string &moduleName) const; 2029 void SetAOTCompileStatus(const std::string &moduleName, AOTCompileStatus aotCompileStatus); 2030 void ResetAOTFlags(); 2031 ErrCode SetExtName(const std::string &moduleName, const std::string &abilityName, const std::string extName); 2032 ErrCode SetMimeType(const std::string &moduleName, const std::string &abilityName, const std::string mimeType); 2033 ErrCode DelExtName(const std::string &moduleName, const std::string &abilityName, const std::string extName); 2034 ErrCode DelMimeType(const std::string &moduleName, const std::string &abilityName, const std::string extName); 2035 void SetResourcesApply(const std::vector<int32_t> &resourcesApply); 2036 2037 private: 2038 bool IsExistLauncherAbility() const; 2039 void GetBundleWithAbilities( 2040 int32_t flags, BundleInfo &bundleInfo, int32_t userId = Constants::UNSPECIFIED_USERID) const; 2041 void GetBundleWithExtension( 2042 int32_t flags, BundleInfo &bundleInfo, int32_t userId = Constants::UNSPECIFIED_USERID) const; 2043 void BuildDefaultUserInfo(); 2044 void RemoveDuplicateName(std::vector<std::string> &name) const; 2045 void GetBundleWithReqPermissionsV9(int32_t flags, int32_t userId, BundleInfo &bundleInfo) const; 2046 void ProcessBundleFlags(int32_t flags, int32_t userId, BundleInfo &bundleInfo) const; 2047 void ProcessBundleWithHapModuleInfoFlag(int32_t flags, BundleInfo &bundleInfo, int32_t userId) const; 2048 void GetBundleWithAbilitiesV9(int32_t flags, HapModuleInfo &hapModuleInfo, int32_t userId) const; 2049 void GetBundleWithExtensionAbilitiesV9(int32_t flags, HapModuleInfo &hapModuleInfo) const; 2050 IsolationMode GetIsolationMode(const std::string &isolationMode) const; 2051 void UpdateIsCompressNativeLibs(); 2052 void InnerProcessShortcut(const Shortcut &oldShortcut, ShortcutInfo &shortcutInfo) const; 2053 2054 // using for get 2055 Constants::AppType appType_ = Constants::AppType::THIRD_PARTY_APP; 2056 int uid_ = Constants::INVALID_UID; 2057 int gid_ = Constants::INVALID_GID; 2058 int userId_ = Constants::DEFAULT_USERID; 2059 BundleStatus bundleStatus_ = BundleStatus::ENABLED; 2060 std::shared_ptr<ApplicationInfo> baseApplicationInfo_; 2061 std::shared_ptr<BundleInfo> baseBundleInfo_; // applicationInfo and abilityInfo empty 2062 std::string appFeature_; 2063 std::vector<std::string> allowedAcls_; 2064 InstallMark mark_; 2065 int32_t appIndex_ = Constants::INITIAL_APP_INDEX; 2066 bool isSandboxApp_ = false; 2067 2068 // only using for install or update progress, doesn't need to save to database 2069 std::string currentPackage_; 2070 // Auxiliary property, which is used when the application 2071 // has been installed when the user is created. 2072 bool onlyCreateBundleUser_ = false; 2073 2074 std::map<std::string, InnerModuleInfo> innerModuleInfos_; 2075 2076 std::map<std::string, std::vector<FormInfo>> formInfos_; 2077 std::map<std::string, CommonEventInfo> commonEvents_; 2078 std::map<std::string, ShortcutInfo> shortcutInfos_; 2079 2080 std::map<std::string, AbilityInfo> baseAbilityInfos_; 2081 std::map<std::string, std::vector<Skill>> skillInfos_; 2082 2083 std::map<std::string, InnerBundleUserInfo> innerBundleUserInfos_; 2084 2085 std::shared_ptr<BundlePackInfo> bundlePackInfo_; 2086 // new version fields 2087 bool isNewVersion_ = false; 2088 std::map<std::string, ExtensionAbilityInfo> baseExtensionInfos_; 2089 std::map<std::string, std::vector<Skill>> extensionSkillInfos_; 2090 2091 // quick fix hqf info 2092 std::vector<HqfInfo> hqfInfos_; 2093 // apply quick fix frequency 2094 int32_t applyQuickFixFrequency_ = 0; 2095 2096 // overlay bundleInfo 2097 std::vector<OverlayBundleInfo> overlayBundleInfo_; 2098 int32_t overlayType_ = NON_OVERLAY_TYPE; 2099 2100 // provision metadata 2101 std::vector<Metadata> provisionMetadatas_; 2102 2103 // shared module info 2104 std::map<std::string, std::vector<InnerModuleInfo>> innerSharedModuleInfos_ ; 2105 2106 // data group info 2107 std::unordered_map<std::string, std::vector<DataGroupInfo>> dataGroupInfos_; 2108 }; 2109 2110 void from_json(const nlohmann::json &jsonObject, InnerModuleInfo &info); 2111 void from_json(const nlohmann::json &jsonObject, SkillUri &uri); 2112 void from_json(const nlohmann::json &jsonObject, Skill &skill); 2113 void from_json(const nlohmann::json &jsonObject, Distro &distro); 2114 void from_json(const nlohmann::json &jsonObject, InstallMark &installMark); 2115 void from_json(const nlohmann::json &jsonObject, DefinePermission &definePermission); 2116 void from_json(const nlohmann::json &jsonObject, Dependency &dependency); 2117 void from_json(const nlohmann::json &jsonObject, OverlayBundleInfo &overlayBundleInfo); 2118 } // namespace AppExecFwk 2119 } // namespace OHOS 2120 #endif // FOUNDATION_APPEXECFWK_SERVICES_BUNDLEMGR_INCLUDE_INNER_BUNDLE_INFO_H 2121