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 "second_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 SecondAbilityACode = 200;
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 SecondAbility::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("SecondAbility::Init");
36 Ability::Init(abilityInfo, application, handler, token);
37 }
38
~SecondAbility()39 SecondAbility::~SecondAbility()
40 {
41 CommonEventManager::UnSubscribeCommonEvent(subscriber_);
42 }
43
OnStart(const Want & want)44 void SecondAbility::OnStart(const Want &want)
45 {
46 APP_LOGI("SecondAbility::onStart");
47 SubscribeEvent();
48 Ability::OnStart(want);
49 TestUtils::PublishEvent(g_EVENT_RESP_SECOND_LIFECYCLE, SecondAbilityACode, "onStart");
50 }
51
OnStop()52 void SecondAbility::OnStop()
53 {
54 APP_LOGI("SecondAbility::OnStop");
55 Ability::OnStop();
56 CommonEventManager::UnSubscribeCommonEvent(subscriber_);
57 TestUtils::PublishEvent(g_EVENT_RESP_SECOND_LIFECYCLE, SecondAbilityACode, "OnStop");
58 }
59
OnActive()60 void SecondAbility::OnActive()
61 {
62 APP_LOGI("SecondAbility::OnActive");
63 Ability::OnActive();
64 TestUtils::PublishEvent(g_EVENT_RESP_SECOND_LIFECYCLE, SecondAbilityACode, "OnActive");
65 }
66
OnInactive()67 void SecondAbility::OnInactive()
68 {
69 APP_LOGI("SecondAbility::OnInactive");
70 Ability::OnInactive();
71 TestUtils::PublishEvent(g_EVENT_RESP_SECOND_LIFECYCLE, SecondAbilityACode, "OnInactive");
72 }
73
OnBackground()74 void SecondAbility::OnBackground()
75 {
76 APP_LOGI("SecondAbility::OnBackground");
77 Ability::OnBackground();
78 TestUtils::PublishEvent(g_EVENT_RESP_SECOND_LIFECYCLE, SecondAbilityACode, "OnBackground");
79 }
80
OnForeground(const Want & want)81 void SecondAbility::OnForeground(const Want &want)
82 {
83 APP_LOGI("SecondAbility::OnForeground");
84 Ability::OnForeground(want);
85 TestUtils::PublishEvent(g_EVENT_RESP_SECOND_LIFECYCLE, SecondAbilityACode, "OnForeground");
86 }
87
OnAbilityResult(int requestCode,int resultCode,const Want & resultData)88 void SecondAbility::OnAbilityResult(int requestCode, int resultCode, const Want &resultData)
89 {
90 APP_LOGI("SecondAbility::OnAbilityResult");
91 Ability::OnAbilityResult(requestCode, resultCode, resultData);
92 TestUtils::PublishEvent(g_EVENT_RESP_SECOND_LIFECYCLE, 0, resultData.ToUri());
93 }
94
OnBackPressed()95 void SecondAbility::OnBackPressed()
96 {
97 APP_LOGI("SecondAbility::OnBackPressed");
98 Ability::OnBackPressed();
99 TestUtils::PublishEvent(g_EVENT_RESP_SECOND_LIFECYCLE, 0, "");
100 }
101
OnNewWant(const Want & want)102 void SecondAbility::OnNewWant(const Want &want)
103 {
104 APP_LOGI("SecondAbility::OnNewWant");
105 Ability::OnNewWant(want);
106 TestUtils::PublishEvent(g_EVENT_RESP_SECOND_LIFECYCLE, 0, want.ToUri());
107 }
108
SubscribeEvent()109 void SecondAbility::SubscribeEvent()
110 {
111 std::vector<std::string> eventList = {
112 g_EVENT_REQU_SECOND,
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<SecondEventSubscriber>(subscribeInfo);
121 subscriber_->mainAbility = this;
122 CommonEventManager::SubscribeCommonEvent(subscriber_);
123 }
124
OnReceiveEvent(const CommonEventData & data)125 void SecondEventSubscriber::OnReceiveEvent(const CommonEventData &data)
126 {
127 APP_LOGI("SecondEventSubscriber::OnReceiveEvent:event=%{public}s", data.GetWant().GetAction().c_str());
128 APP_LOGI("SecondEventSubscriber::OnReceiveEvent:data=%{public}s", data.GetData().c_str());
129 APP_LOGI("SecondEventSubscriber::OnReceiveEvent:code=%{public}d", data.GetCode());
130 auto eventName = data.GetWant().GetAction();
131 if (std::strcmp(eventName.c_str(), g_EVENT_REQU_SECOND.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 SecondAbility::TestAbility(int apiIndex, int caseIndex, int code)
146 {
147 APP_LOGI("SecondAbility::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 SecondAbility::GetApplicationInfoCase1(int code)
156 {}
GetApplicationInfoCase2(int code)157 void SecondAbility::GetApplicationInfoCase2(int code)
158 {
159 auto appInfo = AbilityContext::GetApplicationInfo();
160 string result = "";
161 if (appInfo != nullptr) {
162 result = appInfo->name;
163 }
164
165 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, result);
166 }
GetApplicationInfoCase3(int code)167 void SecondAbility::GetApplicationInfoCase3(int code)
168 {}
169
GetCacheDirCase1(int code)170 void SecondAbility::GetCacheDirCase1(int code)
171 {}
GetCacheDirCase2(int code)172 void SecondAbility::GetCacheDirCase2(int code)
173 {
174 string cacheDir = AbilityContext::GetCacheDir();
175 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, cacheDir);
176 }
GetCacheDirCase3(int code)177 void SecondAbility::GetCacheDirCase3(int code)
178 {}
179
GetDatabaseDirCase1(int code)180 void SecondAbility::GetDatabaseDirCase1(int code)
181 {}
GetDatabaseDirCase2(int code)182 void SecondAbility::GetDatabaseDirCase2(int code)
183 {
184 string databaseDir = AbilityContext::GetDatabaseDir();
185 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, databaseDir);
186 }
GetDatabaseDirCase3(int code)187 void SecondAbility::GetDatabaseDirCase3(int code)
188 {}
189
GetDataDirCase1(int code)190 void SecondAbility::GetDataDirCase1(int code)
191 {}
192
GetDataDirCase2(int code)193 void SecondAbility::GetDataDirCase2(int code)
194 {
195 string dataDir = AbilityContext::GetDataDir();
196 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, dataDir);
197 }
198
GetDataDirCase3(int code)199 void SecondAbility::GetDataDirCase3(int code)
200 {}
201
GetDirCase1(int code)202 void SecondAbility::GetDirCase1(int code)
203 {}
204
GetDirCase2(int code)205 void SecondAbility::GetDirCase2(int code)
206 {
207 string name = "getDir";
208 string dir = AbilityContext::GetDir(name, 0);
209 dir = AbilityContext::GetDir(name, 0);
210 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, dir);
211 }
212
GetDirCase3(int code)213 void SecondAbility::GetDirCase3(int code)
214 {}
215
GetNoBackupFilesDirCase1(int code)216 void SecondAbility::GetNoBackupFilesDirCase1(int code)
217 {}
218
GetBundleManagerCase1(int code)219 void SecondAbility::GetBundleManagerCase1(int code)
220 {}
221
VerifyCallingPermissionCase1(int code)222 void SecondAbility::VerifyCallingPermissionCase1(int code)
223 {}
224
VerifyPermissionCase1(int code)225 void SecondAbility::VerifyPermissionCase1(int code)
226 {}
227
VerifySelfPermissionCase1(int code)228 void SecondAbility::VerifySelfPermissionCase1(int code)
229 {}
230
GetBundleCodePathCase1(int code)231 void SecondAbility::GetBundleCodePathCase1(int code)
232 {}
233
GetBundleCodePathCase2(int code)234 void SecondAbility::GetBundleCodePathCase2(int code)
235 {
236 string bundleCodePath = AbilityContext::GetBundleCodePath();
237 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, bundleCodePath);
238 }
239
GetBundleCodePathCase3(int code)240 void SecondAbility::GetBundleCodePathCase3(int code)
241 {}
242
GetBundleNameCase1(int code)243 void SecondAbility::GetBundleNameCase1(int code)
244 {}
245
GetBundleNameCase2(int code)246 void SecondAbility::GetBundleNameCase2(int code)
247 {
248 string bundleName = AbilityContext::GetBundleName();
249 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, bundleName);
250 }
251
GetBundleNameCase3(int code)252 void SecondAbility::GetBundleNameCase3(int code)
253 {}
254
GetBundleResourcePathCase1(int code)255 void SecondAbility::GetBundleResourcePathCase1(int code)
256 {}
257
GetBundleResourcePathCase2(int code)258 void SecondAbility::GetBundleResourcePathCase2(int code)
259 {
260 string bundleResourcePath = AbilityContext::GetBundleResourcePath();
261 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, bundleResourcePath);
262 }
263
GetBundleResourcePathCase3(int code)264 void SecondAbility::GetBundleResourcePathCase3(int code)
265 {}
266
CanRequestPermissionCase1(int code)267 void SecondAbility::CanRequestPermissionCase1(int code)
268 {}
269
GetCallingAbilityCase1(int code)270 void SecondAbility::GetCallingAbilityCase1(int code)
271 {
272 auto callingAbility = AbilityContext::GetCallingAbility();
273 string result = "";
274 if (callingAbility != nullptr)
275 result = callingAbility->GetURI();
276 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, result);
277 }
278
GetCallingAbilityCase2(int code)279 void SecondAbility::GetCallingAbilityCase2(int code)
280 {
281 auto callingAbility = AbilityContext::GetCallingAbility();
282 string result = "";
283 if (callingAbility != nullptr)
284 result = callingAbility->GetURI();
285 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, result);
286 }
287
GetCallingAbilityCase3(int code)288 void SecondAbility::GetCallingAbilityCase3(int code)
289 {
290 auto callingAbility = AbilityContext::GetCallingAbility();
291 string result = "";
292 if (callingAbility != nullptr && (callingTime == 0 || callingTime == code)) {
293 callingTime = code;
294 result = callingAbility->GetURI();
295 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, result);
296 }
297 }
298
GetContextCase1(int code)299 void SecondAbility::GetContextCase1(int code)
300 {}
301
GetAbilityManagerCase1(int code)302 void SecondAbility::GetAbilityManagerCase1(int code)
303 {}
304
GetProcessInfoCase1(int code)305 void SecondAbility::GetProcessInfoCase1(int code)
306 {}
307
GetProcessInfoCase2(int code)308 void SecondAbility::GetProcessInfoCase2(int code)
309 {
310 auto processInfo = AbilityContext::GetProcessInfo();
311 string result = "";
312 if (processInfo != nullptr) {
313 result = processInfo->GetProcessName();
314 }
315
316 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, result);
317 }
318
GetProcessInfoCase3(int code)319 void SecondAbility::GetProcessInfoCase3(int code)
320 {}
321
GetAppTypeCase1(int code)322 void SecondAbility::GetAppTypeCase1(int code)
323 {}
324
GetAppTypeCase2(int code)325 void SecondAbility::GetAppTypeCase2(int code)
326 {
327 string appType = AbilityContext::GetAppType();
328 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, appType);
329 }
330
GetAppTypeCase3(int code)331 void SecondAbility::GetAppTypeCase3(int code)
332 {}
333
GetCallingBundleCase1(int code)334 void SecondAbility::GetCallingBundleCase1(int code)
335 {
336 string callingBundle = AbilityContext::GetCallingBundle();
337 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, callingBundle);
338 }
339
GetCallingBundleCase2(int code)340 void SecondAbility::GetCallingBundleCase2(int code)
341 {
342 string callingBundle = AbilityContext::GetCallingBundle();
343 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, callingBundle);
344 }
345
GetCallingBundleCase3(int code)346 void SecondAbility::GetCallingBundleCase3(int code)
347 {
348 string callingBundle = "";
349 if (callingTime == 0 || callingTime == code) {
350 callingTime = code;
351 callingBundle = AbilityContext::GetCallingBundle();
352 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, callingBundle);
353 }
354 }
355
StartAbilityCase1(int code)356 void SecondAbility::StartAbilityCase1(int code)
357 {}
358
StartAbilityCase2(int code)359 void SecondAbility::StartAbilityCase2(int code)
360 {}
361
TerminateAbilityCase1(int code)362 void SecondAbility::TerminateAbilityCase1(int code)
363 {}
364
GetElementNameCase1(int code)365 void SecondAbility::GetElementNameCase1(int code)
366 {}
367
GetElementNameCase2(int code)368 void SecondAbility::GetElementNameCase2(int code)
369 {
370 auto elementName = AbilityContext::GetElementName();
371 string result = "";
372 if (elementName != nullptr)
373 result = elementName->GetBundleName();
374 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, result);
375 }
376
GetElementNameCase3(int code)377 void SecondAbility::GetElementNameCase3(int code)
378 {}
379
GetHapModuleInfoCase1(int code)380 void SecondAbility::GetHapModuleInfoCase1(int code)
381 {}
382
GetHapModuleInfoCase2(int code)383 void SecondAbility::GetHapModuleInfoCase2(int code)
384 {
385 auto elementName = AbilityContext::GetHapModuleInfo();
386 string result = "";
387 if (elementName != nullptr)
388 result = elementName->moduleName;
389 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, result);
390 }
391
GetHapModuleInfoCase3(int code)392 void SecondAbility::GetHapModuleInfoCase3(int code)
393 {}
394
GetCodeCacheDirCase1(int code)395 void SecondAbility::GetCodeCacheDirCase1(int code)
396 {}
GetCodeCacheDirCase2(int code)397 void SecondAbility::GetCodeCacheDirCase2(int code)
398 {
399 string codeCacheDir = AbilityContext::GetCodeCacheDir();
400 TestUtils::PublishEvent(g_EVENT_RESP_SECOND, code, codeCacheDir);
401 }
GetCodeCacheDirCase3(int code)402 void SecondAbility::GetCodeCacheDirCase3(int code)
403 {}
404
GetApplicationContextCase1(int code)405 void SecondAbility::GetApplicationContextCase1(int code)
406 {}
407
408 REGISTER_AA(SecondAbility)
409 } // namespace AppExecFwk
410 } // namespace OHOS
411