TizenRefApp-7518 [Call UI] Fix displaying entered text from keypad according to UI/GUI 24/94524/2
authorIgor Olshevskyi <i.olshevskyi@samsung.com>
Mon, 31 Oct 2016 09:02:37 +0000 (11:02 +0200)
committerIgor Olshevskyi <i.olshevskyi@samsung.com>
Mon, 31 Oct 2016 09:31:59 +0000 (02:31 -0700)
Change-Id: I108b0f80f285da2ef58f780de4dde9537869810b

edje_src/edc/callui-keypad.edc
inc/callui-keypad.h
src/callui-keypad.c

index 10ffcae..4a749aa 100644 (file)
@@ -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, \
 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;
index edad971..1901449 100755 (executable)
@@ -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__     */
index 2f2af98..2e1f77f 100755 (executable)
@@ -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       "<font='Samsung Sans Num47:style=Light'>%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);