TizenRefApp-7620 [Call UI] Implement highlighting element in Dialing view 96/97196/3
authorIgor Olshevskyi <i.olshevskyi@samsung.com>
Fri, 11 Nov 2016 11:19:43 +0000 (13:19 +0200)
committerIgor Olshevskyi <i.olshevskyi@samsung.com>
Mon, 14 Nov 2016 14:20:08 +0000 (06:20 -0800)
Change-Id: Iaacfc08490a5f0e150cd03398b0eb6cff9dde751

src/callui-action-bar.c
src/callui-view-dialing.c
src/callui-view-single-call.c

index ed62e20..f09de24 100644 (file)
@@ -113,8 +113,6 @@ static __action_btn_params_t btn_params[CALLUI_ACTION_BTN_COUNT] = {
 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);
@@ -132,6 +130,9 @@ static void __update_all_btns_highlight_possibility(callui_action_bar_h action_b
 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);
@@ -361,32 +362,6 @@ static callui_result_e __update_contacts_btn(callui_action_bar_h action_bar)
        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
  *
@@ -560,6 +535,37 @@ static void __keypad_show_state_change_cd(void *data, callui_keypad_state_event_
        }
 }
 
+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
  *
@@ -581,23 +587,6 @@ static callui_result_e __callui_action_bar_init(callui_action_bar_h 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;
 }
 
@@ -633,21 +622,12 @@ static void __callui_action_bar_deinit(callui_action_bar_h action_bar)
 {
        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);
 }
 
 /**
@@ -665,19 +645,6 @@ void _callui_action_bar_destroy(callui_action_bar_h 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
@@ -686,10 +653,9 @@ void _callui_action_bar_show(callui_action_bar_h action_bar)
 {
        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);
 }
@@ -703,15 +669,11 @@ void _callui_action_bar_hide(callui_action_bar_h action_bar)
 {
        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);
 }
 
 /**
@@ -724,9 +686,6 @@ void _callui_action_bar_set_disabled_state(callui_action_bar_h action_bar, bool
 {
        CALLUI_RETURN_IF_FAIL(action_bar);
 
-       if (action_bar->is_disabled == is_disabled) {
-               return;
-       }
        action_bar->is_disabled = is_disabled;
 
        if (is_disabled) {
index 9752ed3..43376e5 100644 (file)
@@ -24,6 +24,7 @@
 #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;
@@ -46,6 +47,11 @@ static void __set_caller_info_emergency_name(callui_view_dialing_h vd);
 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));
@@ -93,8 +99,15 @@ static callui_result_e __create_main_content(callui_view_dialing_h vd, Evas_Obje
        _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;
 }
@@ -204,13 +217,70 @@ static void __keypad_show_state_change_cd(void *data, callui_keypad_state_event_
 
        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);
+}
index d9a8fcb..a107f7c 100644 (file)
@@ -293,14 +293,12 @@ static void __keypad_show_state_change_cd(void *data, callui_keypad_state_event_
 
        switch (visibility) {
        case CALLUI_KEYPAD_STATE_EVENT_START_SHOW:
-               dbg();
                __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:
-               dbg();
                _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");