1 /*
2 * Copyright (c) 2022 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 "event_manager.h"
17
18 #include "log/log.h"
19
20 namespace Updater {
EventManager()21 EventManager::EventManager() : pgMgr_(PageManager::GetInstance())
22 {
23 }
24
GetInstance()25 EventManager &EventManager::GetInstance()
26 {
27 static EventManager instance;
28 return instance;
29 }
30
Add(const ComInfo & viewId,std::unique_ptr<LabelOnTouchListener> listener)31 void EventManager::Add(const ComInfo &viewId, std::unique_ptr<LabelOnTouchListener> listener)
32 {
33 if (!pgMgr_.IsValidCom(viewId)) {
34 LOG(ERROR) << "not an valid view " << viewId;
35 return;
36 }
37 auto com = pgMgr_[viewId.pageId][viewId.comId].As();
38 labelOnTouchListener_.push_back(std::move(listener));
39 com->SetTouchable(true);
40 com->SetOnTouchListener(labelOnTouchListener_.back().get());
41 }
42
Add(const ComInfo & viewId,std::unique_ptr<BtnOnEventListener> listener)43 void EventManager::Add(const ComInfo &viewId, std::unique_ptr<BtnOnEventListener> listener)
44 {
45 if (!pgMgr_.IsValidCom(viewId)) {
46 LOG(ERROR) << "not an valid view " << viewId;
47 return;
48 }
49 auto com = pgMgr_[viewId.pageId][viewId.comId].As();
50 // both click and touch listener
51 BtnOnEventListener *btnListener = listener.get();
52 // save this listener
53 btnOnClickListener_.push_back(std::move(listener));
54 com->SetOnClickListener(btnListener);
55 // this touch listener used to disable volume key when pressing button
56 com->SetOnTouchListener(btnListener);
57 }
58
Add(const ComInfo & viewId,std::unique_ptr<BtnOnDragListener> listener)59 void EventManager::Add(const ComInfo &viewId, std::unique_ptr<BtnOnDragListener> listener)
60 {
61 if (!pgMgr_.IsValidCom(viewId)) {
62 LOG(ERROR) << "not an valid view " << viewId;
63 return;
64 }
65 auto com = pgMgr_[viewId.pageId][viewId.comId].As();
66 btnOnDragListener.push_back(std::move(listener));
67 com->SetDraggable(true);
68 com->SetOnDragListener(btnOnDragListener.back().get());
69 }
70
71 // key listener is registered at root view, because key event don't has position info and is globally responded
AddKeyListener()72 void EventManager::AddKeyListener()
73 {
74 keyListener_ = std::make_unique<KeyListener>();
75 OHOS::RootView::GetInstance()->SetOnKeyActListener(keyListener_.get());
76 }
77
Add(const ComInfo & viewId,EventType evt,Callback cb)78 void EventManager::Add(const ComInfo &viewId, EventType evt, Callback cb)
79 {
80 switch (evt) {
81 case EventType::CLICKEVENT:
82 Add(viewId, std::make_unique<BtnOnEventListener>(cb, true));
83 break;
84 case EventType::TOUCHEVENT:
85 Add(viewId, std::make_unique<LabelOnTouchListener>(cb, true));
86 break;
87 case EventType::DRAGEVENT:
88 Add(viewId, std::make_unique<BtnOnDragListener>(cb, true));
89 break;
90 default:
91 LOG(WARNING) << "event type not support";
92 break;
93 }
94 }
95 } // namespace Updater
96