From 0d6f079063fff7653ade9433f44492a973d0ff2a Mon Sep 17 00:00:00 2001 From: Michal Skorupinski Date: Tue, 16 Jun 2015 17:18:46 +0200 Subject: [PATCH] [A11Y-SCRRD-MOB-FREQ-009] Review the rest of screen from next UI element Change-Id: Ice83659cfef1736f6256b4d83f74fee282526f34 Signed-off-by: Michal Skorupinski --- include/screen_reader_tts.h | 2 ++ src/navigator.c | 72 +++++++++++++++++++++++++++++++++++++++++++++ src/screen_reader_tts.c | 12 +++++++- 3 files changed, 85 insertions(+), 1 deletion(-) diff --git a/include/screen_reader_tts.h b/include/screen_reader_tts.h index 00e4405..df26d31 100644 --- a/include/screen_reader_tts.h +++ b/include/screen_reader_tts.h @@ -17,4 +17,6 @@ void spi_stop(void *data); Eina_Bool tts_pause_get(void); Eina_Bool tts_pause_set(Eina_Bool pause_switch); +void set_utterance_cb( void(*utter_cb)(void)); + #endif /* SCREEN_READER_TTS_H_ */ diff --git a/src/navigator.c b/src/navigator.c index 5e90eb6..bde45f2 100644 --- a/src/navigator.c +++ b/src/navigator.c @@ -52,6 +52,16 @@ static AtspiAccessible *top_window; static Eina_Bool _window_cache_builded; static FlatNaviContext *context; +static struct +{ + AtspiAccessible *focused_object; + bool auto_review_on; +} s_auto_review = +{ + .focused_object = NULL, + .auto_review_on = false +}; + char * state_to_char(AtspiStateType state) { @@ -1384,6 +1394,61 @@ static void _set_pause(void ) DEBUG("END"); } +void auto_review_highlight_set(void) +{ + AtspiAccessible *obj = flat_navi_context_next(context); + + DEBUG("START"); + + if(!obj) + { + obj = flat_navi_context_line_next(context); + DEBUG(">>> NEW LINE <<<"); + } + + if(!obj) + { + s_auto_review.auto_review_on = false; + return; + } + + _current_highlight_object_set(obj); + + DEBUG("END"); +} + + +static void _on_auto_review_stop(void) +{ + DEBUG("START"); + s_auto_review.auto_review_on = false; + DEBUG("END"); +} + +static void _on_utterance(void) +{ + DEBUG("START"); + DEBUG("s_auto_review.auto_review_on == %d", s_auto_review.auto_review_on); + + if(s_auto_review.auto_review_on) + { + auto_review_highlight_set(); + } + DEBUG("END"); +} + + +static void _review_from_current(void) +{ + DEBUG("START"); + + s_auto_review.focused_object = flat_navi_context_current_get(context); + s_auto_review.auto_review_on = true; + auto_review_highlight_set(); + + DEBUG("END"); +} + static void _direct_scroll_back(void) { @@ -1578,6 +1643,7 @@ _is_active_entry(void) static void on_gesture_detected(void *data, Gesture_Info *info) { dbus_gesture_adapter_emit(info); + _on_auto_review_stop(); switch(info->type) { @@ -1617,6 +1683,9 @@ static void on_gesture_detected(void *data, Gesture_Info *info) case TWO_FINGERS_TRIPLE_TAP: _read_quickpanel(); break; + case THREE_FINGERS_DOUBLE_TAP: + _review_from_current(); + break; case THREE_FINGERS_FLICK_DOWN: _quickpanel_change_state(QUICKPANEL_DOWN); break; @@ -1717,6 +1786,9 @@ void kb_tracker (void *data, Key k) void navigator_init(void) { DEBUG("START"); + + set_utterance_cb(_on_utterance); + screen_reader_gestures_tracker_register(on_gesture_detected, NULL); // register on active_window dbus_gesture_adapter_init(); diff --git a/src/screen_reader_tts.c b/src/screen_reader_tts.c index 49eeb73..6b1bfa6 100644 --- a/src/screen_reader_tts.c +++ b/src/screen_reader_tts.c @@ -12,6 +12,8 @@ static int last_utt_id; static Eina_Bool pause_state = EINA_FALSE; static Eina_Bool flush_flag = EINA_FALSE; +static void(*on_utterance_end)(void); + static char * get_tts_error( int r ) { switch( r ) @@ -72,6 +74,12 @@ static char * get_tts_state( tts_state_e r ) //------------------------------------------------------------------------------------------------- +void set_utterance_cb( void(*uter_cb)(void)) +{ + on_utterance_end = uter_cb; +} + + bool get_supported_voices_cb(tts_h tts, const char* language, int voice_type, void* user_data) { DEBUG("LANG: %s; TYPE: %d", language, voice_type); @@ -119,6 +127,8 @@ static void __tts_test_utt_completed_cb(tts_h tts, int utt_id, void* user_data) { DEBUG("LAST UTTERANCE"); pause_state = EINA_FALSE; + on_utterance_end(); + } return; @@ -141,7 +151,7 @@ bool tts_init(void *data) tts_set_state_changed_cb(sd->tts, state_changed_cb, sd); tts_set_utterance_started_cb(sd->tts, __tts_test_utt_started_cb, sd); - tts_set_utterance_completed_cb( sd->tts, __tts_test_utt_completed_cb, sd); + tts_set_utterance_completed_cb(sd->tts, __tts_test_utt_completed_cb, sd); DEBUG( "---------------------- TTS_init END ----------------------\n\n"); return true; -- 2.7.4