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