• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2025 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 "aot/aot_args.h"
24 #include "bundle_constants.h"
25 #include "bundle_info.h"
26 #include "bundle_service_constants.h"
27 #include "common_event_info.h"
28 #include "common_profile.h"
29 #include "data_group_info.h"
30 #include "data/inner_ability_info.h"
31 #include "data/inner_extension_info.h"
32 #include "distributed_bundle_info.h"
33 #include "dynamic_icon_info.h"
34 #include "extension_ability_info.h"
35 #include "form_info.h"
36 #include "hap_module_info.h"
37 #include "inner_app_quick_fix.h"
38 #include "inner_bundle_clone_info.h"
39 #include "inner_bundle_user_info.h"
40 #include "ipc/check_encryption_param.h"
41 #include "json_util.h"
42 #include "plugin/plugin_bundle_info.h"
43 #include "preinstalled_application_info.h"
44 #include "quick_fix/app_quick_fix.h"
45 #include "quick_fix/hqf_info.h"
46 #include "shared/base_shared_bundle_info.h"
47 #include "shared/shared_bundle_info.h"
48 #include "shortcut_info.h"
49 #include "want.h"
50 
51 namespace OHOS {
52 namespace AppExecFwk {
53 struct Distro {
54     bool deliveryWithInstall = false;
55     bool installationFree = false;
56     std::string moduleName;
57     std::string moduleType;
58 };
59 
60 struct DefinePermission {
61     bool provisionEnable = true;
62     bool distributedSceneEnable = false;
63     bool isKernelEffect = false;
64     bool hasValue = false;
65     uint32_t labelId = 0;
66     uint32_t descriptionId = 0;
67     std::string name;
68     std::string grantMode = Profile::DEFINEPERMISSION_GRANT_MODE_SYSTEM_GRANT;
69     std::string availableLevel = Profile::DEFINEPERMISSION_AVAILABLE_LEVEL_DEFAULT_VALUE;
70     std::string label;
71     std::string description;
72     std::string availableType;
73 };
74 
75 struct InnerModuleInfo {
76     bool isEntry = false;
77     bool installationFree = false;
78     bool isModuleJson = false;
79     bool isStageBasedModel = false;
80     bool isLibIsolated = false;
81     bool compressNativeLibs = true;
82     bool isEncrypted = false;
83     bool asanEnabled = false;
84     bool gwpAsanEnabled = false;
85     bool tsanEnabled = false;
86     bool needDelete = false;
87     bool debug = false;
88     bool resizeable = false;
89     bool deduplicateHar = false;
90     uint8_t boolSet = 0;
91     uint32_t innerModuleInfoFlag = 0;
92     uint32_t labelId = 0;
93     uint32_t descriptionId = 0;
94     uint32_t iconId = 0;
95     uint32_t versionCode = 0;
96     int32_t upgradeFlag = 0;
97     int32_t targetPriority;
98     BundleType bundleType = BundleType::SHARED;
99     AOTCompileStatus aotCompileStatus = AOTCompileStatus::NOT_COMPILED;
100     ModuleColorMode colorMode = ModuleColorMode::AUTO;
101     std::string name;
102     std::string modulePackage;
103     std::string moduleName;
104     std::string modulePath;
105     std::string moduleDataDir;
106     std::string moduleResPath;
107     std::string moduleHnpsPath;
108     std::string label;
109     std::string hapPath;
110     std::string description;
111     std::string icon;
112     std::string mainAbility; // config.json : mainAbility; module.json : mainElement
113     std::string entryAbilityKey; // skills contains "action.system.home" and "entity.system.home"
114     std::string srcPath;
115     std::string hashValue;
116     std::string pages;
117     std::string systemTheme;
118     std::string process;
119     std::string srcEntrance;
120     std::string uiSyntax;
121     std::string virtualMachine;
122     std::string compileMode;
123     std::string nativeLibraryPath;
124     std::string cpuAbi;
125     std::string targetModuleName;
126     std::string versionName;
127     std::string buildHash;
128     std::string isolationMode;
129     std::string fileContextMenu;
130     std::string routerMap;
131     std::string packageName;
132     std::string appStartup;
133     std::string formExtensionModule;
134     std::string formWidgetModule;
135     std::string crossAppSharedConfig;
136     std::string abilitySrcEntryDelegator;
137     std::string abilityStageSrcEntryDelegator;
138     std::string moduleArkTSMode = Constants::ARKTS_MODE_DYNAMIC;
139     std::string arkTSMode = Constants::ARKTS_MODE_DYNAMIC;
140     Distro distro;
141     // all user's value of isRemovable
142     // key:userId
143     // value:isRemovable true or flase
144     std::vector<std::string> reqCapabilities;
145     std::vector<std::string> abilityKeys;
146     std::vector<std::string> skillKeys;
147     std::vector<std::string> deviceTypes;
148     std::map<std::string, std::vector<std::string>> requiredDeviceFeatures;
149     std::vector<std::string> extensionKeys;
150     std::vector<std::string> extensionSkillKeys;
151     std::vector<std::string> nativeLibraryFileNames;
152     std::vector<std::string> querySchemes;
153     std::vector<std::string> preloads;
154     std::vector<HnpPackage> hnpPackages;
155     // new version fields
156     std::vector<DefinePermission> definePermissions;
157     std::vector<RequestPermission> requestPermissions;
158     std::vector<Metadata> metadata;
159     std::vector<Dependency> dependencies;
160     std::vector<OverlayModuleInfo> overlayModuleInfo;
161     std::vector<ProxyData> proxyDatas;
162     std::vector<AppEnvironment> appEnvironments;
163     std::map<std::string, bool> isRemovable;
164     MetaData metaData;
165 };
166 
167 struct ExtendResourceInfo {
168     uint32_t iconId = 0;
169     std::string moduleName;
170     std::string filePath;
171 };
172 
173 enum InstallExceptionStatus : uint8_t {
174     INSTALL_START = 1,
175     INSTALL_FINISH,
176     UPDATING_EXISTED_START,
177     UPDATING_NEW_START,
178     UPDATING_FINISH,
179     UNINSTALL_BUNDLE_START,
180     UNINSTALL_PACKAGE_START,
181     UNKNOWN_STATUS,
182 };
183 
184 enum class GetInnerModuleInfoFlag : uint8_t {
185     GET_INNER_MODULE_INFO_WITH_HWASANENABLED = 1,
186     GET_INNER_MODULE_INFO_WITH_UBSANENABLED = 2,
187 };
188 
189 enum InnerModuleInfoBoolFlag : uint8_t {
190     HAS_INTENT = 0,
191     HAS_CLOUD_KIT_CONFIG = 1,
192 };
193 
194 struct InstallMark {
195     int32_t status = InstallExceptionStatus::UNKNOWN_STATUS;
196     std::string bundleName;
197     std::string packageName;
198 };
199 class InnerBundleInfo {
200 public:
201     enum class BundleStatus : uint8_t {
202         ENABLED = 1,
203         DISABLED,
204     };
205 
206     InnerBundleInfo();
207     InnerBundleInfo &operator=(const InnerBundleInfo &info);
208     ~InnerBundleInfo();
209     /**
210      * @brief Transform the InnerBundleInfo object to json.
211      * @param jsonObject Indicates the obtained json object.
212      * @return
213      */
214     void ToJson(nlohmann::json &jsonObject) const;
215     /**
216      * @brief Transform the json object to InnerBundleInfo object.
217      * @param jsonObject Indicates the obtained json object.
218      * @return Returns 0 if the json object parsed successfully; returns error code otherwise.
219      */
220     int32_t FromJson(const nlohmann::json &jsonObject);
221     /**
222      * @brief Add module info to old InnerBundleInfo object.
223      * @param newInfo Indicates the new InnerBundleInfo object.
224      * @return Returns true if the module successfully added; returns false otherwise.
225      */
226     bool AddModuleInfo(const InnerBundleInfo &newInfo);
227     /**
228      * @brief Update module info to old InnerBundleInfo object.
229      * @param newInfo Indicates the new InnerBundleInfo object.
230      * @return
231      */
232     void UpdateModuleInfo(const InnerBundleInfo &newInfo);
233     /**
234      * @brief Remove module info from InnerBundleInfo object.
235      * @param modulePackage Indicates the module package to be remove.
236      * @return
237      */
238     void RemoveModuleInfo(const std::string &modulePackage);
239     /**
240      * @brief Find hap module info by module package.
241      * @param modulePackage Indicates the module package.
242      * @param userId Indicates the user ID.
243      * @return Returns the HapModuleInfo object if find it; returns null otherwise.
244      */
245     std::optional<HapModuleInfo> FindHapModuleInfo(
246         const std::string &modulePackage, int32_t userId = Constants::UNSPECIFIED_USERID, int32_t appIndex = 0) const;
247     /**
248      * @brief Get module hashValue.
249      * @param modulePackage Indicates the module package.
250      * @param hapModuleInfo Indicates the hapModuleInfo.
251      * @return
252      */
253     void GetModuleWithHashValue(
254         int32_t flags, const std::string &modulePackage, HapModuleInfo &hapModuleInfo) const;
255     /**
256      * @brief Find abilityInfo by bundle name and ability name.
257      * @param moduleName Indicates the module name
258      * @param abilityName Indicates the ability name.
259      * @param userId Indicates the user ID.
260      * @return Returns the AbilityInfo object if find it; returns null otherwise.
261      */
262     std::optional<AbilityInfo> FindAbilityInfo(
263         const std::string &moduleName,
264         const std::string &abilityName,
265         int32_t userId = Constants::UNSPECIFIED_USERID) const;
266     /**
267      * @brief Find abilityInfo by bundle name and ability name.
268      * @param moduleName Indicates the module name
269      * @param abilityName Indicates the ability name.
270      * @return Returns the AbilityInfo object if find it; returns null otherwise.
271      */
272     std::optional<AbilityInfo> FindAbilityInfoV9(
273         const std::string &moduleName, const std::string &abilityName) const;
274     /**
275      * @brief Find abilityInfo by bundle name module name and ability name.
276      * @param moduleName Indicates the module name
277      * @param abilityName Indicates the ability name.
278      * @return Returns ERR_OK if abilityInfo find successfully obtained; returns other ErrCode otherwise.
279      */
280     ErrCode FindAbilityInfo(
281         const std::string &moduleName, const std::string &abilityName, AbilityInfo &info) const;
282     /**
283      * @brief Find abilityInfo of list by bundle name.
284      * @param bundleName Indicates the bundle name.
285      * @param userId Indicates the user ID.
286      * @return Returns the AbilityInfo of list if find it; returns null otherwise.
287      */
288     std::optional<std::vector<AbilityInfo>> FindAbilityInfos(
289         int32_t userId = Constants::UNSPECIFIED_USERID) const;
290     std::optional<AbilityInfo> FindAbilityInfo(const std::string continueType,
291         int32_t userId = Constants::UNSPECIFIED_USERID) const;
292     /**
293      * @brief Find extensionInfo by bundle name and extension name.
294      * @param moduleName Indicates the module name.
295      * @param extensionName Indicates the extension name
296      * @return Returns the ExtensionAbilityInfo object if find it; returns null otherwise.
297      */
298     std::optional<ExtensionAbilityInfo> FindExtensionInfo(
299         const std::string &moduleName, const std::string &extensionName) const;
300     /**
301      * @brief Transform the InnerBundleInfo object to string.
302      * @return Returns the string object
303      */
304     std::string ToString() const;
305     /**
306      * @brief Add InnerAbility infos to old InnerBundleInfo object.
307      * @param abilityInfos Indicates the InnerAbilityInfo object to be add.
308      * @return
309      */
AddModuleAbilityInfo(const std::map<std::string,InnerAbilityInfo> & innerAbilityInfos)310     void AddModuleAbilityInfo(const std::map<std::string, InnerAbilityInfo> &innerAbilityInfos)
311     {
312         for (const auto &item : innerAbilityInfos) {
313             baseAbilityInfos_.try_emplace(item.first, item.second);
314         }
315     }
316 
AddModuleExtensionInfos(const std::map<std::string,InnerExtensionInfo> & extensionInfos)317     void AddModuleExtensionInfos(const std::map<std::string, InnerExtensionInfo> &extensionInfos)
318     {
319         for (const auto &extensionInfo : extensionInfos) {
320             baseExtensionInfos_.try_emplace(extensionInfo.first, extensionInfo.second);
321         }
322     }
323     /**
324      * @brief Add skill infos to old InnerBundleInfo object.
325      * @param skillInfos Indicates the Skill object to be add.
326      * @return
327      */
AddModuleSkillInfo(const std::map<std::string,std::vector<Skill>> & skillInfos)328     void AddModuleSkillInfo(const std::map<std::string, std::vector<Skill>> &skillInfos)
329     {
330         for (const auto &skills : skillInfos) {
331             skillInfos_.try_emplace(skills.first, skills.second);
332         }
333     }
AddModuleExtensionSkillInfos(const std::map<std::string,std::vector<Skill>> & extensionSkillInfos)334     void AddModuleExtensionSkillInfos(const std::map<std::string, std::vector<Skill>> &extensionSkillInfos)
335     {
336         for (const auto &skills : extensionSkillInfos) {
337             extensionSkillInfos_.try_emplace(skills.first, skills.second);
338         }
339     }
340     /**
341      * @brief Add form infos to old InnerBundleInfo object.
342      * @param formInfos Indicates the Forms object to be add.
343      * @return
344      */
AddModuleFormInfo(const std::map<std::string,std::vector<FormInfo>> & formInfos)345     void AddModuleFormInfo(const std::map<std::string, std::vector<FormInfo>> &formInfos)
346     {
347         for (const auto &forms : formInfos) {
348             formInfos_.try_emplace(forms.first, forms.second);
349         }
350     }
351     /**
352      * @brief Add common events to old InnerBundleInfo object.
353      * @param commonEvents Indicates the Common Event object to be add.
354      * @return
355      */
AddModuleCommonEvent(const std::map<std::string,CommonEventInfo> & commonEvents)356     void AddModuleCommonEvent(const std::map<std::string, CommonEventInfo> &commonEvents)
357     {
358         for (const auto &commonEvent : commonEvents) {
359             commonEvents_.try_emplace(commonEvent.first, commonEvent.second);
360         }
361     }
362     /**
363      * @brief Add shortcut infos to old InnerBundleInfo object.
364      * @param shortcutInfos Indicates the Shortcut object to be add.
365      * @return
366      */
AddModuleShortcutInfo(const std::map<std::string,ShortcutInfo> & shortcutInfos)367     void AddModuleShortcutInfo(const std::map<std::string, ShortcutInfo> &shortcutInfos)
368     {
369         for (const auto &shortcut : shortcutInfos) {
370             shortcutInfos_.try_emplace(shortcut.first, shortcut.second);
371         }
372     }
373     /**
374      * @brief Add innerModuleInfos to old InnerBundleInfo object.
375      * @param innerModuleInfos Indicates the InnerModuleInfo object to be add.
376      * @return
377      */
AddInnerModuleInfo(const std::map<std::string,InnerModuleInfo> & innerModuleInfos)378     void AddInnerModuleInfo(const std::map<std::string, InnerModuleInfo> &innerModuleInfos)
379     {
380         for (const auto &info : innerModuleInfos) {
381             innerModuleInfos_.try_emplace(info.first, info.second);
382         }
383     }
384     /**
385      * @brief Get application name.
386      * @return Return application name
387      */
GetApplicationName()388     std::string GetApplicationName() const
389     {
390         return baseApplicationInfo_->name;
391     }
392     /**
393      * @brief Set bundle status.
394      * @param status Indicates the BundleStatus object to set.
395      * @return
396      */
SetBundleStatus(const BundleStatus & status)397     void SetBundleStatus(const BundleStatus &status)
398     {
399         bundleStatus_ = status;
400     }
401     /**
402      * @brief Get bundle status.
403      * @return Return the BundleStatus object
404      */
GetBundleStatus()405     BundleStatus GetBundleStatus() const
406     {
407         return bundleStatus_;
408     }
409     /**
410      * @brief Set bundle install time.
411      * @param time Indicates the install time to set.
412      * @param userId Indicates the user ID.
413      * @return
414      */
415     void SetBundleInstallTime(
416         const int64_t time, int32_t userId = Constants::UNSPECIFIED_USERID);
417     /**
418      * @brief Get bundle install time.
419      * @param userId Indicates the user ID.
420      * @return Return the bundle install time.
421      */
422     int64_t GetBundleInstallTime(int32_t userId = Constants::UNSPECIFIED_USERID) const
423     {
424         InnerBundleUserInfo innerBundleUserInfo;
425         if (!GetInnerBundleUserInfo(userId, innerBundleUserInfo)) {
426             APP_LOGE("can not find userId %{public}d when GetBundleInstallTime", userId);
427             return -1;
428         }
429         return innerBundleUserInfo.installTime;
430     }
431     /**
432      * @brief Set bundle update time.
433      * @param time Indicates the update time to set.
434      * @param userId Indicates the user ID.
435      * @return
436      */
437     void SetBundleUpdateTime(const int64_t time, int32_t userId = Constants::UNSPECIFIED_USERID);
438     /**
439      * @brief Get bundle update time.
440      * @param userId Indicates the user ID.
441      * @return Return the bundle update time.
442      */
443     int64_t GetBundleUpdateTime(int32_t userId = Constants::UNSPECIFIED_USERID) const
444     {
445         InnerBundleUserInfo innerBundleUserInfo;
446         if (!GetInnerBundleUserInfo(userId, innerBundleUserInfo)) {
447             APP_LOGE("can not find userId %{public}d when GetBundleUpdateTime", userId);
448             return -1;
449         }
450         return innerBundleUserInfo.updateTime;
451     }
452     /**
453      * @brief Set bundle first install time.
454      * @param time Indicates the first install time to set.
455      * @param userId Indicates the user ID.
456      * @return
457      */
458     void SetFirstInstallTime(const int64_t time, int32_t userId);
459     /**
460      * @brief Get bundle name.
461      * @return Return bundle name
462      */
GetBundleName()463     const std::string GetBundleName() const
464     {
465         return baseApplicationInfo_->bundleName;
466     }
467     /**
468      * @brief Get baseBundleInfo.
469      * @return Return the BundleInfo object.
470      */
GetBaseBundleInfo()471     BundleInfo GetBaseBundleInfo() const
472     {
473         return *baseBundleInfo_;
474     }
475     /**
476      * @brief Set baseBundleInfo.
477      * @param bundleInfo Indicates the BundleInfo object.
478      */
SetBaseBundleInfo(const BundleInfo & bundleInfo)479     void SetBaseBundleInfo(const BundleInfo &bundleInfo)
480     {
481         *baseBundleInfo_ = bundleInfo;
482     }
483     /**
484      * @brief Update baseBundleInfo.
485      * @param bundleInfo Indicates the new BundleInfo object.
486      * @return
487      */
488     void UpdateBaseBundleInfo(const BundleInfo &bundleInfo, bool isEntry);
489     /**
490      * @brief Get baseApplicationInfo.
491      * @return Return the ApplicationInfo object.
492      */
GetBaseApplicationInfo()493     ApplicationInfo GetBaseApplicationInfo() const
494     {
495         return *baseApplicationInfo_;
496     }
497     /**
498      * @brief Set baseApplicationInfo.
499      * @param applicationInfo Indicates the ApplicationInfo object.
500      */
SetBaseApplicationInfo(const ApplicationInfo & applicationInfo)501     void SetBaseApplicationInfo(const ApplicationInfo &applicationInfo)
502     {
503         *baseApplicationInfo_ = applicationInfo;
504     }
505     /**
506      * @brief Update baseApplicationInfo.
507      * @param applicationInfo Indicates the ApplicationInfo object.
508      * @param isEntry Indicates the isEntry.
509      */
510     void UpdateBaseApplicationInfo(const InnerBundleInfo &newInfo);
511     /**
512      * @brief Get application enabled.
513      * @param userId Indicates the user ID.
514      * @return Return whether the application is enabled.
515      */
516     bool GetApplicationEnabled(int32_t userId = Constants::UNSPECIFIED_USERID) const
517     {
518         InnerBundleUserInfo innerBundleUserInfo;
519         if (!GetInnerBundleUserInfo(userId, innerBundleUserInfo)) {
520             APP_LOGD("can not find userId %{public}d when GetApplicationEnabled", userId);
521             return false;
522         }
523         PrintSetEnabledInfo(innerBundleUserInfo.bundleUserInfo.enabled, userId, 0, innerBundleUserInfo.bundleName,
524             innerBundleUserInfo.bundleUserInfo.setEnabledCaller);
525         return innerBundleUserInfo.bundleUserInfo.enabled;
526     }
527 
528     ErrCode GetApplicationEnabledV9(int32_t userId, bool &isEnabled,
529         int32_t appIndex = 0) const;
530     /**
531      * @brief Set application enabled.
532      * @param userId Indicates the user ID.
533      * @return Returns ERR_OK if the SetApplicationEnabled is successfully; returns error code otherwise.
534      */
535     ErrCode SetApplicationEnabled(bool enabled, const std::string &caller,
536         int32_t userId = Constants::UNSPECIFIED_USERID);
537     ErrCode SetCloneApplicationEnabled(bool enabled, int32_t appIndex, const std::string &caller, int32_t userId);
538     ErrCode SetCloneAbilityEnabled(const std::string &moduleName, const std::string &abilityName,
539         bool isEnabled, int32_t userId, int32_t appIndex);
540     /**
541      * @brief Get application code path.
542      * @return Return the string object.
543      */
GetAppCodePath()544     const std::string GetAppCodePath() const
545     {
546         return baseApplicationInfo_->codePath;
547     }
548     /**
549      * @brief Set application code path.
550      * @param codePath Indicates the code path to be set.
551      */
SetAppCodePath(const std::string codePath)552     void SetAppCodePath(const std::string codePath)
553     {
554         baseApplicationInfo_->codePath = codePath;
555     }
556     /**
557      * @brief Insert innerModuleInfos.
558      * @param modulePackage Indicates the modulePackage object as key.
559      * @param innerModuleInfo Indicates the InnerModuleInfo object as value.
560      */
InsertInnerModuleInfo(const std::string & modulePackage,const InnerModuleInfo & innerModuleInfo)561     void InsertInnerModuleInfo(const std::string &modulePackage, const InnerModuleInfo &innerModuleInfo)
562     {
563         innerModuleInfos_.try_emplace(modulePackage, innerModuleInfo);
564     }
565 
566       /**
567      * @brief replace innerModuleInfos.
568      * @param modulePackage Indicates the modulePackage object as key.
569      * @param innerModuleInfo Indicates the InnerModuleInfo object as value.
570      */
ReplaceInnerModuleInfo(const std::string & modulePackage,const InnerModuleInfo & innerModuleInfo)571     void ReplaceInnerModuleInfo(const std::string &modulePackage, const InnerModuleInfo &innerModuleInfo)
572     {
573         innerModuleInfos_[modulePackage] = innerModuleInfo;
574     }
575     /**
576      * @brief Insert InnerAbilityInfo.
577      * @param key bundleName.moduleName.abilityName
578      * @param innerAbilityInfo value.
579      */
InsertAbilitiesInfo(const std::string & key,const InnerAbilityInfo & innerAbilityInfo)580     void InsertAbilitiesInfo(const std::string &key, const InnerAbilityInfo &innerAbilityInfo)
581     {
582         baseAbilityInfos_.emplace(key, innerAbilityInfo);
583     }
584     /**
585      * @brief Insert InnerExtensionInfo.
586      * @param key bundleName.moduleName.extensionName
587      * @param extensionInfo value.
588      */
InsertExtensionInfo(const std::string & key,const InnerExtensionInfo & extensionInfo)589     void InsertExtensionInfo(const std::string &key, const InnerExtensionInfo &extensionInfo)
590     {
591         baseExtensionInfos_.emplace(key, extensionInfo);
592     }
593     /**
594      * @brief Insert ability skillInfos.
595      * @param key bundleName.moduleName.abilityName
596      * @param skills ability skills.
597      */
InsertSkillInfo(const std::string & key,const std::vector<Skill> & skills)598     void InsertSkillInfo(const std::string &key, const std::vector<Skill> &skills)
599     {
600         skillInfos_.emplace(key, skills);
601     }
602     /**
603      * @brief Insert extension skillInfos.
604      * @param key bundleName.moduleName.extensionName
605      * @param skills extension skills.
606      */
InsertExtensionSkillInfo(const std::string & key,const std::vector<Skill> & skills)607     void InsertExtensionSkillInfo(const std::string &key, const std::vector<Skill> &skills)
608     {
609         extensionSkillInfos_.emplace(key, skills);
610     }
611     /**
612      * @brief Find AbilityInfo object by Uri.
613      * @param abilityUri Indicates the ability uri.
614      * @param userId Indicates the user ID.
615      * @return Returns the AbilityInfo object if find it; returns null otherwise.
616      */
FindAbilityInfoByUri(const std::string & abilityUri)617     std::optional<AbilityInfo> FindAbilityInfoByUri(const std::string &abilityUri) const
618     {
619         APP_LOGD("Uri is %{public}s", abilityUri.c_str());
620         for (const auto &ability : baseAbilityInfos_) {
621             auto abilityInfo = ability.second;
622             if (abilityInfo.uri.size() < strlen(ServiceConstants::DATA_ABILITY_URI_PREFIX)) {
623                 continue;
624             }
625 
626             auto configUri = abilityInfo.uri.substr(strlen(ServiceConstants::DATA_ABILITY_URI_PREFIX));
627             APP_LOGD("configUri is %{public}s", configUri.c_str());
628             if (configUri == abilityUri) {
629                 return InnerAbilityInfo::ConvertToAbilityInfo(abilityInfo);
630             }
631         }
632         return std::nullopt;
633     }
634 
FindExtensionAbilityInfoByUri(const std::string & uri,ExtensionAbilityInfo & extensionAbilityInfo)635     bool FindExtensionAbilityInfoByUri(const std::string &uri, ExtensionAbilityInfo &extensionAbilityInfo) const
636     {
637         for (const auto &item : baseExtensionInfos_) {
638             if (uri == item.second.uri) {
639                 extensionAbilityInfo = InnerExtensionInfo::ConvertToExtensionInfo(item.second);
640                 APP_LOGD("find target extension, bundleName : %{public}s, moduleName : %{public}s, name : %{public}s",
641                     extensionAbilityInfo.bundleName.c_str(), extensionAbilityInfo.moduleName.c_str(),
642                     extensionAbilityInfo.name.c_str());
643                 return true;
644             }
645         }
646         return false;
647     }
648 
649     /**
650      * @brief Find AbilityInfo object by Uri.
651      * @param abilityUri Indicates the ability uri.
652      * @param userId Indicates the user ID.
653      * @return Returns the AbilityInfo object if find it; returns null otherwise.
654      */
655     void FindAbilityInfosByUri(const std::string &abilityUri,
656         std::vector<AbilityInfo> &abilityInfos,  int32_t userId = Constants::UNSPECIFIED_USERID)
657     {
658         APP_LOGI("Uri is %{public}s", abilityUri.c_str());
659         for (const auto &item : baseAbilityInfos_) {
660             if (item.second.uri.size() < strlen(ServiceConstants::DATA_ABILITY_URI_PREFIX)) {
661                 continue;
662             }
663 
664             auto configUri = item.second.uri.substr(strlen(ServiceConstants::DATA_ABILITY_URI_PREFIX));
665             APP_LOGI("configUri is %{public}s", configUri.c_str());
666             if (configUri == abilityUri) {
667                 AbilityInfo abilityInfo = InnerAbilityInfo::ConvertToAbilityInfo(item.second);
668                 GetApplicationInfo(
669                     ApplicationFlag::GET_APPLICATION_INFO_WITH_PERMISSION, userId, abilityInfo.applicationInfo);
670                 abilityInfos.emplace_back(abilityInfo);
671             }
672         }
673         return;
674     }
675     /**
676      * @brief Get all ability names in application.
677      * @return Returns ability names.
678      */
GetAbilityNames()679     auto GetAbilityNames() const
680     {
681         std::vector<std::string> abilityNames;
682         for (auto &ability : baseAbilityInfos_) {
683             abilityNames.emplace_back(ability.second.name);
684         }
685         return abilityNames;
686     }
687 
GetCloudFileSyncEnabled()688     bool GetCloudFileSyncEnabled() const
689     {
690         return baseApplicationInfo_->cloudFileSyncEnabled;
691     }
692 
SetCloudFileSyncEnabled(bool cloudFileSyncEnabled)693     void SetCloudFileSyncEnabled(bool cloudFileSyncEnabled)
694     {
695         baseApplicationInfo_->cloudFileSyncEnabled = cloudFileSyncEnabled;
696     }
697 
GetCloudStructuredDataSyncEnabled()698     bool GetCloudStructuredDataSyncEnabled() const
699     {
700         return baseApplicationInfo_->cloudStructuredDataSyncEnabled;
701     }
702 
SetCloudStructuredDataSyncEnabled(bool cloudStructuredDataSyncEnabled)703     void SetCloudStructuredDataSyncEnabled(bool cloudStructuredDataSyncEnabled)
704     {
705         baseApplicationInfo_->cloudStructuredDataSyncEnabled = cloudStructuredDataSyncEnabled;
706     }
707 
708     /**
709      * @brief Get version code in application.
710      * @return Returns version code.
711      */
GetVersionCode()712     uint32_t GetVersionCode() const
713     {
714         return baseBundleInfo_->versionCode;
715     }
716     /**
717      * @brief Get version name in application.
718      * @return Returns version name.
719      */
GetVersionName()720     std::string GetVersionName() const
721     {
722         return baseBundleInfo_->versionName;
723     }
724     /**
725      * @brief Get vendor in application.
726      * @return Returns vendor.
727      */
GetVendor()728     std::string GetVendor() const
729     {
730         return baseBundleInfo_->vendor;
731     }
732     /**
733      * @brief Get comparible version in application.
734      * @return Returns comparible version.
735      */
GetCompatibleVersion()736     uint32_t GetCompatibleVersion() const
737     {
738         return baseBundleInfo_->compatibleVersion;
739     }
740     /**
741      * @brief Get target version in application.
742      * @return Returns target version.
743      */
GetTargetVersion()744     uint32_t GetTargetVersion() const
745     {
746         return baseBundleInfo_->targetVersion;
747     }
748     /**
749      * @brief Get release type in application.
750      * @return Returns release type.
751      */
GetReleaseType()752     std::string GetReleaseType() const
753     {
754         return baseBundleInfo_->releaseType;
755     }
756     /**
757      * @brief Get minCompatibleVersionCode in base bundleInfo.
758      * @return Returns release type.
759      */
GetMinCompatibleVersionCode()760     uint32_t GetMinCompatibleVersionCode() const
761     {
762         return baseBundleInfo_->minCompatibleVersionCode;
763     }
764     /**
765      * @brief Get install mark in application.
766      * @return Returns install mark.
767      */
SetInstallMark(const std::string & bundleName,const std::string & packageName,const InstallExceptionStatus & status)768     void SetInstallMark(const std::string &bundleName, const std::string &packageName,
769         const InstallExceptionStatus &status)
770     {
771         mark_.bundleName = bundleName;
772         mark_.packageName = packageName;
773         mark_.status = status;
774     }
775     /**
776      * @brief Get install mark in application.
777      * @return Returns install mark.
778      */
GetInstallMark()779     InstallMark GetInstallMark() const
780     {
781         return mark_;
782     }
783     /**
784      * @brief Get application data dir.
785      * @return Return the string object.
786      */
GetAppDataDir()787     std::string GetAppDataDir() const
788     {
789         return baseApplicationInfo_->dataDir;
790     }
791     /**
792      * @brief Set application data dir.
793      * @param dataDir Indicates the data Dir to be set.
794      */
SetAppDataDir(std::string dataDir)795     void SetAppDataDir(std::string dataDir)
796     {
797         baseApplicationInfo_->dataDir = dataDir;
798     }
799     /**
800      * @brief Set application data base dir.
801      * @param dataBaseDir Indicates the data base Dir to be set.
802      */
SetAppDataBaseDir(std::string dataBaseDir)803     void SetAppDataBaseDir(std::string dataBaseDir)
804     {
805         baseApplicationInfo_->dataBaseDir = dataBaseDir;
806     }
807     /**
808      * @brief Set application cache dir.
809      * @param cacheDir Indicates the cache Dir to be set.
810      */
SetAppCacheDir(std::string cacheDir)811     void SetAppCacheDir(std::string cacheDir)
812     {
813         baseApplicationInfo_->cacheDir = cacheDir;
814     }
815 
816     int32_t GetUid(int32_t userId = Constants::UNSPECIFIED_USERID, int32_t appIndex = 0) const
817     {
818         InnerBundleUserInfo innerBundleUserInfo;
819         if (!GetInnerBundleUserInfo(userId, innerBundleUserInfo)) {
820             return Constants::INVALID_UID;
821         }
822         if (appIndex != 0) {
823             auto iter = innerBundleUserInfo.cloneInfos.find(std::to_string(appIndex));
824             if (iter != innerBundleUserInfo.cloneInfos.end()) {
825                 return iter->second.uid;
826             }
827             return Constants::INVALID_UID;
828         }
829 
830         return innerBundleUserInfo.uid;
831     }
832     /**
833      * @brief Get application gid.
834      * @param userId Indicates the user ID.
835      * @return Returns the gid.
836      */
837     int GetGid(int32_t userId = Constants::UNSPECIFIED_USERID) const
838     {
839         InnerBundleUserInfo innerBundleUserInfo;
840         if (!GetInnerBundleUserInfo(userId, innerBundleUserInfo)) {
841             return ServiceConstants::INVALID_GID;
842         }
843 
844         if (innerBundleUserInfo.gids.empty()) {
845             return ServiceConstants::INVALID_GID;
846         }
847 
848         return innerBundleUserInfo.gids[0];
849     }
850     /**
851      * @brief Get application AppType.
852      * @return Returns the AppType.
853      */
GetAppType()854     Constants::AppType GetAppType() const
855     {
856         return appType_;
857     }
858     /**
859      * @brief Set application AppType.
860      * @param gid Indicates the AppType to be set.
861      */
SetAppType(Constants::AppType appType)862     void SetAppType(Constants::AppType appType)
863     {
864         appType_ = appType;
865         if (appType_ == Constants::AppType::SYSTEM_APP) {
866             baseApplicationInfo_->isSystemApp = true;
867         } else {
868             baseApplicationInfo_->isSystemApp = false;
869         }
870     }
871     /**
872      * @brief Get application user id.
873      * @return Returns the user id.
874      */
GetUserId()875     int GetUserId() const
876     {
877         return userId_;
878     }
879     /**
880      * @brief Set application user id.
881      * @param gid Indicates the user id to be set.
882      */
SetUserId(int userId)883     void SetUserId(int userId)
884     {
885         userId_ = userId;
886     }
887 
GetUsers()888     const std::unordered_set<int32_t> GetUsers() const
889     {
890         std::unordered_set<int32_t> userIds;
891         for (const auto &userInfoItem : innerBundleUserInfos_) {
892             userIds.insert(userInfoItem.second.bundleUserInfo.userId);
893         }
894         return userIds;
895     }
896 
GetAllowMultiProcess()897     bool GetAllowMultiProcess() const
898     {
899         return baseApplicationInfo_->allowMultiProcess;
900     }
901 
SetAllowMultiProcess(bool allowMultiProcess)902     void SetAllowMultiProcess(bool allowMultiProcess)
903     {
904         baseApplicationInfo_->allowMultiProcess = allowMultiProcess;
905     }
906 
907     // only used in install progress with newInfo
GetCurrentModulePackage()908     std::string GetCurrentModulePackage() const
909     {
910         return currentPackage_;
911     }
SetCurrentModulePackage(const std::string & modulePackage)912     void SetCurrentModulePackage(const std::string &modulePackage)
913     {
914         currentPackage_ = modulePackage;
915     }
AddModuleSrcDir(const std::string & moduleSrcDir)916     void AddModuleSrcDir(const std::string &moduleSrcDir)
917     {
918         if (innerModuleInfos_.count(currentPackage_) == 1) {
919             innerModuleInfos_.at(currentPackage_).modulePath = moduleSrcDir;
920         }
921     }
AddModuleDataDir(const std::string & moduleDataDir)922     void AddModuleDataDir(const std::string &moduleDataDir)
923     {
924         if (innerModuleInfos_.count(currentPackage_) == 1) {
925             innerModuleInfos_.at(currentPackage_).moduleDataDir = moduleDataDir;
926         }
927     }
928 
AddModuleResPath(const std::string & moduleSrcDir)929     void AddModuleResPath(const std::string &moduleSrcDir)
930     {
931         if (innerModuleInfos_.count(currentPackage_) == 1) {
932             std::string moduleResPath;
933             if (isNewVersion_) {
934                 moduleResPath = moduleSrcDir + ServiceConstants::PATH_SEPARATOR + ServiceConstants::RESOURCES_INDEX;
935             } else {
936                 moduleResPath = moduleSrcDir + ServiceConstants::PATH_SEPARATOR + ServiceConstants::ASSETS_DIR +
937                     ServiceConstants::PATH_SEPARATOR +innerModuleInfos_.at(currentPackage_).distro.moduleName +
938                     ServiceConstants::PATH_SEPARATOR + ServiceConstants::RESOURCES_INDEX;
939             }
940 
941             innerModuleInfos_.at(currentPackage_).moduleResPath = moduleResPath;
942             for (auto &abilityInfo : baseAbilityInfos_) {
943                 abilityInfo.second.resourcePath = moduleResPath;
944             }
945             for (auto &extensionInfo : baseExtensionInfos_) {
946                 extensionInfo.second.resourcePath = moduleResPath;
947             }
948         }
949     }
950 
AddModuleHnpsPath(const std::string & moduleSrcDir)951     void AddModuleHnpsPath(const std::string &moduleSrcDir)
952     {
953         if (innerModuleInfos_.count(currentPackage_) == 1) {
954             std::string moduleHnpsPath = moduleSrcDir +  ServiceConstants::PATH_SEPARATOR +
955                 ServiceConstants::HNPS_FILE_PATH;
956             innerModuleInfos_.at(currentPackage_).moduleHnpsPath = moduleHnpsPath;
957         }
958     }
959 
960     void SetModuleHapPath(const std::string &hapPath);
961 
GetModuleHapPath(const std::string & modulePackage)962     const std::string GetModuleHapPath(const std::string &modulePackage) const
963     {
964         if (innerModuleInfos_.find(modulePackage) != innerModuleInfos_.end()) {
965             return innerModuleInfos_.at(modulePackage).hapPath;
966         }
967 
968         return Constants::EMPTY_STRING;
969     }
970 
GetModuleName(const std::string & modulePackage)971     const std::string GetModuleName(const std::string &modulePackage) const
972     {
973         if (innerModuleInfos_.find(modulePackage) != innerModuleInfos_.end()) {
974             return innerModuleInfos_.at(modulePackage).moduleName;
975         }
976 
977         return Constants::EMPTY_STRING;
978     }
979 
980     const std::string GetCurModuleName() const;
981     bool IsBundleCrossAppSharedConfig() const;
982 
GetDefinePermissions()983     std::vector<DefinePermission> GetDefinePermissions() const
984     {
985         std::vector<DefinePermission> definePermissions;
986         if (innerModuleInfos_.count(currentPackage_) == 1) {
987             definePermissions = innerModuleInfos_.at(currentPackage_).definePermissions;
988         }
989         return definePermissions;
990     }
991 
GetRequestPermissions()992     std::vector<RequestPermission> GetRequestPermissions() const
993     {
994         std::vector<RequestPermission> requestPermissions;
995         if (innerModuleInfos_.count(currentPackage_) == 1) {
996             requestPermissions = innerModuleInfos_.at(currentPackage_).requestPermissions;
997         }
998         return requestPermissions;
999     }
1000 
1001     std::vector<DefinePermission> GetAllDefinePermissions() const;
1002 
1003     std::vector<RequestPermission> GetAllRequestPermissions() const;
1004 
FindModule(std::string modulePackage)1005     bool FindModule(std::string modulePackage) const
1006     {
1007         return (innerModuleInfos_.find(modulePackage) != innerModuleInfos_.end());
1008     }
1009 
IsEntryModule(std::string modulePackage)1010     bool IsEntryModule(std::string modulePackage) const
1011     {
1012         if (FindModule(modulePackage)) {
1013             return innerModuleInfos_.at(modulePackage).isEntry;
1014         }
1015         return false;
1016     }
1017 
1018     std::string GetEntryModuleName() const;
1019 
GetIsKeepAlive()1020     bool GetIsKeepAlive() const
1021     {
1022         return baseBundleInfo_->isKeepAlive;
1023     }
1024 
SetIsFreeInstallApp(bool isFreeInstall)1025     void SetIsFreeInstallApp(bool isFreeInstall)
1026     {
1027         baseApplicationInfo_->isFreeInstallApp = isFreeInstall;
1028     }
1029 
GetIsFreeInstallApp()1030     bool GetIsFreeInstallApp() const
1031     {
1032         return baseApplicationInfo_->isFreeInstallApp;
1033     }
1034 
1035     std::string GetMainAbility() const;
1036 
1037     void GetMainAbilityInfo(AbilityInfo &abilityInfo) const;
1038 
GetModuleDir(std::string modulePackage)1039     std::string GetModuleDir(std::string modulePackage) const
1040     {
1041         if (innerModuleInfos_.find(modulePackage) != innerModuleInfos_.end()) {
1042             return innerModuleInfos_.at(modulePackage).modulePath;
1043         }
1044         return Constants::EMPTY_STRING;
1045     }
1046 
GetModuleDataDir(std::string modulePackage)1047     std::string GetModuleDataDir(std::string modulePackage) const
1048     {
1049         if (innerModuleInfos_.find(modulePackage) != innerModuleInfos_.end()) {
1050             return innerModuleInfos_.at(modulePackage).moduleDataDir;
1051         }
1052         return Constants::EMPTY_STRING;
1053     }
1054 
IsDisabled()1055     bool IsDisabled() const
1056     {
1057         return (bundleStatus_ == BundleStatus::DISABLED);
1058     }
1059 
IsEnabled()1060     bool IsEnabled() const
1061     {
1062         return (bundleStatus_ == BundleStatus::ENABLED);
1063     }
1064 
IsOnlyModule(const std::string & modulePackage)1065     bool IsOnlyModule(const std::string &modulePackage)
1066     {
1067         if ((innerModuleInfos_.size() == 1) && (innerModuleInfos_.count(modulePackage) == 1)) {
1068             return true;
1069         }
1070         return false;
1071     }
1072 
SetProvisionId(const std::string & provisionId)1073     void SetProvisionId(const std::string &provisionId)
1074     {
1075         baseBundleInfo_->appId = baseBundleInfo_->name + Constants::FILE_UNDERLINE + provisionId;
1076     }
1077 
GetProvisionId()1078     std::string GetProvisionId() const
1079     {
1080         if (!baseBundleInfo_->appId.empty()) {
1081             return baseBundleInfo_->appId.substr(baseBundleInfo_->name.size() + 1);
1082         }
1083         return "";
1084     }
1085 
GetAppId()1086     std::string GetAppId() const
1087     {
1088         return baseBundleInfo_->appId;
1089     }
1090 
SetAppFeature(const std::string & appFeature)1091     void SetAppFeature(const std::string &appFeature)
1092     {
1093         appFeature_ = appFeature;
1094     }
1095 
GetAppFeature()1096     std::string GetAppFeature() const
1097     {
1098         return appFeature_;
1099     }
1100 
SetAppPrivilegeLevel(const std::string & appPrivilegeLevel)1101     void SetAppPrivilegeLevel(const std::string &appPrivilegeLevel)
1102     {
1103         if (appPrivilegeLevel.empty()) {
1104             return;
1105         }
1106         baseApplicationInfo_->appPrivilegeLevel = appPrivilegeLevel;
1107     }
1108 
GetAppPrivilegeLevel()1109     std::string GetAppPrivilegeLevel() const
1110     {
1111         return baseApplicationInfo_->appPrivilegeLevel;
1112     }
1113 
1114     bool HasEntry() const;
1115 
1116     bool IsHsp() const;
1117 
1118     /**
1119      * @brief Insert formInfo.
1120      * @param keyName Indicates object as key.
1121      * @param formInfos Indicates the formInfo object as value.
1122      */
InsertFormInfos(const std::string & keyName,const std::vector<FormInfo> & formInfos)1123     void InsertFormInfos(const std::string &keyName, const std::vector<FormInfo> &formInfos)
1124     {
1125         formInfos_.emplace(keyName, formInfos);
1126     }
1127     /**
1128      * @brief Insert commonEvent.
1129      * @param keyName Indicates object as key.
1130      * @param commonEvents Indicates the common event object as value.
1131      */
InsertCommonEvents(const std::string & keyName,const CommonEventInfo & commonEvents)1132     void InsertCommonEvents(const std::string &keyName, const CommonEventInfo &commonEvents)
1133     {
1134         commonEvents_.emplace(keyName, commonEvents);
1135     }
1136     /**
1137      * @brief Insert shortcutInfos.
1138      * @param keyName Indicates object as key.
1139      * @param shortcutInfos Indicates the shortcutInfos object as value.
1140      */
InsertShortcutInfos(const std::string & keyName,const ShortcutInfo & shortcutInfos)1141     void InsertShortcutInfos(const std::string &keyName, const ShortcutInfo &shortcutInfos)
1142     {
1143         shortcutInfos_.emplace(keyName, shortcutInfos);
1144     }
1145     // use for new Info in updating progress
RestoreFromOldInfo(const InnerBundleInfo & oldInfo)1146     void RestoreFromOldInfo(const InnerBundleInfo &oldInfo)
1147     {
1148         SetAppCodePath(oldInfo.GetAppCodePath());
1149     }
RestoreModuleInfo(const InnerBundleInfo & oldInfo)1150     void RestoreModuleInfo(const InnerBundleInfo &oldInfo)
1151     {
1152         if (oldInfo.FindModule(currentPackage_)) {
1153             innerModuleInfos_.at(currentPackage_).moduleDataDir = oldInfo.GetModuleDataDir(currentPackage_);
1154         }
1155     }
1156 
SetModuleHashValue(const std::string & hashValue)1157     void SetModuleHashValue(const std::string &hashValue)
1158     {
1159         if (innerModuleInfos_.count(currentPackage_) == 1) {
1160             innerModuleInfos_.at(currentPackage_).hashValue = hashValue;
1161         }
1162     }
1163 
SetModuleCpuAbi(const std::string & cpuAbi)1164     void SetModuleCpuAbi(const std::string &cpuAbi)
1165     {
1166         if (innerModuleInfos_.count(currentPackage_) == 1) {
1167             innerModuleInfos_.at(currentPackage_).cpuAbi = cpuAbi;
1168         }
1169     }
1170 
SetModuleNativeLibraryPath(const std::string & nativeLibraryPath)1171     void SetModuleNativeLibraryPath(const std::string &nativeLibraryPath)
1172     {
1173         if (innerModuleInfos_.count(currentPackage_) == 1) {
1174             innerModuleInfos_.at(currentPackage_).nativeLibraryPath = nativeLibraryPath;
1175         }
1176     }
1177 
1178     /**
1179      * @brief Set ability enabled.
1180      * @param moduleName Indicates the moduleName.
1181      * @param abilityName Indicates the abilityName.
1182      * @param isEnabled Indicates the ability enabled.
1183      * @param userId Indicates the user id.
1184      * @return Returns ERR_OK if the setAbilityEnabled is successfully; returns error code otherwise.
1185      */
1186     ErrCode SetAbilityEnabled(
1187         const std::string &moduleName,
1188         const std::string &abilityName,
1189         bool isEnabled,
1190         int32_t userId);
1191     /**
1192      * @brief Set the Application Need Recover object
1193      * @param moduleName Indicates the module name of the application.
1194      * @param upgradeFlag Indicates the module is need update or not.
1195      * @return Return ERR_OK if set data successfully.
1196      */
1197     ErrCode SetModuleUpgradeFlag(std::string moduleName, int32_t upgradeFlag);
1198 
1199     /**
1200      * @brief Get the Application Need Recover object
1201      * @param moduleName Indicates the module name of the application.
1202      * @return upgradeFlag type,NOT_UPGRADE means not need to be upgraded,SINGLE_UPGRADE means
1203      *         single module need to be upgraded,RELATION_UPGRADE means relation module need to be upgraded.
1204      */
1205     int32_t GetModuleUpgradeFlag(std::string moduleName) const;
1206 
1207     void GetApplicationInfo(int32_t flags, int32_t userId, ApplicationInfo &appInfo, int32_t appIndex = 0) const;
1208     ErrCode GetApplicationInfoV9(int32_t flags, int32_t userId, ApplicationInfo &appInfo, int32_t appIndex = 0) const;
1209     bool GetBundleInfo(int32_t flags, BundleInfo &bundleInfo, int32_t userId = Constants::UNSPECIFIED_USERID,
1210         int32_t appIndex = 0) const;
1211     ErrCode GetBundleInfoV9(int32_t flags,
1212         BundleInfo &bundleInfo, int32_t userId = Constants::UNSPECIFIED_USERID, int32_t appIndex = 0) const;
1213     bool CheckSpecialMetaData(const std::string &metaData) const;
1214     /**
1215      * @brief Obtains the FormInfo objects provided by all applications on the device.
1216      * @param moduleName Indicates the module name of the application.
1217      * @param formInfos List of FormInfo objects if obtained;
1218      */
1219     void GetFormsInfoByModule(const std::string &moduleName, std::vector<FormInfo> &formInfos) const;
1220     /**
1221      * @brief Obtains the FormInfo objects provided by a specified application on the device.
1222      * @param formInfos List of FormInfo objects if obtained;
1223      */
1224     void GetFormsInfoByApp(std::vector<FormInfo> &formInfos) const;
1225     /**
1226      * @brief Obtains the ShortcutInfo objects provided by a specified application on the device.
1227      * @param shortcutInfos List of ShortcutInfo objects if obtained.
1228      */
1229     void GetShortcutInfos(std::vector<ShortcutInfo> &shortcutInfos) const;
1230     /**
1231      * @brief Obtains the common event objects provided by a specified application on the device.
1232      * @param commonEvents List of common event objects if obtained.
1233      */
1234     void GetCommonEvents(const std::string &eventKey, std::vector<CommonEventInfo> &commonEvents) const;
1235 
1236 
1237     std::optional<InnerModuleInfo> GetInnerModuleInfoByModuleName(const std::string &moduleName) const;
1238     std::optional<std::vector<HnpPackage>> GetInnerModuleInfoHnpInfo(const std::string &moduleName) const;
1239     std::string GetInnerModuleInfoHnpPath(const std::string &moduleName) const;
1240     void GetModuleNames(std::vector<std::string> &moduleNames) const;
1241 
AddExtendResourceInfos(std::vector<ExtendResourceInfo> extendResourceInfos)1242     void AddExtendResourceInfos(std::vector<ExtendResourceInfo> extendResourceInfos)
1243     {
1244         for (const auto &extendResourceInfo : extendResourceInfos) {
1245             extendResourceInfos_[extendResourceInfo.moduleName] = extendResourceInfo;
1246         }
1247     }
1248 
RemoveExtendResourceInfo(const std::string & moduleName)1249     void RemoveExtendResourceInfo(const std::string &moduleName)
1250     {
1251         auto iter = extendResourceInfos_.find(moduleName);
1252         if (iter != extendResourceInfos_.end()) {
1253             extendResourceInfos_.erase(iter);
1254         }
1255     }
1256 
RemoveExtendResourceInfos(const std::vector<std::string> & moduleNames)1257     void RemoveExtendResourceInfos(const std::vector<std::string> &moduleNames)
1258     {
1259         for (const auto &moduleName : moduleNames) {
1260             RemoveExtendResourceInfo(moduleName);
1261         }
1262     }
1263 
GetExtendResourceInfos()1264     const std::map<std::string, ExtendResourceInfo> &GetExtendResourceInfos() const
1265     {
1266         return extendResourceInfos_;
1267     }
1268 
1269     const std::string GetCurDynamicIconModule() const;
1270 
1271     void SetCurDynamicIconModule(const std::string &curDynamicIconModule);
1272 
1273     const std::string GetCurDynamicIconModule(const int32_t userId, const int32_t appIndex) const;
1274 
1275     bool SetCurDynamicIconModule(const std::string &curDynamicIconModule,
1276         const int32_t userId, const int32_t appIndex);
1277 
1278     bool IsDynamicIconModuleExist() const;
1279 
GetIconId()1280     uint32_t GetIconId() const
1281     {
1282         return baseApplicationInfo_->iconId;
1283     }
1284 
SetIconId(uint32_t iconId)1285     void SetIconId(uint32_t iconId)
1286     {
1287         baseApplicationInfo_->iconId = iconId;
1288     }
1289 
GetInnerModuleInfos()1290     const std::map<std::string, InnerModuleInfo> &GetInnerModuleInfos() const
1291     {
1292         return innerModuleInfos_;
1293     }
1294     /**
1295      * @brief Fetch all innerModuleInfos, can be modify.
1296      */
FetchInnerModuleInfos()1297     std::map<std::string, InnerModuleInfo> &FetchInnerModuleInfos()
1298     {
1299         return innerModuleInfos_;
1300     }
1301     /**
1302      * @brief Fetch all abilityInfos, can be modify.
1303      */
FetchAbilityInfos()1304     std::map<std::string, InnerAbilityInfo> &FetchAbilityInfos()
1305     {
1306         return baseAbilityInfos_;
1307     }
1308     /**
1309      * @brief Obtains all abilityInfos.
1310      */
GetInnerAbilityInfos()1311     const std::map<std::string, InnerAbilityInfo> &GetInnerAbilityInfos() const
1312     {
1313         return baseAbilityInfos_;
1314     }
1315     /**
1316      * @brief Obtains all skillInfos.
1317      */
GetInnerSkillInfos()1318     const std::map<std::string, std::vector<Skill>> &GetInnerSkillInfos() const
1319     {
1320         return skillInfos_;
1321     }
1322     /**
1323      * @brief Fetch all extensionAbilityInfos, can be modify.
1324      */
FetchInnerExtensionInfos()1325     std::map<std::string, InnerExtensionInfo> &FetchInnerExtensionInfos()
1326     {
1327         return baseExtensionInfos_;
1328     }
1329     /**
1330      * @brief Obtains all innerExtensionInfos.
1331      */
GetInnerExtensionInfos()1332     const std::map<std::string, InnerExtensionInfo> &GetInnerExtensionInfos() const
1333     {
1334         return baseExtensionInfos_;
1335     }
1336     /**
1337      * @brief Obtains all extensionSkillInfos.
1338      */
GetExtensionSkillInfos()1339     const std::map<std::string, std::vector<Skill>> &GetExtensionSkillInfos() const
1340     {
1341         return  extensionSkillInfos_;
1342     }
1343     /**
1344      * @brief Get the bundle is whether removable.
1345      * @return Return whether the bundle is removable.
1346      */
IsRemovable()1347     bool IsRemovable() const
1348     {
1349         return baseApplicationInfo_->removable;
1350     }
SetIsPreInstallApp(bool isPreInstallApp)1351     void SetIsPreInstallApp(bool isPreInstallApp)
1352     {
1353         baseBundleInfo_->isPreInstallApp = isPreInstallApp;
1354     }
IsPreInstallApp()1355     bool IsPreInstallApp() const
1356     {
1357         return baseBundleInfo_->isPreInstallApp;
1358     }
1359     /**
1360      * @brief Get whether the bundle is a system app.
1361      * @return Return whether the bundle is a system app.
1362      */
IsSystemApp()1363     bool IsSystemApp() const
1364     {
1365         return baseApplicationInfo_->isSystemApp;
1366     }
1367     /**
1368      * @brief Get all InnerBundleUserInfo.
1369      * @return Return about all userinfo under the app.
1370      */
GetInnerBundleUserInfos()1371     const std::map<std::string, InnerBundleUserInfo>& GetInnerBundleUserInfos() const
1372     {
1373         return innerBundleUserInfos_;
1374     }
1375     /**
1376      * @brief Reset bundle state.
1377      * @param userId Indicates the userId to set.
1378      */
1379     void ResetBundleState(int32_t userId);
1380     /**
1381      * @brief Set userId to remove userinfo.
1382      * @param userId Indicates the userId to set.
1383      */
1384     void RemoveInnerBundleUserInfo(int32_t userId);
1385     /**
1386      * @brief Set userId to add userinfo.
1387      * @param userId Indicates the userInfo to set.
1388      */
1389     void AddInnerBundleUserInfo(const InnerBundleUserInfo& userInfo);
1390     /**
1391      * @brief Set userId to add userinfo.
1392      * @param userId Indicates the userInfo to set.
1393      * @param userInfo Indicates the userInfo to get.
1394      * @return Return whether the user information is obtained successfully.
1395      */
1396     bool GetInnerBundleUserInfo(int32_t userId, InnerBundleUserInfo& userInfo) const;
1397     /**
1398      * @brief  Check whether the user exists.
1399      * @param userId Indicates the userInfo to set.
1400      * @return Return whether the user exists..
1401      */
1402     bool HasInnerBundleUserInfo(int32_t userId) const;
1403     /**
1404      * @brief  Check whether onlyCreateBundleUser.
1405      * @return Return onlyCreateBundleUser.
1406      */
IsOnlyCreateBundleUser()1407     bool IsOnlyCreateBundleUser() const
1408     {
1409         return onlyCreateBundleUser_;
1410     }
1411     /**
1412      * @brief Set onlyCreateBundleUser.
1413      * @param onlyCreateBundleUser Indicates the onlyCreateBundleUser.
1414      */
SetOnlyCreateBundleUser(bool onlyCreateBundleUser)1415     void SetOnlyCreateBundleUser(bool onlyCreateBundleUser)
1416     {
1417         onlyCreateBundleUser_ = onlyCreateBundleUser;
1418     }
1419     /**
1420      * @brief Check whether isSingleton.
1421      * @return Return isSingleton.
1422      */
IsSingleton()1423     bool IsSingleton() const
1424     {
1425         return baseApplicationInfo_->singleton;
1426     }
1427     /**
1428      * @brief Get response userId.
1429      * @param userId Indicates the request userId..
1430      * @return Return response userId.
1431      */
1432     int32_t GetResponseUserId(int32_t requestUserId) const;
1433 
GetModuleNameVec()1434     std::vector<std::string> GetModuleNameVec() const
1435     {
1436         std::vector<std::string> moduleVec;
1437         for (const auto &it : innerModuleInfos_) {
1438             moduleVec.emplace_back(it.first);
1439         }
1440         return moduleVec;
1441     }
1442 
GetAccessTokenId(const int32_t userId)1443     uint32_t GetAccessTokenId(const int32_t userId) const
1444     {
1445         InnerBundleUserInfo userInfo;
1446         if (GetInnerBundleUserInfo(userId, userInfo)) {
1447             return userInfo.accessTokenId;
1448         }
1449         return 0;
1450     }
1451 
1452     void SetAccessTokenId(uint32_t accessToken, const int32_t userId);
1453 
GetAccessTokenIdEx(const int32_t userId)1454     uint64_t GetAccessTokenIdEx(const int32_t userId) const
1455     {
1456         InnerBundleUserInfo userInfo;
1457         if (GetInnerBundleUserInfo(userId, userInfo)) {
1458             return userInfo.accessTokenIdEx;
1459         }
1460         return 0;
1461     }
1462 
1463     void SetAccessTokenIdEx(const Security::AccessToken::AccessTokenIDEx accessTokenIdEx, const int32_t userId);
1464 
1465     void SetAccessTokenIdExWithAppIndex(
1466         const Security::AccessToken::AccessTokenIDEx accessTokenIdEx,
1467         const int32_t userId, const int32_t appIndex);
1468 
SetIsNewVersion(bool flag)1469     void SetIsNewVersion(bool flag)
1470     {
1471         isNewVersion_ = flag;
1472     }
1473 
GetIsNewVersion()1474     bool GetIsNewVersion() const
1475     {
1476         return isNewVersion_;
1477     }
1478 
GetAsanEnabled()1479     bool GetAsanEnabled() const
1480     {
1481         return baseApplicationInfo_->asanEnabled;
1482     }
1483 
SetAsanEnabled(bool asanEnabled)1484     void SetAsanEnabled(bool asanEnabled)
1485     {
1486         baseApplicationInfo_->asanEnabled = asanEnabled;
1487     }
1488 
SetAllowedAcls(const std::vector<std::string> & allowedAcls)1489     void SetAllowedAcls(const std::vector<std::string> &allowedAcls)
1490     {
1491         allowedAcls_.clear();
1492         for (const auto &acl : allowedAcls) {
1493             if (!acl.empty()) {
1494                 allowedAcls_.emplace_back(acl);
1495             }
1496         }
1497     }
1498 
GetAllowedAcls()1499     std::vector<std::string> GetAllowedAcls() const
1500     {
1501         return allowedAcls_;
1502     }
1503 
IsU1Enable()1504     bool IsU1Enable() const
1505     {
1506         auto iter = std::find(allowedAcls_.begin(), allowedAcls_.end(),
1507             std::string(Constants::PERMISSION_U1_ENABLED));
1508         if (iter != allowedAcls_.end()) {
1509             return true;
1510         }
1511         return false;
1512     }
1513 
1514     /**
1515      * @brief ability is enabled.
1516      * @param abilityInfo Indicates the abilityInfo.
1517      * @param userId Indicates the user Id.
1518      * @return Return set ability enabled result.
1519      */
1520     bool IsAbilityEnabled(const AbilityInfo &abilityInfo, int32_t userId,
1521         int32_t appIndex = 0) const;
1522     ErrCode IsAbilityEnabledV9(const AbilityInfo &abilityInfo,
1523         int32_t userId, bool &isEnable, int32_t appIndex = 0) const;
1524 
IsAccessible()1525     bool IsAccessible() const
1526     {
1527         return baseApplicationInfo_->accessible;
1528     }
1529 
1530     bool GetDependentModuleNames(const std::string &moduleName, std::vector<std::string> &dependentModuleNames) const;
1531 
1532     bool GetAllDependentModuleNames(const std::string &moduleName,
1533         std::vector<std::string> &dependentModuleNames) const;
1534 
1535     bool IsBundleRemovable() const;
1536     /**
1537      * @brief Which modules can be removed.
1538      * @param moduleToDelete Indicates the modules.
1539      * @return Return get module isRemoved result
1540      */
1541     bool GetRemovableModules(std::vector<std::string> &moduleToDelete) const;
1542     /**
1543      * @brief Get freeInstall module.
1544      * @param freeInstallModule Indicates the modules.
1545      * @return Return get freeInstall module result
1546      */
1547     bool GetFreeInstallModules(std::vector<std::string> &freeInstallModule) const;
1548     /**
1549      * @brief Whether module of userId is exist.
1550      * @param moduleName Indicates the moduleName.
1551      * @param userId Indicates the userId.
1552      * @return Return get module exist result.
1553      */
1554     bool IsUserExistModule(const std::string &moduleName, int32_t userId) const;
1555     /**
1556      * @brief whether userId's module should be removed.
1557      * @param moduleName Indicates the moduleName.
1558      * @param userId Indicates the userId.
1559      * @param isRemovable Indicates the module whether is removable.
1560      * @return Return get module isRemoved result.
1561      */
1562     ErrCode IsModuleRemovable(const std::string &moduleName, int32_t userId, bool &isRemovable) const;
1563     /**
1564      * @brief Add module removable info
1565      * @param info Indicates the innerModuleInfo of module.
1566      * @param stringUserId Indicates the string userId add to isRemovable map.
1567      * @param isEnable Indicates the value of enable module is removed.
1568      * @return Return add module isRemovable info result.
1569      */
1570     bool AddModuleRemovableInfo(InnerModuleInfo &info, const std::string &stringUserId, bool isEnable) const;
1571     /**
1572      * @brief Set userId's module value of isRemoved.
1573      * @param moduleName Indicates the moduleName.
1574      * @param isEnable Indicates the module isRemovable is enable.
1575      * @param userId Indicates the userId.
1576      * @return Return set module isRemoved result.
1577      */
1578     bool SetModuleRemovable(const std::string &moduleName, bool isEnable, int32_t userId);
1579     /**
1580      * @brief Delete userId isRemoved info from module.
1581      * @param moduleName Indicates the moduleName.
1582      * @param userId Indicates the userId.
1583      * @return
1584      */
1585     void DeleteModuleRemovable(const std::string &moduleName, int32_t userId);
1586     /**
1587      * @brief Delete removable info.
1588      * @param info Indicates the innerModuleInfo of module.
1589      * @param stringUserId Indicates the string userId of isRemovable map.
1590      * @return
1591      */
1592     void DeleteModuleRemovableInfo(InnerModuleInfo &info, const std::string &stringUserId);
1593 
1594     /**
1595      * @brief Set atomic service resizeable.
1596      * @param moduleName Indicates the moduleName.
1597      * @param resizeable Indicates the atomic service resizeable.
1598      * @return Return set atomic service resizeable result.
1599      */
1600     bool SetInnerModuleAtomicResizeable(const std::string &moduleName, bool resizeable);
1601 
SetEntryInstallationFree(bool installationFree)1602     void SetEntryInstallationFree(bool installationFree)
1603     {
1604         baseBundleInfo_->entryInstallationFree = installationFree;
1605         if (installationFree) {
1606             baseApplicationInfo_->needAppDetail = false;
1607             baseApplicationInfo_->appDetailAbilityLibraryPath = Constants::EMPTY_STRING;
1608         }
1609     }
1610 
GetEntryInstallationFree()1611     bool GetEntryInstallationFree() const
1612     {
1613         return baseBundleInfo_->entryInstallationFree;
1614     }
1615 
SetBundlePackInfo(const BundlePackInfo & bundlePackInfo)1616     void SetBundlePackInfo(const BundlePackInfo &bundlePackInfo)
1617     {
1618         *bundlePackInfo_ = bundlePackInfo;
1619     }
1620 
GetBundlePackInfo()1621     BundlePackInfo GetBundlePackInfo() const
1622     {
1623         return *bundlePackInfo_;
1624     }
1625 
SetAppIndex(int32_t appIndex)1626     void SetAppIndex(int32_t appIndex)
1627     {
1628         appIndex_ = appIndex;
1629     }
1630 
GetAppIndex()1631     int32_t GetAppIndex() const
1632     {
1633         return appIndex_;
1634     }
1635 
SetIsSandbox(bool isSandbox)1636     void SetIsSandbox(bool isSandbox)
1637     {
1638         isSandboxApp_ = isSandbox;
1639     }
1640 
GetIsSandbox()1641     bool GetIsSandbox() const
1642     {
1643         return isSandboxApp_;
1644     }
1645 
CleanInnerBundleUserInfos()1646     void CleanInnerBundleUserInfos()
1647     {
1648         innerBundleUserInfos_.clear();
1649     }
1650 
GetCertificateFingerprint()1651     std::string GetCertificateFingerprint() const
1652     {
1653         return baseApplicationInfo_->fingerprint;
1654     }
1655 
SetCertificateFingerprint(const std::string & fingerprint)1656     void SetCertificateFingerprint(const std::string &fingerprint)
1657     {
1658         baseApplicationInfo_->fingerprint = fingerprint;
1659     }
1660 
GetNativeLibraryPath()1661     const std::string &GetNativeLibraryPath() const
1662     {
1663         return baseApplicationInfo_->nativeLibraryPath;
1664     }
1665 
SetNativeLibraryPath(const std::string & nativeLibraryPath)1666     void SetNativeLibraryPath(const std::string &nativeLibraryPath)
1667     {
1668         baseApplicationInfo_->nativeLibraryPath = nativeLibraryPath;
1669     }
1670 
GetArkNativeFileAbi()1671     const std::string &GetArkNativeFileAbi() const
1672     {
1673         return baseApplicationInfo_->arkNativeFileAbi;
1674     }
1675 
SetArkNativeFileAbi(const std::string & arkNativeFileAbi)1676     void SetArkNativeFileAbi(const std::string &arkNativeFileAbi)
1677     {
1678         baseApplicationInfo_->arkNativeFileAbi = arkNativeFileAbi;
1679     }
1680 
GetArkNativeFilePath()1681     const std::string &GetArkNativeFilePath() const
1682     {
1683         return baseApplicationInfo_->arkNativeFilePath;
1684     }
1685 
SetArkNativeFilePath(const std::string & arkNativeFilePath)1686     void SetArkNativeFilePath(const std::string &arkNativeFilePath)
1687     {
1688         baseApplicationInfo_->arkNativeFilePath = arkNativeFilePath;
1689     }
1690 
SetAllowAppRunWhenDeviceFirstLocked(bool allowAppRunWhenDeviceFirstLocked)1691     void SetAllowAppRunWhenDeviceFirstLocked(bool allowAppRunWhenDeviceFirstLocked)
1692     {
1693         baseApplicationInfo_->allowAppRunWhenDeviceFirstLocked = allowAppRunWhenDeviceFirstLocked;
1694     }
1695 
SetAllowEnableNotification(bool allowEnableNotification)1696     void SetAllowEnableNotification(bool allowEnableNotification)
1697     {
1698         baseApplicationInfo_->allowEnableNotification = allowEnableNotification;
1699     }
1700 
GetCpuAbi()1701     const std::string &GetCpuAbi() const
1702     {
1703         return baseApplicationInfo_->cpuAbi;
1704     }
1705 
SetCpuAbi(const std::string & cpuAbi)1706     void SetCpuAbi(const std::string &cpuAbi)
1707     {
1708         baseApplicationInfo_->cpuAbi = cpuAbi;
1709     }
1710 
SetRemovable(bool removable)1711     void SetRemovable(bool removable)
1712     {
1713         baseApplicationInfo_->removable = removable;
1714     }
1715 
SetKeepAlive(bool keepAlive)1716     void SetKeepAlive(bool keepAlive)
1717     {
1718         baseApplicationInfo_->keepAlive = keepAlive;
1719         baseBundleInfo_->isKeepAlive = keepAlive;
1720     }
1721 
SetSingleton(bool singleton)1722     void SetSingleton(bool singleton)
1723     {
1724         baseApplicationInfo_->singleton = singleton;
1725         baseBundleInfo_->singleton = singleton;
1726     }
1727 
SetRunningResourcesApply(bool runningResourcesApply)1728     void SetRunningResourcesApply(bool runningResourcesApply)
1729     {
1730         baseApplicationInfo_->runningResourcesApply = runningResourcesApply;
1731     }
1732 
SetAssociatedWakeUp(bool associatedWakeUp)1733     void SetAssociatedWakeUp(bool associatedWakeUp)
1734     {
1735         baseApplicationInfo_->associatedWakeUp = associatedWakeUp;
1736     }
1737 
SetUserDataClearable(bool userDataClearable)1738     void SetUserDataClearable(bool userDataClearable)
1739     {
1740         baseApplicationInfo_->userDataClearable = userDataClearable;
1741     }
1742 
SetHideDesktopIcon(bool hideDesktopIcon)1743     void SetHideDesktopIcon(bool hideDesktopIcon)
1744     {
1745         baseApplicationInfo_->hideDesktopIcon = hideDesktopIcon;
1746         if (hideDesktopIcon) {
1747             baseApplicationInfo_->needAppDetail = false;
1748             baseApplicationInfo_->appDetailAbilityLibraryPath = Constants::EMPTY_STRING;
1749         }
1750     }
1751 
SetFormVisibleNotify(bool formVisibleNotify)1752     void SetFormVisibleNotify(bool formVisibleNotify)
1753     {
1754         baseApplicationInfo_->formVisibleNotify = formVisibleNotify;
1755     }
1756 
SetAllowCommonEvent(const std::vector<std::string> & allowCommonEvent)1757     void SetAllowCommonEvent(const std::vector<std::string> &allowCommonEvent)
1758     {
1759         baseApplicationInfo_->allowCommonEvent.clear();
1760         for (const auto &event : allowCommonEvent) {
1761             baseApplicationInfo_->allowCommonEvent.emplace_back(event);
1762         }
1763     }
1764 
GetOverlayBundleInfo()1765     std::vector<OverlayBundleInfo> GetOverlayBundleInfo() const
1766     {
1767         return overlayBundleInfo_;
1768     }
1769 
AddOverlayBundleInfo(const OverlayBundleInfo & overlayBundleInfo)1770     void AddOverlayBundleInfo(const OverlayBundleInfo &overlayBundleInfo)
1771     {
1772         auto iterator = std::find_if(overlayBundleInfo_.begin(), overlayBundleInfo_.end(),
1773             [&overlayBundleInfo](const auto &overlayInfo) {
1774                 return overlayInfo.bundleName == overlayBundleInfo.bundleName;
1775         });
1776         if (iterator != overlayBundleInfo_.end()) {
1777             overlayBundleInfo_.erase(iterator);
1778         }
1779         overlayBundleInfo_.emplace_back(overlayBundleInfo);
1780     }
1781 
RemoveOverLayBundleInfo(const std::string & bundleName)1782     void RemoveOverLayBundleInfo(const std::string &bundleName)
1783     {
1784         auto iterator = std::find_if(overlayBundleInfo_.begin(), overlayBundleInfo_.end(),
1785             [&bundleName](const auto &overlayInfo) {
1786                 return overlayInfo.bundleName == bundleName;
1787         });
1788         if (iterator != overlayBundleInfo_.end()) {
1789             overlayBundleInfo_.erase(iterator);
1790         }
1791     }
1792 
CleanOverLayBundleInfo()1793     void CleanOverLayBundleInfo()
1794     {
1795         overlayBundleInfo_.clear();
1796     }
1797 
GetTargetBundleName()1798     std::string GetTargetBundleName() const
1799     {
1800         return baseApplicationInfo_->targetBundleName;
1801     }
1802 
SetTargetBundleName(const std::string & targetBundleName)1803     void SetTargetBundleName(const std::string &targetBundleName)
1804     {
1805         baseApplicationInfo_->targetBundleName = targetBundleName;
1806     }
1807 
GetTargetPriority()1808     int32_t GetTargetPriority() const
1809     {
1810         return baseApplicationInfo_->targetPriority;
1811     }
1812 
SetTargetPriority(int32_t priority)1813     void SetTargetPriority(int32_t priority)
1814     {
1815         baseApplicationInfo_->targetPriority = priority;
1816     }
1817 
GetOverlayState()1818     int32_t GetOverlayState() const
1819     {
1820         return baseApplicationInfo_->overlayState;
1821     }
1822 
SetOverlayState(int32_t state)1823     void SetOverlayState(int32_t state)
1824     {
1825         baseApplicationInfo_->overlayState = state;
1826     }
1827 
GetOverlayType()1828     int32_t GetOverlayType() const
1829     {
1830         return overlayType_;
1831     }
1832 
SetOverlayType(int32_t type)1833     void SetOverlayType(int32_t type)
1834     {
1835         overlayType_ = type;
1836     }
1837 
AddOverlayModuleInfo(const OverlayModuleInfo & overlayModuleInfo)1838     void AddOverlayModuleInfo(const OverlayModuleInfo &overlayModuleInfo)
1839     {
1840         auto iterator = innerModuleInfos_.find(overlayModuleInfo.targetModuleName);
1841         if (iterator == innerModuleInfos_.end()) {
1842             return;
1843         }
1844         auto innerModuleInfo = iterator->second;
1845         auto overlayModuleInfoIt = std::find_if(innerModuleInfo.overlayModuleInfo.begin(),
1846             innerModuleInfo.overlayModuleInfo.end(), [&overlayModuleInfo](const auto &overlayInfo) {
1847             return (overlayInfo.moduleName == overlayModuleInfo.moduleName) &&
1848                 (overlayInfo.bundleName == overlayModuleInfo.bundleName);
1849         });
1850         if (overlayModuleInfoIt != innerModuleInfo.overlayModuleInfo.end()) {
1851             innerModuleInfo.overlayModuleInfo.erase(overlayModuleInfoIt);
1852         }
1853         innerModuleInfo.overlayModuleInfo.emplace_back(overlayModuleInfo);
1854         innerModuleInfos_.erase(iterator);
1855         innerModuleInfos_.try_emplace(overlayModuleInfo.targetModuleName, innerModuleInfo);
1856     }
1857 
RemoveOverlayModuleInfo(const std::string & targetModuleName,const std::string & bundleName,const std::string & moduleName)1858     void RemoveOverlayModuleInfo(const std::string &targetModuleName, const std::string &bundleName,
1859         const std::string &moduleName)
1860     {
1861         auto iterator = innerModuleInfos_.find(targetModuleName);
1862         if (iterator == innerModuleInfos_.end()) {
1863             return;
1864         }
1865         auto innerModuleInfo = iterator->second;
1866         auto overlayModuleInfoIt = std::find_if(innerModuleInfo.overlayModuleInfo.begin(),
1867             innerModuleInfo.overlayModuleInfo.end(), [&moduleName, &bundleName](const auto &overlayInfo) {
1868             return (overlayInfo.moduleName == moduleName) && (overlayInfo.bundleName == bundleName);
1869         });
1870         if (overlayModuleInfoIt == innerModuleInfo.overlayModuleInfo.end()) {
1871             return;
1872         }
1873         innerModuleInfo.overlayModuleInfo.erase(overlayModuleInfoIt);
1874         innerModuleInfos_.erase(iterator);
1875         innerModuleInfos_.try_emplace(targetModuleName, innerModuleInfo);
1876     }
1877 
RemoveAllOverlayModuleInfo(const std::string & bundleName)1878     void RemoveAllOverlayModuleInfo(const std::string &bundleName)
1879     {
1880         for (auto &innerModuleInfo : innerModuleInfos_) {
1881             innerModuleInfo.second.overlayModuleInfo.erase(std::remove_if(
1882                 innerModuleInfo.second.overlayModuleInfo.begin(), innerModuleInfo.second.overlayModuleInfo.end(),
1883                 [&bundleName](const auto &overlayInfo) {
1884                     return overlayInfo.bundleName == bundleName;
1885                 }), innerModuleInfo.second.overlayModuleInfo.end());
1886         }
1887     }
1888 
CleanAllOverlayModuleInfo()1889     void CleanAllOverlayModuleInfo()
1890     {
1891         for (auto &innerModuleInfo : innerModuleInfos_) {
1892             innerModuleInfo.second.overlayModuleInfo.clear();
1893         }
1894     }
1895 
isOverlayModule(const std::string & moduleName)1896     bool isOverlayModule(const std::string &moduleName) const
1897     {
1898         if (innerModuleInfos_.find(moduleName) == innerModuleInfos_.end()) {
1899             return true;
1900         }
1901         return !innerModuleInfos_.at(moduleName).targetModuleName.empty();
1902     }
1903 
isExistedOverlayModule()1904     bool isExistedOverlayModule() const
1905     {
1906         for (const auto &innerModuleInfo : innerModuleInfos_) {
1907             if (!innerModuleInfo.second.targetModuleName.empty()) {
1908                 return true;
1909             }
1910         }
1911         return false;
1912     }
1913 
KeepOldOverlayConnection(InnerBundleInfo & info)1914     void KeepOldOverlayConnection(InnerBundleInfo &info)
1915     {
1916         auto &newInnerModuleInfos = info.FetchInnerModuleInfos();
1917         for (const auto &innerModuleInfo : innerModuleInfos_) {
1918             if ((!innerModuleInfo.second.overlayModuleInfo.empty()) &&
1919                 (newInnerModuleInfos.find(innerModuleInfo.second.moduleName) != newInnerModuleInfos.end())) {
1920                 newInnerModuleInfos[innerModuleInfo.second.moduleName].overlayModuleInfo =
1921                     innerModuleInfo.second.overlayModuleInfo;
1922                 return;
1923             }
1924         }
1925     }
1926 
SetAsanLogPath(const std::string & asanLogPath)1927     void SetAsanLogPath(const std::string& asanLogPath)
1928     {
1929         baseApplicationInfo_->asanLogPath = asanLogPath;
1930     }
1931 
GetAsanLogPath()1932     std::string GetAsanLogPath() const
1933     {
1934         return baseApplicationInfo_->asanLogPath;
1935     }
1936 
SetApplicationBundleType(BundleType type)1937     void SetApplicationBundleType(BundleType type)
1938     {
1939         baseApplicationInfo_->bundleType = type;
1940     }
1941 
GetApplicationBundleType()1942     BundleType GetApplicationBundleType() const
1943     {
1944         return baseApplicationInfo_->bundleType;
1945     }
1946 
SetInnerModuleAtomicPreload(const std::string & moduleName,const std::vector<std::string> & preloads)1947     bool SetInnerModuleAtomicPreload(const std::string &moduleName, const std::vector<std::string> &preloads)
1948     {
1949         if (innerModuleInfos_.find(moduleName) == innerModuleInfos_.end()) {
1950             APP_LOGE("innerBundleInfo does not contain the module");
1951             return false;
1952         }
1953         innerModuleInfos_.at(moduleName).preloads = preloads;
1954         return true;
1955     }
1956 
SetAppProvisionMetadata(const std::vector<Metadata> & metadatas)1957     void SetAppProvisionMetadata(const std::vector<Metadata> &metadatas)
1958     {
1959         provisionMetadatas_ = metadatas;
1960     }
1961 
GetAppProvisionMetadata()1962     std::vector<Metadata> GetAppProvisionMetadata() const
1963     {
1964         return provisionMetadatas_;
1965     }
1966 
GetInnerSharedModuleInfos()1967     const std::map<std::string, std::vector<InnerModuleInfo>> &GetInnerSharedModuleInfos() const
1968     {
1969         return innerSharedModuleInfos_;
1970     }
1971 
GetDependencies()1972     std::vector<Dependency> GetDependencies() const
1973     {
1974         std::vector<Dependency> dependenciesList;
1975         for (auto it = innerModuleInfos_.begin(); it != innerModuleInfos_.end(); it++) {
1976             for (const auto &item : it->second.dependencies) {
1977                 dependenciesList.emplace_back(item);
1978             }
1979         }
1980         return dependenciesList;
1981     }
1982 
GetAllHspModuleNamesForVersion(uint32_t versionCode)1983     std::vector<std::string> GetAllHspModuleNamesForVersion(uint32_t versionCode) const
1984     {
1985         std::vector<std::string> hspModuleNames;
1986         for (const auto &[moduleName, modules] : innerSharedModuleInfos_) {
1987             for (const auto &item : modules) {
1988                 if (item.versionCode == versionCode) {
1989                     hspModuleNames.emplace_back(moduleName);
1990                 }
1991             }
1992         }
1993         return hspModuleNames;
1994     }
1995 
1996     void AddAllowedAcls(const std::vector<std::string> &allowedAcls);
GetModuleBuildHash(const std::string & moduleName,std::string & buildHash)1997     bool GetModuleBuildHash(const std::string &moduleName, std::string &buildHash) const
1998     {
1999         if (innerModuleInfos_.find(moduleName) == innerModuleInfos_.end()) {
2000             APP_LOGE("innerBundleInfo does not contain the module");
2001             return false;
2002         }
2003         buildHash = innerModuleInfos_.at(moduleName).buildHash;
2004         return true;
2005     }
2006 
GetDataGroupInfos()2007     const std::unordered_map<std::string, std::vector<DataGroupInfo>> GetDataGroupInfos() const
2008     {
2009         return dataGroupInfos_;
2010     }
2011 
DeleteDataGroupInfo(const std::string & dataGroupId)2012     void DeleteDataGroupInfo(const std::string &dataGroupId)
2013     {
2014         if (dataGroupInfos_.find(dataGroupId) == dataGroupInfos_.end()) {
2015             return;
2016         }
2017         dataGroupInfos_.erase(dataGroupId);
2018     }
2019 
2020     void AddDataGroupInfo(const std::string &dataGroupId, const DataGroupInfo &info);
2021 
RemoveGroupInfos(int32_t userId,const std::string & dataGroupId)2022     void RemoveGroupInfos(int32_t userId, const std::string &dataGroupId)
2023     {
2024         auto iter = dataGroupInfos_.find(dataGroupId);
2025         if (iter == dataGroupInfos_.end()) {
2026             return;
2027         }
2028         for (auto dataGroupIter = iter->second.begin(); dataGroupIter != iter->second.end(); dataGroupIter++) {
2029             if (dataGroupIter->userId == userId) {
2030                 iter->second.erase(dataGroupIter);
2031                 return;
2032             }
2033         }
2034     }
2035 
UpdateDataGroupInfos(const std::unordered_map<std::string,std::vector<DataGroupInfo>> & dataGroupInfos)2036     void UpdateDataGroupInfos(const std::unordered_map<std::string, std::vector<DataGroupInfo>> &dataGroupInfos)
2037     {
2038         std::set<int32_t> userIdList;
2039         for (auto item = dataGroupInfos.begin(); item != dataGroupInfos.end(); item++) {
2040             for (const DataGroupInfo &info : item->second) {
2041                 userIdList.insert(info.userId);
2042             }
2043         }
2044 
2045         std::vector<std::string> deletedGroupIds;
2046         for (auto &item : dataGroupInfos_) {
2047             if (dataGroupInfos.find(item.first) == dataGroupInfos.end()) {
2048                 for (int32_t userId : userIdList) {
2049                     RemoveGroupInfos(userId, item.first);
2050                 }
2051             }
2052             if (item.second.empty()) {
2053                 deletedGroupIds.emplace_back(item.first);
2054             }
2055         }
2056         for (std::string groupId : deletedGroupIds) {
2057             dataGroupInfos_.erase(groupId);
2058         }
2059         for (auto item = dataGroupInfos.begin(); item != dataGroupInfos.end(); item++) {
2060             std::string dataGroupId = item->first;
2061             for (const DataGroupInfo &info : item->second) {
2062                 AddDataGroupInfo(dataGroupId, info);
2063             }
2064         }
2065     }
2066 
SetApplicationReservedFlag(uint32_t flag)2067     void SetApplicationReservedFlag(uint32_t flag)
2068     {
2069         baseApplicationInfo_->applicationReservedFlag |= flag;
2070     }
2071 
ClearApplicationReservedFlag(uint32_t flag)2072     void ClearApplicationReservedFlag(uint32_t flag)
2073     {
2074         baseApplicationInfo_->applicationReservedFlag &= ~flag;
2075     }
2076 
GetApplicationReservedFlag()2077     uint32_t GetApplicationReservedFlag() const
2078     {
2079         return baseApplicationInfo_->applicationReservedFlag;
2080     }
2081 
SetGwpAsanEnabled(bool gwpAsanEnabled)2082     void SetGwpAsanEnabled(bool gwpAsanEnabled)
2083     {
2084         baseApplicationInfo_->gwpAsanEnabled = gwpAsanEnabled;
2085     }
2086 
GetGwpAsanEnabled()2087     bool GetGwpAsanEnabled() const
2088     {
2089         return baseApplicationInfo_->gwpAsanEnabled;
2090     }
2091 
GetTsanEnabled()2092     bool GetTsanEnabled() const
2093     {
2094         return baseApplicationInfo_->tsanEnabled;
2095     }
2096 
SetTsanEnabled(bool tsanEnabled)2097     void SetTsanEnabled(bool tsanEnabled)
2098     {
2099         baseApplicationInfo_->tsanEnabled = tsanEnabled;
2100     }
2101 
GetHwasanEnabled()2102     bool GetHwasanEnabled() const
2103     {
2104         return baseApplicationInfo_->hwasanEnabled;
2105     }
2106 
SetHwasanEnabled(bool hwasanEnabled)2107     void SetHwasanEnabled(bool hwasanEnabled)
2108     {
2109         baseApplicationInfo_->hwasanEnabled = hwasanEnabled;
2110     }
2111 
GetUbsanEnabled()2112     bool GetUbsanEnabled() const
2113     {
2114         return baseApplicationInfo_->ubsanEnabled;
2115     }
2116 
SetUbsanEnabled(bool ubsanEnabled)2117     void SetUbsanEnabled(bool ubsanEnabled)
2118     {
2119         baseApplicationInfo_->ubsanEnabled = ubsanEnabled;
2120     }
2121 
GetAppEnvironments()2122     std::vector<ApplicationEnvironment> GetAppEnvironments() const
2123     {
2124         return baseApplicationInfo_->appEnvironments;
2125     }
2126 
SetAppEnvironments(std::vector<ApplicationEnvironment> appEnvironments)2127     void SetAppEnvironments(std::vector<ApplicationEnvironment> appEnvironments)
2128     {
2129         baseApplicationInfo_->appEnvironments = appEnvironments;
2130     }
2131 
GetAssetAccessGroups()2132     std::vector<std::string> GetAssetAccessGroups() const
2133     {
2134         return baseApplicationInfo_->assetAccessGroups;
2135     }
2136 
GetDeveloperId()2137     std::string GetDeveloperId() const
2138     {
2139         return developerId_;
2140     }
2141 
GetMaxChildProcess()2142     int32_t GetMaxChildProcess() const
2143     {
2144         return baseApplicationInfo_->maxChildProcess;
2145     }
2146 
SetMaxChildProcess(int32_t maxChildProcess)2147     void SetMaxChildProcess(int32_t maxChildProcess)
2148     {
2149         baseApplicationInfo_->maxChildProcess = maxChildProcess;
2150     }
2151 
SetOrganization(const std::string & organization)2152     void SetOrganization(const std::string &organization)
2153     {
2154         baseApplicationInfo_->organization = organization;
2155     }
2156 
GetMultiAppMaxCount()2157     int32_t GetMultiAppMaxCount() const
2158     {
2159         return baseApplicationInfo_->multiAppMode.maxCount;
2160     }
2161 
GetMultiAppModeType()2162     MultiAppModeType GetMultiAppModeType() const
2163     {
2164         return baseApplicationInfo_->multiAppMode.multiAppModeType;
2165     }
2166 
SetInstallSource(const std::string & installSource)2167     void SetInstallSource(const std::string &installSource)
2168     {
2169         baseApplicationInfo_->installSource = installSource;
2170     }
2171 
IsInstalledForAllUser()2172     bool IsInstalledForAllUser() const
2173     {
2174         return baseApplicationInfo_->installedForAllUser;
2175     }
2176 
SetInstalledForAllUser(bool installedForAllUser)2177     void SetInstalledForAllUser(bool installedForAllUser) const
2178     {
2179         // only update from false to true
2180         if (baseApplicationInfo_->installedForAllUser && !installedForAllUser) {
2181             APP_LOGI("origin value is true, return");
2182             return;
2183         }
2184         baseApplicationInfo_->installedForAllUser = installedForAllUser;
2185     }
2186 
GetAllPluginBundleInfo()2187     std::unordered_map<std::string, PluginBundleInfo> GetAllPluginBundleInfo() const
2188     {
2189         APP_LOGI("pluginBundleInfos size: %{public}zu", pluginBundleInfos_.size());
2190         return pluginBundleInfos_;
2191     }
2192 
2193     bool GetPluginBundleInfos(const int32_t userId,
2194         std::unordered_map<std::string, PluginBundleInfo> &pluginBundleInfos) const;
2195     void SetApplicationFlags(ApplicationInfoFlag flag);
2196 
2197     void UpdateExtensionSandboxInfo(const std::vector<std::string> &typeList);
2198     std::vector<std::string> GetAllExtensionDirsInSpecifiedModule(const std::string &moduleName) const;
2199     std::vector<std::string> GetAllExtensionDirs() const;
2200     void UpdateExtensionDataGroupInfo(const std::string &key, const std::vector<std::string> &dataGroupIds);
2201     void SetAppDistributionType(const std::string &appDistributionType);
2202 
2203     std::string GetAppDistributionType() const;
2204 
2205     void SetAppProvisionType(const std::string &appProvisionType);
2206 
2207     std::string GetAppProvisionType() const;
2208 
2209     void SetAppCrowdtestDeadline(int64_t crowdtestDeadline);
2210 
2211     int64_t GetAppCrowdtestDeadline() const;
2212 
2213     std::vector<std::string> GetDistroModuleName() const;
2214 
2215     std::string GetModuleNameByPackage(const std::string &packageName) const;
2216 
2217     std::string GetModuleTypeByPackage(const std::string &packageName) const;
2218 
2219     AppQuickFix GetAppQuickFix() const;
2220 
2221     void SetAppQuickFix(const AppQuickFix &appQuickFix);
2222 
2223     std::vector<HqfInfo> GetQuickFixHqfInfos() const;
2224 
2225     void SetQuickFixHqfInfos(const std::vector<HqfInfo> &hqfInfos);
2226 
2227     void UpdatePrivilegeCapability(const ApplicationInfo &applicationInfo);
2228     void UpdateRemovable(bool isPreInstall, bool removable);
2229     bool FetchNativeSoAttrs(
2230         const std::string &requestPackage, std::string &cpuAbi, std::string &nativeLibraryPath) const;
2231     void UpdateNativeLibAttrs(const ApplicationInfo &applicationInfo);
2232     void UpdateArkNativeAttrs(const ApplicationInfo &applicationInfo);
2233     bool IsLibIsolated(const std::string &moduleName) const;
2234     std::vector<std::string> GetDeviceType(const std::string &packageName) const;
2235     std::map<std::string, std::vector<std::string>> GetRequiredDeviceFeatures(const std::string &packageName) const;
2236     int64_t GetLastInstallationTime() const;
2237     void UpdateAppDetailAbilityAttrs();
2238     bool IsHideDesktopIcon() const;
2239     void AddApplyQuickFixFrequency();
2240     int32_t GetApplyQuickFixFrequency() const;
2241     void ResetApplyQuickFixFrequency();
2242 
2243     bool GetOverlayModuleState(const std::string &moduleName, int32_t userId, int32_t &state) const;
2244 
2245     void SetOverlayModuleState(const std::string &moduleName, int32_t state, int32_t userId);
2246 
2247     void SetOverlayModuleState(const std::string &moduleName, int32_t state);
2248 
2249     void ClearOverlayModuleStates(const std::string &moduleName);
2250 
2251     void SetInnerModuleNeedDelete(const std::string &moduleName, const bool needDelete);
2252 
2253     bool GetInnerModuleNeedDelete(const std::string &moduleName);
2254 
2255     bool GetBaseSharedBundleInfo(const std::string &moduleName, uint32_t versionCode,
2256         BaseSharedBundleInfo &baseSharedBundleInfo) const;
2257     bool GetMaxVerBaseSharedBundleInfo(const std::string &moduleName,
2258         BaseSharedBundleInfo &baseSharedBundleInfo) const;
2259     void InsertInnerSharedModuleInfo(const std::string &moduleName, const InnerModuleInfo &innerModuleInfo);
2260     void SetSharedModuleNativeLibraryPath(const std::string &nativeLibraryPath);
2261     bool GetSharedBundleInfo(SharedBundleInfo &sharedBundleInfo) const;
2262     bool GetSharedDependencies(const std::string &moduleName, std::vector<Dependency> &dependencies) const;
2263     bool GetAllSharedDependencies(const std::string &moduleName, std::vector<Dependency> &dependencies) const;
2264     std::vector<uint32_t> GetAllHspVersion() const;
2265     void DeleteHspModuleByVersion(int32_t versionCode);
2266     bool GetSharedBundleInfo(int32_t flags, BundleInfo &bundleInfo) const;
2267     ErrCode GetProxyDataInfos(const std::string &moduleName, std::vector<ProxyData> &proxyDatas) const;
2268     void GetAllProxyDataInfos(std::vector<ProxyData> &proxyDatas) const;
2269     bool IsCompressNativeLibs(const std::string &moduleName) const;
2270     void SetNativeLibraryFileNames(const std::string &moduleName, const std::vector<std::string> &fileNames);
2271     void UpdateSharedModuleInfo();
2272     AOTCompileStatus GetAOTCompileStatus(const std::string &moduleName) const;
2273     void SetAOTCompileStatus(const std::string &moduleName, AOTCompileStatus aotCompileStatus);
2274     bool IsAOTFlagsInitial() const;
2275     void ResetAOTFlags();
2276     ErrCode ResetAOTCompileStatus(const std::string &moduleName);
2277     void GetInternalDependentHspInfo(const std::string &moduleName, std::vector<HspInfo> &hspInfoVector) const;
2278     ErrCode SetExtName(const std::string &moduleName, const std::string &abilityName, const std::string extName);
2279     ErrCode SetMimeType(const std::string &moduleName, const std::string &abilityName, const std::string mimeType);
2280     ErrCode DelExtName(const std::string &moduleName, const std::string &abilityName, const std::string extName);
2281     ErrCode DelMimeType(const std::string &moduleName, const std::string &abilityName, const std::string extName);
2282     void SetResourcesApply(const std::vector<int32_t> &resourcesApply);
2283     void SetAppIdentifier(const std::string &appIdentifier);
2284     std::string GetAppIdentifier() const;
2285     void SetCertificate(const std::string &certificate);
2286     std::string GetCertificate() const;
2287     void AddOldAppId(const std::string &appId);
2288     std::vector<std::string> GetOldAppIds() const;
2289     void SetMoudleIsEncrpted(const std::string &packageName, bool isEncrypted);
2290     bool IsEncryptedMoudle(const std::string &packageName) const;
2291     void GetAllEncryptedModuleNames(std::vector<std::string> &moduleNames) const;
2292     bool IsContainEncryptedModule() const;
2293     void UpdateDebug(const InnerBundleInfo &newInfo);
2294     bool GetDebugFromModules(const std::map<std::string, InnerModuleInfo> &innerModuleInfos);
2295     ErrCode GetAppServiceHspInfo(BundleInfo &bundleInfo) const;
2296     std::vector<std::string> GetQuerySchemes() const;
2297     void UpdateOdid(const std::string &developerId, const std::string &odid);
2298     void UpdateOdidByBundleInfo(const InnerBundleInfo &info);
2299     void GetDeveloperidAndOdid(std::string &developerId, std::string &odid) const;
2300     void GetOdid(std::string &odid) const;
2301     bool IsAsanEnabled() const;
2302     bool IsGwpAsanEnabled() const;
2303     bool IsTsanEnabled() const;
2304     bool NeedCreateEl5Dir() const;
2305     bool GetUninstallState() const;
2306     void SetUninstallState(const bool &uninstallState);
2307     bool IsNeedSendNotify() const;
2308     void SetNeedSendNotify(const bool needStatus);
2309     void UpdateMultiAppMode(const InnerBundleInfo &newInfo);
2310     void UpdateReleaseType(const InnerBundleInfo &newInfo);
2311     ErrCode AddCloneBundle(const InnerBundleCloneInfo &attr);
2312     ErrCode RemoveCloneBundle(const int32_t userId, const int32_t appIndex);
2313     ErrCode GetAvailableCloneAppIndex(const int32_t userId, int32_t &appIndex);
2314     ErrCode IsCloneAppIndexExisted(const int32_t userId, const int32_t appIndex, bool &res);
2315     void SetkeyId(const int32_t userId, const std::string &keyId, const int32_t appIndex = 0);
2316     void InnerSetKeyId(const int32_t userId, const std::string &keyId, const int32_t appIndex = 0);
2317     std::string GetKeyId(const int32_t userId, const int32_t appIndex);
2318     bool GetApplicationInfoAdaptBundleClone(const InnerBundleUserInfo &innerBundleUserInfo, int32_t appIndex,
2319         ApplicationInfo &appInfo) const;
2320     bool GetBundleInfoAdaptBundleClone(const InnerBundleUserInfo &innerBundleUserInfo, int32_t appIndex,
2321         BundleInfo &bundleInfo) const;
2322     ErrCode VerifyAndAckCloneAppIndex(int32_t userId, int32_t &appIndex);
2323     void AdaptMainLauncherResourceInfo(ApplicationInfo &applicationInfo) const;
2324     bool IsHwasanEnabled() const;
2325     bool IsUbsanEnabled() const;
2326     ErrCode UpdateAppEncryptedStatus(const std::string &bundleName, bool isExisted, int32_t appIndex);
2327     std::set<int32_t> GetCloneBundleAppIndexes() const;
2328     static uint8_t GetSanitizerFlag(GetInnerModuleInfoFlag flag);
2329     void InnerProcessShortcut(const Shortcut &oldShortcut, ShortcutInfo &shortcutInfo) const;
2330     void HandleOTACodeEncryption(std::vector<std::string> &withoutKeyBundles,
2331         std::vector<std::string> &withKeyBundles) const;
2332     void CheckHapEncryption(const CheckEncryptionParam &checkEncryptionParam,
2333         const InnerModuleInfo &moduleInfo) const;
2334     void CheckSoEncryption(const CheckEncryptionParam &checkEncryptionParam, const std::string &requestPackage,
2335         const InnerModuleInfo &moduleInfo) const;
2336     std::string GetModuleArkTSMode(const std::string &moduleName) const;
2337 
SetMultiAppMode(MultiAppModeData multiAppMode)2338     void SetMultiAppMode(MultiAppModeData multiAppMode)
2339     {
2340         baseApplicationInfo_->multiAppMode = multiAppMode;
2341     }
2342 
2343     void SetDFXParamStatus();
GetApplicationFlags()2344     int32_t GetApplicationFlags() const
2345     {
2346         return baseApplicationInfo_->applicationFlags;
2347     }
2348     bool ConvertPluginBundleInfo(const std::string &bundleName, PluginBundleInfo &pluginBundleInfo) const;
2349     bool AddPluginBundleInfo(const PluginBundleInfo &pluginBundleInfo, const int32_t userId);
2350     bool RemovePluginBundleInfo(const std::string &pluginBundleName, const int32_t userId);
2351     bool HasMultiUserPlugin(const std::string &pluginBundleName) const;
2352     bool UpdatePluginBundleInfo(const PluginBundleInfo &pluginBundleInfo);
2353     bool RemovePluginFromUserInfo(const std::string &pluginBundleName, const int32_t userId);
2354     void GetAllDynamicIconInfo(const int32_t userId, std::vector<DynamicIconInfo> &dynamicIconInfos) const;
2355     std::string GetApplicationArkTSMode() const;
2356     void UpdateHasCloudkitConfig();
2357     int32_t GetModuleSize() const;
2358 
2359 private:
2360     bool IsExistLauncherAbility() const;
2361     void GetBundleWithAbilities(
2362         int32_t flags, BundleInfo &bundleInfo, int32_t appIndex, int32_t userId = Constants::UNSPECIFIED_USERID) const;
2363     void GetBundleWithExtension(
2364         int32_t flags, BundleInfo &bundleInfo, int32_t appIndex, int32_t userId = Constants::UNSPECIFIED_USERID) const;
2365     void BuildDefaultUserInfo();
2366     void RemoveDuplicateName(std::vector<std::string> &name) const;
2367     void GetBundleWithReqPermissionsV9(
2368         int32_t flags, int32_t userId, BundleInfo &bundleInfo, int32_t appIndex = 0) const;
2369     void ProcessBundleFlags(
2370         int32_t flags, int32_t userId, BundleInfo &bundleInfo, int32_t appIndex = 0) const;
2371     void ProcessBundleWithHapModuleInfoFlag(
2372         int32_t flags, BundleInfo &bundleInfo, int32_t userId, int32_t appIndex = 0) const;
2373     void GetBundleWithAbilitiesV9(
2374         int32_t flags, HapModuleInfo &hapModuleInfo, int32_t userId, int32_t appIndex = 0) const;
2375     void GetBundleWithExtensionAbilitiesV9(int32_t flags, HapModuleInfo &hapModuleInfo, int32_t appIndex = 0) const;
2376     IsolationMode GetIsolationMode(const std::string &isolationMode) const;
2377     void UpdateIsCompressNativeLibs();
2378     void InnerProcessRequestPermissions(
2379         const std::unordered_map<std::string, std::string> &moduleNameMap,
2380         std::vector<RequestPermission> &requestPermissions) const;
2381     bool ShouldReplacePermission(const RequestPermission &oldPermission, const RequestPermission &newPermission,
2382         const std::unordered_map<std::string, std::string> &moduleNameTypeMap) const;
2383     void PrintSetEnabledInfo(bool isEnabled, int32_t userId, int32_t appIndex,
2384         const std::string &bundleName, const std::string &caller) const;
2385     void GetPreInstallApplicationFlags(ApplicationInfo &appInfo) const;
2386 
2387     bool isSandboxApp_ = false;
2388     // Auxiliary property, which is used when the application
2389     // has been installed when the user is created.
2390     bool onlyCreateBundleUser_ = false;
2391     // new version fields
2392     bool isNewVersion_ = false;
2393 
2394     // use to control uninstalling
2395     bool uninstallState_ = true;
2396 
2397     // need to send a notification when uninstallState_ change
2398     bool isNeedSendNotify_ = false;
2399     BundleStatus bundleStatus_ = BundleStatus::ENABLED;
2400     int32_t appIndex_ = Constants::INITIAL_APP_INDEX;
2401     // apply quick fix frequency
2402     int32_t applyQuickFixFrequency_ = 0;
2403     int32_t overlayType_ = NON_OVERLAY_TYPE;
2404     // using for get
2405     Constants::AppType appType_ = Constants::AppType::THIRD_PARTY_APP;
2406     int userId_ = Constants::DEFAULT_USERID;
2407     std::string appFeature_;
2408 
2409     // only using for install or update progress, doesn't need to save to database
2410     std::string currentPackage_;
2411     // curDynamicIconModule only in ExtendResourceInfos
2412     std::string curDynamicIconModule_;
2413 
2414     // for odid
2415     std::string developerId_;
2416     std::string odid_;
2417     std::shared_ptr<ApplicationInfo> baseApplicationInfo_;
2418     std::shared_ptr<BundleInfo> baseBundleInfo_;  // applicationInfo and abilityInfo empty
2419 
2420     std::shared_ptr<BundlePackInfo> bundlePackInfo_;
2421     InstallMark mark_;
2422     std::vector<std::string> allowedAcls_;
2423 
2424     // quick fix hqf info
2425     std::vector<HqfInfo> hqfInfos_;
2426 
2427     // overlay bundleInfo
2428     std::vector<OverlayBundleInfo> overlayBundleInfo_;
2429 
2430     // provision metadata
2431     std::vector<Metadata> provisionMetadatas_;
2432 
2433     std::map<std::string, InnerModuleInfo> innerModuleInfos_;
2434 
2435     std::map<std::string, std::vector<FormInfo>> formInfos_;
2436     std::map<std::string, CommonEventInfo> commonEvents_;
2437     std::map<std::string, ShortcutInfo> shortcutInfos_;
2438 
2439     std::map<std::string, InnerAbilityInfo> baseAbilityInfos_;
2440     std::map<std::string, std::vector<Skill>> skillInfos_;
2441 
2442     std::map<std::string, InnerBundleUserInfo> innerBundleUserInfos_;
2443     std::map<std::string, InnerExtensionInfo> baseExtensionInfos_;
2444     std::map<std::string, std::vector<Skill>> extensionSkillInfos_;
2445 
2446     // shared module info
2447     std::map<std::string, std::vector<InnerModuleInfo>> innerSharedModuleInfos_ ;
2448 
2449     // key:moduleName value:ExtendResourceInfo
2450     std::map<std::string, ExtendResourceInfo> extendResourceInfos_;
2451 
2452     // data group info
2453     std::unordered_map<std::string, std::vector<DataGroupInfo>> dataGroupInfos_;
2454 
2455     // pluginBundleName -> pluginBundleInfo
2456     std::unordered_map<std::string, PluginBundleInfo> pluginBundleInfos_;
2457 };
2458 
2459 void from_json(const nlohmann::json &jsonObject, InnerModuleInfo &info);
2460 void from_json(const nlohmann::json &jsonObject, Distro &distro);
2461 void from_json(const nlohmann::json &jsonObject, InstallMark &installMark);
2462 void from_json(const nlohmann::json &jsonObject, DefinePermission &definePermission);
2463 void from_json(const nlohmann::json &jsonObject, Dependency &dependency);
2464 void from_json(const nlohmann::json &jsonObject, OverlayBundleInfo &overlayBundleInfo);
2465 void from_json(const nlohmann::json &jsonObject, ExtendResourceInfo &extendResourceInfo);
2466 void to_json(nlohmann::json &jsonObject, const ExtendResourceInfo &extendResourceInfo);
2467 }  // namespace AppExecFwk
2468 }  // namespace OHOS
2469 #endif  // FOUNDATION_APPEXECFWK_SERVICES_BUNDLEMGR_INCLUDE_INNER_BUNDLE_INFO_H
2470