#define LANGUAGE_NAME_SIZE 6
+#define FOCUS_CHANGED_SIG "object:state-changed:focused"
#define HIGHLIGHT_CHANGED_SIG "object:state-change:highlighted"
#define VALUE_CHANGED_SIG "object:property-change:accessible-value"
#define CARET_MOVED_SIG "object:text-caret-moved"
%setup -q
%build
+%if "%{?tizen_profile_name}" == "tv"
+ export CFLAGS+=" -DSCREEN_READER_TV"
+%endif
+
rm -rf CMakeFiles CMakeCache.txt && cmake . -DCMAKE_INSTALL_PREFIX="%{AppInstallPath}" -DCMAKE_TARGET="%{Exec}" -DCMAKE_PACKAGE="%{name}"
make %{?jobs:-j%jobs} \
2>&1 | sed \
elm_init(0, NULL);
logger_init();
- screen_reader_gestures_init();
screen_reader_create_service(data);
+
+#ifndef SCREEN_READER_TV
+ screen_reader_gestures_init();
navigator_init();
+#endif
return 0;
}
{
screen_reader_terminate_service(data);
+#ifndef SCREEN_READER_TV
navigator_shutdown();
screen_reader_gestures_shutdown();
+#endif
+
eldbus_shutdown();
logger_shutdown();
return 0;
{
//Set by vconf
.run_service = 1,
+#ifdef SCREEN_READER_TV
+ .tracking_signal_name = FOCUS_CHANGED_SIG,
+#else
.tracking_signal_name = HIGHLIGHT_CHANGED_SIG,
-
+#endif
//Set by tts
.tts = NULL,
vconf_init(service_data);
tts_init(service_data);
+#ifdef SCREEN_READER_TV
+ spi_init(service_data);
+#endif
/* XML TEST */
-
#ifdef RUN_IPC_TEST_SUIT
run_xml_tests();
test_suite_init();
{
AtspiAccessible *source = event->source;
gchar *name = atspi_accessible_get_name(source, NULL);
- gchar *role = atspi_accessible_get_role_name(source, NULL);
+ gchar *role = atspi_accessible_get_localized_role_name(source, NULL);
gchar *toolkit = atspi_accessible_get_toolkit_name(source, NULL);
DEBUG("--------------------------------------------------------");
description = atspi_accessible_get_description(sd->currently_focused, NULL);
name = atspi_accessible_get_name(sd->currently_focused, NULL);
- role_name = atspi_accessible_get_role_name(sd->currently_focused, NULL);
+ role_name = atspi_accessible_get_localized_role_name(sd->currently_focused, NULL);
other = generate_description_for_subtree(sd->currently_focused);
DEBUG("->->->->->-> WIDGET GAINED HIGHLIGHT: %s <-<-<-<-<-<-<-", name);
void spi_event_listener_cb(AtspiEvent *event, void *user_data)
{
DEBUG("START")
-
display_info(event);
if(!user_data)
ERROR("Can not prepare text to read");
return;
}
- DEBUG("SPEAK:%s", text_to_read)
+ DEBUG("SPEAK: %s", text_to_read)
tts_speak(text_to_read, EINA_FALSE);
+
+ tts_state_e state;
+ Service_Data *sd = (Service_Data*)user_data;
+ tts_get_state(sd->tts, &state);
+
+ if (state == TTS_STATE_READY || state == TTS_STATE_PAUSED)
+ {
+ int ret = tts_play(sd->tts);
+ if (TTS_ERROR_NONE != ret)
+ ERROR("Fail to play TTS : ret(%d)", ret);
+ }
+ else
+ {
+ DEBUG("Current tts state: %d", state);
+ }
+
free(text_to_read);
DEBUG("END")
}
{
DEBUG("FAILED TO REGISTER spi focus/highlight listener");
}
-
- gboolean ret2 = atspi_event_listener_register(sd->spi_listener, CARET_MOVED_SIG, NULL);
+ GError *error = NULL;
+ gboolean ret2 = atspi_event_listener_register(sd->spi_listener, CARET_MOVED_SIG, &error);
if(ret2 == false)
{
- DEBUG("FAILED TO REGISTER spi caret moved listener");
+ DEBUG("FAILED TO REGISTER spi caret moved listener: %s", error ? error->message : "no error message");
+ if (error)
+ g_clear_error(&error);
}
- gboolean ret3 = atspi_event_listener_register(sd->spi_listener, VALUE_CHANGED_SIG, NULL);
+ gboolean ret3 = atspi_event_listener_register(sd->spi_listener, VALUE_CHANGED_SIG, &error);
if(ret3 == false)
{
- DEBUG("FAILED TO REGISTER spi value changed listener");
+ DEBUG("FAILED TO REGISTER spi value changed listener: %s", error ? error->message : "no error message");
+ if (error)
+ g_clear_error(&error);
}
if(ret1 == true && ret2 == true && ret3 == true)
flush_flag = EINA_FALSE;
}
+#ifndef SCREEN_READER_TV
if(last_utt_id == utt_id)
{
DEBUG("LAST UTTERANCE");
pause_state = EINA_FALSE;
on_utterance_end();
-
}
+#endif
return;
}
int r = tts_create( &sd->tts );
DEBUG( "Create tts %d (%s)", r, get_tts_error( r ) );
- r = tts_set_mode( sd->tts, TTS_MODE_DEFAULT );
+ r = tts_set_mode( sd->tts, TTS_MODE_SCREEN_READER );
DEBUG( "Set tts mode SR %d (%s)", r, get_tts_error( r ) );
r = tts_prepare( sd->tts );
DEBUG( "text to say:%s\n", text_to_speak);
if ( !text_to_speak ) return;
if ( !text_to_speak[0] ) return;
-
- if(tts_add_text( sd->tts, text_to_speak, NULL, TTS_VOICE_TYPE_AUTO, TTS_SPEED_AUTO, &speak_id))
+ int ret = 0;
+ 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;
+ }
DEBUG("added id to:%d\n", speak_id);
last_utt_id = speak_id;
}
}
+gchar * atspi_accessible_get_localized_role_name (AtspiAccessible *obj, GError **error)
+{
+ if(!obj) return strdup("\0");
+ AtspiRole role = obj->role;
+ switch(role)
+ {
+ case ATSPI_ROLE_APPLICATION:
+ return strdup("Application");
+ case ATSPI_ROLE_PUSH_BUTTON:
+ return strdup("Push button");
+ case ATSPI_ROLE_ICON:
+ return strdup("Icon");
+ case ATSPI_ROLE_CHECK_BOX:
+ return strdup("Check box");
+ case ATSPI_ROLE_ENTRY:
+ return strdup("Entry");
+ case ATSPI_ROLE_FILLER:
+ return strdup("filler");
+ default:
+ return strdup("\0");
+ }
+}
+
gchar * atspi_accessible_get_toolkit_name (AtspiAccessible *obj, GError **error)
{
return "fake atspi";
gchar * atspi_accessible_get_name (AtspiAccessible *obj, GError **error);
gchar * atspi_accessible_get_role_name (AtspiAccessible *obj, GError **error);
+gchar * atspi_accessible_get_localized_role_name (AtspiAccessible *obj, GError **error);
gchar * atspi_accessible_get_toolkit_name (AtspiAccessible *obj, GError **error);
gchar * atspi_accessible_get_description (AtspiAccessible *obj, GError **error);
AtspiText * atspi_accessible_get_text_iface (AtspiAccessible *obj);