ScreenReaderProxy::ScreenReaderProxy()
: m_ttsHandle(0)
{
+ int enabled;
+ m_enabled = (!vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &enabled) && enabled);
+ vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, didSettingsChanged, this);
}
ScreenReaderProxy::~ScreenReaderProxy()
{
+ vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, didSettingsChanged);
}
void ScreenReaderProxy::addViewImpl(EwkViewImpl* viewImpl)
m_ttsHandle = 0;
}
-void ScreenReaderProxy::enable(EwkViewImpl* viewImpl)
+void ScreenReaderProxy::initialize(EwkViewImpl* viewImpl)
{
Evas_Object* accessObject = elm_access_object_get(viewImpl->view());
if (!accessObject)
return;
- elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_HIGHLIGHT, highlightHandler, viewImpl);
- elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_UNHIGHLIGHT, unhighlightHandler, viewImpl);
- elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_HIGHLIGHT_NEXT, highlightNextHandler, viewImpl);
- elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_HIGHLIGHT_PREV, highlightPrevHandler, viewImpl);
- elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_ACTIVATE, activateHandler, viewImpl);
- elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_SCROLL, scrollHandler, viewImpl);
- elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_MOUSE, mouseHandler, viewImpl);
- elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_UP, upHandler, viewImpl);
- elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_DOWN, downHandler, viewImpl);
- elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_BACK, backHandler, viewImpl);
- elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_READ, readHandler, viewImpl);
-
- addViewImpl(viewImpl);
+ elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_HIGHLIGHT, executeAction, viewImpl);
+ elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_UNHIGHLIGHT, executeAction, viewImpl);
+ elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_HIGHLIGHT_NEXT, executeAction, viewImpl);
+ elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_HIGHLIGHT_PREV, executeAction, viewImpl);
+ elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_ACTIVATE, executeAction, viewImpl);
+ elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_SCROLL, executeAction, viewImpl);
+ elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_MOUSE, executeAction, viewImpl);
+ elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_UP, executeAction, viewImpl);
+ elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_DOWN, executeAction, viewImpl);
+ elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_BACK, executeAction, viewImpl);
+ elm_access_action_cb_set(accessObject, ELM_ACCESS_ACTION_READ, executeAction, viewImpl);
}
-void ScreenReaderProxy::disable(EwkViewImpl* viewImpl)
+void ScreenReaderProxy::remove(EwkViewImpl* viewImpl)
{
Evas_Object* accessObject = elm_access_object_get(viewImpl->view());
if (accessObject) {
}
}
-bool ScreenReaderProxy::executeAction(EwkViewImpl* viewImpl, Elm_Access_Action_Info* actionInfo)
+Eina_Bool ScreenReaderProxy::executeAction(void* data, Evas_Object*, Elm_Access_Action_Info* actionInfo)
{
- addViewImpl(viewImpl);
-
- if (actionInfo->action_type == ELM_ACCESS_ACTION_UNHIGHLIGHT)
- unhighlightHandler(viewImpl, 0, 0);
- else if (actionInfo->action_type == ELM_ACCESS_ACTION_HIGHLIGHT_NEXT)
- return highlightNextHandler(viewImpl, 0, 0);
- else if (actionInfo->action_type == ELM_ACCESS_ACTION_HIGHLIGHT_PREV)
- return highlightPrevHandler(viewImpl, 0, 0);
- else if (actionInfo->action_type == ELM_ACCESS_ACTION_ACTIVATE)
- activateHandler(viewImpl, 0, 0);
- else if (actionInfo->action_type == ELM_ACCESS_ACTION_SCROLL)
- scrollHandler(viewImpl, 0, actionInfo);
- else if (actionInfo->action_type == ELM_ACCESS_ACTION_MOUSE)
- mouseHandler(viewImpl, 0, actionInfo);
- else if (actionInfo->action_type == ELM_ACCESS_ACTION_UP)
- upHandler(viewImpl, 0, 0);
- else if (actionInfo->action_type == ELM_ACCESS_ACTION_DOWN)
- downHandler(viewImpl, 0, 0);
- else if (actionInfo->action_type == ELM_ACCESS_ACTION_BACK)
- backHandler(viewImpl, 0, 0);
- else if (actionInfo->action_type == ELM_ACCESS_ACTION_READ)
- readHandler(viewImpl, 0, actionInfo);
-
- return true;
-}
-
-Eina_Bool ScreenReaderProxy::highlightHandler(void* data, Evas_Object*, Elm_Access_Action_Info* actionInfo)
-{
- if (!actionInfo)
+ if (!screenReader().m_enabled || !actionInfo)
return false;
- if (actionInfo->action_by == ELM_ACCESS_ACTION_HIGHLIGHT_NEXT)
- return highlightNextHandler(data, 0, 0);
- if (actionInfo->action_by == ELM_ACCESS_ACTION_HIGHLIGHT_PREV)
- return highlightPrevHandler(data, 0, 0);
-
- return true;
-}
-
-Eina_Bool ScreenReaderProxy::unhighlightHandler(void* data, Evas_Object*, Elm_Access_Action_Info*)
-{
EwkViewImpl* viewImpl = static_cast<EwkViewImpl*>(data);
+ screenReader().addViewImpl(viewImpl);
+
+ switch (actionInfo->action_type) {
+ case ELM_ACCESS_ACTION_HIGHLIGHT:
+ if (actionInfo->action_by == ELM_ACCESS_ACTION_HIGHLIGHT_NEXT)
+ return viewImpl->page()->moveScreenReaderFocus(true);
+ if (actionInfo->action_by == ELM_ACCESS_ACTION_HIGHLIGHT_PREV)
+ return viewImpl->page()->moveScreenReaderFocus(false);
+ break;
+
+ case ELM_ACCESS_ACTION_UNHIGHLIGHT:
+ viewImpl->page()->clearScreenReader();
+ viewImpl->focusRing->hide(false);
+ tts_stop(screenReader().m_ttsHandle);
+ break;
+
+ case ELM_ACCESS_ACTION_HIGHLIGHT_NEXT:
+ return viewImpl->page()->moveScreenReaderFocus(true);
+
+ case ELM_ACCESS_ACTION_HIGHLIGHT_PREV:
+ return viewImpl->page()->moveScreenReaderFocus(false);
+
+ case ELM_ACCESS_ACTION_ACTIVATE: {
+ IntPoint point(viewImpl->focusRing->centerPointInScreen());
+ if (point.x() < 0 || point.y() < 0)
+ return false;
+
+ if (viewImpl->page()->raiseTapEvent(viewImpl->transformFromScene().mapPoint(point)) && viewImpl->page()->isViewVisible())
+ evas_object_focus_set(viewImpl->view(), true);
+ break;
+ }
- viewImpl->page()->clearScreenReader();
- viewImpl->focusRing->hide(false);
- tts_stop(screenReader().m_ttsHandle);
-
- return true;
-}
-
-Eina_Bool ScreenReaderProxy::highlightNextHandler(void* data, Evas_Object*, Elm_Access_Action_Info*)
-{
- EwkViewImpl* viewImpl = static_cast<EwkViewImpl*>(data);
- return viewImpl->page()->moveScreenReaderFocus(true);
-}
-
-Eina_Bool ScreenReaderProxy::highlightPrevHandler(void* data, Evas_Object*, Elm_Access_Action_Info*)
-{
- EwkViewImpl* viewImpl = static_cast<EwkViewImpl*>(data);
- return viewImpl->page()->moveScreenReaderFocus(false);
-}
-
-Eina_Bool ScreenReaderProxy::activateHandler(void* data, Evas_Object*, Elm_Access_Action_Info*)
-{
- EwkViewImpl* viewImpl = static_cast<EwkViewImpl*>(data);
- IntPoint point(viewImpl->focusRing->centerPointInScreen());
- if (point.x() < 0 || point.y() < 0)
- return false;
-
- if (viewImpl->page()->raiseTapEvent(viewImpl->transformFromScene().mapPoint(point)) && viewImpl->page()->isViewVisible())
- evas_object_focus_set(viewImpl->view(), true);
-
- return true;
-}
-
-Eina_Bool ScreenReaderProxy::scrollHandler(void* data, Evas_Object*, Elm_Access_Action_Info* actionInfo)
-{
- if (!actionInfo)
- return false;
-
- EwkViewImpl* viewImpl = static_cast<EwkViewImpl*>(data);
-
- if (actionInfo->mouse_type == 0) {
- viewImpl->gestureClient->reset();
- viewImpl->gestureClient->setGestureEnabled(true);
- viewImpl->gestureClient->setMovingEnabled(true);
- viewImpl->gestureClient->startPan(IntPoint(actionInfo->x, actionInfo->y));
- } else if (actionInfo->mouse_type == 1)
- viewImpl->gestureClient->movePan(IntPoint(actionInfo->x, actionInfo->y));
- else if (actionInfo->mouse_type == 2)
- viewImpl->gestureClient->endPan(IntPoint(actionInfo->x, actionInfo->y));
-
- return true;
-}
-
-Eina_Bool ScreenReaderProxy::mouseHandler(void* data, Evas_Object*, Elm_Access_Action_Info* actionInfo)
-{
- return scrollHandler(data, 0, actionInfo);
-}
-
-Eina_Bool ScreenReaderProxy::upHandler(void* data, Evas_Object*, Elm_Access_Action_Info*)
-{
- EwkViewImpl* viewImpl = static_cast<EwkViewImpl*>(data);
- viewImpl->page()->adjustScreenReaderFocusedObjectValue(true);
-
- return true;
-}
-
-Eina_Bool ScreenReaderProxy::downHandler(void* data, Evas_Object*, Elm_Access_Action_Info*)
-{
- EwkViewImpl* viewImpl = static_cast<EwkViewImpl*>(data);
- viewImpl->page()->adjustScreenReaderFocusedObjectValue(false);
-
- return true;
-}
+ case ELM_ACCESS_ACTION_SCROLL:
+ case ELM_ACCESS_ACTION_MOUSE:
+ if (actionInfo->mouse_type == 0) {
+ viewImpl->gestureClient->reset();
+ viewImpl->gestureClient->setGestureEnabled(true);
+ viewImpl->gestureClient->setMovingEnabled(true);
+ viewImpl->gestureClient->startPan(IntPoint(actionInfo->x, actionInfo->y));
+ } else if (actionInfo->mouse_type == 1)
+ viewImpl->gestureClient->movePan(IntPoint(actionInfo->x, actionInfo->y));
+ else if (actionInfo->mouse_type == 2)
+ viewImpl->gestureClient->endPan(IntPoint(actionInfo->x, actionInfo->y));
+ break;
+
+ case ELM_ACCESS_ACTION_UP:
+ viewImpl->page()->adjustScreenReaderFocusedObjectValue(true);
+ break;
+
+ case ELM_ACCESS_ACTION_DOWN:
+ viewImpl->page()->adjustScreenReaderFocusedObjectValue(false);
+ break;
+
+ case ELM_ACCESS_ACTION_BACK:
+ if (!viewImpl->pageProxy->canGoBack())
+ return false;
+
+ viewImpl->pageProxy->goBack();
+ break;
+
+ case ELM_ACCESS_ACTION_READ: {
+ IntPoint localPoint = viewImpl->transformFromScene().mapPoint(IntPoint(actionInfo->x, actionInfo->y));
+ viewImpl->page()->moveScreenReaderFocusByPoint(localPoint);
+ break;
+ }
-Eina_Bool ScreenReaderProxy::backHandler(void* data, Evas_Object*, Elm_Access_Action_Info*)
-{
- EwkViewImpl* viewImpl = static_cast<EwkViewImpl*>(data);
- if (!viewImpl->pageProxy->canGoBack())
- return false;
+ default:
+ break;
+ }
- viewImpl->pageProxy->goBack();
return true;
}
-Eina_Bool ScreenReaderProxy::readHandler(void* data, Evas_Object*, Elm_Access_Action_Info* actionInfo)
+void ScreenReaderProxy::didSettingsChanged(keynode_t* keynode, void* data)
{
- if (!actionInfo)
- return false;
+ ScreenReaderProxy* screenReader = static_cast<ScreenReaderProxy*>(data);
- EwkViewImpl* viewImpl = static_cast<EwkViewImpl*>(data);
- IntPoint localPoint = viewImpl->transformFromScene().mapPoint(IntPoint(actionInfo->x, actionInfo->y));
-
- viewImpl->page()->moveScreenReaderFocusByPoint(localPoint);
+ int enabled;
+ screenReader->m_enabled = (!vconf_get_bool(VCONFKEY_SETAPPL_ACCESSIBILITY_TTS, &enabled) && enabled);
- return true;
+ if (!screenReader->m_enabled) {
+ while (!screenReader->m_viewImplSet.isEmpty())
+ screenReader->removeViewImpl(screenReader->m_viewImplSet[0]);
+ }
}
void ScreenReaderProxy::didTTSStateChanged(tts_h, tts_state_e, tts_state_e currentState, void*)