return FALSE;
}
-static void _read_value(AtspiValue *value)
+static void _read_value(AtspiAccessible *obj)
{
- if (!value)
+ if (!obj)
return;
- int accuracy = get_accuracy(atspi_value_get_minimum_increment(value, NULL), 3);
-
- double add_for_rounding = 0.5f;
- int mul_for_rounding = 1;
- int count = 0;
- for (count = 0; count < accuracy; count++) {
- add_for_rounding *= 0.1f;
- mul_for_rounding *= 10;
- }
-
- int current_val = (int)((atspi_value_get_current_value(value, NULL) + add_for_rounding) * mul_for_rounding);
- int max_val = (int)((atspi_value_get_maximum_value(value, NULL) + add_for_rounding) * mul_for_rounding);
- int min_val = (int)((atspi_value_get_minimum_value(value, NULL) + add_for_rounding) * mul_for_rounding);
-
- int percent = ((current_val - min_val) / (double)(abs(max_val - min_val))) * 100;
- char buf[256] = "\0";
- char buf_percent[64] = "\0";
- g_snprintf(buf_percent, sizeof(buf_percent), "%d", percent);
- SUPPRESS_FORMAT_ERROR(g_snprintf(buf, sizeof(buf), _("IDS_GCTS_OPT_P1SS_PERCENT_TTS"), buf_percent));
- DEBUG("has value %s", buf);
- tw_speak(buf, EINA_TRUE);
+ char* text_to_speak = NULL;
+ ReadingComposerData *rcd = reading_composer_data_get(obj);
+ text_to_speak = reading_composer_percent_value_description_get(rcd);
+ reading_composer_data_free(rcd);
+ tw_speak(text_to_speak, EINA_TRUE);
+ free(text_to_speak);
}
static void timer_reschedule(App_Tracker_Data *atd)
goto end;
} else if (!g_strcmp0(event->type, "object:property-change:accessible-value")) { // for reading slider and spinner value changes
if (role == ATSPI_ROLE_SLIDER && (get_objects_attributes(event->source) & ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION)) {
- AtspiValue *value_interface = atspi_accessible_get_value_iface(event->source);
- _read_value(value_interface);
- g_object_unref(value_interface);
+ _read_value(event->source);
} else if (role == ATSPI_ROLE_FILLER) {
gchar *name = atspi_accessible_get_name(event->source, NULL);
if (!name) {
DEBUG("END");
}
-TIZEN_PROD_STATIC void add_slider_description(Eina_Strbuf *buf, AtspiAccessibleReadingMaterial *rm)
+TIZEN_PROD_STATIC int get_percent_value_from_rm(AtspiAccessibleReadingMaterial *rm)
{
- char trait[HOVERSEL_TRAIT_SIZE] = "";
-
- int accuracy = get_accuracy(rm->increment, 3);
-
- double add_for_rounding = 0.5f;
- int mul_for_rounding = 1;
- int count = 0;
- for (count = 0; count < accuracy; count++) {
- add_for_rounding *= 0.1f;
- mul_for_rounding *= 10;
- }
-
- int val = (int)((rm->value + add_for_rounding) * mul_for_rounding);
- int max_val = (int)((rm->upper + add_for_rounding) * mul_for_rounding);
- int min_val = (int)((rm->lower + add_for_rounding) * mul_for_rounding);
-
- int percent;
- if (min_val >= max_val)
- percent = 0;
- else if (val <= min_val)
- percent = 0;
- else if (val >= max_val)
- percent = 100;
- else
- percent = ((val - min_val) / (double)(abs(max_val - min_val))) * 100;
+ return get_percent_value(rm->value, rm->lower, rm->upper);
+}
+TIZEN_PROD_STATIC void add_percent_value_description(Eina_Strbuf *buf, int percent)
+{
char buf_percent[64] = "\0";
g_snprintf(buf_percent, sizeof(buf_percent), "%d", percent);
- SUPPRESS_FORMAT_ERROR(g_snprintf(trait, sizeof(trait), _("IDS_GCTS_OPT_P1SS_PERCENT_TTS"), buf_percent));
+ SUPPRESS_FORMAT_ERROR(eina_strbuf_append_printf(buf, _("IDS_GCTS_OPT_P1SS_PERCENT_TTS"), buf_percent));
+}
+
+TIZEN_PROD_STATIC void add_slider_description(Eina_Strbuf *buf, AtspiAccessibleReadingMaterial *rm)
+{
+ add_percent_value_description(buf, get_percent_value_from_rm(rm));
- if (STATE_SET_CONTAINS(rm->states, ATSPI_STATE_ENABLED))
- g_snprintf(trait + strlen(trait), sizeof(trait) - strlen(trait), " , %s", _IGNORE_ON_TV("IDS_TPLATFORM_BODY_FLICK_UP_AND_DOWN_TO_ADJUST_THE_POSITION_T_TTS"));
- ESAL(buf, trait);
+ if (STATE_SET_CONTAINS(rm->states, ATSPI_STATE_ENABLED)) {
+ ESAL(buf, " , ");
+ ESAL(buf, _IGNORE_ON_TV("IDS_TPLATFORM_BODY_FLICK_UP_AND_DOWN_TO_ADJUST_THE_POSITION_T_TTS"));
+ }
}
TIZEN_PROD_STATIC char *generate_role_trait(AtspiAccessibleReadingMaterial *rm)
{
AtspiRole role = rm->role;
- char ret[TTS_MAX_TEXT_SIZE] = { [TTS_MAX_TEXT_SIZE - 1] = 0 };
+ char *ret = NULL;
+ Eina_Strbuf *buf;
+
+ buf = eina_strbuf_new();
+
switch (role) {
case ATSPI_ROLE_ENTRY:
case ATSPI_ROLE_PASSWORD_TEXT: {
if (parent_role == ATSPI_ROLE_SPIN_BUTTON && STATE_SET_CONTAINS(rm->states, ATSPI_STATE_FOCUSED))
break;
}
- g_snprintf(ret, sizeof(ret), "%s", _("IDS_TPLATFORM_BODY_EDIT_FIELD_M_NOUN_T_TTS"));
+ ESAL(buf, _("IDS_TPLATFORM_BODY_EDIT_FIELD_M_NOUN_T_TTS"));
break;
}
case ATSPI_ROLE_COMBO_BOX: {
int children_count = rm->child_count;
- char buf[TTS_MAX_TEXT_SIZE] = "";
- g_snprintf(ret, sizeof(ret), "%s", _("IDS_ACCS_BODY_DROPDOWN_LIST_TTS"));
- SUPPRESS_FORMAT_ERROR(g_snprintf(buf, sizeof(buf), _("IDS_WEBVIEW_BODY_SHOWING_PD_ITEMS_TTS"), children_count));
- g_strlcat(ret, " ", sizeof(ret) - strlen(ret) - 1);
- g_strlcat(ret, buf, sizeof(ret) - strlen(ret) - 1);
+ ESAL(buf, _("IDS_ACCS_BODY_DROPDOWN_LIST_TTS"));
+ ESAL(buf, " ");
+ SUPPRESS_FORMAT_ERROR(eina_strbuf_append_printf(buf, _("IDS_WEBVIEW_BODY_SHOWING_PD_ITEMS_TTS"), children_count));
break;
}
case ATSPI_ROLE_GLASS_PANE: {
AtspiAccessible *parent = rm->parent;
if (parent) {
int children_count = rm->parent_child_count;
- char buf[TTS_MAX_TEXT_SIZE] = "";
- g_snprintf(ret, sizeof(ret), "%s", _("IDS_ACCS_BODY_DROPDOWN_LIST_TTS"));
- SUPPRESS_FORMAT_ERROR(g_snprintf(buf, sizeof(buf), _("IDS_WEBVIEW_BODY_SHOWING_PD_ITEMS_TTS"), children_count));
- g_strlcat(ret, " ", sizeof(ret) - strlen(ret) - 1);
- g_strlcat(ret, buf, sizeof(ret) - strlen(ret) - 1);
+ ESAL(buf, _("IDS_ACCS_BODY_DROPDOWN_LIST_TTS"));
+ ESAL(buf, " ");
+ SUPPRESS_FORMAT_ERROR(eina_strbuf_append_printf(buf, _("IDS_WEBVIEW_BODY_SHOWING_PD_ITEMS_TTS"), children_count));
}
break;
}
AtspiAccessible *parent = rm->parent;
if (parent) {
if (STATE_SET_CONTAINS(rm->parent_states, ATSPI_STATE_ANIMATED)) {
- g_strlcpy(ret, _("IDS_GALLERY_OPT_REORDER"), sizeof(ret) - 1);
- g_strlcat(ret, " , ", sizeof(ret) - strlen(ret) - 1);
- g_strlcat(ret, _("IDS_ACCS_BODY_BUTTON_TTS"), sizeof(ret) - strlen(ret) - 1);
+ ESAL(buf, _("IDS_GALLERY_OPT_REORDER"));
+ ESAL(buf, " , ");
+ ESAL(buf, _("IDS_ACCS_BODY_BUTTON_TTS"));
}
}
break;
}
case ATSPI_ROLE_PUSH_BUTTON: {
- g_strlcpy(ret, _("IDS_ACCS_BODY_BUTTON_TTS"), sizeof(ret) - 1);
+ ESAL(buf, _("IDS_ACCS_BODY_BUTTON_TTS"));
break;
}
case ATSPI_ROLE_PROGRESS_BAR: {
double val = rm->value;
if (val > 0) {
- char buf[255];
- g_snprintf(buf, sizeof(buf), "%.0f", val * 100);
- SUPPRESS_FORMAT_ERROR(g_snprintf(ret, sizeof(ret), _("IDS_GCTS_OPT_P1SS_PERCENT_TTS"), buf));
+ add_percent_value_description(buf, get_percent_value_from_rm(rm));
}
break;
}
case ATSPI_ROLE_SLIDER: {
gchar *role_name = rm->localized_role_name;
if (role_name)
- g_strlcat(ret, role_name, sizeof(ret) - strlen(ret) - 1);
+ ESAL(buf, role_name);
break;
}
case ATSPI_ROLE_SCROLL_BAR: {
if (hash_table) {
const char *style = g_hash_table_lookup(hash_table, "style");
if (!g_strcmp0(style, "default"))
- g_snprintf(ret, sizeof(ret), "%s", _("IDS_ACCS_TBOPT_ALPHABETICAL_INDEX_BAR"));
+ ESAL(buf, _("IDS_ACCS_TBOPT_ALPHABETICAL_INDEX_BAR"));
}
break;
}
default: {
gchar *role_name = rm->localized_role_name;
if (role_name)
- g_strlcpy(ret, role_name, sizeof(ret) - 1);
+ ESAL(buf, role_name);
}
}
+ ret = eina_strbuf_string_steal(buf);
+ eina_strbuf_free(buf);
- return g_strdup(ret);
+ return ret;
}
TIZEN_PROD_STATIC char *generate_state_trait(AtspiAccessibleReadingMaterial *rm)
break;
}
case ATSPI_ROLE_PROGRESS_BAR: {
- ESAL(buf, _("IDS_ACCS_TBBODY_IN_PROGRESS"));
+ int percent = get_percent_value_from_rm(rm);
+ if (percent < 100) {
+ ESAL(buf, _("IDS_ACCS_TBBODY_IN_PROGRESS"));
+ }
break;
}
case ATSPI_ROLE_SLIDER: {
return ext_desc;
}
+char* reading_composer_percent_value_description_get(ReadingComposerData *data) {
+ Eina_Strbuf *buf = NULL;
+ AtspiAccessibleReadingMaterial *rm;
+
+ if (!data)
+ return NULL;
+
+ rm = data;
+
+ buf = eina_strbuf_new();
+ if (!buf) {
+ ERROR("CRITICAL: Memory allocation failed!");
+ return NULL;
+ }
+
+ add_percent_value_description(buf, get_percent_value_from_rm(rm));
+
+ char *percent_value_description = eina_strbuf_string_steal(buf);
+ eina_strbuf_free(buf);
+ return percent_value_description;
+}
+
ReadingComposerData* reading_composer_data_get(AtspiAccessible *obj)
{
return obj ? atspi_accessible_get_reading_material(obj, NULL) : NULL;