[A11Y-SCRRD-MOB-FREQ-009] Review the rest of screen from next UI element
authorMichal Skorupinski <m.skorupinsk@samsung.com>
Tue, 16 Jun 2015 15:18:46 +0000 (17:18 +0200)
committerMichal Skorupinski <m.skorupinsk@samsung.com>
Thu, 25 Jun 2015 12:43:03 +0000 (14:43 +0200)
Change-Id: Ice83659cfef1736f6256b4d83f74fee282526f34
Signed-off-by: Michal Skorupinski <m.skorupinsk@samsung.com>
include/screen_reader_tts.h
src/navigator.c
src/screen_reader_tts.c

index 00e4405..df26d31 100644 (file)
@@ -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_ */
index 5e90eb6..bde45f2 100644 (file)
@@ -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();
index 49eeb73..6b1bfa6 100644 (file)
@@ -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;