• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "accessibility_zoom_handler.h"
17 #include "hilog_wrapper.h"
18 
19 namespace OHOS {
20 namespace Accessibility {
21 static const int32_t POINTER_COUNT_1 = 1;
22 
AccessibilityZoomHandler(int displayId)23 AccessibilityZoomHandler::AccessibilityZoomHandler(int displayId)
24 {
25     displayId_ = displayId;
26 
27     readyState_.Register(*this);
28     zoomInState_.Register(*this);
29     slidingState_.Register(*this);
30     currentState_ = readyState_;
31 }
32 
~AccessibilityZoomHandler()33 AccessibilityZoomHandler::~AccessibilityZoomHandler()
34 {
35     readyState_.UnRegisterAll();
36     zoomInState_.UnRegisterAll();
37     slidingState_.UnRegisterAll();
38     EventTransmission::DestroyEvents();
39 }
40 
Initialize()41 void AccessibilityZoomHandler::Initialize()
42 {
43 }
44 
OnPointerEvent(MMI::PointerEvent & event)45 void AccessibilityZoomHandler::OnPointerEvent(MMI::PointerEvent &event)
46 {
47     currentState_.OnPointerEvent(event);
48 }
49 
OnTransitionTo(const int state)50 void AccessibilityZoomHandler::OnTransitionTo(const int state)
51 {
52     currentState_.Exit();
53     {
54         switch (state) {
55             case READY_STATE:
56                 currentState_ = readyState_;
57                 break;
58             case ZOOMIN_STATE:
59                 currentState_ = zoomInState_;
60                 break;
61             case SLIDING_STATE:
62                 currentState_ = slidingState_;
63                 break;
64             default:
65                 HILOG_ERROR("State input error");
66                 break;
67         }
68     }
69     currentState_.Enter();
70 }
71 
OnZoomIn()72 void AccessibilityZoomHandler::OnZoomIn()
73 {
74 }
75 
OnZoomOut()76 void AccessibilityZoomHandler::OnZoomOut()
77 {
78 }
79 
OnBack(MMI::PointerEvent & event)80 void AccessibilityZoomHandler::OnBack(MMI::PointerEvent &event)
81 {
82     EventTransmission::OnPointerEvent(event);
83 }
84 
Enter()85 void AccessibilityZoomHandler::ReadyState::Enter()
86 {
87     HILOG_DEBUG("AccessibilityZoomHandler READY_STATE Enter.");
88     gesture_.Clear();
89 }
90 
Exit()91 void AccessibilityZoomHandler::ReadyState::Exit()
92 {
93     HILOG_DEBUG("AccessibilityZoomHandler READY_STATE Exit.");
94     gesture_.Clear();
95 }
96 
OnPointerEvent(MMI::PointerEvent & event)97 void AccessibilityZoomHandler::ReadyState::OnPointerEvent(MMI::PointerEvent &event)
98 {
99     switch (event.GetPointerAction()) {
100         case MMI::PointerEvent::POINTER_ACTION_UP:
101             if (event.GetPointersIdList().size() == POINTER_COUNT_1) {
102                 gesture_.Up();
103                 observer_[0].OnBack(event);
104             }
105             break;
106         case MMI::PointerEvent::POINTER_ACTION_DOWN:
107             if (event.GetPointersIdList().size() == POINTER_COUNT_1) {
108                 if (gesture_.Triple(event)) {
109                     observer_[0].OnTransitionTo(ZOOMIN_STATE);
110                 } else {
111                     observer_[0].OnBack(event);
112                 }
113             }
114             break;
115         default:
116             observer_[0].OnBack(event);
117             break;
118     }
119 }
120 
Enter()121 void AccessibilityZoomHandler::ZoomInState::Enter()
122 {
123     HILOG_DEBUG("AccessibilityZoomHandler ZOOMIN_STATE Enter.");
124     gesture_.Clear();
125     observer_[0].OnZoomIn();
126 }
127 
Exit()128 void AccessibilityZoomHandler::ZoomInState::Exit()
129 {
130     HILOG_DEBUG("AccessibilityZoomHandler ZOOMIN_STATE Exit.");
131     gesture_.Clear();
132     observer_[0].OnZoomOut();
133 }
134 
OnPointerEvent(MMI::PointerEvent & event)135 void AccessibilityZoomHandler::ZoomInState::OnPointerEvent(MMI::PointerEvent &event)
136 {
137     switch (event.GetPointerAction()) {
138         case MMI::PointerEvent::POINTER_ACTION_UP:
139             if (event.GetPointersIdList().size() == POINTER_COUNT_1) {
140                 gesture_.Up();
141                 observer_[0].OnBack(event);
142             }
143             break;
144         case MMI::PointerEvent::POINTER_ACTION_DOWN:
145             if (event.GetPointersIdList().size() == POINTER_COUNT_1) {
146                 if (gesture_.Triple(event)) {
147                     observer_[0].OnTransitionTo(READY_STATE);
148                 } else {
149                     observer_[0].OnBack(event);
150                 }
151             } else {
152                 observer_[0].OnTransitionTo(SLIDING_STATE);
153             }
154             break;
155         case MMI::PointerEvent::POINTER_ACTION_CANCEL:
156             observer_[0].OnTransitionTo(READY_STATE);
157             break;
158         default:
159             observer_[0].OnBack(event);
160             break;
161     }
162 }
163 
Enter()164 void AccessibilityZoomHandler::SlidingState::Enter()
165 {
166     HILOG_DEBUG("AccessibilityZoomHandler SLIDING_STATE Enter.");
167 }
168 
Exit()169 void AccessibilityZoomHandler::SlidingState::Exit()
170 {
171     HILOG_DEBUG("AccessibilityZoomHandler SLIDING_STATE Exit.");
172 }
173 
OnPointerEvent(MMI::PointerEvent & event)174 void AccessibilityZoomHandler::SlidingState::OnPointerEvent(MMI::PointerEvent &event)
175 {
176     switch (event.GetPointerAction()) {
177         case MMI::PointerEvent::POINTER_ACTION_UP:
178             if (event.GetPointersIdList().size() > POINTER_COUNT_1) {
179                 observer_[0].OnTransitionTo(ZOOMIN_STATE);
180             }
181             break;
182         case MMI::PointerEvent::POINTER_ACTION_MOVE:
183             OnScroll();
184             break;
185         case MMI::PointerEvent::POINTER_ACTION_CANCEL:
186             observer_[0].OnTransitionTo(READY_STATE);
187             observer_[0].OnZoomOut();
188             break;
189         default:
190             observer_[0].OnBack(event);
191             break;
192     }
193 }
194 
OnScroll()195 bool AccessibilityZoomHandler::SlidingState::OnScroll()
196 {
197     return true;
198 }
199 
OnScale()200 bool AccessibilityZoomHandler::SlidingState::OnScale()
201 {
202     return true;
203 }
204 } // namespace Accessibility
205 } // namespace OHOS
206