2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "accessibility-manager-impl.h"
24 #include <Ecore_Wayland.h>
25 #include <Elementary.h>
27 #include <dali/public-api/object/type-registry.h>
28 #include <dali/integration-api/debug.h>
29 #include <dali/integration-api/events/gesture-requests.h>
32 #include "system-settings.h"
43 bool AccessibilityManager::HandleActionNextEvent(bool allowEndFeedback)
46 Dali::AccessibilityManager handle( this );
49 * In order to application decide reading action first,
50 * emit ActionNext signal in first, AccessibilityActionNext for handler in next
52 if( !mIndicatorFocused )
54 if( !mActionNextSignal.Empty() )
56 mActionNextSignal.Emit( handle );
62 ret = mActionHandler->AccessibilityActionNext(allowEndFeedback);
65 DALI_LOG_INFO(gAccessibilityManagerLogFilter, Debug::General, "[%s:%d] %s\n", __FUNCTION__, __LINE__, ret?"TRUE":"FALSE");
70 bool AccessibilityManager::HandleActionPreviousEvent(bool allowEndFeedback)
74 Dali::AccessibilityManager handle( this );
77 * In order to application decide reading action first,
78 * emit ActionPrevious signal in first, AccessibilityActionPrevious for handler in next
80 if ( !mIndicatorFocused )
82 if( !mActionPreviousSignal.Empty() )
84 mActionPreviousSignal.Emit( handle );
90 ret = mActionHandler->AccessibilityActionPrevious(allowEndFeedback);
93 DALI_LOG_INFO(gAccessibilityManagerLogFilter, Debug::General, "[%s:%d] %s\n", __FUNCTION__, __LINE__, ret?"TRUE":"FALSE");
98 bool AccessibilityManager::HandleActionActivateEvent()
102 Dali::AccessibilityManager handle( this );
105 * In order to application decide reading action first,
106 * emit ActionActivate signal in first, AccessibilityActionActivate for handler in next
108 if ( !mIndicatorFocused )
110 if( !mActionActivateSignal.Empty() )
112 mActionActivateSignal.Emit( handle );
118 ret = mActionHandler->AccessibilityActionActivate();
121 DALI_LOG_INFO(gAccessibilityManagerLogFilter, Debug::General, "[%s:%d] %s\n", __FUNCTION__, __LINE__, ret?"TRUE":"FALSE");
126 bool AccessibilityManager::HandleActionReadEvent(unsigned int x, unsigned int y, bool allowReadAgain)
130 DALI_LOG_INFO(gAccessibilityManagerLogFilter, Debug::General, "[%s:%d] %d , %d\n", __FUNCTION__, __LINE__, x, y);
135 Dali::AccessibilityManager handle( this );
137 bool indicatorFocused = false;
139 // Check whether the Indicator is focused
140 if( mIndicator && mIndicator->IsConnected() )
142 // Check the position and size of Indicator actor
143 Dali::Actor indicatorActor = mIndicator->GetActor();
144 Vector3 position = Vector3(0.0f, 0.0f, 0.0f);
145 Vector3 size = indicatorActor.GetCurrentSize();
147 if(mReadPosition.x >= position.x &&
148 mReadPosition.x <= position.x + size.width &&
149 mReadPosition.y >= position.y &&
150 mReadPosition.y <= position.y + size.height)
152 indicatorFocused = true;
153 DALI_LOG_INFO(gAccessibilityManagerLogFilter, Debug::General, "[%s:%d] Indicator area!!!!\n", __FUNCTION__, __LINE__);
159 if( !mIndicatorFocused && indicatorFocused )
161 // If Indicator is focused, the focus should be cleared in Dali focus chain.
164 mActionHandler->ClearAccessibilityFocus();
167 else if( mIndicatorFocused && !indicatorFocused )
171 mIndicatorFocused = indicatorFocused;
173 // Send accessibility READ action information to Indicator
174 if( mIndicatorFocused )
182 * In order to application decide reading action first,
183 * emit ActionRead signal in first, AccessibilityActionRead for handler in next
185 if( !mIndicatorFocused )
187 if ( !mActionReadSignal.Empty() )
189 mActionReadSignal.Emit( handle );
196 * In order to application decide reading action first,
197 * emit ActionRead signal in first, AccessibilityActionRead for handler in next
199 if( !mIndicatorFocused )
201 if ( !mActionOverSignal.Empty() )
203 mActionOverSignal.Emit( handle );
208 if( mActionHandler && !mIndicatorFocused)
210 // If Indicator is not focused, the accessibility actions should be handled by the registered
211 // accessibility action handler (e.g. focus manager)
212 ret = mActionHandler->AccessibilityActionRead(allowReadAgain);
213 DALI_LOG_INFO(gAccessibilityManagerLogFilter, Debug::General, "[%s:%d] %s\n", __FUNCTION__, __LINE__, ret?"TRUE":"FALSE");
219 bool AccessibilityManager::HandleActionReadNextEvent(bool allowEndFeedback)
223 Dali::AccessibilityManager handle( this );
226 * In order to application decide reading action first,
227 * emit ActionReadNext signal in first, AccessibilityActionReadNext for handler in next
229 if ( !mIndicatorFocused )
231 if( !mActionReadNextSignal.Empty() )
233 mActionReadNextSignal.Emit( handle );
239 ret = mActionHandler->AccessibilityActionReadNext(allowEndFeedback);
242 DALI_LOG_INFO(gAccessibilityManagerLogFilter, Debug::General, "[%s:%d] %s\n", __FUNCTION__, __LINE__, ret?"TRUE":"FALSE");
247 bool AccessibilityManager::HandleActionReadPreviousEvent(bool allowEndFeedback)
251 Dali::AccessibilityManager handle( this );
254 * In order to application decide reading action first,
255 * emit ActionReadPrevious signal in first, AccessibilityActionReadPrevious for handler in next
257 if ( !mIndicatorFocused )
259 if( !mActionReadPreviousSignal.Empty() )
261 mActionReadPreviousSignal.Emit( handle );
267 ret = mActionHandler->AccessibilityActionReadPrevious(allowEndFeedback);
270 DALI_LOG_INFO(gAccessibilityManagerLogFilter, Debug::General, "[%s:%d] %s\n", __FUNCTION__, __LINE__, ret?"TRUE":"FALSE");
275 bool AccessibilityManager::HandleActionUpEvent()
279 Dali::AccessibilityManager handle( this );
282 * In order to application decide reading action first,
283 * emit ActionUp signal in first, AccessibilityActionUp for handler in next
285 if ( !mIndicatorFocused )
287 if( !mActionUpSignal.Empty() )
289 mActionUpSignal.Emit( handle );
295 ret = mActionHandler->AccessibilityActionUp();
298 DALI_LOG_INFO(gAccessibilityManagerLogFilter, Debug::General, "[%s:%d] %s\n", __FUNCTION__, __LINE__, ret?"TRUE":"FALSE");
303 bool AccessibilityManager::HandleActionDownEvent()
307 Dali::AccessibilityManager handle( this );
310 * In order to application decide reading action first,
311 * emit ActionDown signal in first, AccessibilityActionDown for handler in next
313 if ( !mIndicatorFocused )
315 if( !mActionDownSignal.Empty() )
317 mActionDownSignal.Emit( handle );
323 ret = mActionHandler->AccessibilityActionDown();
326 DALI_LOG_INFO(gAccessibilityManagerLogFilter, Debug::General, "[%s:%d] %s\n", __FUNCTION__, __LINE__, ret?"TRUE":"FALSE");
331 } // namespace Adaptor
333 } // namespace Internal