navigator: fix wrong text read when a slider is selected.
authorBartlomiej Uliasz <b.uliasz@samsung.com>
Thu, 24 Sep 2015 10:00:39 +0000 (12:00 +0200)
committerBartlomiej Uliasz <b.uliasz@samsung.com>
Mon, 5 Oct 2015 12:22:23 +0000 (21:22 +0900)
Fix of text read when slider is selected.

[UIFWAC-26]

Change-Id: I987e8b958decfd4699f5b670d524fa720fa231a8
Signed-off-by: Bartlomiej Uliasz <b.uliasz@samsung.com>
res/po/en_US.po
src/navigator.c

index 8a1ec3d..04325e4 100644 (file)
@@ -1,4 +1,10 @@
 
+msgid "IDS_TRAIT_SLIDER_SWIPE_COMMUNICATE"
+msgstr "flick up and down to adjust the position. "
+
+msgid "IDS_TRAIT_SLIDER_VALUE"
+msgstr " from %.*f to %.*f, current value %.*f, "
+
 msgid "IDS_SCROLLING_FINISHED"
 msgstr "Scrolling finished"
 
@@ -217,3 +223,4 @@ msgstr "selected"
 
 msgid "IDS_TRAIT_ITEM_SELECTED_COUNT"
 msgstr "%d selected in total"
+
index 7cb8488..43abbfd 100644 (file)
@@ -357,6 +357,64 @@ static int _find_popup_list_children_count(AtspiAccessible * obj)
        return 0;
 }
 
+static bool _widget_has_state(AtspiAccessible * obj, AtspiStateType type)
+{
+       Eina_Bool ret = EINA_FALSE;
+       AtspiStateSet *st = atspi_accessible_get_state_set(obj);
+       if (atspi_state_set_contains(st, type))
+               ret = EINA_TRUE;
+       g_object_unref(st);
+       return ret;
+}
+
+int get_accuracy(double val, int max_accuracy)
+{
+       char val_str[HOVERSEL_TRAIT_SIZE] = "";
+       int position;
+       int accuracy;
+
+       snprintf(val_str, HOVERSEL_TRAIT_SIZE, "%.*f", max_accuracy, val);
+       accuracy = max_accuracy;
+       position = strlen(val_str) - 1;
+       while ( position > 0 && val_str[position] == '0' ) {
+               --position;
+               --accuracy;
+       }
+       return accuracy;
+}
+
+void add_slider_description(char *dest, uint dest_size, AtspiAccessible *obj)
+{
+       gchar *role_name;
+       AtspiValue *value_iface;
+       double val;
+       double min_val;
+       double max_val;
+       char trait[HOVERSEL_TRAIT_SIZE] = "";
+       int accuracy;
+
+       role_name = atspi_accessible_get_localized_role_name(obj, NULL);
+       strncat(dest, role_name, dest_size - strlen(dest) - 1);
+       g_free(role_name);
+
+       value_iface = atspi_accessible_get_value_iface(obj);
+       if (!value_iface) {
+               return;
+       }
+
+       accuracy = get_accuracy( atspi_value_get_minimum_increment(value_iface, NULL), 3 );
+       val = atspi_value_get_current_value(value_iface, NULL);
+       max_val = atspi_value_get_maximum_value(value_iface, NULL);
+       min_val = atspi_value_get_minimum_value(value_iface, NULL);
+       snprintf(trait, HOVERSEL_TRAIT_SIZE, _("IDS_TRAIT_SLIDER_VALUE"), accuracy, min_val, accuracy, max_val, accuracy, val);
+       strncat(dest, trait, dest_size - strlen(dest) - 1);
+
+       if (_widget_has_state(obj, ATSPI_STATE_ENABLED)) {
+               strncat(dest, _("IDS_TRAIT_SLIDER_SWIPE_COMMUNICATE"), dest_size - strlen(dest) - 1);
+       }
+       g_object_unref(value_iface);
+}
+
 char *generate_trait(AtspiAccessible * obj)
 {
        if (!obj)
@@ -551,6 +609,10 @@ char *generate_trait(AtspiAccessible * obj)
                }
                break;
        }
+       case ATSPI_ROLE_SLIDER: {
+               add_slider_description(ret, sizeof(ret), obj);
+               break;
+       }
        case ATSPI_ROLE_HEADING:
        case ATSPI_ROLE_GROUPING: {
                break;
@@ -1158,16 +1220,6 @@ static void _value_dec(void)
        ERROR("No value interface supported!\n");
 }
 
-static bool _widget_has_state(AtspiAccessible * obj, AtspiStateType type)
-{
-       Eina_Bool ret = EINA_FALSE;
-       AtspiStateSet *st = atspi_accessible_get_state_set(obj);
-       if (atspi_state_set_contains(st, type))
-               ret = EINA_TRUE;
-       g_object_unref(st);
-       return ret;
-}
-
 static void _activate_widget(void)
 {
        //activate the widget