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