• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 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 "app_mgr_service_event_handler.h"
17 
18 #include "app_mgr_service_inner.h"
19 #include "hilog_tag_wrapper.h"
20 
21 namespace OHOS {
22 namespace AppExecFwk {
AMSEventHandler(const std::shared_ptr<AAFwk::TaskHandlerWrap> & taskHandler,const std::weak_ptr<AppMgrServiceInner> & appMgr)23 AMSEventHandler::AMSEventHandler(const std::shared_ptr<AAFwk::TaskHandlerWrap> &taskHandler,
24     const std::weak_ptr<AppMgrServiceInner> &appMgr)
25     : AAFwk::EventHandlerWrap(taskHandler), appMgr_(appMgr)
26 {
27     TAG_LOGI(AAFwkTag::APPMGR, "instance created");
28 }
29 
~AMSEventHandler()30 AMSEventHandler::~AMSEventHandler()
31 {
32     TAG_LOGI(AAFwkTag::APPMGR, "instance destroyed");
33 }
34 
ProcessEvent(const AAFwk::EventWrap & event)35 void AMSEventHandler::ProcessEvent(const AAFwk::EventWrap &event)
36 {
37     auto appManager = appMgr_.lock();
38     if (!appManager) {
39         TAG_LOGE(AAFwkTag::APPMGR, "null appManager");
40         return;
41     }
42     appManager->HandleTimeOut(event);
43 }
44 
GetInstance()45 AppEventUtil &AppEventUtil::GetInstance()
46 {
47     static AppEventUtil instance;
48     return instance;
49 }
50 
AddEvent(std::shared_ptr<AppRunningRecord> appRecord,uint32_t eventId,int64_t param)51 void AppEventUtil::AddEvent(std::shared_ptr<AppRunningRecord> appRecord, uint32_t eventId, int64_t param)
52 {
53     if (appRecord == nullptr) {
54         return;
55     }
56     std::lock_guard lock(appEventListMutex_);
57     appEventList_.emplace_back(eventId, param, appRecord);
58 }
59 
HasEvent(std::shared_ptr<AppRunningRecord> appRecord,uint32_t eventId)60 bool AppEventUtil::HasEvent(std::shared_ptr<AppRunningRecord> appRecord, uint32_t eventId)
61 {
62     if (appRecord == nullptr) {
63         return false;
64     }
65     std::lock_guard lock(appEventListMutex_);
66     for (const auto &item : appEventList_) {
67         if (item.appRecord.lock() == appRecord && item.eventId == eventId) {
68             return true;
69         }
70     }
71     return false;
72 }
73 
RemoveEvent(uint32_t eventId,int64_t param)74 std::shared_ptr<AppRunningRecord> AppEventUtil::RemoveEvent(uint32_t eventId, int64_t param)
75 {
76     std::lock_guard lock(appEventListMutex_);
77     for (auto it = appEventList_.begin(); it != appEventList_.end(); ++it) {
78         if (it->eventId == eventId && it->param == param) {
79             auto result = it->appRecord.lock();
80             appEventList_.erase(it);
81             return result;
82         }
83     }
84     return nullptr;
85 }
86 
RemoveEvent(std::shared_ptr<AppRunningRecord> appRecord,uint32_t eventId)87 std::list<AppEventData> AppEventUtil::RemoveEvent(std::shared_ptr<AppRunningRecord> appRecord, uint32_t eventId)
88 {
89     std::list<AppEventData> result;
90     std::lock_guard lock(appEventListMutex_);
91     for (auto it = appEventList_.begin(); it != appEventList_.end();) {
92         auto appRecordItem = it->appRecord.lock();
93         if (appRecordItem == nullptr) {
94             it = appEventList_.erase(it);
95             continue;
96         }
97         if (appRecordItem == appRecord && it->eventId == eventId) {
98             result.emplace_back(*it);
99             it = appEventList_.erase(it);
100             continue;
101         }
102         ++it;
103     }
104     return result;
105 }
106 }  // namespace AppExecFwk
107 }  // namespace OHOS
108