• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 "ability_manager_event_subscriber.h"
17 
18 #include "common_event_support.h"
19 #include "hilog_tag_wrapper.h"
20 
21 namespace OHOS {
22 namespace AbilityRuntime {
AbilityManagerEventSubscriber(const EventFwk::CommonEventSubscribeInfo & subscribeInfo,const std::function<void ()> & screenUnlockCallback,const std::function<void ()> & userScreenUnlockCallback)23 AbilityManagerEventSubscriber::AbilityManagerEventSubscriber(
24     const EventFwk::CommonEventSubscribeInfo &subscribeInfo, const std::function<void()> &screenUnlockCallback,
25     const std::function<void()> &userScreenUnlockCallback)
26     : EventFwk::CommonEventSubscriber(subscribeInfo), screenUnlockCallback_(screenUnlockCallback),
27     userScreenUnlockCallback_(userScreenUnlockCallback)
28 {}
29 
OnReceiveEvent(const EventFwk::CommonEventData & data)30 void AbilityManagerEventSubscriber::OnReceiveEvent(const EventFwk::CommonEventData &data)
31 {
32     const AAFwk::Want &want = data.GetWant();
33     std::string action = want.GetAction();
34     TAG_LOGD(AAFwkTag::ABILITYMGR, "The action: %{public}s.", action.c_str());
35     if (userScreenUnlockCallback_ == nullptr || screenUnlockCallback_ == nullptr) {
36         TAG_LOGE(AAFwkTag::ABILITYMGR, "nullptr callback");
37         return;
38     }
39     std::lock_guard<std::mutex> lock(mutex_);
40     auto handleEvent = [&](const std::string &event) {
41         if (eventSet_.find(event) != eventSet_.end()) {
42             screenUnlockCallback_();
43             eventSet_.clear();
44         } else {
45             eventSet_.insert(action);
46         }
47     };
48     if (action == EventFwk::CommonEventSupport::COMMON_EVENT_USER_UNLOCKED) {
49         handleEvent(EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_UNLOCKED);
50         userScreenUnlockCallback_();
51     } else if (action == EventFwk::CommonEventSupport::COMMON_EVENT_SCREEN_UNLOCKED) {
52         handleEvent(EventFwk::CommonEventSupport::COMMON_EVENT_USER_UNLOCKED);
53     }
54 }
55 } // namespace AbilityRuntime
56 } // namespace OHOS