From 773120ce6d01f6582a1f0fdd286cc38c57ed9247 Mon Sep 17 00:00:00 2001 From: Igor Olshevskyi Date: Wed, 23 Nov 2016 10:41:33 +0200 Subject: [PATCH] TizenRefApp-7710 [Call UI] Add Incoming Call Active Notification view components info for TTS Change-Id: Idbec79312f7c048cd52e2ce0d2bf31c32bca0b68 --- edje_src/edc/callui-view-incoming-call-noti.edc | 10 - inc/callui-accessibility-utils.h | 12 - src/callui-accessibility-utils.c | 16 -- src/callui-view-incoming-call-noti.c | 338 +++++++++++++++--------- 4 files changed, 211 insertions(+), 165 deletions(-) diff --git a/edje_src/edc/callui-view-incoming-call-noti.edc b/edje_src/edc/callui-view-incoming-call-noti.edc index a4b6107..05bd133 100644 --- a/edje_src/edc/callui-view-incoming-call-noti.edc +++ b/edje_src/edc/callui-view-incoming-call-noti.edc @@ -1155,16 +1155,6 @@ group { color: COLOR_BG_ALPHA; } ) - CU_PART_RECT( "contact_icon.access", - mouse_events: 1; - repeat_events: 1; - description { state: "default" 0.0; - rel1 { relative: 0.0 0.0; to: "contact_icon.base"; } - rel2 { relative: 1.0 1.0; to: "contact_icon.base"; } - fixed: 1 1; - color: COLOR_BG_ALPHA; - } - ) CU_PART_RECT( "contact_info.access", mouse_events: 1; repeat_events: 1; diff --git a/inc/callui-accessibility-utils.h b/inc/callui-accessibility-utils.h index 9aa987f..9c901be 100644 --- a/inc/callui-accessibility-utils.h +++ b/inc/callui-accessibility-utils.h @@ -42,18 +42,6 @@ Evas_Object *_callui_au_register_accessible_object(Evas_Object *parent, Evas_Obj void _callui_au_unregister_accessible_object(Evas_Object *obj); /** - * @brief Registers accessible object and append it to relationship rout - * - * @param[in] parent Accessible object parent - * @param[in] rel_from_obj Relationship object (highlighting source) - * @param[in] ly Layout from which part for creation accessible object is taken - * @param[in] ly_part Part of layout for creation accessible object - * - * @return Accessible object on success or NULL otherwise - */ -Evas_Object *_callui_au_register_and_append_accessible_object(Evas_Object *parent, Evas_Object *rel_from_obj, Evas_Object *ly, const char *ly_part); - -/** * @brief Symmetrically appends custom relationship between objects * * @param[in] from Highlight from object diff --git a/src/callui-accessibility-utils.c b/src/callui-accessibility-utils.c index 778bc51..45f94d7 100644 --- a/src/callui-accessibility-utils.c +++ b/src/callui-accessibility-utils.c @@ -39,22 +39,6 @@ void _callui_au_unregister_accessible_object(Evas_Object *obj) elm_access_object_unregister(obj); } -Evas_Object *_callui_au_register_and_append_accessible_object(Evas_Object *parent, Evas_Object *rel_from_obj, Evas_Object *ly, const char *ly_part) -{ - CALLUI_RETURN_NULL_IF_FAIL(parent); - CALLUI_RETURN_NULL_IF_FAIL(ly); - CALLUI_RETURN_NULL_IF_FAIL(ly_part); - - Evas_Object *ao = _callui_au_register_accessible_object(parent, ly, ly_part); - CALLUI_RETURN_NULL_IF_FAIL(ao); - - if (rel_from_obj) { - elm_atspi_accessible_relationship_append(rel_from_obj, ELM_ATSPI_RELATION_FLOWS_TO, ao); - elm_atspi_accessible_relationship_append(ao, ELM_ATSPI_RELATION_FLOWS_FROM, rel_from_obj); - } - return ao; -} - callui_result_e _callui_au_append_symmetric_relationship(Evas_Object *from, Evas_Object *to) { CALLUI_RETURN_VALUE_IF_FAIL(from, CALLUI_RESULT_INVALID_PARAM); diff --git a/src/callui-view-incoming-call-noti.c b/src/callui-view-incoming-call-noti.c index c4adde7..67d10f1 100644 --- a/src/callui-view-incoming-call-noti.c +++ b/src/callui-view-incoming-call-noti.c @@ -92,7 +92,8 @@ struct _callui_view_incoming_call_noti { Evas_Object *parent; - Evas_Object *layout; + Evas_Object *main_ly; + Evas_Object *rm_btn; Evas_Object *rm_scroller; Evas_Object *rm_scroller_anchor; Evas_Object *rm_scroller_stroke; @@ -128,19 +129,27 @@ static void __appear_transit_del_cb(void *data, Elm_Transit *transit); static void __disappear_transit_del_cb(void *data, Elm_Transit *transit); static Eina_Bool __appear_effect_activated_cb(void *data); static Eina_Bool __disappear_effect_activated_cb(void *data); -static void __show_reject_msg_btn_click_cb(void *data, Evas_Object *obj, void *event_info); +static void __reject_msg_btn_click_cb(void *data, Evas_Object *obj, void *event_info); static void __layout_changed_hints_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); static void __call_action_btn_click_cb(void *data, Evas_Object *obj, void *event_info); static Evas_Event_Flags __gesture_layer_flick_end_cb(void *data, void *event_info); -static Evas_Object *__create_gesture_layer(callui_view_incoming_call_noti_h vd); static void __contact_info_click_cb(void *data, Evas_Object *obj, const char *emission, const char *source); + static callui_result_e __create_main_content(callui_view_incoming_call_noti_h vd, Evas_Object *parent); -static Evas_Object *__create_btn(callui_view_incoming_call_noti_h vd, +static callui_result_e __create_dim_rectangle(callui_view_incoming_call_noti_h vd, Evas_Object *parent); +static callui_result_e __create_main_layout(callui_view_incoming_call_noti_h vd, Evas_Object *parent); +static callui_result_e __create_answer_call_btn(callui_view_incoming_call_noti_h vd); +static callui_result_e __create_reject_call_btn(callui_view_incoming_call_noti_h vd); +static callui_result_e __create_reject_message_btn(callui_view_incoming_call_noti_h vd); +static callui_result_e __create_gesture_layer(callui_view_incoming_call_noti_h vd); +static Evas_Object *__create_action_btn(callui_view_incoming_call_noti_h vd, const char *style, const char *icon_name, const char *txt, Evas_Smart_Cb click_cb, void *cb_data); + static callui_result_e __update_displayed_data(callui_view_incoming_call_noti_h vd); static void __move_active_noti(callui_view_incoming_call_noti_h vd); static void __parent_resize_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info); +static void __update_caller_info_text(callui_view_incoming_call_noti_h vd, const callui_call_data_t *call_data); static void __rm_create_content(callui_view_incoming_call_noti_h vd); static void __rm_destroy_content(callui_view_incoming_call_noti_h vd); @@ -174,9 +183,9 @@ static void __set_caller_info_unknown_number(callui_view_incoming_call_noti_h vd static void __set_caller_info_phone_number(callui_view_incoming_call_noti_h vd, const char *call_number); static void __set_caller_info_phone_number_and_name(callui_view_incoming_call_noti_h vd, const callui_call_data_t *call_data, const char *call_number); -static void __register_def_accessibility_rout(callui_view_incoming_call_noti_h vd); +static callui_result_e __create_accessible_objects(callui_view_incoming_call_noti_h vd); -static Evas_Object *__create_btn(callui_view_incoming_call_noti_h vd, +static Evas_Object *__create_action_btn(callui_view_incoming_call_noti_h vd, const char *style, const char *icon_name, const char *txt, @@ -240,7 +249,7 @@ static callui_result_e __callui_view_incoming_call_noti_ondestroy(call_view_data DELETE_ECORE_IDLE_ENTERER(vd->transit_effect_idler); DELETE_ELM_TRANSIT_HARD(vd->transit); - DELETE_EVAS_OBJECT(vd->layout); + DELETE_EVAS_OBJECT(vd->main_ly); DELETE_EVAS_OBJECT(vd->rm_scroller_stroke); _callui_window_set_size_type(ad->window, CALLUI_WIN_SIZE_FULLSCREEN); @@ -258,7 +267,7 @@ static callui_result_e __callui_view_incoming_call_noti_ondestroy(call_view_data static void __reset_params_after_transit(callui_view_incoming_call_noti_h vd) { vd->transit = NULL; - evas_object_freeze_events_set(vd->layout, EINA_FALSE); + evas_object_freeze_events_set(vd->main_ly, EINA_FALSE); } static void __appear_transit_del_cb(void *data, Elm_Transit *transit) @@ -286,7 +295,7 @@ static Eina_Bool __appear_effect_activated_cb(void *data) callui_view_incoming_call_noti_h vd = data; int height = 0; - evas_object_geometry_get(vd->layout, NULL, NULL, NULL, &height); + evas_object_geometry_get(vd->main_ly, NULL, NULL, NULL, &height); DELETE_ELM_TRANSIT_HARD(vd->transit); vd->transit = elm_transit_add(); @@ -296,14 +305,14 @@ static Eina_Bool __appear_effect_activated_cb(void *data) return ECORE_CALLBACK_CANCEL; } elm_transit_del_cb_set(vd->transit, __appear_transit_del_cb, vd); - elm_transit_object_add(vd->transit, vd->layout); + elm_transit_object_add(vd->transit, vd->main_ly); elm_transit_effect_translation_add(vd->transit, 0, -height, 0, 0); elm_transit_duration_set(vd->transit, CALLUI_MOVE_TRANSITION_TIME_SEC); elm_transit_objects_final_state_keep_set(vd->transit, EINA_TRUE); elm_transit_go(vd->transit); vd->transit_effect_idler = NULL; - evas_object_freeze_events_set(vd->layout, EINA_TRUE); + evas_object_freeze_events_set(vd->main_ly, EINA_TRUE); return ECORE_CALLBACK_DONE; } @@ -318,7 +327,7 @@ static Eina_Bool __disappear_effect_activated_cb(void *data) int ypos = 0; int width = 0; int height = 0; - evas_object_geometry_get(vd->layout, &xpos, &ypos, &width, &height); + evas_object_geometry_get(vd->main_ly, &xpos, &ypos, &width, &height); int transit_y = -(height + ypos); DELETE_ELM_TRANSIT_HARD(vd->transit); @@ -329,14 +338,14 @@ static Eina_Bool __disappear_effect_activated_cb(void *data) return ECORE_CALLBACK_CANCEL; } elm_transit_del_cb_set(vd->transit, __disappear_transit_del_cb, vd); - elm_transit_object_add(vd->transit, vd->layout); + elm_transit_object_add(vd->transit, vd->main_ly); elm_transit_effect_translation_add(vd->transit, xpos, ypos, xpos, transit_y); elm_transit_duration_set(vd->transit, CALLUI_MOVE_TRANSITION_TIME_SEC); elm_transit_objects_final_state_keep_set(vd->transit, EINA_TRUE); elm_transit_go(vd->transit); vd->transit_effect_idler = NULL; - evas_object_freeze_events_set(vd->layout, EINA_TRUE); + evas_object_freeze_events_set(vd->main_ly, EINA_TRUE); return ECORE_CALLBACK_CANCEL; } @@ -348,7 +357,7 @@ static void __rm_reset_status_flags(callui_view_incoming_call_noti_h vd) vd->rm_actualize_state |= CALLUI_REJ_MSG_ANCHOR_MOVED; } -static void __show_reject_msg_btn_click_cb(void *data, Evas_Object *obj, void *event_info) +static void __reject_msg_btn_click_cb(void *data, Evas_Object *obj, void *event_info) { CALLUI_RETURN_IF_FAIL(data); @@ -358,6 +367,8 @@ static void __show_reject_msg_btn_click_cb(void *data, Evas_Object *obj, void *e if (vd->rm_turned_on) { dbg("Hide reject messages request"); + elm_atspi_accessible_description_set(vd->rm_btn, "IDS_CALL_TBBODY_DOUBLE_TAP_TO_OPEN_REJECT_MESSAGE_LIST"); + __rm_reset_anim_params(vd); if (vd->rm_state == CALLUI_REJ_MSG_SHOW_IN_PROG || vd->rm_state == CALLUI_REJ_MSG_SHOW_REQ) { @@ -370,6 +381,8 @@ static void __show_reject_msg_btn_click_cb(void *data, Evas_Object *obj, void *e } else { dbg("Show reject messages request"); + elm_atspi_accessible_description_set(vd->rm_btn, "IDS_CALL_TBBODY_DOUBLE_TAP_TO_CLOSE_REJECT_MESSAGE_LIST"); + __rm_reset_anim_params(vd); if (vd->rm_state == CALLUI_REJ_MSG_HIDE_IN_PROG || vd->rm_state == CALLUI_REJ_MSG_HIDE_REQ) { @@ -401,7 +414,7 @@ static void __layout_changed_hints_cb(void *data, Evas *e, Evas_Object *obj, voi Evas_Coord w = 0; Evas_Coord h = 0; - evas_object_size_hint_min_get(vd->layout, &w, &h); + evas_object_size_hint_min_get(vd->main_ly, &w, &h); dbg("LY hint min size - w[%d] h[%d]", w, h); if (w == 0 || h == 0) { @@ -609,18 +622,24 @@ static callui_result_e __rm_create_message_items(callui_view_incoming_call_noti_ evas_object_size_hint_align_set(item_ly, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_layout_signal_callback_add(item_ly, "cu,action,clicked", "active_noti_main", _rm_message_item_clicked_cb, SAFE_C_CAST(void *, i)); + evas_object_data_set(item_ly, CALLUI_REJ_MSG_GENLIST_DATA, vd); + char *txt = _callui_common_get_reject_msg_by_index(i); elm_object_part_text_set(item_ly, "callui.text.main", txt); - free(txt); - evas_object_data_set(item_ly, CALLUI_REJ_MSG_GENLIST_DATA, vd); + Evas_Object *ao = elm_access_object_register(item_ly, vd->main_ly); + if (ao) { + elm_atspi_accessible_reading_info_type_set(ao, ELM_ACCESSIBLE_READING_INFO_TYPE_NAME | ELM_ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION); + elm_atspi_accessible_translation_domain_set(ao, CALLUI_TEXT_DOMAIN); + elm_atspi_accessible_name_set(ao, txt); + elm_atspi_accessible_description_set(ao, "IDS_CALL_BODY_DOUBLE_TAP_TO_SEND_MESSAGE_TTS"); + } else { + err("Failed to register accessible object"); + } + free(txt); evas_object_show(item_ly); elm_box_pack_end(box, item_ly); - - if (elm_access_object_register(item_ly, vd->layout)) { - err("Failed to register accessible object"); - } } *insert_item_count = item_count; return res; @@ -628,7 +647,7 @@ static callui_result_e __rm_create_message_items(callui_view_incoming_call_noti_ static callui_result_e __rm_create_compose_item(callui_view_incoming_call_noti_h vd, Evas_Object *box) { - Evas_Object *item_ly = _callui_create_layout(vd->layout, CALLUI_LY_STYLE_REJ_MSG_ITEM_COMPOSE); + Evas_Object *item_ly = _callui_create_layout(vd->main_ly, CALLUI_LY_STYLE_REJ_MSG_ITEM_COMPOSE); CALLUI_RETURN_VALUE_IF_FAIL(item_ly, CALLUI_RESULT_FAIL); evas_object_size_hint_weight_set(item_ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -637,13 +656,19 @@ static callui_result_e __rm_create_compose_item(callui_view_incoming_call_noti_h elm_object_translatable_part_text_set(item_ly, "callui.text.main", "IDS_CALL_BUTTON_COMPOSE_MESSAGE_TO_SEND_ABB"); - evas_object_show(item_ly); - elm_box_pack_end(box, item_ly); - - if (elm_access_object_register(item_ly, vd->layout)) { + Evas_Object *ao = elm_access_object_register(item_ly, vd->main_ly); + if (ao) { + elm_atspi_accessible_reading_info_type_set(ao, ELM_ACCESSIBLE_READING_INFO_TYPE_NAME | ELM_ACCESSIBLE_READING_INFO_TYPE_DESCRIPTION); + elm_atspi_accessible_translation_domain_set(ao, CALLUI_TEXT_DOMAIN); + elm_atspi_accessible_name_set(ao, "IDS_CALL_BUTTON_COMPOSE_MESSAGE_TO_SEND_ABB"); + elm_atspi_accessible_description_set(ao, "IDS_CALL_BODY_DOUBLE_TAP_TO_SEND_MESSAGE_TTS"); + } else { err("Failed to register accessible object"); } + evas_object_show(item_ly); + elm_box_pack_end(box, item_ly); + return CALLUI_RESULT_OK; } @@ -690,14 +715,14 @@ static void __rm_strock_move_cb(void *data, Evas *e, Evas_Object *obj, void *eve static void __rm_create_content(callui_view_incoming_call_noti_h vd) { /* Reject message list background gradient color layout */ - vd->rm_scroller_bg = _callui_create_layout(vd->layout, CALLUI_LY_STYLE_REJ_MSG_SCROLLER_BG); + vd->rm_scroller_bg = _callui_create_layout(vd->main_ly, CALLUI_LY_STYLE_REJ_MSG_SCROLLER_BG); evas_object_event_callback_add(vd->rm_scroller_bg, EVAS_CALLBACK_RESIZE, __rm_scroller_bg_resize_cb, vd); evas_object_event_callback_add(vd->rm_scroller_bg, EVAS_CALLBACK_MOVE, __rm_scroller_bg_move_cb, vd); CALLUI_RETURN_IF_FAIL(vd->rm_scroller_bg); evas_object_show(vd->rm_scroller_bg); /* Reject message scroller */ - vd->rm_scroller = elm_scroller_add(vd->layout); + vd->rm_scroller = elm_scroller_add(vd->main_ly); if (!vd->rm_scroller) { err("rm_scroller is NULL"); return __rm_destroy_content(vd); @@ -736,13 +761,13 @@ static void __rm_create_content(callui_view_incoming_call_noti_h vd) evas_object_show(vd->rm_scroller_stroke); /* Reject message scroller/list background EDJE anchor */ - vd->rm_scroller_anchor = evas_object_rectangle_add(evas_object_evas_get(vd->layout)); + vd->rm_scroller_anchor = evas_object_rectangle_add(evas_object_evas_get(vd->main_ly)); if (!vd->rm_scroller_anchor) { return __rm_destroy_content(vd); } evas_object_event_callback_add(vd->rm_scroller_anchor, EVAS_CALLBACK_MOVE, __rm_scroller_anchor_move_cb, vd); evas_object_color_set(vd->rm_scroller_anchor, 0, 0, 0, 0); - elm_object_part_content_set(vd->layout, "swallow.reject_msg_gl_anchor", vd->rm_scroller_anchor); + elm_object_part_content_set(vd->main_ly, "swallow.reject_msg_gl_anchor", vd->rm_scroller_anchor); vd->rm_scroller_max_h = ELM_SCALE_SIZE(ACTIVE_NOTI_RM_ITEM_HEIGHT) * rm_item_count; vd->rm_actualize_state &= ~CALLUI_REJ_MSG_UPDATE_GL_HINT; @@ -797,98 +822,57 @@ static Evas_Event_Flags __gesture_layer_flick_end_cb(void *data, void *event_inf return EVAS_EVENT_FLAG_ON_HOLD; } -static Evas_Object *__create_gesture_layer(callui_view_incoming_call_noti_h vd) +static callui_result_e __create_gesture_layer(callui_view_incoming_call_noti_h vd) { - Evas_Object *gesture_layer = elm_gesture_layer_add(vd->layout); - CALLUI_RETURN_NULL_IF_FAIL(gesture_layer); + Evas_Object *gesture_layer = elm_gesture_layer_add(vd->main_ly); + CALLUI_RETURN_VALUE_IF_FAIL(gesture_layer, CALLUI_RESULT_ALLOCATION_FAIL); - elm_gesture_layer_attach(gesture_layer, vd->layout); + elm_gesture_layer_attach(gesture_layer, vd->main_ly); elm_gesture_layer_flick_time_limit_ms_set(gesture_layer, CALLUI_REJ_MSG_FLICK_TIME_LIMIT_MS); elm_gesture_layer_cb_set(gesture_layer, ELM_GESTURE_N_LINES , ELM_GESTURE_STATE_END, __gesture_layer_flick_end_cb, vd); evas_object_show(gesture_layer); - return gesture_layer; -} - -static void __contact_info_click_cb(void *data, Evas_Object *obj, const char *emission, const char *source) -{ - CALLUI_RETURN_IF_FAIL(data); - - callui_view_incoming_call_noti_h vd = data; - - _callui_vm_change_view(vd->base_view.ad->view_manager, CALLUI_VIEW_INCOMING_CALL); -} - -static void __register_def_accessibility_rout(callui_view_incoming_call_noti_h vd) -{ - Evas_Object *ao = _callui_au_register_and_append_accessible_object(vd->layout, NULL, vd->layout, "contact_icon.access"); - CALLUI_RETURN_IF_FAIL(ao); - - ao = _callui_au_register_and_append_accessible_object(vd->layout, ao, vd->layout, "call_status.access"); - CALLUI_RETURN_IF_FAIL(ao); - - ao = _callui_au_register_and_append_accessible_object(vd->layout, ao, vd->layout, "contact_info.access"); - CALLUI_RETURN_IF_FAIL(ao); + return CALLUI_RESULT_OK; } static callui_result_e __create_main_content(callui_view_incoming_call_noti_h vd, Evas_Object *parent) { - vd->base_view.contents = evas_object_rectangle_add(evas_object_evas_get(parent)); - CALLUI_RETURN_VALUE_IF_FAIL(vd->base_view.contents, CALLUI_RESULT_ALLOCATION_FAIL); - evas_object_size_hint_weight_set(vd->base_view.contents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(vd->base_view.contents, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_color_set(vd->base_view.contents, CALLUI_REJ_MSG_DIMMER_COLOR, CALLUI_REJ_MSG_DIMMER_ALPHA_START); - elm_object_part_content_set(parent, "elm.swallow.content", vd->base_view.contents); - evas_object_show(vd->base_view.contents); + callui_result_e res = __create_dim_rectangle(vd, parent); + CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res); - vd->layout = elm_layout_add(parent); - CALLUI_RETURN_VALUE_IF_FAIL(vd->layout, CALLUI_RESULT_ALLOCATION_FAIL); - evas_object_event_callback_add(vd->layout, EVAS_CALLBACK_CHANGED_SIZE_HINTS, __layout_changed_hints_cb, vd); - elm_layout_theme_set(vd->layout, "layout", "callui", CALLUI_LY_STYLE_ACTIVE_NOTI_CALL_MAIN); - evas_object_size_hint_weight_set(vd->layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(vd->layout, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_signal_callback_add(vd->layout, "contact_info.clicked", "active_noti_main", __contact_info_click_cb, vd); - elm_object_part_content_set(parent, "elm.swallow.active_noti", vd->layout); - - Evas_Object *answer_btn = __create_btn(vd, - CALLUI_BTN_STYLE_AN_ACCEPT_CALL, - CALLUI_GROUP_AN_ACCEPT_CALL_ICON, - NULL, - __call_action_btn_click_cb, - CALLUI_APP_CONTROL_OPERATION_DURING_CALL); - CALLUI_RETURN_VALUE_IF_FAIL(answer_btn, CALLUI_RESULT_ALLOCATION_FAIL); - elm_object_part_content_set(vd->layout, "swallow.call_accept_btn", answer_btn); - - Evas_Object *reject_btn = __create_btn(vd, - CALLUI_BTN_STYLE_AN_REJECT_CALL, - CALLUI_GROUP_AN_REJECT_CALL_ICON, - NULL, - __call_action_btn_click_cb, - CALLUI_APP_CONTROL_OPERATION_END_CALL); - CALLUI_RETURN_VALUE_IF_FAIL(reject_btn, CALLUI_RESULT_ALLOCATION_FAIL); - elm_object_part_content_set(vd->layout, "swallow.call_reject_btn", reject_btn); + res = __create_main_layout(vd, parent); + CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res); - CALLUI_RETURN_VALUE_IF_FAIL(__create_gesture_layer(vd), CALLUI_RESULT_ALLOCATION_FAIL); + res = __create_answer_call_btn(vd); + CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res); + + res = __create_reject_call_btn(vd); + CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res); - elm_object_signal_emit(vd->layout, "start_swipe_anim", "active_noti_main"); + res = __create_gesture_layer(vd); + CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res); vd->rm_state = CALLUI_REJ_MSG_HIDDEN; vd->parent = parent; evas_object_event_callback_add(vd->parent, EVAS_CALLBACK_RESIZE, __parent_resize_cb, vd); - __register_def_accessibility_rout(vd); + elm_object_signal_emit(vd->main_ly, "start_swipe_anim", "active_noti_main"); - return CALLUI_RESULT_OK; + if (__create_accessible_objects(vd) != CALLUI_RESULT_OK) { + err("Register accessible objects failed"); + } + + return res; } -static Evas_Object *__create_btn(callui_view_incoming_call_noti_h vd, +static Evas_Object *__create_action_btn(callui_view_incoming_call_noti_h vd, const char *style, const char *icon_name, const char *txt, Evas_Smart_Cb click_cb, void *cb_data) { - Evas_Object *button = elm_button_add(vd->layout); + Evas_Object *button = elm_button_add(vd->main_ly); CALLUI_RETURN_NULL_IF_FAIL(button); elm_object_style_set(button, style); evas_object_smart_callback_add(button, "clicked", click_cb, cb_data); @@ -907,29 +891,126 @@ static Evas_Object *__create_btn(callui_view_incoming_call_noti_h vd, static void __set_caller_info_unknown_number(callui_view_incoming_call_noti_h vd) { - elm_object_signal_emit(vd->layout, "show_two_lines", "active_noti_main"); - elm_object_signal_emit(vd->layout, "hide_reject_msg_btn", "active_noti_main"); - elm_object_translatable_part_text_set(vd->layout, "text.contact_name", "IDS_CALL_BODY_UNKNOWN"); + elm_object_signal_emit(vd->main_ly, "show_two_lines", "active_noti_main"); + elm_object_signal_emit(vd->main_ly, "hide_reject_msg_btn", "active_noti_main"); + elm_object_translatable_part_text_set(vd->main_ly, "text.contact_name", "IDS_CALL_BODY_UNKNOWN"); + + elm_atspi_accessible_name_set(vd->base_view.ao_caller_info, "IDS_CALL_BODY_UNKNOWN"); } static void __set_caller_info_phone_number(callui_view_incoming_call_noti_h vd, const char *call_number) { - elm_object_signal_emit(vd->layout, "show_two_lines", "active_noti_main"); - elm_object_part_text_set(vd->layout, "text.contact_name", call_number); + elm_object_signal_emit(vd->main_ly, "show_two_lines", "active_noti_main"); + elm_object_part_text_set(vd->main_ly, "text.contact_name", call_number); + + elm_atspi_accessible_name_set(vd->base_view.ao_caller_info, call_number); } static void __set_caller_info_phone_number_and_name(callui_view_incoming_call_noti_h vd, const callui_call_data_t *call_data, const char *call_number) { const char *call_name = call_data->call_ct_info.call_disp_name; - elm_object_signal_emit(vd->layout, "show_three_lines", "active_noti_main"); + elm_object_signal_emit(vd->main_ly, "show_three_lines", "active_noti_main"); if (_callui_common_is_display_contact_name_support_rtl(call_data->call_ct_info.call_disp_name_type)) { - elm_object_part_text_set(vd->layout, "text.contact_name", call_name); + elm_object_part_text_set(vd->main_ly, "text.contact_name", call_name); } else { char *enclosed_call_name = _callui_bidi_text_utils_enclose_text(call_name, CALLUI_BIDI_TEXT_ENCLOSE_LRM); - elm_object_part_text_set(vd->layout, "text.contact_name", enclosed_call_name); + elm_object_part_text_set(vd->main_ly, "text.contact_name", enclosed_call_name); free(enclosed_call_name); } - elm_object_part_text_set(vd->layout, "text.contact_number", call_number); + elm_object_part_text_set(vd->main_ly, "text.contact_number", call_number); + + char buff[CALLUI_BUFF_SIZE_HUG] = { '\0' }; + snprintf(buff, CALLUI_BUFF_SIZE_HUG, "%s, %s", call_name, call_number); + elm_atspi_accessible_name_set(vd->base_view.ao_caller_info, buff); +} + +static void __update_caller_info_text(callui_view_incoming_call_noti_h vd, const callui_call_data_t *call_data) +{ + char *enclosed_call_number = _callui_bidi_text_utils_enclose_text(call_data->call_num, CALLUI_BIDI_TEXT_ENCLOSE_LRM); + if (STRING_EMPTY(call_data->call_num)) { + __set_caller_info_unknown_number(vd); + } else if (STRING_EMPTY(call_data->call_ct_info.call_disp_name)) { + __set_caller_info_phone_number(vd, enclosed_call_number); + } else { + __set_caller_info_phone_number_and_name(vd, call_data, enclosed_call_number); + } + free(enclosed_call_number); +} + +static callui_result_e __create_dim_rectangle(callui_view_incoming_call_noti_h vd, Evas_Object *parent) +{ + vd->base_view.contents = evas_object_rectangle_add(evas_object_evas_get(parent)); + CALLUI_RETURN_VALUE_IF_FAIL(vd->base_view.contents, CALLUI_RESULT_ALLOCATION_FAIL); + evas_object_size_hint_weight_set(vd->base_view.contents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(vd->base_view.contents, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_color_set(vd->base_view.contents, CALLUI_REJ_MSG_DIMMER_COLOR, CALLUI_REJ_MSG_DIMMER_ALPHA_START); + elm_object_part_content_set(parent, "elm.swallow.content", vd->base_view.contents); + evas_object_show(vd->base_view.contents); + + return CALLUI_RESULT_OK; +} + +static void __contact_info_click_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + CALLUI_RETURN_IF_FAIL(data); + + callui_view_incoming_call_noti_h vd = data; + _callui_vm_change_view(vd->base_view.ad->view_manager, CALLUI_VIEW_INCOMING_CALL); +} + +static callui_result_e __create_main_layout(callui_view_incoming_call_noti_h vd, Evas_Object *parent) +{ + vd->main_ly = elm_layout_add(parent); + CALLUI_RETURN_VALUE_IF_FAIL(vd->main_ly, CALLUI_RESULT_ALLOCATION_FAIL); + evas_object_event_callback_add(vd->main_ly, EVAS_CALLBACK_CHANGED_SIZE_HINTS, __layout_changed_hints_cb, vd); + elm_layout_theme_set(vd->main_ly, "layout", "callui", CALLUI_LY_STYLE_ACTIVE_NOTI_CALL_MAIN); + evas_object_size_hint_weight_set(vd->main_ly, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(vd->main_ly, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_signal_callback_add(vd->main_ly, "contact_info.clicked", "active_noti_main", __contact_info_click_cb, vd); + + elm_object_part_content_set(parent, "elm.swallow.active_noti", vd->main_ly); + + return CALLUI_RESULT_OK; +} + +static callui_result_e __create_answer_call_btn(callui_view_incoming_call_noti_h vd) +{ + Evas_Object *answer_btn = __create_action_btn(vd, CALLUI_BTN_STYLE_AN_ACCEPT_CALL, CALLUI_GROUP_AN_ACCEPT_CALL_ICON, + NULL, __call_action_btn_click_cb, CALLUI_APP_CONTROL_OPERATION_DURING_CALL); + CALLUI_RETURN_VALUE_IF_FAIL(answer_btn, CALLUI_RESULT_ALLOCATION_FAIL); + elm_atspi_accessible_translation_domain_set(answer_btn, CALLUI_TEXT_DOMAIN); + elm_atspi_accessible_name_set(answer_btn, "IDS_CALL_HEADER_ANSWER_CALL_ABB"); + + elm_object_part_content_set(vd->main_ly, "swallow.call_accept_btn", answer_btn); + + return CALLUI_RESULT_OK; +} + +static callui_result_e __create_reject_call_btn(callui_view_incoming_call_noti_h vd) +{ + Evas_Object *reject_btn = __create_action_btn(vd, CALLUI_BTN_STYLE_AN_REJECT_CALL, CALLUI_GROUP_AN_REJECT_CALL_ICON, + NULL, __call_action_btn_click_cb, CALLUI_APP_CONTROL_OPERATION_END_CALL); + CALLUI_RETURN_VALUE_IF_FAIL(reject_btn, CALLUI_RESULT_ALLOCATION_FAIL); + elm_atspi_accessible_translation_domain_set(reject_btn, CALLUI_TEXT_DOMAIN); + elm_atspi_accessible_name_set(reject_btn, "IDS_CALL_BUTTON_REJECT"); + + elm_object_part_content_set(vd->main_ly, "swallow.call_reject_btn", reject_btn); + + return CALLUI_RESULT_OK; +} + +static callui_result_e __create_reject_message_btn(callui_view_incoming_call_noti_h vd) +{ + vd->rm_btn = __create_action_btn(vd, CALLUI_BTN_STYLE_AN_REJECT_CALL_WITH_MSG, + NULL, "IDS_VCALL_BUTTON2_REJECT_CALL_WITH_MESSAGE", __reject_msg_btn_click_cb, vd); + CALLUI_RETURN_VALUE_IF_FAIL(vd->rm_btn, CALLUI_RESULT_ALLOCATION_FAIL); + elm_atspi_accessible_translation_domain_set(vd->rm_btn, CALLUI_TEXT_DOMAIN); + elm_atspi_accessible_name_set(vd->rm_btn, "IDS_VCALL_BUTTON2_REJECT_CALL_WITH_MESSAGE"); + elm_atspi_accessible_description_set(vd->rm_btn, "IDS_CALL_TBBODY_DOUBLE_TAP_TO_OPEN_REJECT_MESSAGE_LIST"); + + elm_object_part_content_set(vd->main_ly, "swallow.reject_msg_btn", vd->rm_btn); + + return CALLUI_RESULT_OK; } static callui_result_e __update_displayed_data(callui_view_incoming_call_noti_h vd) @@ -939,32 +1020,19 @@ static callui_result_e __update_displayed_data(callui_view_incoming_call_noti_h const callui_call_data_t *incom = _callui_stp_get_call_data(ad->state_provider, CALLUI_CALL_DATA_INCOMING); CALLUI_RETURN_VALUE_IF_FAIL(incom, CALLUI_RESULT_FAIL); - elm_object_translatable_part_text_set(vd->layout, "text.status", "IDS_CALL_BODY_INCOMING_CALL"); + elm_object_translatable_part_text_set(vd->main_ly, "text.status", "IDS_CALL_BODY_INCOMING_CALL"); + elm_atspi_accessible_name_set(vd->base_view.ao_call_status, "IDS_CALL_BODY_INCOMING_CALL"); - char *enclosed_call_number = _callui_bidi_text_utils_enclose_text(incom->call_num, CALLUI_BIDI_TEXT_ENCLOSE_LRM); - if (STRING_EMPTY(incom->call_num)) { - __set_caller_info_unknown_number(vd); - } else if (STRING_EMPTY(incom->call_ct_info.call_disp_name)) { - __set_caller_info_phone_number(vd, enclosed_call_number); - } else { - __set_caller_info_phone_number_and_name(vd, incom, enclosed_call_number); - } - free(enclosed_call_number); + __update_caller_info_text(vd, incom); if (!STRING_EMPTY(incom->call_num)) { - Evas_Object *reject_msg_btn = __create_btn(vd, - CALLUI_BTN_STYLE_AN_REJECT_CALL_WITH_MSG, - NULL, - "IDS_VCALL_BUTTON2_REJECT_CALL_WITH_MESSAGE", - __show_reject_msg_btn_click_cb, - vd); - CALLUI_RETURN_VALUE_IF_FAIL(reject_msg_btn, CALLUI_RESULT_ALLOCATION_FAIL); - elm_object_part_content_set(vd->layout, "swallow.reject_msg_btn", reject_msg_btn); + callui_result_e res = __create_reject_message_btn(vd); + CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res); } - _callui_caller_info_set_caller_image(vd->layout, incom); + _callui_caller_info_set_caller_image(vd->main_ly, incom); - evas_object_show(vd->layout); + evas_object_show(vd->main_ly); return CALLUI_RESULT_OK; } @@ -1105,7 +1173,6 @@ static void __rm_calc_available_size(callui_view_incoming_call_noti_h vd) break; default: return; - break; } dbg("Available RM scroller height - [%d]", vd->rm_scroller_available_h); } @@ -1122,7 +1189,7 @@ static void __move_active_noti(callui_view_incoming_call_noti_h vd) new_x = (ad->root_h - ad->root_w - ACTIVE_NOTI_LANDSCAPE_L_PAD); } } - evas_object_move(vd->layout, new_x, 0); + evas_object_move(vd->main_ly, new_x, 0); } static void __parent_resize_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) @@ -1137,3 +1204,20 @@ static void __parent_resize_cb(void *data, Evas *evas, Evas_Object *obj, void *e vd->rm_actualize_state &= ~CALLUI_REJ_MSG_UPDATE_AVAILABLE_SIZE; __rm_try_actualize(vd); } + +/* Accessibility */ + +static callui_result_e __create_accessible_objects(callui_view_incoming_call_noti_h vd) +{ + vd->base_view.ao_call_status = _callui_au_register_accessible_object(vd->main_ly, vd->main_ly, "call_status.access"); + CALLUI_RETURN_VALUE_IF_FAIL(vd->base_view.ao_call_status, CALLUI_RESULT_FAIL); + elm_atspi_accessible_translation_domain_set(vd->base_view.ao_call_status, CALLUI_TEXT_DOMAIN); + elm_atspi_accessible_reading_info_type_set(vd->base_view.ao_call_status, ELM_ACCESSIBLE_READING_INFO_TYPE_NAME); + + vd->base_view.ao_caller_info = _callui_au_register_accessible_object(vd->main_ly, vd->main_ly, "contact_info.access"); + CALLUI_RETURN_VALUE_IF_FAIL(vd->base_view.ao_caller_info, CALLUI_RESULT_FAIL); + elm_atspi_accessible_translation_domain_set(vd->base_view.ao_caller_info, CALLUI_TEXT_DOMAIN); + elm_atspi_accessible_reading_info_type_set(vd->base_view.ao_caller_info, ELM_ACCESSIBLE_READING_INFO_TYPE_NAME); + + return CALLUI_RESULT_OK; +} -- 2.7.4