static callui_result_e __callui_action_bar_init(callui_action_bar_h action_bar, callui_app_data_t *ad);
static void __callui_action_bar_deinit(callui_action_bar_h action_bar);
-static void __main_layout_del_cb(void *data, Evas *evas, Evas_Object *obj,void *event_info);
-static Evas_Object *__create_main_layout(callui_action_bar_h action_bar, Evas_Object *parent);
static Evas_Object *__create_action_button( callui_action_bar_h action_bar, callui_btn_type_e type);
static void __update_btns_state(callui_action_bar_h action_bar);
static void __update_all_btns_visibility(callui_action_bar_h action_bar, bool is_visible);
static void __keypad_show_state_change_cd(void *data, callui_keypad_state_event_e visibility);
+callui_result_e __create_ui_components(callui_action_bar_h action_bar);
+void __destroy_ui_components(callui_action_bar_h action_bar);
+
static void __speaker_btn_click_cb(void *data, Evas_Object *obj, void *event_info)
{
CALLUI_RETURN_IF_FAIL(data);
return CALLUI_RESULT_OK;
}
-static void __main_layout_del_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
-{
- CALLUI_RETURN_IF_FAIL(data);
-
- callui_action_bar_h action_bar = data;
- action_bar->main_layout = NULL;
- _callui_action_bar_destroy(action_bar);
-}
-
-/**
- * @brief Creates action bar main layout
- *
- * @param[in] action_bar Action bar handle
- * @param[in] parent Parent Evas_Object
- *
- * @return Action bar main layout on success or NULL otherwise
- */
-static Evas_Object *__create_main_layout(callui_action_bar_h action_bar, Evas_Object *parent)
-{
- Evas_Object *layout = _callui_create_layout(parent, CALLUI_LY_STYLE_ACTION_BAR);
-
- CALLUI_RETURN_NULL_IF_FAIL(layout);
- evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, __main_layout_del_cb, action_bar);
- return layout;
-}
-
/**
* @brief Creates action button by type
*
}
}
+callui_result_e __create_ui_components(callui_action_bar_h action_bar)
+{
+ action_bar->main_layout = _callui_create_layout(_callui_vm_get_main_ly(action_bar->ad->view_manager), CALLUI_LY_STYLE_ACTION_BAR);
+ CALLUI_RETURN_VALUE_IF_FAIL(action_bar->main_layout, CALLUI_RESULT_ALLOCATION_FAIL);
+
+ Evas_Object *btn;
+ int i = 0;
+ for (; i < CALLUI_ACTION_BTN_COUNT; i++) {
+ btn = __create_action_button(action_bar, i);
+ CALLUI_RETURN_VALUE_IF_FAIL(btn, CALLUI_RESULT_ALLOCATION_FAIL);
+ }
+
+ __update_btns_state(action_bar);
+
+ i = 0;
+ for (; i < CALLUI_ACTION_BTN_COUNT-1; i++) {
+ _callui_au_append_symmetric_relationship(action_bar->buttons[i],action_bar->buttons[i+1]);
+ }
+
+ return CALLUI_RESULT_OK;
+}
+
+void __destroy_ui_components(callui_action_bar_h action_bar)
+{
+ int i = 0;
+ for (; i < CALLUI_ACTION_BTN_COUNT-1; i++) {
+ action_bar->buttons[i] = NULL;
+ }
+ DELETE_EVAS_OBJECT(action_bar->main_layout);
+}
+
/**
* @brief Initializes action bar
*
_callui_keypad_add_show_status_change_cb(ad->keypad, __keypad_show_state_change_cd, action_bar);
- __update_btns_state(action_bar);
-
- action_bar->main_layout = __create_main_layout(action_bar, _callui_vm_get_main_ly(ad->view_manager));
- CALLUI_RETURN_VALUE_IF_FAIL(action_bar->main_layout, CALLUI_RESULT_ALLOCATION_FAIL);
-
- Evas_Object *btn;
- int i = 0;
- for (; i < CALLUI_ACTION_BTN_COUNT; i++) {
- btn = __create_action_button(action_bar, i);
- CALLUI_RETURN_VALUE_IF_FAIL(btn, CALLUI_RESULT_ALLOCATION_FAIL);
- }
-
- i = 0;
- for (; i < CALLUI_ACTION_BTN_COUNT-1; i++) {
- _callui_au_append_symmetric_relationship(action_bar->buttons[i],action_bar->buttons[i+1]);
- }
-
return CALLUI_RESULT_OK;
}
{
callui_app_data_t *ad = action_bar->ad;
- evas_object_event_callback_del_full(action_bar->main_layout,
- EVAS_CALLBACK_DEL, __main_layout_del_cb, action_bar);
-
_callui_sdm_remove_audio_state_changed_cb(ad->sound_manager, __audio_state_changed_cb, action_bar);
_callui_sdm_remove_mute_state_changed_cb(ad->sound_manager, __mute_state_changed_cb, action_bar);
_callui_stp_remove_call_state_event_cb(ad->state_provider, __call_state_event_cb, action_bar);
_callui_keypad_remove_show_status_change_cb(ad->keypad, __keypad_show_state_change_cd, action_bar);
- int i = 0;
- for (; i < CALLUI_ACTION_BTN_COUNT; i++) {
- evas_object_smart_callback_del_full(action_bar->buttons[i], "clicked",
- btn_params[i].click_cb_func, ad);
- }
-
- evas_object_del(action_bar->main_layout);
+ __destroy_ui_components(action_bar);
}
/**
}
/**
- * @brief Updates action button text
- *
- * @param[in] action_bar Action bar handle
- */
-static void __update_btns_txt(callui_action_bar_h action_bar)
-{
- int i = 0;
- for (; i < CALLUI_ACTION_BTN_COUNT; i++) {
- elm_object_translatable_text_set(action_bar->buttons[i], btn_params[i].txt);
- }
-}
-
-/**
* @brief Shows action bar
*
* @param[in] action_bar Action bar handle
{
CALLUI_RETURN_IF_FAIL(action_bar);
- __update_btns_txt(action_bar);
+ CALLUI_RETURN_IF_FAIL(__create_ui_components(action_bar) == CALLUI_RESULT_OK);
- Evas_Object *view_layout = elm_object_part_content_get(
- _callui_vm_get_main_ly(action_bar->ad->view_manager), "elm.swallow.content");
+ Evas_Object *view_layout = elm_object_part_content_get( _callui_vm_get_main_ly(action_bar->ad->view_manager), "elm.swallow.content");
elm_object_part_content_set(view_layout, CALLUI_PART_SWALLOW_ACTION_BAR, action_bar->main_layout);
evas_object_show(action_bar->main_layout);
}
{
CALLUI_RETURN_IF_FAIL(action_bar);
- Evas_Object *view_layout = elm_object_part_content_get(
- _callui_vm_get_main_ly(action_bar->ad->view_manager), "elm.swallow.content");
+ Evas_Object *view_layout = elm_object_part_content_get( _callui_vm_get_main_ly(action_bar->ad->view_manager), "elm.swallow.content");
elm_object_part_content_unset(view_layout, CALLUI_PART_SWALLOW_ACTION_BAR);
evas_object_hide(action_bar->main_layout);
- int i = 0;
- for (; i < CALLUI_ACTION_BTN_COUNT; i++) {
- _callui_au_unhighlight_object(action_bar->buttons[i]);
- }
+ __destroy_ui_components(action_bar);
}
/**
{
CALLUI_RETURN_IF_FAIL(action_bar);
- if (action_bar->is_disabled == is_disabled) {
- return;
- }
action_bar->is_disabled = is_disabled;
if (is_disabled) {
#include "callui-common.h"
#include "callui-state-provider.h"
#include "callui-bidi-text-utils.h"
+#include "callui-accessibility-utils.h"
struct _callui_view_dialing {
call_view_data_base_t base_view;
static void __set_caller_info_phone_number(callui_view_dialing_h vd, const char *call_number);
static void __set_caller_info_phone_number_and_name(callui_view_dialing_h vd, const callui_call_data_t *call_data, const char *call_number);
+static callui_result_e __create_accessible_objects(callui_view_dialing_h vd);
+static void __register_accessibility_rout_start_and_end_points(callui_view_dialing_h vd);
+static void __register_accessibility_rout_default(callui_view_dialing_h vd);
+static void __unregister_accessibility_rout_default(callui_view_dialing_h vd);
+
callui_view_dialing_h _callui_dialing_view_dialing_new()
{
callui_view_dialing_h dialing_view = calloc(1, sizeof(_callui_view_dialing_t));
_callui_keypad_clear_input(ad->keypad);
_callui_keypad_add_show_status_change_cb(ad->keypad, __keypad_show_state_change_cd, vd);
- CALLUI_RETURN_VALUE_IF_FAIL(_callui_create_end_call_button(vd->base_view.contents, __end_call_btn_click_cb, vd),
- CALLUI_RESULT_ALLOCATION_FAIL);
+ vd->base_view.ao_last = _callui_create_end_call_button(vd->base_view.contents, __end_call_btn_click_cb, vd);
+ CALLUI_RETURN_VALUE_IF_FAIL(vd->base_view.ao_last, CALLUI_RESULT_ALLOCATION_FAIL);
+
+ if (__create_accessible_objects(vd) == CALLUI_RESULT_OK) {
+ __register_accessibility_rout_start_and_end_points(vd);
+ __register_accessibility_rout_default(vd);
+ } else {
+ err("Register accessible objects failed");
+ }
return CALLUI_RESULT_OK;
}
switch (visibility) {
case CALLUI_KEYPAD_STATE_EVENT_START_SHOW:
+ __unregister_accessibility_rout_default(vd);
+ _callui_au_register_base_view_accessibility_rout_with_keypad(&vd->base_view);
elm_object_signal_emit(vd->base_view.contents, "hide_caller_info", "view_main");
break;
case CALLUI_KEYPAD_STATE_EVENT_HIDDEN:
case CALLUI_KEYPAD_STATE_EVENT_QUICK_HIDDEN:
+ _callui_au_unregister_base_view_accessibility_rout_with_keypad(&vd->base_view);
+ __register_accessibility_rout_default(vd);
elm_object_signal_emit(vd->base_view.contents, "show_caller_info", "view_main");
break;
default:
break;
}
}
+
+/* Accessibility */
+
+static void __register_accessibility_rout_start_and_end_points(callui_view_dialing_h vd)
+{
+ vd->base_view.ao_first = _callui_au_create_accessible_object(vd->base_view.contents, vd->base_view.contents, "access.rect");
+ _callui_au_set_highlight_ability(vd->base_view.ao_first, false);
+
+ callui_result_e res = _callui_au_append_symmetric_relationship(vd->base_view.ao_first, vd->base_view.ao_call_status);
+ CALLUI_RETURN_IF_FAIL(res == CALLUI_RESULT_OK);
+
+ res = _callui_au_append_relationship_end_point(vd->base_view.ao_last);
+ CALLUI_RETURN_IF_FAIL(res == CALLUI_RESULT_OK);
+}
+
+static callui_result_e __create_accessible_objects(callui_view_dialing_h vd)
+{
+ vd->base_view.ao_call_status = _callui_au_create_accessible_object(vd->base_view.contents, vd->base_view.contents, "call_txt_status.access");
+ CALLUI_RETURN_VALUE_IF_FAIL(vd->base_view.ao_call_status, CALLUI_RESULT_FAIL);
+
+ vd->base_view.ao_caller_info = _callui_au_create_accessible_object(vd->base_view.contents, vd->base_view.contents, "caller_info.access");
+ CALLUI_RETURN_VALUE_IF_FAIL(vd->base_view.ao_caller_info, CALLUI_RESULT_FAIL);
+
+ return CALLUI_RESULT_OK;
+}
+
+static void __register_accessibility_rout_default(callui_view_dialing_h vd)
+{
+ Evas_Object *ab_start_obj;
+ Evas_Object *ab_end_obj;
+
+ callui_result_e res = _callui_action_get_accessible_objects(vd->base_view.ad->action_bar, &ab_start_obj, &ab_end_obj);
+ CALLUI_RETURN_IF_FAIL(res == CALLUI_RESULT_OK);
+
+ res = _callui_au_append_symmetric_relationship(vd->base_view.ao_call_status, vd->base_view.ao_caller_info);
+ CALLUI_RETURN_IF_FAIL(res == CALLUI_RESULT_OK);
+ res = _callui_au_append_symmetric_relationship(vd->base_view.ao_caller_info, ab_start_obj);
+ CALLUI_RETURN_IF_FAIL(res == CALLUI_RESULT_OK);
+ res = _callui_au_append_symmetric_relationship(ab_end_obj, vd->base_view.ao_last);
+ CALLUI_RETURN_IF_FAIL(res == CALLUI_RESULT_OK);
+}
+
+static void __unregister_accessibility_rout_default(callui_view_dialing_h vd)
+{
+ Evas_Object *ab_start_obj;
+ Evas_Object *ab_end_obj;
+
+ CALLUI_RETURN_IF_FAIL(_callui_action_get_accessible_objects(vd->base_view.ad->action_bar, &ab_start_obj, &ab_end_obj) == CALLUI_RESULT_OK);
+
+ _callui_au_remove_symmetric_relationship(vd->base_view.ao_call_status, vd->base_view.ao_caller_info);
+ _callui_au_remove_symmetric_relationship(vd->base_view.ao_caller_info, ab_start_obj);
+ _callui_au_remove_symmetric_relationship(ab_end_obj, vd->base_view.ao_last);
+}