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)23AccessibilityZoomHandler::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()33AccessibilityZoomHandler::~AccessibilityZoomHandler() 34 { 35 readyState_.UnRegisterAll(); 36 zoomInState_.UnRegisterAll(); 37 slidingState_.UnRegisterAll(); 38 EventTransmission::DestroyEvents(); 39 } 40 Initialize()41void AccessibilityZoomHandler::Initialize() 42 { 43 } 44 OnPointerEvent(MMI::PointerEvent & event)45void AccessibilityZoomHandler::OnPointerEvent(MMI::PointerEvent &event) 46 { 47 currentState_.OnPointerEvent(event); 48 } 49 OnTransitionTo(const int state)50void 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()72void AccessibilityZoomHandler::OnZoomIn() 73 { 74 } 75 OnZoomOut()76void AccessibilityZoomHandler::OnZoomOut() 77 { 78 } 79 OnBack(MMI::PointerEvent & event)80void AccessibilityZoomHandler::OnBack(MMI::PointerEvent &event) 81 { 82 EventTransmission::OnPointerEvent(event); 83 } 84 Enter()85void AccessibilityZoomHandler::ReadyState::Enter() 86 { 87 HILOG_DEBUG("AccessibilityZoomHandler READY_STATE Enter."); 88 gesture_.Clear(); 89 } 90 Exit()91void AccessibilityZoomHandler::ReadyState::Exit() 92 { 93 HILOG_DEBUG("AccessibilityZoomHandler READY_STATE Exit."); 94 gesture_.Clear(); 95 } 96 OnPointerEvent(MMI::PointerEvent & event)97void 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()121void AccessibilityZoomHandler::ZoomInState::Enter() 122 { 123 HILOG_DEBUG("AccessibilityZoomHandler ZOOMIN_STATE Enter."); 124 gesture_.Clear(); 125 observer_[0].OnZoomIn(); 126 } 127 Exit()128void AccessibilityZoomHandler::ZoomInState::Exit() 129 { 130 HILOG_DEBUG("AccessibilityZoomHandler ZOOMIN_STATE Exit."); 131 gesture_.Clear(); 132 observer_[0].OnZoomOut(); 133 } 134 OnPointerEvent(MMI::PointerEvent & event)135void 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()164void AccessibilityZoomHandler::SlidingState::Enter() 165 { 166 HILOG_DEBUG("AccessibilityZoomHandler SLIDING_STATE Enter."); 167 } 168 Exit()169void AccessibilityZoomHandler::SlidingState::Exit() 170 { 171 HILOG_DEBUG("AccessibilityZoomHandler SLIDING_STATE Exit."); 172 } 173 OnPointerEvent(MMI::PointerEvent & event)174void 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()195bool AccessibilityZoomHandler::SlidingState::OnScroll() 196 { 197 return true; 198 } 199 OnScale()200bool AccessibilityZoomHandler::SlidingState::OnScale() 201 { 202 return true; 203 } 204 } // namespace Accessibility 205 } // namespace OHOS 206