• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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> &paramEntities) 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