• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "ohos_application.h"
17 #include "application_impl.h"
18 #include "ability_record_mgr.h"
19 #include "app_loader.h"
20 #include "app_log_wrapper.h"
21 #include "iservice_registry.h"
22 #include "system_ability_definition.h"
23 
24 namespace OHOS {
25 namespace AppExecFwk {
26 
REGISTER_APPLICATION(OHOSApplication,OHOSApplication)27 REGISTER_APPLICATION(OHOSApplication, OHOSApplication)
28 
29 OHOSApplication::OHOSApplication()
30 {
31     abilityLifecycleCallbacks_.clear();
32     elementsCallbacks_.clear();
33 }
34 
35 /**
36  *
37  * @brief Called when Ability#onSaveAbilityState(PacMap) was called on an ability.
38  *
39  * @param outState Indicates the PacMap object passed to Ability#onSaveAbilityState(PacMap)
40  * for storing user data and states. This parameter cannot be null.
41  */
42 
DispatchAbilitySavedState(const PacMap & outState)43 void OHOSApplication::DispatchAbilitySavedState(const PacMap &outState)
44 {
45     APP_LOGI("OHOSApplication::dispatchAbilitySavedState: called");
46     for (auto callback : abilityLifecycleCallbacks_) {
47         if (callback != nullptr) {
48             callback->OnAbilitySaveState(outState);
49         }
50     }
51 }
52 
53 /**
54  *
55  * @brief Will be called the application foregrounds
56  *
57  */
OnForeground()58 void OHOSApplication::OnForeground()
59 {}
60 
61 /**
62  *
63  * @brief Will be called the application backgrounds
64  *
65  */
OnBackground()66 void OHOSApplication::OnBackground()
67 {}
68 
DumpApplication()69 void OHOSApplication::DumpApplication()
70 {
71     APP_LOGD("OHOSApplication::Dump called");
72     // create and initialize abilityInfos
73     std::shared_ptr<AbilityInfo> abilityInfo = nullptr;
74     std::shared_ptr<AbilityLocalRecord> record = nullptr;
75 
76     if (abilityRecordMgr_) {
77         record = abilityRecordMgr_->GetAbilityItem(abilityRecordMgr_->GetToken());
78     }
79 
80     if (record) {
81         abilityInfo = record->GetAbilityInfo();
82     }
83 
84     if (abilityInfo) {
85         APP_LOGD("==============AbilityInfo==============");
86         APP_LOGD("abilityInfo: package: %{public}s", abilityInfo->package.c_str());
87         APP_LOGD("abilityInfo: name: %{public}s", abilityInfo->name.c_str());
88         APP_LOGD("abilityInfo: label: %{public}s", abilityInfo->label.c_str());
89         APP_LOGD("abilityInfo: description: %{public}s", abilityInfo->description.c_str());
90         APP_LOGD("abilityInfo: iconPath: %{public}s", abilityInfo->iconPath.c_str());
91         APP_LOGD("abilityInfo: visible: %{public}d", abilityInfo->visible);
92         APP_LOGD("abilityInfo: kind: %{public}s", abilityInfo->kind.c_str());
93         APP_LOGD("abilityInfo: type: %{public}d", abilityInfo->type);
94         APP_LOGD("abilityInfo: orientation: %{public}d", abilityInfo->orientation);
95         APP_LOGD("abilityInfo: launchMode: %{public}d", abilityInfo->launchMode);
96         for (auto permission : abilityInfo->permissions) {
97             APP_LOGD("abilityInfo: permission: %{public}s", permission.c_str());
98         }
99         APP_LOGD("abilityInfo: bundleName: %{public}s", abilityInfo->bundleName.c_str());
100         APP_LOGD("abilityInfo: applicationName: %{public}s", abilityInfo->applicationName.c_str());
101     }
102 
103     // create and initialize applicationInfo
104     APP_LOGD("==============applicationInfo==============");
105     std::shared_ptr<ApplicationInfo> applicationInfoPtr = GetApplicationInfo();
106     if (applicationInfoPtr != nullptr) {
107         APP_LOGD("applicationInfo: name: %{public}s", applicationInfoPtr->name.c_str());
108         APP_LOGD("applicationInfo: bundleName: %{public}s", applicationInfoPtr->bundleName.c_str());
109         APP_LOGD("applicationInfo: signatureKey: %{public}s", applicationInfoPtr->signatureKey.c_str());
110     }
111 }
112 
113 /**
114  *
115  * @brief Set the abilityRecordMgr to the OHOSApplication.
116  *
117  * @param abilityRecordMgr
118  */
SetAbilityRecordMgr(const std::shared_ptr<AbilityRecordMgr> & abilityRecordMgr)119 void OHOSApplication::SetAbilityRecordMgr(const std::shared_ptr<AbilityRecordMgr> &abilityRecordMgr)
120 {
121     APP_LOGI("OHOSApplication::SetAbilityRecordMgr. Start");
122     if (abilityRecordMgr == nullptr) {
123         APP_LOGE("ContextDeal::SetAbilityRecordMgr failed, abilityRecordMgr is nullptr");
124         return;
125     }
126     abilityRecordMgr_ = abilityRecordMgr;
127     APP_LOGI("OHOSApplication::SetAbilityRecordMgr. End");
128 }
129 
130 /**
131  *
132  * Register AbilityLifecycleCallbacks with OHOSApplication
133  *
134  * @param callBack callBack When the life cycle of the ability in the application changes,
135  */
RegisterAbilityLifecycleCallbacks(const std::shared_ptr<AbilityLifecycleCallbacks> & callBack)136 void OHOSApplication::RegisterAbilityLifecycleCallbacks(const std::shared_ptr<AbilityLifecycleCallbacks> &callBack)
137 {
138     APP_LOGI("OHOSApplication::RegisterAbilityLifecycleCallbacks: called");
139 
140     if (callBack == nullptr) {
141         APP_LOGI("OHOSApplication::RegisterAbilityLifecycleCallbacks: observer is null");
142         return;
143     }
144 
145     abilityLifecycleCallbacks_.emplace_back(callBack);
146 }
147 
148 /**
149  *
150  * Unregister AbilityLifecycleCallbacks with OHOSApplication
151  *
152  * @param callBack RegisterAbilityLifecycleCallbacks`s callBack
153  */
UnregisterAbilityLifecycleCallbacks(const std::shared_ptr<AbilityLifecycleCallbacks> & callBack)154 void OHOSApplication::UnregisterAbilityLifecycleCallbacks(const std::shared_ptr<AbilityLifecycleCallbacks> &callBack)
155 {
156     APP_LOGI("OHOSApplication::UnregisterAbilityLifecycleCallbacks: called");
157 
158     if (callBack == nullptr) {
159         APP_LOGI("OHOSApplication::UnregisterAbilityLifecycleCallbacks: observer is null");
160         return;
161     }
162 
163     abilityLifecycleCallbacks_.remove(callBack);
164 }
165 
166 /**
167  *
168  * Will be called when the given ability calls Ability->onStart
169  *
170  * @param Ability Indicates the ability object that calls the onStart() method.
171  */
OnAbilityStart(const std::shared_ptr<Ability> & ability)172 void OHOSApplication::OnAbilityStart(const std::shared_ptr<Ability> &ability)
173 {
174     if (ability == nullptr) {
175         APP_LOGE("ContextDeal::OnAbilityStart failed, ability is nullptr");
176         return;
177     }
178 
179     APP_LOGI("OHOSApplication::OnAbilityStart: called");
180     for (auto callback : abilityLifecycleCallbacks_) {
181         if (callback != nullptr) {
182             callback->OnAbilityStart(ability);
183         }
184     }
185 }
186 
187 /**
188  *
189  * Will be called when the given ability calls Ability->onInactive
190  *
191  * @param Ability Indicates the Ability object that calls the onInactive() method.
192  */
OnAbilityInactive(const std::shared_ptr<Ability> & ability)193 void OHOSApplication::OnAbilityInactive(const std::shared_ptr<Ability> &ability)
194 {
195     if (ability == nullptr) {
196         APP_LOGE("ContextDeal::OnAbilityInactive failed, ability is nullptr");
197         return;
198     }
199 
200     APP_LOGI("OHOSApplication::OnAbilityInactive: called");
201     for (auto callback : abilityLifecycleCallbacks_) {
202         if (callback != nullptr) {
203             callback->OnAbilityInactive(ability);
204         }
205     }
206 }
207 
208 /**
209  *
210  * Will be called when the given ability calls Ability->onBackground
211  *
212  * @param Ability Indicates the Ability object that calls the onBackground() method.
213  */
OnAbilityBackground(const std::shared_ptr<Ability> & ability)214 void OHOSApplication::OnAbilityBackground(const std::shared_ptr<Ability> &ability)
215 {
216     if (ability == nullptr) {
217         APP_LOGE("ContextDeal::OnAbilityBackground failed, ability is nullptr");
218         return;
219     }
220 
221     APP_LOGI("OHOSApplication::OnAbilityBackground: called");
222     for (auto callback : abilityLifecycleCallbacks_) {
223         if (callback != nullptr) {
224             callback->OnAbilityBackground(ability);
225         }
226     }
227 }
228 
229 /**
230  *
231  * Will be called when the given ability calls Ability->onForeground
232  *
233  * @param Ability Indicates the Ability object that calls the onForeground() method.
234  */
OnAbilityForeground(const std::shared_ptr<Ability> & ability)235 void OHOSApplication::OnAbilityForeground(const std::shared_ptr<Ability> &ability)
236 {
237     if (ability == nullptr) {
238         APP_LOGE("ContextDeal::OnAbilityForeground failed, ability is nullptr");
239         return;
240     }
241 
242     APP_LOGI("OHOSApplication::OnAbilityForeground: called");
243     for (auto callback : abilityLifecycleCallbacks_) {
244         if (callback != nullptr) {
245             callback->OnAbilityForeground(ability);
246         }
247     }
248 }
249 
250 /**
251  *
252  * Will be called when the given ability calls Ability->onActive
253  *
254  * @param Ability Indicates the Ability object that calls the onActive() method.
255  */
OnAbilityActive(const std::shared_ptr<Ability> & ability)256 void OHOSApplication::OnAbilityActive(const std::shared_ptr<Ability> &ability)
257 {
258     if (ability == nullptr) {
259         APP_LOGE("ContextDeal::OnAbilityActive failed, ability is nullptr");
260         return;
261     }
262 
263     APP_LOGI("OHOSApplication::OnAbilityActive: called");
264     for (auto callback : abilityLifecycleCallbacks_) {
265         if (callback != nullptr) {
266             callback->OnAbilityActive(ability);
267         }
268     }
269 }
270 
271 /**
272  *
273  * Will be called when the given ability calls Ability->onStop
274  *
275  * @param Ability Indicates the Ability object that calls the onStop() method.
276  */
OnAbilityStop(const std::shared_ptr<Ability> & ability)277 void OHOSApplication::OnAbilityStop(const std::shared_ptr<Ability> &ability)
278 {
279     if (ability == nullptr) {
280         APP_LOGE("ContextDeal::OnAbilityStop failed, ability is nullptr");
281         return;
282     }
283 
284     APP_LOGI("OHOSApplication::OnAbilityStop: called");
285     for (auto callback : abilityLifecycleCallbacks_) {
286         if (callback != nullptr) {
287             callback->OnAbilityStop(ability);
288         }
289     }
290 }
291 
292 /**
293  *
294  * @brief Register ElementsCallback with OHOSApplication
295  *
296  * @param callBack callBack when the system configuration of the device changes.
297  */
RegisterElementsCallbacks(const std::shared_ptr<ElementsCallback> & callback)298 void OHOSApplication::RegisterElementsCallbacks(const std::shared_ptr<ElementsCallback> &callback)
299 {
300     APP_LOGI("OHOSApplication::RegisterElementsCallbacks: called");
301 
302     if (callback == nullptr) {
303         APP_LOGI("OHOSApplication::RegisterElementsCallbacks: observer is null");
304         return;
305     }
306 
307     elementsCallbacks_.emplace_back(callback);
308 }
309 
310 /**
311  *
312  * @brief Unregister ElementsCallback with OHOSApplication
313  *
314  * @param callback RegisterElementsCallbacks`s callback
315  */
UnregisterElementsCallbacks(const std::shared_ptr<ElementsCallback> & callback)316 void OHOSApplication::UnregisterElementsCallbacks(const std::shared_ptr<ElementsCallback> &callback)
317 {
318     APP_LOGI("OHOSApplication::UnregisterElementsCallbacks: called");
319 
320     if (callback == nullptr) {
321         APP_LOGI("OHOSApplication::UnregisterElementsCallbacks: observer is null");
322         return;
323     }
324 
325     elementsCallbacks_.remove(callback);
326 }
327 
328 /**
329  *
330  * @brief Will be Called when the system configuration of the device changes.
331  *
332  * @param config Indicates the new Configuration object.
333  */
OnConfigurationUpdated(const Configuration & config)334 void OHOSApplication::OnConfigurationUpdated(const Configuration &config)
335 {
336     APP_LOGI("OHOSApplication::OnConfigurationUpdated: called");
337     for (auto callback : elementsCallbacks_) {
338         if (callback != nullptr) {
339             callback->OnConfigurationUpdated(nullptr, config);
340         }
341     }
342 }
343 
344 /**
345  *
346  * @brief Called when the system has determined to trim the memory, for example,
347  * when the ability is running in the background and there is no enough memory for
348  * running as many background processes as possible.
349  *
350  * @param level Indicates the memory trim level, which shows the current memory usage status.
351  */
OnMemoryLevel(int level)352 void OHOSApplication::OnMemoryLevel(int level)
353 {
354     APP_LOGI("OHOSApplication::OnMemoryLevel: called");
355     for (auto callback : elementsCallbacks_) {
356         if (callback != nullptr) {
357             callback->OnMemoryLevel(level);
358         }
359     }
360 }
361 
362 /**
363  *
364  * @brief Will be called the application starts
365  *
366  */
OnStart()367 void OHOSApplication::OnStart()
368 {
369     APP_LOGI("OHOSApplication::OnStart: called");
370 }
371 
372 /**
373  *
374  * @brief Will be called the application ends
375  *
376  */
OnTerminate()377 void OHOSApplication::OnTerminate()
378 {
379     APP_LOGI("OHOSApplication::OnTerminate: called");
380 }
381 
382 /**
383  *
384  * @brief Called when an ability calls Ability#onSaveAbilityState(PacMap).
385  * You can implement your own logic in this method.
386  * @param outState IIndicates the {@link PacMap} object passed to the onSaveAbilityState() callback.
387  *
388  */
OnAbilitySaveState(const PacMap & outState)389 void OHOSApplication::OnAbilitySaveState(const PacMap &outState)
390 {
391     DispatchAbilitySavedState(outState);
392 }
393 
394 }  // namespace AppExecFwk
395 }  // namespace OHOS
396