1 /*
2 * Copyright (c) 2021-2022 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 #include "mock_bundle_mgr.h"
17 #include "ability_info.h"
18 #include "application_info.h"
19 #include "ability_config.h"
20 using namespace OHOS::AAFwk;
21
22 namespace OHOS {
23 namespace AppExecFwk {
24 namespace {
25 const int32_t ERROR_USER_ID_U256 = 256;
26 }
27
QueryWantAbility(const AAFwk::Want & want,std::vector<AbilityInfo> & abilityInfos)28 int BundleMgrProxy::QueryWantAbility(
29 const AAFwk::Want& __attribute__((unused)) want, std::vector<AbilityInfo>& __attribute__((unused)) abilityInfos)
30 {
31 return 0;
32 }
33
QueryAbilityInfo(const AAFwk::Want & want,AbilityInfo & abilityInfo)34 bool BundleMgrProxy::QueryAbilityInfo(const AAFwk::Want& want, AbilityInfo& abilityInfo)
35 {
36 ElementName eleName = want.GetElement();
37 if (eleName.GetBundleName().empty()) {
38 return false;
39 }
40 abilityInfo.visible = true;
41 abilityInfo.name = eleName.GetAbilityName();
42 abilityInfo.bundleName = eleName.GetBundleName();
43 abilityInfo.applicationName = eleName.GetAbilityName() + "App";
44 if (abilityInfo.bundleName != "com.ix.hiworld") {
45 abilityInfo.applicationInfo.isLauncherApp = false;
46 }
47 return true;
48 }
49
GetBundleInfo(const std::string & bundleName,const BundleFlag flag,BundleInfo & bundleInfo,int32_t userId)50 bool BundleMgrProxy::GetBundleInfo(
51 const std::string& bundleName, const BundleFlag flag, BundleInfo& bundleInfo, int32_t userId)
52 {
53 return true;
54 }
55
GetApplicationInfo(const std::string & appName,const ApplicationFlag flag,const int userId,ApplicationInfo & appInfo)56 bool BundleMgrProxy::GetApplicationInfo(
57 const std::string& appName, const ApplicationFlag flag, const int userId, ApplicationInfo& appInfo)
58 {
59 if (appName.empty()) {
60 return false;
61 }
62 appInfo.name = "Helloworld";
63 appInfo.bundleName = "com.ix.hiworld";
64 return true;
65 }
66
OnRemoteRequest(uint32_t code,MessageParcel & data,MessageParcel & reply,MessageOption & option)67 int BundleMgrStub::OnRemoteRequest(uint32_t code, MessageParcel& data, MessageParcel& reply, MessageOption& option)
68 {
69 return 0;
70 }
71
GetBundleInfo(const std::string & bundleName,const BundleFlag flag,BundleInfo & bundleInfo,int32_t userId)72 bool BundleMgrService::GetBundleInfo(
73 const std::string& bundleName, const BundleFlag flag, BundleInfo& bundleInfo, int32_t userId)
74 {
75 bundleInfo.uid = 0;
76 return true;
77 }
78
QueryAbilityInfo(const AAFwk::Want & want,int32_t flags,int32_t userId,AbilityInfo & abilityInfo)79 bool BundleMgrService::QueryAbilityInfo(const AAFwk::Want& want, int32_t flags, int32_t userId,
80 AbilityInfo& abilityInfo)
81 {
82 auto flag = QueryAbilityInfo(want, abilityInfo);
83 if (userId == ERROR_USER_ID_U256) {
84 abilityInfo.applicationInfo.singleton = false;
85 }
86 return flag;
87 }
88
QueryAbilityInfo(const AAFwk::Want & want,AbilityInfo & abilityInfo)89 bool BundleMgrService::QueryAbilityInfo(const AAFwk::Want& want, AbilityInfo& abilityInfo)
90 {
91 if (CheckWantEntity(want, abilityInfo)) {
92 return true;
93 }
94
95 ElementName elementTemp = want.GetElement();
96 std::string abilityNameTemp = elementTemp.GetAbilityName();
97 std::string bundleNameTemp = elementTemp.GetBundleName();
98 abilityInfo.deviceId = elementTemp.GetDeviceID();
99 abilityInfo.visible = true;
100
101 if (bundleNameTemp.empty() || abilityNameTemp.empty()) {
102 return false;
103 }
104
105 auto fun = abilityInfoMap_.find(bundleNameTemp);
106 if (fun != abilityInfoMap_.end()) {
107 auto call = fun->second;
108 if (call) {
109 call(bundleNameTemp, abilityInfo, elementTemp);
110 return true;
111 }
112 }
113 if (std::string::npos != elementTemp.GetBundleName().find("Service")) {
114 abilityInfo.type = AppExecFwk::AbilityType::SERVICE;
115 }
116 if (std::string::npos != elementTemp.GetBundleName().find("Data")) {
117 abilityInfo.type = AppExecFwk::AbilityType::DATA;
118 }
119 if (std::string::npos != elementTemp.GetBundleName().find("Extension")) {
120 abilityInfo.type = AppExecFwk::AbilityType::EXTENSION;
121 }
122 abilityInfo.name = elementTemp.GetAbilityName();
123 abilityInfo.bundleName = elementTemp.GetBundleName();
124 abilityInfo.applicationName = elementTemp.GetBundleName();
125 abilityInfo.deviceId = elementTemp.GetDeviceID();
126 abilityInfo.applicationInfo.bundleName = elementTemp.GetBundleName();
127 abilityInfo.applicationInfo.name = "hello";
128 if (want.HasEntity(Want::ENTITY_HOME) && want.GetAction() == Want::ACTION_HOME) {
129 abilityInfo.applicationInfo.isLauncherApp = true;
130 } else {
131 abilityInfo.applicationInfo.isLauncherApp = false;
132 abilityInfo.applicationInfo.iconPath = "icon path";
133 abilityInfo.applicationInfo.label = "app label";
134 }
135 return true;
136 }
137
GetApplicationInfo(const std::string & appName,const ApplicationFlag flag,const int userId,ApplicationInfo & appInfo)138 bool BundleMgrService::GetApplicationInfo(
139 const std::string& appName, const ApplicationFlag flag, const int userId, ApplicationInfo& appInfo)
140 {
141 appInfo.name = appName;
142 appInfo.bundleName = appName;
143 appInfo.uid = userId * BASE_USER_RANGE;
144 return true;
145 }
146
CheckWantEntity(const AAFwk::Want & want,AbilityInfo & abilityInfo)147 bool BundleMgrService::CheckWantEntity(const AAFwk::Want& want, AbilityInfo& abilityInfo)
148 {
149 auto entityVector = want.GetEntities();
150 ElementName element = want.GetElement();
151
152 auto find = false;
153 // filter ams onstart
154 for (const auto& entity : entityVector) {
155 if (entity == Want::FLAG_HOME_INTENT_FROM_SYSTEM && element.GetAbilityName().empty() &&
156 element.GetBundleName().empty()) {
157 find = true;
158 break;
159 }
160 }
161
162 auto bundleName = element.GetBundleName();
163 auto abilityName = element.GetAbilityName();
164 if (find || (bundleName == AbilityConfig::SYSTEM_UI_BUNDLE_NAME &&
165 (abilityName == AbilityConfig::SYSTEM_UI_STATUS_BAR ||
166 abilityName == AbilityConfig::SYSTEM_UI_NAVIGATION_BAR))) {
167 return true;
168 }
169
170 return false;
171 }
172
ImplicitQueryInfos(const Want & want,int32_t flags,int32_t userId,bool withDefault,std::vector<AbilityInfo> & abilityInfos,std::vector<ExtensionAbilityInfo> & extensionInfos)173 bool BundleMgrService::ImplicitQueryInfos(const Want& want, int32_t flags, int32_t userId, bool withDefault,
174 std::vector<AbilityInfo>& abilityInfos, std::vector<ExtensionAbilityInfo>& extensionInfos)
175 {
176 if (want.GetAction() == "ohos.want.action.viewData") {
177 auto num = want.GetIntParam("numMock", 0);
178 if (num == 0) {
179 return true;
180 }
181 for (auto i = 0; i < num; i++) {
182 AbilityInfo info;
183 int labelId = 1;
184 int iconId = 1;
185 info.name = "abilitySelector" + std::to_string(i);
186 info.bundleName = "com.test.selector";
187 info.labelId = labelId++;
188 info.iconId = iconId++;
189 abilityInfos.push_back(info);
190 }
191 }
192 return true;
193 }
194 } // namespace AppExecFwk
195 } // namespace OHOS
196