1 /*
2 * Copyright (c) 2021 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 "main_ability.h"
17 #include "app_log_wrapper.h"
18 #include "test_utils.h"
19
20 namespace OHOS {
21 namespace AppExecFwk {
22 using namespace OHOS::EventFwk;
23 namespace {
24 const int MainAbilityBCode = 300;
25 constexpr int index_f = 0;
26 constexpr int index_s = 1;
27 constexpr int index_t = 2;
28 constexpr int numThree = 3;
29 }
30
Init(const std::shared_ptr<AbilityInfo> & abilityInfo,const std::shared_ptr<OHOSApplication> & application,std::shared_ptr<AbilityHandler> & handler,const sptr<IRemoteObject> & token)31 void MainAbility::Init(const std::shared_ptr<AbilityInfo> &abilityInfo,
32 const std::shared_ptr<OHOSApplication> &application, std::shared_ptr<AbilityHandler> &handler,
33 const sptr<IRemoteObject> &token)
34 {
35 APP_LOGI("MainAbility::Init");
36 Ability::Init(abilityInfo, application, handler, token);
37 }
38
OnStart(const Want & want)39 void MainAbility::OnStart(const Want &want)
40 {
41 APP_LOGI("MainAbility::onStart");
42 SubscribeEvent();
43 Ability::OnStart(want);
44 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB_LIFECYCLE, MainAbilityBCode, "onStart");
45 }
46
OnStop()47 void MainAbility::OnStop()
48 {
49 APP_LOGI("MainAbility::OnStop");
50 Ability::OnStop();
51 CommonEventManager::UnSubscribeCommonEvent(subscriber_);
52 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB_LIFECYCLE, MainAbilityBCode, "OnStop");
53 }
54
OnActive()55 void MainAbility::OnActive()
56 {
57 APP_LOGI("MainAbility::OnActive");
58 Ability::OnActive();
59 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB_LIFECYCLE, MainAbilityBCode, "OnActive");
60 }
61
OnInactive()62 void MainAbility::OnInactive()
63 {
64 APP_LOGI("MainAbility::OnInactive");
65 Ability::OnInactive();
66 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB_LIFECYCLE, MainAbilityBCode, "OnInactive");
67 }
68
OnBackground()69 void MainAbility::OnBackground()
70 {
71 APP_LOGI("MainAbility::OnBackground");
72 Ability::OnBackground();
73 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB_LIFECYCLE, MainAbilityBCode, "OnBackground");
74 }
75
OnForeground(const Want & want)76 void MainAbility::OnForeground(const Want &want)
77 {
78 APP_LOGI("MainAbility::OnForeground");
79 Ability::OnForeground(want);
80 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB_LIFECYCLE, MainAbilityBCode, "OnForeground");
81 }
82
OnAbilityResult(int requestCode,int resultCode,const Want & resultData)83 void MainAbility::OnAbilityResult(int requestCode, int resultCode, const Want &resultData)
84 {
85 APP_LOGI("MainAbility::OnAbilityResult");
86 Ability::OnAbilityResult(requestCode, resultCode, resultData);
87 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB_LIFECYCLE, 0, resultData.ToUri());
88 }
89
OnBackPressed()90 void MainAbility::OnBackPressed()
91 {
92 APP_LOGI("MainAbility::OnBackPressed");
93 Ability::OnBackPressed();
94 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB_LIFECYCLE, 0, "");
95 }
96
OnNewWant(const Want & want)97 void MainAbility::OnNewWant(const Want &want)
98 {
99 APP_LOGI("MainAbility::OnNewWant");
100 Ability::OnNewWant(want);
101 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB_LIFECYCLE, 0, want.ToUri());
102 }
103
~MainAbility()104 MainAbility::~MainAbility()
105 {
106 CommonEventManager::UnSubscribeCommonEvent(subscriber_);
107 }
108
SubscribeEvent()109 void MainAbility::SubscribeEvent()
110 {
111 std::vector<std::string> eventList = {
112 g_EVENT_REQU_FIRSTB,
113 };
114 MatchingSkills matchingSkills;
115 for (const auto &e : eventList) {
116 matchingSkills.AddEvent(e);
117 }
118 CommonEventSubscribeInfo subscribeInfo(matchingSkills);
119 subscribeInfo.SetPriority(1);
120 subscriber_ = std::make_shared<FirstEventSubscriber>(subscribeInfo);
121 subscriber_->mainAbility = this;
122 CommonEventManager::SubscribeCommonEvent(subscriber_);
123 }
124
OnReceiveEvent(const CommonEventData & data)125 void FirstEventSubscriber::OnReceiveEvent(const CommonEventData &data)
126 {
127 APP_LOGI("FirstEventSubscriber::OnReceiveEvent:event=%{public}s", data.GetWant().GetAction().c_str());
128 APP_LOGI("FirstEventSubscriber::OnReceiveEvent:data=%{public}s", data.GetData().c_str());
129 APP_LOGI("FirstEventSubscriber::OnReceiveEvent:code=%{public}d", data.GetCode());
130 auto eventName = data.GetWant().GetAction();
131 if (std::strcmp(eventName.c_str(), g_EVENT_REQU_FIRSTB.c_str()) == 0) {
132 auto target = data.GetData();
133 auto caseInfo = TestUtils::split(target, "_");
134 if (caseInfo.size() < numThree) {
135 return;
136 }
137 if (mapTestFunc_.find(caseInfo[index_f]) != mapTestFunc_.end()) {
138 mapTestFunc_[caseInfo[index_f]](std::stoi(caseInfo[index_s]), std::stoi(caseInfo[index_t]), data.GetCode());
139 } else {
140 APP_LOGI("OnReceiveEvent: CommonEventData error(%{public}s)", target.c_str());
141 }
142 }
143 }
144
TestAbility(int apiIndex,int caseIndex,int code)145 void MainAbility::TestAbility(int apiIndex, int caseIndex, int code)
146 {
147 APP_LOGI("MainAbility::TestAbility");
148 if (mapCase_.find(apiIndex) != mapCase_.end()) {
149 if (caseIndex < (int)mapCase_[apiIndex].size()) {
150 mapCase_[apiIndex][caseIndex](code);
151 }
152 }
153 }
154
GetApplicationInfoCase1(int code)155 void MainAbility::GetApplicationInfoCase1(int code)
156 {
157 return;
158 }
GetApplicationInfoCase2(int code)159 void MainAbility::GetApplicationInfoCase2(int code)
160 {
161 return;
162 }
GetApplicationInfoCase3(int code)163 void MainAbility::GetApplicationInfoCase3(int code)
164 {
165 auto appInfo = AbilityContext::GetApplicationInfo();
166 string result = "";
167 if (appInfo != nullptr) {
168 result = appInfo->name;
169 }
170
171 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, result);
172 }
173
GetCacheDirCase1(int code)174 void MainAbility::GetCacheDirCase1(int code)
175 {
176 return;
177 }
GetCacheDirCase2(int code)178 void MainAbility::GetCacheDirCase2(int code)
179 {
180 return;
181 }
GetCacheDirCase3(int code)182 void MainAbility::GetCacheDirCase3(int code)
183 {
184 string cacheDir = AbilityContext::GetCacheDir();
185 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, cacheDir);
186 }
187
GetDatabaseDirCase1(int code)188 void MainAbility::GetDatabaseDirCase1(int code)
189 {
190 return;
191 }
GetDatabaseDirCase2(int code)192 void MainAbility::GetDatabaseDirCase2(int code)
193 {
194 return;
195 }
GetDatabaseDirCase3(int code)196 void MainAbility::GetDatabaseDirCase3(int code)
197 {
198 string databaseDir = AbilityContext::GetDatabaseDir();
199 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, databaseDir);
200 }
201
GetDataDirCase1(int code)202 void MainAbility::GetDataDirCase1(int code)
203 {
204 return;
205 }
206
GetDataDirCase2(int code)207 void MainAbility::GetDataDirCase2(int code)
208 {
209 return;
210 }
211
GetDataDirCase3(int code)212 void MainAbility::GetDataDirCase3(int code)
213 {
214 string dataDir = AbilityContext::GetDataDir();
215 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, dataDir);
216 }
217
GetDirCase1(int code)218 void MainAbility::GetDirCase1(int code)
219 {
220 return;
221 }
222
GetDirCase2(int code)223 void MainAbility::GetDirCase2(int code)
224 {
225 return;
226 }
227
GetDirCase3(int code)228 void MainAbility::GetDirCase3(int code)
229 {
230 string name = "getDir";
231 string dir = AbilityContext::GetDir(name, 0);
232 dir = AbilityContext::GetDir(name, 0);
233 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, dir);
234 }
235
GetNoBackupFilesDirCase1(int code)236 void MainAbility::GetNoBackupFilesDirCase1(int code)
237 {
238 return;
239 }
240
GetBundleManagerCase1(int code)241 void MainAbility::GetBundleManagerCase1(int code)
242 {
243 return;
244 }
245
VerifyCallingPermissionCase1(int code)246 void MainAbility::VerifyCallingPermissionCase1(int code)
247 {
248 return;
249 }
250
VerifyPermissionCase1(int code)251 void MainAbility::VerifyPermissionCase1(int code)
252 {
253 return;
254 }
255
VerifySelfPermissionCase1(int code)256 void MainAbility::VerifySelfPermissionCase1(int code)
257 {
258 return;
259 }
260
GetBundleCodePathCase1(int code)261 void MainAbility::GetBundleCodePathCase1(int code)
262 {
263 return;
264 }
265
GetBundleCodePathCase2(int code)266 void MainAbility::GetBundleCodePathCase2(int code)
267 {
268 return;
269 }
270
GetBundleCodePathCase3(int code)271 void MainAbility::GetBundleCodePathCase3(int code)
272 {
273 string bundleCodePath = AbilityContext::GetBundleCodePath();
274 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, bundleCodePath);
275 }
276
GetBundleNameCase1(int code)277 void MainAbility::GetBundleNameCase1(int code)
278 {
279 return;
280 }
281
GetBundleNameCase2(int code)282 void MainAbility::GetBundleNameCase2(int code)
283 {
284 return;
285 }
286
GetBundleNameCase3(int code)287 void MainAbility::GetBundleNameCase3(int code)
288 {
289 string bundleName = AbilityContext::GetBundleName();
290 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, bundleName);
291 return;
292 }
293
GetBundleResourcePathCase1(int code)294 void MainAbility::GetBundleResourcePathCase1(int code)
295 {
296 return;
297 }
298
GetBundleResourcePathCase2(int code)299 void MainAbility::GetBundleResourcePathCase2(int code)
300 {
301 return;
302 }
303
GetBundleResourcePathCase3(int code)304 void MainAbility::GetBundleResourcePathCase3(int code)
305 {
306 string bundleResourcePath = AbilityContext::GetBundleResourcePath();
307 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, bundleResourcePath);
308 }
309
CanRequestPermissionCase1(int code)310 void MainAbility::CanRequestPermissionCase1(int code)
311 {
312 return;
313 }
314
GetCallingAbilityCase1(int code)315 void MainAbility::GetCallingAbilityCase1(int code)
316 {
317 return;
318 }
319
GetCallingAbilityCase2(int code)320 void MainAbility::GetCallingAbilityCase2(int code)
321 {
322 auto callingAbility = AbilityContext::GetCallingAbility();
323 string result = "";
324 if (callingAbility != nullptr)
325 result = callingAbility->GetURI();
326 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, result);
327 return;
328 }
329
GetCallingAbilityCase3(int code)330 void MainAbility::GetCallingAbilityCase3(int code)
331 {
332 string targetBundle = "com.ohos.amsst.AppKitA";
333 string targetAbility = "SecondAbility";
334 Want want;
335 want.SetElementName(targetBundle, targetAbility);
336 want.SetParam("operator", 0);
337 StartAbility(want);
338 }
339
GetContextCase1(int code)340 void MainAbility::GetContextCase1(int code)
341 {
342 return;
343 }
344
GetAbilityManagerCase1(int code)345 void MainAbility::GetAbilityManagerCase1(int code)
346 {
347 return;
348 }
349
GetProcessInfoCase1(int code)350 void MainAbility::GetProcessInfoCase1(int code)
351 {
352 return;
353 }
354
GetProcessInfoCase2(int code)355 void MainAbility::GetProcessInfoCase2(int code)
356 {
357 return;
358 }
359
GetProcessInfoCase3(int code)360 void MainAbility::GetProcessInfoCase3(int code)
361 {
362 auto processInfo = AbilityContext::GetProcessInfo();
363 string result = "";
364 if (processInfo != nullptr) {
365 result = processInfo->GetProcessName();
366 }
367
368 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, result);
369 }
370
GetAppTypeCase1(int code)371 void MainAbility::GetAppTypeCase1(int code)
372 {
373 return;
374 }
375
GetAppTypeCase2(int code)376 void MainAbility::GetAppTypeCase2(int code)
377 {
378 return;
379 }
380
GetAppTypeCase3(int code)381 void MainAbility::GetAppTypeCase3(int code)
382 {
383 string appType = AbilityContext::GetAppType();
384 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, appType);
385 }
386
GetCallingBundleCase1(int code)387 void MainAbility::GetCallingBundleCase1(int code)
388 {
389 return;
390 }
391
GetCallingBundleCase2(int code)392 void MainAbility::GetCallingBundleCase2(int code)
393 {
394 string callingBundle = AbilityContext::GetCallingBundle();
395 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, callingBundle);
396 }
397
GetCallingBundleCase3(int code)398 void MainAbility::GetCallingBundleCase3(int code)
399 {
400 string targetBundle = "com.ohos.amsst.AppKitA";
401 string targetAbility = "SecondAbility";
402 Want want;
403 want.SetElementName(targetBundle, targetAbility);
404 want.SetParam("operator", 0);
405 StartAbility(want);
406 }
407
StartAbilityCase1(int code)408 void MainAbility::StartAbilityCase1(int code)
409 {
410 return;
411 }
412
StartAbilityCase2(int code)413 void MainAbility::StartAbilityCase2(int code)
414 {
415 return;
416 }
417
TerminateAbilityCase1(int code)418 void MainAbility::TerminateAbilityCase1(int code)
419 {
420 return;
421 }
422
GetElementNameCase1(int code)423 void MainAbility::GetElementNameCase1(int code)
424 {
425 return;
426 }
427
GetElementNameCase2(int code)428 void MainAbility::GetElementNameCase2(int code)
429 {
430 return;
431 }
432
GetElementNameCase3(int code)433 void MainAbility::GetElementNameCase3(int code)
434 {
435 auto elementName = AbilityContext::GetElementName();
436 string result = "";
437 if (elementName != nullptr)
438 result = elementName->GetBundleName();
439 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, result);
440 }
441
GetHapModuleInfoCase1(int code)442 void MainAbility::GetHapModuleInfoCase1(int code)
443 {
444 return;
445 }
446
GetHapModuleInfoCase2(int code)447 void MainAbility::GetHapModuleInfoCase2(int code)
448 {
449 return;
450 }
451
GetHapModuleInfoCase3(int code)452 void MainAbility::GetHapModuleInfoCase3(int code)
453 {
454 auto elementName = AbilityContext::GetHapModuleInfo();
455 string result = "";
456 if (elementName != nullptr)
457 result = elementName->moduleName;
458 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, result);
459 }
460
GetCodeCacheDirCase1(int code)461 void MainAbility::GetCodeCacheDirCase1(int code)
462 {}
GetCodeCacheDirCase2(int code)463 void MainAbility::GetCodeCacheDirCase2(int code)
464 {}
GetCodeCacheDirCase3(int code)465 void MainAbility::GetCodeCacheDirCase3(int code)
466 {
467 string codeCacheDir = AbilityContext::GetCodeCacheDir();
468 TestUtils::PublishEvent(g_EVENT_RESP_FIRSTB, code, codeCacheDir);
469 }
470
GetApplicationContextCase1(int code)471 void MainAbility::GetApplicationContextCase1(int code)
472 {}
473
474 REGISTER_AA(MainAbility)
475 } // namespace AppExecFwk
476 } // namespace OHOS
477