VirtualKeyboard API for Settings
[platform/core/uifw/dali-adaptor.git] / adaptors / common / accessibility-manager-impl.h
1 #ifndef __DALI_INTERNAL_ACCESSIBILITY_MANAGER_H__
2 #define __DALI_INTERNAL_ACCESSIBILITY_MANAGER_H__
3
4 /*
5  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <string>
23
24 #include <dali/public-api/object/base-object.h>
25 #include <dali/public-api/math/vector2.h>
26 #include <dali/public-api/events/touch-point.h>
27 #include <dali/integration-api/events/touch-event-combiner.h>
28
29 // INTERNAL INCLUDES
30 #include <accessibility-manager.h>
31 #include <accessibility-action-handler.h>
32 #include <accessibility-gesture-handler.h>
33 #include <indicator-impl.h>
34 #include <accessibility-gesture-detector.h>
35
36 namespace Dali
37 {
38
39 namespace Internal
40 {
41
42 namespace Adaptor
43 {
44
45 /**
46  * This class detects to accessibility action
47  */
48 class AccessibilityManager : public Dali::BaseObject
49 {
50 public:
51
52   typedef Dali::AccessibilityManager::AccessibilityActionSignalType AccessibilityActionSignalType;
53   typedef Dali::AccessibilityManager::AccessibilityActionScrollSignalType AccessibilityActionScrollSignalType;
54
55   // Creation
56
57   /**
58    * Constructor.
59    */
60   AccessibilityManager();
61
62   /**
63    * Get an instance of the AccessibilityManager.
64    * @return The instance of the AccessibilityManager.
65    */
66   static Dali::AccessibilityManager Get();
67
68   // Public API
69
70   /**
71    * Turn on accessibility action
72    * This method should be called by vconf callback
73    */
74   void EnableAccessibility();
75
76   /**
77    * Turn off accessibility action
78    * This method should be called by vconf callback
79    */
80   void DisableAccessibility();
81
82   /**
83    * @copydoc Dali::AccessibilityManager::IsEnabled()
84    */
85   bool IsEnabled() const;
86
87   /**
88    * @copydoc Dali::AccessibilityManager::GetReadPosition() const
89    */
90   Vector2 GetReadPosition() const;
91
92   /**
93    * @copydoc Dali::AccessibilityManager::SetActionHandler()
94    */
95   void SetActionHandler(AccessibilityActionHandler& handler);
96
97   /**
98    * @copydoc Dali::AccessibilityManager::SetGestureHandler()
99    */
100   void SetGestureHandler(AccessibilityGestureHandler& handler);
101
102   /**
103    * Set the Indicator
104    */
105   void SetIndicator(Indicator* indicator);
106
107   /**
108    * @copydoc Dali::AccessibilityManager::HandleActionNextEvent()
109    */
110   bool HandleActionNextEvent(bool allowEndFeedback = true);
111
112   /**
113    * @copydoc Dali::AccessibilityManager::HandleActionPreviousEvent()
114    */
115   bool HandleActionPreviousEvent(bool allowEndFeedback = true);
116
117   /**
118    * @copydoc Dali::AccessibilityManager::HandleActionActivateEvent()
119    */
120   bool HandleActionActivateEvent();
121
122   /**
123    * @copydoc Dali::AccessibilityManager::HandleActionReadEvent()
124    */
125   bool HandleActionReadEvent(unsigned int x, unsigned int y, bool allowReadAgain);
126
127   /**
128    * @copydoc Dali::AccessibilityManager::HandleActionReadNextEvent()
129    */
130   bool HandleActionReadNextEvent(bool allowEndFeedback = true);
131
132   /**
133    * @copydoc Dali::AccessibilityManager::HandleActionReadPreviousEvent()
134    */
135   bool HandleActionReadPreviousEvent(bool allowEndFeedback = true);
136
137   /**
138    * @copydoc Dali::AccessibilityManager::HandleActionUpEvent()
139    */
140   bool HandleActionUpEvent();
141
142   /**
143    * @copydoc Dali::AccessibilityManager::HandleActionDownEvent()
144    */
145   bool HandleActionDownEvent();
146
147   /**
148    * @copydoc Dali::AccessibilityManager::HandleActionClearFocusEvent()
149    */
150   bool HandleActionClearFocusEvent();
151
152   /**
153    * @copydoc Dali::AccessibilityManager::HandleActionScrollEvent()
154    */
155   bool HandleActionScrollEvent(const TouchPoint& point, unsigned long timeStamp);
156
157   /**
158    * @copydoc Dali::AccessibilityManager::HandleActionTouchEvent()
159    */
160   bool HandleActionTouchEvent(const TouchPoint& point, unsigned long timeStamp);
161
162   /**
163    * @copydoc Dali::AccessibilityManager::HandleActionBackEvent()
164    */
165   bool HandleActionBackEvent();
166
167   /**
168    * @copydoc Dali::AccessibilityManager::HandleActionEnableEvent()
169    */
170   void HandleActionEnableEvent();
171
172   /**
173    * @copydoc Dali::AccessibilityManager::HandleActionDisableEvent()
174    */
175   void HandleActionDisableEvent();
176
177 public: // Signals
178
179   /**
180    * @copydoc Dali::AccessibilityManager::StatusChangedSignal
181    */
182   AccessibilityActionSignalType& StatusChangedSignal()
183   {
184     return mStatusChangedSignal;
185   }
186
187   /**
188    * @copydoc Dali::AccessibilityManager::ActionNextSignal
189    */
190   AccessibilityActionSignalType& ActionNextSignal()
191   {
192     return mActionNextSignal;
193   }
194
195   /**
196    * @copydoc Dali::AccessibilityManager::ActionPreviousSignal
197    */
198   AccessibilityActionSignalType& ActionPreviousSignal()
199   {
200     return mActionPreviousSignal;
201   }
202
203   /**
204    * @copydoc Dali::AccessibilityManager::ActionActivateSignal
205    */
206   AccessibilityActionSignalType& ActionActivateSignal()
207   {
208     return mActionActivateSignal;
209   }
210
211   /**
212    * @copydoc Dali::AccessibilityManager::ActionOverSignal
213    */
214   AccessibilityActionSignalType& ActionOverSignal()
215   {
216     return mActionOverSignal;
217   }
218
219   /**
220    * @copydoc Dali::AccessibilityManager::ActionReadSignal
221    */
222   AccessibilityActionSignalType& ActionReadSignal()
223   {
224     return mActionReadSignal;
225   }
226
227   /**
228    * @copydoc Dali::AccessibilityManager::ActionReadNextSignal
229    */
230   AccessibilityActionSignalType& ActionReadNextSignal()
231   {
232     return mActionReadNextSignal;
233   }
234
235   /**
236    * @copydoc Dali::AccessibilityManager::ActionReadPreviousSignal
237    */
238   AccessibilityActionSignalType& ActionReadPreviousSignal()
239   {
240     return mActionReadPreviousSignal;
241   }
242
243   /**
244    * @copydoc Dali::AccessibilityManager::ActionUpSignal
245    */
246   AccessibilityActionSignalType& ActionUpSignal()
247   {
248     return mActionUpSignal;
249   }
250
251   /**
252    * @copydoc Dali::AccessibilityManager::ActionDownSignal
253    */
254   AccessibilityActionSignalType& ActionDownSignal()
255   {
256     return mActionDownSignal;
257   }
258
259   /**
260    * @copydoc Dali::AccessibilityManager::ActionClearFocusSignal
261    */
262   AccessibilityActionSignalType& ActionClearFocusSignal()
263   {
264     return mActionClearFocusSignal;
265   }
266
267   /**
268    * @copydoc Dali::AccessibilityManager::ActionBackSignal
269    */
270   AccessibilityActionSignalType& ActionBackSignal()
271   {
272     return mActionBackSignal;
273   }
274
275   /**
276    * @copydoc Dali::AccessibilityManager::ActionScrollSignal
277    */
278   AccessibilityActionScrollSignalType& ActionScrollSignal()
279   {
280     return mActionScrollSignal;
281   }
282
283 private:
284
285   // Destruction
286
287   /**
288    * Destructor.
289    */
290   virtual ~AccessibilityManager();
291
292   // Undefined
293   AccessibilityManager( const AccessibilityManager& );
294   AccessibilityManager& operator=( AccessibilityManager& );
295
296 private:
297
298   Dali::Integration::TouchEventCombiner mCombiner; ///< Combines multi-touch events.
299
300   bool mIsEnabled; ///< enable/disable the accessibility action
301   Vector2 mReadPosition; ///< ActionRead position
302
303   AccessibilityActionHandler* mActionHandler; ///< The pointer of accessibility action handler
304
305   AccessibilityGestureDetectorPtr mAccessibilityGestureDetector; ///< The accessibility gesture detector
306
307   Indicator* mIndicator; ///< The indicator
308   bool mIndicatorFocused; ///< Whether the Indicator is focused
309
310   AccessibilityActionSignalType mStatusChangedSignal;
311   AccessibilityActionSignalType mActionNextSignal;
312   AccessibilityActionSignalType mActionPreviousSignal;
313   AccessibilityActionSignalType mActionActivateSignal;
314   AccessibilityActionSignalType mActionOverSignal;
315   AccessibilityActionSignalType mActionReadSignal;
316   AccessibilityActionSignalType mActionReadNextSignal;
317   AccessibilityActionSignalType mActionReadPreviousSignal;
318   AccessibilityActionSignalType mActionUpSignal;
319   AccessibilityActionSignalType mActionDownSignal;
320   AccessibilityActionSignalType mActionClearFocusSignal;
321   AccessibilityActionSignalType mActionBackSignal;
322   AccessibilityActionScrollSignalType mActionScrollSignal;
323
324 public:
325
326   // Helpers for public-api forwarding methods
327
328   inline static Internal::Adaptor::AccessibilityManager& GetImplementation(Dali::AccessibilityManager& manager)
329   {
330     DALI_ASSERT_ALWAYS( manager && "AccessibilityManager handle is empty" );
331
332     BaseObject& handle = manager.GetBaseObject();
333
334     return static_cast<Internal::Adaptor::AccessibilityManager&>(handle);
335   }
336
337   inline static const Internal::Adaptor::AccessibilityManager& GetImplementation(const Dali::AccessibilityManager& manager)
338   {
339     DALI_ASSERT_ALWAYS( manager && "AccessibilityManager handle is empty" );
340
341     const BaseObject& handle = manager.GetBaseObject();
342
343     return static_cast<const Internal::Adaptor::AccessibilityManager&>(handle);
344   }
345
346 };
347
348 } // namespace Adaptor
349
350 } // namespace Internal
351
352 } // namespace Dali
353
354 #endif // __DALI_INTERNAL_ACCESSIBILITY_MANAGER_H__