From: Igor Olshevskyi Date: Mon, 31 Oct 2016 09:02:37 +0000 (+0200) Subject: TizenRefApp-7518 [Call UI] Fix displaying entered text from keypad according to UI/GUI X-Git-Tag: submit/tizen/20161102.131918~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=8819a5b65cab19db0b8723956b8ab698059023fd;p=profile%2Fmobile%2Fapps%2Fnative%2Fcall-ui.git TizenRefApp-7518 [Call UI] Fix displaying entered text from keypad according to UI/GUI Change-Id: I108b0f80f285da2ef58f780de4dde9537869810b --- diff --git a/edje_src/edc/callui-keypad.edc b/edje_src/edc/callui-keypad.edc index 10ffcae..4a749aa 100644 --- a/edje_src/edc/callui-keypad.edc +++ b/edje_src/edc/callui-keypad.edc @@ -20,6 +20,8 @@ #define KEYPAD_ANIM_DURATION 0.8 #define KEYPAD_ANIM_DELAY 0.6 0.0 #define KEYPAD_DOWN_ARW_START_ANIM_MAX_H 3 +#define KEYPAD_TXT_AREA_PAD_LEFT 32 +#define KEYPAD_TXT_AREA_PAD_RIGHT 32 #define PART_KEYPAD_CUSTOM_ONE_ICON(txt, column, row, num_icon) \ CU_PART_RECT( txt, \ @@ -192,28 +194,37 @@ group{ name: "elm/layout/callui/keypad"; parts { CU_PART_SPACER( "bg", - mouse_events:1; - repeat_events: 1; - description { - state: "default" 0.0; - } + description { state: "default" 0.0; } ) CU_PART_SPACER( "keypad.pad.bottom", - mouse_events: 1; - repeat_events: 1; - description { - state: "default" 0.0; + description { state: "default" 0.0; rel1.relative: 0.0 1.0; min: 0 KEYPAD_H; fixed: 0 1; align: 0 1; } ) + CU_PART_SPACER( "keypad.pad.left", + description { state: "default" 0.0; + align: 0.0 0.0; + fixed: 1 0; + rel2.relative: 0.0 1.0; + min: KEYPAD_TXT_AREA_PAD_LEFT 0; + } + ) + CU_PART_SPACER( "keypad.pad.right", + description { state: "default" 0.0; + align: 1.0 0.0; + fixed: 1 0; + rel1.relative: 1.0 0.0; + min: KEYPAD_TXT_AREA_PAD_RIGHT 0; + } + ) CU_PART_SWALLOW( "swallow.textarea", description { state: "default" 0.0; visible: 0; - rel1 { relative: 0.0 0.0; to: "bg"; } - rel2 { relative: 1.0 0.0; to: "keypad.pad.bottom"; } + rel1 { relative: 1.0 0.0; to_x: "keypad.pad.left"; to_y: "bg"; } + rel2 { relative: 0.0 0.0; to_x: "keypad.pad.right"; to_y: "keypad.pad.bottom"; } } description { state: "show" 0.0; inherit: "default" 0.0; diff --git a/inc/callui-keypad.h b/inc/callui-keypad.h index edad971..1901449 100755 --- a/inc/callui-keypad.h +++ b/inc/callui-keypad.h @@ -24,7 +24,7 @@ typedef struct _callui_keypad *callui_keypad_h; /* Keypad show state change callback prototype */ -typedef void (*show_state_change_cd)(void *data, Eina_Bool visibility); +typedef void (*keypad_show_state_change_cd)(void *data, Eina_Bool visibility); typedef struct appdata callui_app_data_t; @@ -92,7 +92,7 @@ void _callui_keypad_hide_immediately(callui_keypad_h keypad); * @return CALLUI_RESULT_OK on success or another result otherwise */ callui_result_e _callui_keypad_add_show_status_change_cb(callui_keypad_h keypad, - show_state_change_cd cb_func, void *cb_data); + keypad_show_state_change_cd cb_func, void *cb_data); /** * @brief Removes keypad show status change callback @@ -104,6 +104,6 @@ callui_result_e _callui_keypad_add_show_status_change_cb(callui_keypad_h keypad, * @return CALLUI_RESULT_OK on success or another result otherwise */ callui_result_e _callui_keypad_remove_show_status_change_cb(callui_keypad_h keypad, - show_state_change_cd cb_func, void *cb_data); + keypad_show_state_change_cd cb_func, void *cb_data); #endif /* __CALLUI_VIEW_KEYPAD_H__ */ diff --git a/src/callui-keypad.c b/src/callui-keypad.c index 2f2af98..2e1f77f 100755 --- a/src/callui-keypad.c +++ b/src/callui-keypad.c @@ -33,8 +33,7 @@ #define CALLUI_PART_SWALLOW_KEYPAD "swallow.keypad_region" #define CALLUI_PART_SWALLOW_KEYPAD_LAYOUT_AREA "swallow.keypad_layout_area" -#define CALLUI_KEYPAD_ENTRY_FONT "%s" -#define CALLUI_KEYPAD_ENTRY_STYLE "DEFAULT='align=center color=#ffffffff font_size=76'" +#define CALLUI_KEYPAD_ENTRY_STYLE "DEFAULT='font=Tizen:style=Light font_size=76 align=center color=#fafafaff'" #define CALLUI_KEYPAD_AUTOSPACE_TIMEOUT_SEC 5.0 @@ -52,6 +51,7 @@ static int __create_gesture_layer(callui_keypad_h keypad); static void __on_key_down_click_event(void *data, Evas_Object *obj, const char *emission, const char *source); static void __on_key_up_click_event(void *data, Evas_Object *obj, const char *emission, const char *source); static Evas_Object *__create_single_line_scrolled_entry(Evas_Object *content); +static callui_result_e __create_layouts(callui_keypad_h keypad); static callui_result_e __create_entry(callui_keypad_h keypad); static void __clear_entry(callui_keypad_h keypad); static void __hide_keypad(callui_keypad_h keypad, Eina_Bool is_immediately); @@ -69,15 +69,32 @@ struct _callui_keypad { callui_app_data_t *ad; - show_state_change_cd cb_func; + keypad_show_state_change_cd cb_func; void *cb_data; Ecore_Timer *auto_spacing_timer; _callui_listeners_coll_t show_status_lc; + bool need_insert_autospace; }; typedef struct _callui_keypad _callui_keypad_t; +static callui_result_e __create_layouts(callui_keypad_h keypad) +{ + keypad->main_layout = _callui_create_layout(_callui_vm_get_main_ly(keypad->ad->view_manager), CALLUI_LY_STYLE_KEYPAD); + CALLUI_RETURN_VALUE_IF_FAIL(keypad->main_layout, CALLUI_RESULT_ALLOCATION_FAIL); + elm_object_signal_callback_add(keypad->main_layout, "hide_completed", "*", __on_hide_completed, keypad); + evas_object_hide(keypad->main_layout); + + keypad->btns_layout = _callui_create_layout(keypad->main_layout, CALLUI_LY_STYLE_KEYPAD_BTNS); + CALLUI_RETURN_VALUE_IF_FAIL(keypad->btns_layout, CALLUI_RESULT_ALLOCATION_FAIL); + elm_object_mirrored_automatic_set(keypad->btns_layout, EINA_FALSE); + elm_object_mirrored_set(keypad->btns_layout, EINA_FALSE); + elm_object_part_content_set(keypad->main_layout, CALLUI_PART_SWALLOW_KEYPAD, keypad->btns_layout); + + return CALLUI_RESULT_OK; +} + /** * @brief Initializes keypad * @@ -90,29 +107,18 @@ static callui_result_e __callui_keypad_init(callui_keypad_h keypad, callui_app_d { keypad->ad = appdata; - keypad->main_layout = _callui_create_layout(_callui_vm_get_main_ly(appdata->view_manager), CALLUI_LY_STYLE_KEYPAD); - CALLUI_RETURN_VALUE_IF_FAIL(keypad->main_layout, CALLUI_RESULT_ALLOCATION_FAIL); - - elm_object_signal_callback_add(keypad->main_layout, "hide_completed", "*", __on_hide_completed, keypad); - - keypad->btns_layout = _callui_create_layout(keypad->main_layout, CALLUI_LY_STYLE_KEYPAD_BTNS); - CALLUI_RETURN_VALUE_IF_FAIL(keypad->btns_layout, CALLUI_RESULT_ALLOCATION_FAIL); - elm_object_mirrored_automatic_set(keypad->btns_layout, EINA_FALSE); - elm_object_mirrored_set(keypad->btns_layout, EINA_FALSE); - - elm_object_part_content_set(keypad->main_layout, CALLUI_PART_SWALLOW_KEYPAD, keypad->btns_layout); + callui_result_e res = __create_layouts(keypad); + CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res); - callui_result_e res = _callui_listeners_coll_init(&keypad->show_status_lc); + res = __create_entry(keypad); CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res); res = __create_gesture_layer(keypad); CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res); - res = __create_entry(keypad); + res = _callui_listeners_coll_init(&keypad->show_status_lc); CALLUI_RETURN_VALUE_IF_FAIL(res == CALLUI_RESULT_OK, res); - evas_object_hide(keypad->main_layout); - return res; } @@ -127,9 +133,7 @@ static void __callui_keypad_deinit(callui_keypad_h keypad) _callui_listeners_coll_deinit(&keypad->show_status_lc); - if (keypad->main_layout) { - evas_object_del(keypad->btns_layout); - } + evas_object_del(keypad->main_layout); } /** @@ -290,8 +294,7 @@ static void __on_hide_completed(void *data, Evas_Object *obj, const char *emissi eext_object_event_callback_del(main_ly, EEXT_CALLBACK_BACK, __back_button_click_cb); - keypad->main_layout = elm_object_part_content_unset(main_ly, - CALLUI_PART_SWALLOW_KEYPAD_LAYOUT_AREA); + keypad->main_layout = elm_object_part_content_unset(main_ly, CALLUI_PART_SWALLOW_KEYPAD_LAYOUT_AREA); evas_object_hide(keypad->main_layout); @@ -303,9 +306,9 @@ static Eina_Bool __auto_spacing_timer_cb(void *data) CALLUI_RETURN_VALUE_IF_FAIL(data, ECORE_CALLBACK_CANCEL); callui_keypad_h keypad = data; - if (keypad->entry) { - elm_entry_entry_append(keypad->entry, " "); - } + + keypad->need_insert_autospace = true; + return ECORE_CALLBACK_CANCEL; } @@ -315,64 +318,31 @@ static void __on_key_down_click_event(void *data, Evas_Object *obj, const char * CALLUI_RETURN_IF_FAIL(source); callui_keypad_h keypad = data; - callui_app_data_t *ad = keypad->ad; - - char *entry_dest = NULL; - char *keypad_source = NULL; - char *disp_str = NULL; - if (strcmp(source, "star") == 0) { + const char *keypad_source = NULL; + if (!strcmp(source, "star")) { keypad_source = "*"; - } else if (strcmp(source, "sharp") == 0) { + } else if (!strcmp(source, "sharp")) { keypad_source = "#"; } else { - keypad_source = (char *)source; + keypad_source = source; } - callui_result_e res = _callui_sdm_start_dtmf(ad->sound_manager, keypad_source[0]); + callui_result_e res = _callui_sdm_start_dtmf(keypad->ad->sound_manager, keypad_source[0]); if (res != CALLUI_RESULT_OK) { err("_callui_sdm_start_dtmf() failed. res[%d]", res); return; } - const char *text = elm_entry_entry_get(keypad->entry); - disp_str = elm_entry_markup_to_utf8(text); + // TODO: hot fix to enable entry scrolling + elm_object_focus_set(keypad->entry, EINA_TRUE); - if (disp_str == NULL) { - err("disp_str is null"); - return; - } else if (strlen(disp_str) == 0) { - entry_dest = calloc(1, 2); - if (entry_dest == NULL) { - err("entry_dest allocation fail"); - free(disp_str); - return; - } - snprintf(entry_dest, 2, "%c", keypad_source[0]); - } else { - int buf_size = strlen(disp_str) + 2; - entry_dest = calloc(1, buf_size); - if (entry_dest == NULL) { - err("entry_dest allocation fail"); - free(disp_str); - return; - } - snprintf(entry_dest, buf_size, "%s%c", disp_str, keypad_source[0]); + if (keypad->need_insert_autospace) { + keypad->need_insert_autospace = false; + elm_entry_entry_append(keypad->entry, " "); } - - free(disp_str); - - char tmp[NAME_MAX] = { 0 }; - snprintf(tmp, NAME_MAX, CALLUI_KEYPAD_ENTRY_FONT, entry_dest); - - elm_object_text_set(keypad->entry, tmp); - + elm_entry_entry_append(keypad->entry, keypad_source); elm_entry_cursor_end_set(keypad->entry); - - if (entry_dest) { - free(entry_dest); - entry_dest = NULL; - } } static void __on_key_up_click_event(void *data, Evas_Object *obj, const char *emission, const char *source) @@ -401,35 +371,26 @@ static Evas_Object *__create_single_line_scrolled_entry(Evas_Object *content) { CALLUI_RETURN_NULL_IF_FAIL(content); - Elm_Entry_Filter_Accept_Set digits_filter_data; - - Evas_Object *en = elm_entry_add(content); - CALLUI_RETURN_NULL_IF_FAIL(en); - elm_entry_editable_set(en, EINA_FALSE); - elm_entry_scrollable_set(en, EINA_TRUE); - - elm_entry_select_all(en); - elm_scroller_policy_set(en, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); - - elm_scroller_bounce_set(en, EINA_FALSE, EINA_FALSE); - elm_entry_line_wrap_set(en, ELM_WRAP_WORD); - elm_entry_input_panel_enabled_set(en, EINA_FALSE); - elm_entry_single_line_set(en, EINA_TRUE); + Evas_Object *eo = elm_entry_add(content); + CALLUI_RETURN_NULL_IF_FAIL(eo); + evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_entry_single_line_set(eo, EINA_TRUE); + elm_entry_editable_set(eo, EINA_FALSE); + elm_entry_scrollable_set(eo, EINA_TRUE); + elm_scroller_bounce_set(eo, EINA_FALSE, EINA_FALSE); + elm_entry_line_wrap_set(eo, ELM_WRAP_WORD); + elm_entry_input_panel_enabled_set(eo, EINA_FALSE); + elm_entry_context_menu_disabled_set(eo, EINA_TRUE); + Elm_Entry_Filter_Accept_Set digits_filter_data; digits_filter_data.accepted = "0123456789+*# "; digits_filter_data.rejected = NULL; - elm_entry_markup_filter_append(en, elm_entry_filter_accept_set, &digits_filter_data); - - elm_entry_context_menu_disabled_set(en, EINA_TRUE); - elm_entry_cursor_end_set(en); - evas_object_size_hint_weight_set(en, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_size_hint_align_set(en, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_entry_markup_filter_append(eo, elm_entry_filter_accept_set, &digits_filter_data); - elm_entry_text_style_user_push(en, CALLUI_KEYPAD_ENTRY_STYLE); + elm_entry_text_style_user_push(eo, CALLUI_KEYPAD_ENTRY_STYLE); - evas_object_show(en); - - return en; + return eo; } /** @@ -442,18 +403,13 @@ static Evas_Object *__create_single_line_scrolled_entry(Evas_Object *content) static callui_result_e __create_entry(callui_keypad_h keypad) { keypad->entry = __create_single_line_scrolled_entry(keypad->main_layout); - if (!keypad->entry) { - err("Create entry failed"); - return CALLUI_RESULT_ALLOCATION_FAIL; - } - + CALLUI_RETURN_VALUE_IF_FAIL(keypad->entry, CALLUI_RESULT_ALLOCATION_FAIL); elm_object_signal_callback_add(keypad->btns_layout, "pad_down", "*", __on_key_down_click_event, keypad); elm_object_signal_callback_add(keypad->btns_layout, "pad_up", "*", __on_key_up_click_event, keypad); + elm_object_part_content_set(keypad->main_layout, CALLUI_PART_SWALLOW_TEXT_AREA, keypad->entry); __clear_entry(keypad); - elm_object_part_content_set(keypad->main_layout, CALLUI_PART_SWALLOW_TEXT_AREA, keypad->entry); - return CALLUI_RESULT_OK; } @@ -466,10 +422,10 @@ void _callui_keypad_show(callui_keypad_h keypad) { CALLUI_RETURN_IF_FAIL(keypad); callui_app_data_t *ad = keypad->ad; - Evas_Object *main_ly = _callui_vm_get_main_ly(ad->view_manager); __clear_entry(keypad); + Evas_Object *main_ly = _callui_vm_get_main_ly(ad->view_manager); elm_object_part_content_set(main_ly, CALLUI_PART_SWALLOW_KEYPAD_LAYOUT_AREA, keypad->main_layout); evas_object_show(keypad->main_layout); @@ -538,7 +494,7 @@ static void __keypda_state_change_handler_func(_callui_listener_t *listener, va_ } callui_result_e _callui_keypad_add_show_status_change_cb(callui_keypad_h keypad, - show_state_change_cd cb_func, void *cb_data) + keypad_show_state_change_cd cb_func, void *cb_data) { CALLUI_RETURN_VALUE_IF_FAIL(keypad, CALLUI_RESULT_INVALID_PARAM); CALLUI_RETURN_VALUE_IF_FAIL(cb_func, CALLUI_RESULT_INVALID_PARAM); @@ -548,7 +504,7 @@ callui_result_e _callui_keypad_add_show_status_change_cb(callui_keypad_h keypad, } callui_result_e _callui_keypad_remove_show_status_change_cb(callui_keypad_h keypad, - show_state_change_cd cb_func, void *cb_data) + keypad_show_state_change_cd cb_func, void *cb_data) { CALLUI_RETURN_VALUE_IF_FAIL(keypad, CALLUI_RESULT_INVALID_PARAM); CALLUI_RETURN_VALUE_IF_FAIL(cb_func, CALLUI_RESULT_INVALID_PARAM);