[FIX] Turning the pause mode off when fucused widget is changed
authorMichal Skorupinski <m.skorupinsk@samsung.com>
Wed, 29 Jul 2015 12:41:37 +0000 (14:41 +0200)
committerMichal Skorupinski <m.skorupinsk@samsung.com>
Thu, 30 Jul 2015 14:54:42 +0000 (16:54 +0200)
Change-Id: I59c8a2baf19e99e663bd89a590b5a4edfc426f25
Signed-off-by: Michal Skorupinski <m.skorupinsk@samsung.com>
include/screen_reader_tts.h
src/navigator.c
src/screen_reader_tts.c

index bb869a3..9c039f1 100644 (file)
@@ -14,6 +14,7 @@ void state_changed_cb(tts_h tts, tts_state_e previous, tts_state_e current, void
 void tts_speak(char *text_to_speak, Eina_Bool flush_switch);
 void spi_stop(void *data);
 
+void tts_stop_set(void);
 Eina_Bool tts_pause_get(void);
 Eina_Bool tts_pause_set(Eina_Bool pause_switch);
 
index e52e3a5..1b24d32 100644 (file)
@@ -287,7 +287,7 @@ _check_list_children_count(AtspiAccessible *obj)
       {
          int children_count = atspi_accessible_get_child_count(obj, NULL);
 
-         for (i=0;i<children_count;i++)
+         for (i=0; i<children_count; i++)
             {
                child = atspi_accessible_get_child_at_index(obj, i, NULL);
                if (atspi_accessible_get_role(child, NULL) == ATSPI_ROLE_LIST_ITEM)
@@ -311,7 +311,7 @@ _find_popup_list_children_count(AtspiAccessible *obj)
    if (list_items_count > 0)
       return list_items_count;
 
-   for (i=0;i<children_count;i++)
+   for (i=0; i<children_count; i++)
       {
          child = atspi_accessible_get_child_at_index(obj, i, NULL);
          list_items_count = _find_popup_list_children_count(child);
@@ -530,10 +530,17 @@ _current_highlight_object_set(AtspiAccessible *obj)
          current_comp = comp;
          GERROR_CHECK(err)
 
+         Eina_Bool is_paused = tts_pause_get();
+         if(is_paused)
+            {
+               tts_stop_set();
+               tts_pause_set(EINA_FALSE);
+            }
          current_obj = obj;
          char *text_to_speak = NULL;
          text_to_speak = generate_what_to_read(obj);
          DEBUG("SPEAK:%s", text_to_speak);
+
          tts_speak(text_to_speak, EINA_TRUE);
          g_free(text_to_speak);
       }
@@ -584,26 +591,26 @@ static void _focus_widget(Gesture_Info *info)
 {
    DEBUG("START");
    if (info->type == ONE_FINGER_HOVER)
-     {
-        if (_last_hover_event_time < 0)
-           _last_hover_event_time = info->event_time;
-        //info->event_time and _last_hover_event_time contain timestamp in ms.
-        if (info->event_time - _last_hover_event_time < ONGOING_HOVER_GESTURE_INTERPRETATION_INTERVAL && info->state == 1)
-           return;
+      {
+         if (_last_hover_event_time < 0)
+            _last_hover_event_time = info->event_time;
+         //info->event_time and _last_hover_event_time contain timestamp in ms.
+         if (info->event_time - _last_hover_event_time < ONGOING_HOVER_GESTURE_INTERPRETATION_INTERVAL && info->state == 1)
+            return;
 
-        _last_hover_event_time = info->state != 1 ? -1 : info->event_time;
-     }
+         _last_hover_event_time = info->state != 1 ? -1 : info->event_time;
+      }
 
    if ((last_focus.x == info->x_beg) && (last_focus.y == info->y_beg))
       return;
 
    AtspiAccessible *obj = NULL;
    if (flat_navi_context_current_at_x_y_set(context, info->x_beg, info->y_beg, &obj))
-     {
-        last_focus.x = info->x_beg;
-        last_focus.y = info->y_beg;
-        _current_highlight_object_set(obj);
-     }
+      {
+         last_focus.x = info->x_beg;
+         last_focus.y = info->y_beg;
+         _current_highlight_object_set(obj);
+      }
 
    DEBUG("END");
 }
@@ -1833,7 +1840,7 @@ _view_content_changed(AtspiAccessible *root, void *user_data)
 {
    DEBUG("START");
    if (flat_navi_is_valid(context, root))
-       return;
+      return;
    flat_navi_context_free(context);
    context = flat_navi_context_create(root);
    _current_highlight_object_set(flat_navi_context_current_get(context));
index 76cde12..2166d4a 100644 (file)
@@ -174,6 +174,11 @@ Eina_Bool tts_pause_get(void)
    return pause_state;
 }
 
+void tts_stop_set(void)
+{
+   Service_Data *sd = get_pointer_to_service_data_struct();
+   tts_stop(sd->tts);
+}
 
 Eina_Bool tts_pause_set(Eina_Bool pause_switch)
 {
@@ -216,25 +221,25 @@ void tts_speak(char *text_to_speak, Eina_Bool flush_switch)
    tts_get_state(sd->tts, &state);
 
    if (state != TTS_STATE_PLAYING &&
-          state != TTS_STATE_PAUSED &&
-          state != TTS_STATE_READY)
-     {
-        if (text_to_speak) _text_keep(text_to_speak);
-        return;
-     }
+         state != TTS_STATE_PAUSED &&
+         state != TTS_STATE_READY)
+      {
+         if (text_to_speak) _text_keep(text_to_speak);
+         return;
+      }
 
    if (flush_flag || flush_switch)
-     {
-        if (state == TTS_STATE_PLAYING ||
-            state == TTS_STATE_PAUSED)
-          {
-             ret = tts_stop(sd->tts);
-             if (TTS_ERROR_NONE != ret)
-               {
-                  DEBUG("Fail to stop TTS: resultl(%d)", ret);
-               }
-          }
-     }
+      {
+         if (state == TTS_STATE_PLAYING ||
+               state == TTS_STATE_PAUSED)
+            {
+               ret = tts_stop(sd->tts);
+               if (TTS_ERROR_NONE != ret)
+                  {
+                     DEBUG("Fail to stop TTS: resultl(%d)", ret);
+                  }
+            }
+      }
 
    DEBUG( "tts_speak\n");
    DEBUG( "text to say:%s\n", text_to_speak);
@@ -242,28 +247,29 @@ void tts_speak(char *text_to_speak, Eina_Bool flush_switch)
    if ( !text_to_speak[0] ) return;
 
    if((ret = tts_add_text( sd->tts, text_to_speak, NULL, TTS_VOICE_TYPE_AUTO, TTS_SPEED_AUTO, &speak_id)))
-   {
-       switch(ret) {
-       case TTS_ERROR_INVALID_PARAMETER:
-           DEBUG("FAILED tts_add_text: error: TTS_ERROR_INVALID_PARAMETER");
-           break;
-       case TTS_ERROR_INVALID_STATE:
-         DEBUG("FAILED tts_add_text: error: TTS_ERROR_INVALID_STATE, tts_state: %d", state);
-         break;
-       case TTS_ERROR_INVALID_VOICE:
-         DEBUG("FAILED tts_add_text: error: TTS_ERROR_INVALID_VOICE");
-         break;
-       case TTS_ERROR_OPERATION_FAILED:
-         DEBUG("FAILED tts_add_text: error: TTS_ERROR_OPERATION_FAILED");
-         break;
-       case TTS_ERROR_NOT_SUPPORTED:
-         DEBUG("FAILED tts_add_text: error: TTS_ERROR_NOT_SUPPORTED");
-         break;
-       default:
-         DEBUG("FAILED tts_add_text: error: not recognized");
-       }
-      return;
-   }
+      {
+         switch(ret)
+            {
+            case TTS_ERROR_INVALID_PARAMETER:
+               DEBUG("FAILED tts_add_text: error: TTS_ERROR_INVALID_PARAMETER");
+               break;
+            case TTS_ERROR_INVALID_STATE:
+               DEBUG("FAILED tts_add_text: error: TTS_ERROR_INVALID_STATE, tts_state: %d", state);
+               break;
+            case TTS_ERROR_INVALID_VOICE:
+               DEBUG("FAILED tts_add_text: error: TTS_ERROR_INVALID_VOICE");
+               break;
+            case TTS_ERROR_OPERATION_FAILED:
+               DEBUG("FAILED tts_add_text: error: TTS_ERROR_OPERATION_FAILED");
+               break;
+            case TTS_ERROR_NOT_SUPPORTED:
+               DEBUG("FAILED tts_add_text: error: TTS_ERROR_NOT_SUPPORTED");
+               break;
+            default:
+               DEBUG("FAILED tts_add_text: error: not recognized");
+            }
+         return;
+      }
 
    DEBUG("added id to:%d\n", speak_id);
    last_utt_id = speak_id;
@@ -310,28 +316,28 @@ void state_changed_cb(tts_h tts, tts_state_e previous, tts_state_e current, void
    Service_Data *sd = user_data;
 
    if (TTS_STATE_CREATED == previous && TTS_STATE_READY == current)
-     {
+      {
 
-       update_supported_voices(sd);
+         update_supported_voices(sd);
 
-       char *txt;
+         char *txt;
 
-       if (!txt_keep_buff) return;
-       if (!eina_strbuf_length_get(txt_keep_buff)) return;
+         if (!txt_keep_buff) return;
+         if (!eina_strbuf_length_get(txt_keep_buff)) return;
 
-       txt = eina_strbuf_string_steal(txt_keep_buff);
-       eina_strbuf_free(txt_keep_buff);
-       txt_keep_buff = NULL;
+         txt = eina_strbuf_string_steal(txt_keep_buff);
+         eina_strbuf_free(txt_keep_buff);
+         txt_keep_buff = NULL;
 
-       tts_speak(txt, EINA_FALSE);
-       tts_play(sd->tts);
-       free(txt);
-     }
+         tts_speak(txt, EINA_FALSE);
+         tts_play(sd->tts);
+         free(txt);
+      }
    else if (current == TTS_STATE_READY || current == TTS_STATE_PAUSED)
-     {
+      {
          DEBUG("TTS state == %s!", get_tts_state(current));
          tts_play(sd->tts);
-     }
+      }
    else
       {
          DEBUG("TTS state != ready or paused!\n");