Tizen 2.4.0 rev3 SDK Public Release tizen_2.4
authorjk7744.park <jk7744.park@samsung.com>
Wed, 24 Feb 2016 10:08:46 +0000 (19:08 +0900)
committerjk7744.park <jk7744.park@samsung.com>
Wed, 24 Feb 2016 10:08:46 +0000 (19:08 +0900)
22 files changed:
common/data/msg_common.edc
common/msg-ui-common-utility.c
composer/data/composer_edc/msg-ui-composer-body.edc
composer/src/bubble/msg-ui-composer-bubble-callback.c
composer/src/ui-composer/msg-ui-composer-body-callback.c
composer/src/ui-composer/msg-ui-composer-body-page.c
composer/src/ui-composer/msg-ui-composer-body.c
composer/src/ui-composer/msg-ui-composer-common.c
composer/src/ui-composer/msg-ui-composer-main.c
composer/src/ui-composer/msg-ui-composer-popup.c
composer/src/ui-composer/msg-ui-composer-recipient-callback.c
composer/src/ui-composer/msg-ui-composer-recipient.c
composer/src/util/msg-ui-composer-util.c
main/message.c
message.xml.in
setting/include/msg-ui-setting-common-util.h
setting/src/multimedia/msg-ui-setting-mm-message.c
setting/src/text/msg-ui-setting-text-message.c
setting/src/text/msg-ui-setting-text-sim-card-msg.c
thread/include/msg-ui-thread-main.h
thread/src/msg-ui-thread-callback.c
thread/src/msg-ui-thread-list.c

index c8e2bd0..355aeb8 100755 (executable)
@@ -234,7 +234,7 @@ collections {
                                description {
                                        state: "default" 0.0;
                                        min: 0 64;
-                                       fixed: 1 1;
+                                       fixed: 0 1;
                                        align : 0.0 0.5;
                                        rel1 { relative: 1.0 0.0; to_x: "padding_left"; to_y: "base";}
                                        rel2 { relative: 0.0 1.0; to_x: "down_arrow"; to_y: "base";}
@@ -389,7 +389,6 @@ collections {
                                        rel1 { relative: 1.0 0.0; to_x: "cancel_btn"; to_y: "delete_title_bg"; offset: TITLE_TEXT_BUTTON_INNER_PADDING 0;}
                                        rel2 { relative: 0.0 1.0; to_x: "done_btn"; to_y: "delete_title_bg"; offset: -TITLE_TEXT_BUTTON_INNER_PADDING 0;}
                                        visible: 0;
-                                       fixed: 1 1;
                                }
                                description {
                                        state: "show_select_info" 0.0;
@@ -397,7 +396,7 @@ collections {
                                        align: 0.5 0.5;
                                        min: 0 64;
                                        max: -1 64;
-                                       fixed: 1 1;
+                                       fixed: 1 0;
                                        rel1 { relative: 1.0 0.0; to_x: "cancel_btn"; to_y: "delete_title_bg"; offset: TITLE_TEXT_BUTTON_INNER_PADDING 0;}
                                        rel2 { relative: 0.0 1.0; to_x: "done_btn"; to_y: "delete_title_bg"; offset: -TITLE_TEXT_BUTTON_INNER_PADDING 0;}
                                }
@@ -451,7 +450,7 @@ collections {
                                scale: 1;
                                description {
                                        state: "default" 0.0;
-                                       fixed: 1 1;
+                                       fixed: 0 0;
                                        image.normal: "core_icon_expand_close.png";
                                        color: BUBBLE_NAVI_TITLE_ARROW_COLOR;
                                        min: 80 80;
index a316cf0..ff92b0b 100755 (executable)
@@ -1887,41 +1887,41 @@ __EXPORT_API__ int msg_common_get_contact_display_name_by_index(int index, char
        return ret;
 }
 
-static void __msg_common_get_self_number(char **self_ph_num) {
+static void __msg_common_get_self_number(char **self_ph_num)
+{
        telephony_handle_list_s tel_handle_list;
-       int err = telephony_init(&tel_handle_list);
 
-       if (err == TELEPHONY_ERROR_NONE) {
+       if (telephony_init(&tel_handle_list) == TELEPHONY_ERROR_NONE) {
                if (tel_handle_list.count > 0) {
                        telephony_h tel_handle = tel_handle_list.handle[0];
 
-                       err = telephony_sim_get_subscriber_number(tel_handle, self_ph_num);
+                       int err = telephony_sim_get_subscriber_number (tel_handle, self_ph_num);
 
-                       if (err != TELEPHONY_ERROR_NONE) {
+                       if (err != TELEPHONY_ERROR_NONE)
+                       {
                                if (*self_ph_num) {
                                        free(*self_ph_num);
                                }
+
                                D_EMSG("Cannot get self phone number, err = %d", err);
+                       } else if (*self_ph_num[0] == 0) {
+                               D_IMSG("Provider doesn't support self number.");
+
+                               if (*self_ph_num) {
+                                       free(*self_ph_num);
+                               }
+
+                               const char *unkn_str = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_UNKNOWN");
+                               *self_ph_num = calloc(strlen(unkn_str), sizeof(char));
+                               strcpy(*self_ph_num, unkn_str);
                        }
                } else {
-                       err = TELEPHONY_ERROR_SIM_NOT_AVAILABLE;
                        D_EMSG("Any SIM unavailable.");
                }
-               telephony_deinit(&tel_handle_list);
-       }
-
-       if (err != TELEPHONY_ERROR_NONE || *self_ph_num[0] == 0) {
-               D_IMSG("Provider doesn't support self number.");
-
-               if (*self_ph_num) {
-                       free(*self_ph_num);
-               }
 
-               const char *unkn_str = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_UNKNOWN");
-               *self_ph_num = calloc(strlen(unkn_str) + 1, sizeof(char));
-               if (*self_ph_num) {
-                       strncpy(*self_ph_num, unkn_str, strlen(unkn_str) + 1);
-               }
+               telephony_deinit(&tel_handle_list);
+       } else {
+               D_EMSG("telephony_init is failed.");
        }
 }
 
index 40bf342..1fffdea 100755 (executable)
@@ -626,7 +626,7 @@ group {
                        }
                }
                PADDING_LEFT("padding_left", 5); // padding between add button and input field line. (this is modified to stand in line with inputted text of entry.)
-               PADDING_TOP("padding_top", 13); //input field of top padding (ignore the composer/body/main of top padding)
+               PADDING_TOP("padding_top", 10); //input field of top padding (ignore the composer/body/main of top padding)
                PADDING_BOTTOM("padding_bottom", 7); //input field of bottom padding (ignore the composer/body/main of bottom padding)
                part {
                        name: "padding_page_top"; //padding between padding_top and input field .
@@ -635,7 +635,7 @@ group {
                        mouse_events: 0;
                        description {
                                state: "default" 0.0;
-                               min: 0 37;
+                               min: 0 20;
                                fixed: 0 1;
                                rel1 { to_y: "padding_top"; relative: 0.0 1.0; }
                                rel2 { to_y: "padding_top"; relative: 1.0 1.0; }
@@ -714,10 +714,9 @@ group {
                PADDING_TOP("padding_top", 1);
                PADDING_BOTTOM("padding_btn_bottom", 23);
                PADDING_BOTTOM("padding_entry_bottom", 0);
-               PADDING_BOTTOM("padding_send_btn_bottom", 26);
+               PADDING_BOTTOM("padding_send_btn_bottom", 20);
                PADDING_LEFT("padding_left", 11);
-               PADDING_RIGHT("padding_right", 0);
-
+               PADDING_RIGHT("padding_right", 15);
 
                part {
                        name: "rect.add_bt_area";
@@ -782,20 +781,55 @@ group {
                }
 
                part {
+                       name: "rect";
+                       type: IMAGE;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               visible: 0;
+                               state: "default" 0.0;
+                               min: 0 MSGC_BODY_MAIN_MIN_H;
+                               rel1{ to_x: "padding_rect_left"; relative: 1.0 0.0; }
+                               rel2{ relative: 1.0 1.0; }
+                               color: COLOR_BUBBLE_LINE_EDC;
+                               image {
+                                       normal: "messages_bubble_line_send.#.png";
+                                       border: 60 60 60 60;
+                                       border_scale: 1;
+                               }
+                       }
+               }
+
+               part {
                        name: "swl.main"; //input field
                        type: SWALLOW;
                        scale: 1;
                        description {
                                state: "default" 0.0;
                                min: 0 48;
-                               max: -1 -1;
+                               max: -1 48;
                                fixed: 1 0;
-                               rel1 { to_x: "padding1"; to_y: "padding1"; relative: 1.0 0.0; }
-                               rel2 { to_x: "padding2"; to_y: "padding2"; relative: 0.0 1.0; }
+                               rel1 { to_x: "padding1"; to_y: "rect"; relative: 1.0 0.5; }
+                               rel2 { to_x: "padding2"; to_y: "rect"; relative: 0.0 0.5; }
                                align: 0.0 0.5;
                        }
                }
                part {
+                       name: "text_padding"; //padding between char count and send button.
+                       type: SPACER;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 2;
+                               max: -1 2;
+                               fixed: 1 1;
+                               align: 0.0 1.0;
+                               rel1 { to_x: "text_count_rect"; to_y: "text_count_rect"; relative: 0.0 1.0; }
+                               rel2 { to_x: "text_count_rect"; to_y: "text_count_rect"; relative: 1.0 1.0; }
+                       }
+               }
+               part {
                        name: "text.char_count";
                        type: TEXT;
                        scale: 1;
@@ -851,13 +885,13 @@ group {
                                min: BODY_SENDBUTTON_SIZE;
                                max: BODY_SENDBUTTON_SIZE;
                                align: 1.0 1.0;
-                               rel1 { to_x: "padding_right"; to_y: "padding_send_btn_bottom"; relative: 0.0 0.0; }
+                               rel1 { to_x: "padding_right"; to_y: "text_padding"; relative: 0.0 1.0; }
                                rel2 { to_x: "padding_right"; to_y: "padding_send_btn_bottom"; relative: 0.0 0.0; }
                        }
                        description {
                                state: "landscape" 0.0;
                                inherit: "default" 0.0;
-                               rel1 { to_x: "padding_right"; to_y: "padding_send_btn_bottom"; relative: 0.0 0.0; }
+                               rel1 { to_x: "padding_right"; to_y: "text_padding"; relative: 0.0 1.0; }
                                rel2 { to_x: "padding_right"; to_y: "padding_send_btn_bottom"; relative: 0.0 0.0; }
                        }
                }
@@ -924,6 +958,7 @@ group {
                        target: "rect.add_bt_area";
 #endif
                        target: "swl.main";
+                       target: "text_padding";
                }
                program {
                        name: "show.landscape.mode";
@@ -937,6 +972,7 @@ group {
                        target: "rect.add_bt_area";
 #endif
                        target: "swl.main";
+                       target: "text_padding";
                }
        }
 }
index b05ca61..57fe56c 100755 (executable)
@@ -44,7 +44,6 @@ Evas_Coord g_mouse_down_x = 0, g_mouse_down_y = 0;
 static Evas_Object *__msg_ui_bubble_delete_confirm_popup(PMSG_BUBBLE_DATA pData);
 static void __msg_ui_bubble_popup_button_clicked_cb(void *data, Evas_Object *obj, void *event_info);
 static void __msg_ui_bubble_timezone_change_cb(void *data);
-static void _show_mbe_with_contacts(MSG_COMPOSER_VIEW_DATA_S *cd);
 
 static void msg_ui_bubble_sel_all_layout_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
 {
@@ -404,11 +403,13 @@ void msg_ui_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_inf
        msg_ui_bubble_destroy_popup(pData);
 }
 
-static void _show_mbe_with_contacts(MSG_COMPOSER_VIEW_DATA_S *cd)
+void msg_ui_bubble_title_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
 {
        D_ENTER;
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
+
+       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
        PMSG_BUBBLE_DATA bubble_data = cd->bubble_data;
-       D_MSG_RETM_IF(!bubble_data, "bubble_data is NULL!!");
 
        msg_ui_composer_unset_view(cd);
 
@@ -436,25 +437,14 @@ static void _show_mbe_with_contacts(MSG_COMPOSER_VIEW_DATA_S *cd)
        D_LEAVE;
 }
 
-void msg_ui_bubble_title_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
-{
-       D_ENTER;
-       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
-
-       MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
-
-       _show_mbe_with_contacts(cd);
-       D_LEAVE;
-}
-
 void msg_ui_bubble_down_button_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
 {
        D_ENTER;
        MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj);
 
        MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+       PMSG_BUBBLE_DATA bubble_data = cd->bubble_data;
 
-       _show_mbe_with_contacts(cd);
        D_LEAVE;
 }
 
index 0e90a14..ea0114b 100755 (executable)
@@ -1021,9 +1021,6 @@ void msg_ui_composer_body_entry_press_cb(void *data, Evas_Object *obj, void *eve
        if (msg_ui_composer_recipient_check_showing_popup_condition(cd) == true) {
                elm_entry_context_menu_disabled_set(obj, EINA_TRUE);
        } else {
-               if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) {
-                       msg_ui_composer_recipient_hide_mbe_and_update_entry(rd);
-               }
                elm_entry_context_menu_disabled_set(obj, EINA_FALSE);
        }
 
@@ -1234,10 +1231,6 @@ void msg_ui_composer_body_entry_focused_cb(void *data, Evas_Object *obj, void *e
 
        msg_ui_composer_last_focused_entry_set(cd, obj);
 
-       if (cd->center_popup == NULL && cd->composer_mode != MSG_COMPOSER_MODE_NORMAL) {
-               msg_ui_composer_entry_input_panel_show(cd->last_focus_entry);
-       }
-
        D_LEAVE;
 }
 
@@ -1996,6 +1989,10 @@ void msg_ui_attach_panel_result_cb(attach_panel_h attach_panel,
                _attach_panel_selected_cb(cd, attach_panel, content_category, select, length);
                free(select);
        }
+
+       if (cd->center_popup == NULL) {
+               msg_ui_composer_entry_input_panel_show(cd->last_focus_entry);
+       }
 }
 
 static void _attach_panel_selected_cb(MSG_COMPOSER_VIEW_DATA_S *cd, attach_panel_h attach_panel,
index 9a07077..26ddf6c 100755 (executable)
@@ -1861,14 +1861,6 @@ void msg_ui_composer_body_backspace_sound_layout_focus_show(MSG_COMPOSER_VIEW_DA
        D_LEAVE;
 }
 
-/**
- * Check if page have really no data, included text and audio/image-attachments as well
- * */
-static bool __msg_ui_is_page_empty(MSG_COMPOSER_BODY_PAGE_S *page_data)
-{
-       return elm_entry_is_empty(page_data->entry) && !page_data->sound_item && !page_data->image_item;
-}
-
 void msg_ui_composer_body_remove_cur_page(void *data, MSG_COMPOSER_BODY_PAGE_S *page_data, int page_index)
 {
        D_ENTER;
@@ -1887,8 +1879,8 @@ void msg_ui_composer_body_remove_cur_page(void *data, MSG_COMPOSER_BODY_PAGE_S *
                msg_ui_composer_mms_attach_image_remove(page_data, page_data->image_item);
        }
 
-       if (__msg_ui_is_page_empty(page_data)) {
-               D_MSG("remove page if it's empty");
+       if (elm_entry_is_empty(page_data->entry)) {
+               D_MSG("remove page if entry is empty");
                msg_ui_composer_mms_body_remove_page(cd, remove_layout, true);
        }
 
index 3889686..a6e8f23 100755 (executable)
@@ -1530,6 +1530,8 @@ void msg_ui_composer_body_delete(MSG_COMPOSER_VIEW_DATA_S *cd)
                }
        }
 
+       msg_ui_destroy_attach_panel(cd);
+
        MSG_ECORE_IDLER_DEL(cd->keypad_show_idler);
        MSG_ECORE_IDLER_DEL(cd->media_event_idler);
        MSG_ECORE_IDLER_DEL(cd->entry_size_idler);
@@ -2653,11 +2655,20 @@ void msg_ui_destroy_attach_panel(MSG_COMPOSER_VIEW_DATA_S *cd)
        D_ENTER;
        if (cd && cd->attach_panel) {
                msg_ui_hide_attach_panel(cd);
+
                attach_panel_unset_result_cb(cd->attach_panel);
+               attach_panel_remove_content_category(cd->attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_IMAGE);
+               attach_panel_remove_content_category(cd->attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_CAMERA);
+               attach_panel_remove_content_category(cd->attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_VOICE);
+               attach_panel_remove_content_category(cd->attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_VIDEO);
+               attach_panel_remove_content_category(cd->attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_AUDIO);
+               attach_panel_remove_content_category(cd->attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_MYFILES);
 
                int destroy_res = attach_panel_destroy(cd->attach_panel);
                D_MSG("attach_panel_destroy() returned %d", destroy_res);
-               cd->attach_panel = NULL;
+               if (ATTACH_PANEL_ERROR_NONE == destroy_res || ATTACH_PANEL_ERROR_ALREADY_DESTROYED == destroy_res) {
+                       cd->attach_panel = NULL;
+               }
        }
 }
 
index a5b536b..a1d091e 100755 (executable)
@@ -541,7 +541,7 @@ void msg_ui_composer_common_message_send(MSG_COMPOSER_VIEW_DATA_S *cd)
                }
        }
 
-       msg_ui_hide_attach_panel(cd);
+       msg_ui_destroy_attach_panel(cd);
 }
 
 char *msg_ui_composer_edj_get(MSG_COMPOSER_VIEW_DATA_S *cd)
index 12edc04..49b6ade 100755 (executable)
@@ -1526,8 +1526,6 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_destroy(MSG_COMPOSER_VIEW_DATA_S *cd)
        D_ENTER;
        COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
 
-       msg_ui_destroy_attach_panel(cd);
-
        /* when user clicks the Switch button to change data to voice preferred SIM , then we create popup to block user from doing anything
         * And at this time if user goes to task manager and kills the app, then sim need to be reset back . So Below lines are added for this special case */
        if (cd->is_net_switch_popup_exist == true) {
index eef780f..bb62b08 100755 (executable)
@@ -204,7 +204,6 @@ void msg_ui_composer_popup_btn_clicked_cb(void *data, Evas_Object *obj, void *ev
        Evas_Object *popup = evas_object_data_del(obj, "popup");
        D_MSG_RETM_IF(popup == NULL, "popup is NULL");
        msg_ui_composer_destroy_popup(cd, popup);
-       msg_ui_composer_entry_input_panel_show(cd->last_focus_entry);
 
        D_LEAVE;
 }
index d395dc3..b408643 100755 (executable)
@@ -170,47 +170,58 @@ void msg_ui_recipient_select_popup_list_clicked_cb(void *data, Evas_Object *obj,
        if (!label) {
                D_EMSG("label is NULL !!");
        } else {
-               if (!strcmp(label, _MSGSTR("IDS_MSGF_OPT_REMOVE"))) {
-                       msg_ui_composer_recipient_selected_delete(cd);
-               } else if (!strcmp(label, _MSGSTR("IDS_MSG_OPT_EDIT"))) {
-                       msg_ui_composer_recipient_selected_edit(cd);
-#ifdef MSGC_SUPPORT_USE_OTHER_NUMBER
-               } else if (!strcmp(label, _MSGSTR("IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"))) {
-                       msg_ui_composer_recipient_create_change_number_popup(cd);
-#endif
-               } else if (!strcmp(label, _MSGSTR("IDS_MSG_OPT_VIEW_CONTACT_DETAILS_ABB"))) {
-                       RECIPIENT_ITEM_S *r_item = msg_ui_composer_recipient_selected_item_data_get(cd);
-                       if (r_item)
-                               appsvc_launch_contacts(cd, r_item->index, NULL, PERSON_ID_TYPE);
-                       else
-                               D_EMSG("r_item is NULL");
-
-                       /* temporarily, set focus to back_btn to resolve invalid focus tree issue */
-                       elm_object_focus_set(msg_ui_composer_get_focusible_widget(cd), EINA_TRUE);
-               } else if (!strcmp(label, _MSGSTR("IDS_MSG_OPT_CREATE_CONTACT_ABB"))) {
-                       RECIPIENT_ITEM_S *r_item = msg_ui_composer_recipient_selected_item_data_get(cd);
-
-                       if (msg_common_is_valid_phone_number(r_item->recipient))
-                               appsvc_launch_contacts(cd, 0, r_item->recipient, UPDATE_CONTACT_NUMBER_TYPE);
-                       else if (msg_common_is_valid_email_addr(r_item->recipient))
-                               appsvc_launch_contacts(cd, 0, r_item->recipient, UPDATE_CONTACT_EMAIL_TYPE);
-                       else
-                               D_EMSG("r_item->recipient adress is invalid: (%s)", r_item->recipient);
-               } else if (!strcmp(label, _MSGSTR("IDS_MSG_OPT_UPDATE_CONTACT"))) {
-                       RECIPIENT_ITEM_S *r_item = msg_ui_composer_recipient_selected_item_data_get(cd);
 
-                       CONTACT_APPSVC_LAUNCH_DATA app_launch_data;
-                       app_launch_data.on_reply = __msg_ui_composer_contact_detail_reply_cb;
-                       app_launch_data.on_reply_data = (void *)cd;
-
-                       app_control_h svc_handle = NULL;
-                       svc_handle = msg_common_appsvc_edit_contact(r_item->recipient, &app_launch_data);
-
-                       if (svc_handle) {
-                               cd->callee_svc_handle = svc_handle;
+               if (cd->isAppControl && cd->isEmulator) {
+                       if (!strcmp(label, _MSGSTR("IDS_MSGF_OPT_REMOVE"))) {
+                               msg_ui_composer_recipient_selected_delete(cd);
+                       } else if (!strcmp(label, _MSGSTR("IDS_MSG_OPT_EDIT"))) {
+                               msg_ui_composer_recipient_selected_edit(cd);
+                       } else {
+                               D_EMSG("Invalid list type!!");
                        }
                } else {
-                       D_EMSG("Invalid list type!!");
+                       if (!strcmp(label, _MSGSTR("IDS_MSGF_OPT_REMOVE"))) {
+                               msg_ui_composer_recipient_selected_delete(cd);
+                       } else if (!strcmp(label, _MSGSTR("IDS_MSG_OPT_EDIT"))) {
+                               msg_ui_composer_recipient_selected_edit(cd);
+#ifdef MSGC_SUPPORT_USE_OTHER_NUMBER
+                       } else if (!strcmp(label, _MSGSTR("IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"))) {
+                               msg_ui_composer_recipient_create_change_number_popup(cd);
+#endif
+                       } else if (!strcmp(label, _MSGSTR("IDS_MSG_OPT_VIEW_CONTACT_DETAILS_ABB"))) {
+                               RECIPIENT_ITEM_S *r_item = msg_ui_composer_recipient_selected_item_data_get(cd);
+                               if (r_item)
+                                       appsvc_launch_contacts(cd, r_item->index, NULL, PERSON_ID_TYPE);
+                               else
+                                       D_EMSG("r_item is NULL");
+
+                               /* temporarily, set focus to back_btn to resolve invalid focus tree issue */
+                               elm_object_focus_set(msg_ui_composer_get_focusible_widget(cd), EINA_TRUE);
+                       } else if (!strcmp(label, _MSGSTR("IDS_MSG_OPT_CREATE_CONTACT_ABB"))) {
+                               RECIPIENT_ITEM_S *r_item = msg_ui_composer_recipient_selected_item_data_get(cd);
+
+                               if (msg_common_is_valid_phone_number(r_item->recipient))
+                                       appsvc_launch_contacts(cd, 0, r_item->recipient, UPDATE_CONTACT_NUMBER_TYPE);
+                               else if (msg_common_is_valid_email_addr(r_item->recipient))
+                                       appsvc_launch_contacts(cd, 0, r_item->recipient, UPDATE_CONTACT_EMAIL_TYPE);
+                               else
+                                       D_EMSG("r_item->recipient adress is invalid: (%s)", r_item->recipient);
+                       } else if (!strcmp(label, _MSGSTR("IDS_MSG_OPT_UPDATE_CONTACT"))) {
+                               RECIPIENT_ITEM_S *r_item = msg_ui_composer_recipient_selected_item_data_get(cd);
+
+                               CONTACT_APPSVC_LAUNCH_DATA app_launch_data;
+                               app_launch_data.on_reply = __msg_ui_composer_contact_detail_reply_cb;
+                               app_launch_data.on_reply_data = (void *)cd;
+
+                               app_control_h svc_handle = NULL;
+                               svc_handle = msg_common_appsvc_edit_contact(r_item->recipient, &app_launch_data);
+
+                               if (svc_handle) {
+                                       cd->callee_svc_handle = svc_handle;
+                               }
+                       } else {
+                               D_EMSG("Invalid list type!!");
+                       }
                }
        }
 
@@ -1271,17 +1282,6 @@ static void __msg_ui_recipient_unselect_mbe_item(RECIPIENT_S *rd)
        }
 }
 
-static void __msg_ui_contacts_button_set(RECIPIENT_S *rd)
-{
-       D_ENTER;
-       if (rd->contact_btn != elm_object_part_content_get(rd->ly_to, "swl.contact_btn")) {
-               elm_object_part_content_unset(rd->ly_to, "swl.contact_btn");
-               evas_object_hide(rd->plus_btn);
-
-               elm_object_part_content_set(rd->ly_to, "swl.contact_btn", rd->contact_btn);
-       }
-}
-
 void msg_ui_recipient_entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
 {
        D_ENTER;
@@ -1326,16 +1326,17 @@ void msg_ui_recipient_entry_changed_cb(void *data, Evas_Object *obj, void *event
                                elm_object_part_content_set(rd->ly_to, "swl.contact_btn", rd->plus_btn);
                                if (elm_object_focus_get(rd->contact_btn))
                                        elm_object_focus_set(rd->contact_btn, EINA_FALSE);
-                               evas_object_show(rd->plus_btn);
-                               elm_object_focus_set(rd->plus_btn, EINA_TRUE);
-                               elm_object_focus_set(rd->entry, EINA_TRUE);
                        }
                } else {
-                       __msg_ui_contacts_button_set(rd);
+                       if (rd->contact_btn != elm_object_part_content_get(rd->ly_to, "swl.contact_btn")) {
+                               elm_object_part_content_unset(rd->ly_to, "swl.contact_btn");
+                               evas_object_hide(rd->plus_btn);
+
+                               elm_object_part_content_set(rd->ly_to, "swl.contact_btn", rd->contact_btn);
+                       }
                }
                D_MSG("rd->was_entry_empty = %d", rd->was_entry_empty);
                if (rd->was_entry_empty) {
-                       __msg_ui_contacts_button_set(rd);
                        return;
                }
        }
index 02f29a8..5893840 100755 (executable)
@@ -434,7 +434,6 @@ void msg_ui_composer_recipient_selected_edit(MSG_COMPOSER_VIEW_DATA_S *cd)
                return;
        }
 
-       elm_object_focus_set(rd->entry, true);
        r_item = msg_ui_composer_recipient_selected_item_data_get(cd);
        D_MSG_RETM_IF(r_item == NULL, "Selected Data is NULL");
 
@@ -520,13 +519,17 @@ void msg_ui_composer_recipient_select_popup_create(void *data)
                return;
        }
 
-       if (r_item->index > 0) {
-               if (r_item->display_name[0] != '\0')
-                       snprintf(title_str, sizeof(title_str), "%s <%s>", r_item->display_name, r_item->recipient);
-               else
-                       snprintf(title_str, sizeof(title_str), "%s", r_item->recipient);
-       } else {
+       if (cd->isAppControl && cd->isEmulator) {
                snprintf(title_str, sizeof(title_str), "%s", r_item->recipient);
+       } else {
+               if (r_item->index > 0) {
+                       if (r_item->display_name[0] != '\0')
+                               snprintf(title_str, sizeof(title_str), "%s <%s>", r_item->display_name, r_item->recipient);
+                       else
+                               snprintf(title_str, sizeof(title_str), "%s", r_item->recipient);
+               } else {
+                       snprintf(title_str, sizeof(title_str), "%s", r_item->recipient);
+               }
        }
 
        if (rd->selected_popup) {
index 8132f95..6c9ca99 100755 (executable)
@@ -1135,9 +1135,6 @@ int jpeg_image_change_image(const char *src_file_path, MSGC_UTIL_CHANGE_IMAGE_S
 
        if (fclose(image_file)) {
                D_EMSG("Can't close file in %s", dst_file_path);
-
-               /* Even if the call fails, the stream passed as parameter will no longer be associated with the file nor its buffers*/
-               image_file = NULL;
                goto err_return;
        }
 
index 4f1d2ff..750ec2d 100755 (executable)
@@ -1121,10 +1121,6 @@ void msg_ui_destroy_composer_ug(ui_gadget_h ug, bool bDeleteAll)
                        msg_ui_thread_show_composer_btn(pListData);
                }
        }
-
-       if (pListData && pListData->app_data_type == THREAD_LIST_APP_DATA_SEARCH) {
-               msg_ui_thread_search_list_load(pListData);
-       }
 }
 
 int msg_ui_get_composer_ug_type(ui_gadget_h ug)
@@ -1297,7 +1293,6 @@ static bool app_create(void *data)
        D_MSG_RETVM_IF(!data, MSG_UI_RET_ERR, "data is NULL!!");
 
        elm_app_base_scale_set(2.6);
-       elm_config_preferred_engine_set("opengl_x11");
 
        bindtextdomain("message", LOCALEDIR);
 
@@ -1320,6 +1315,8 @@ static bool app_create(void *data)
                free(language_set);
                language_set = NULL;
        }
+
+       /* elm_config_preferred_engine_set("opengl_x11");        //"software_x11" */
        /* create window */
        ad->win_main = __msg_ui_create_win(MESSAGE_PKGNAME);
 
index 016a69b..695db7e 100755 (executable)
                <label xml:lang="zh-tw">訊息</label>
                <application-service>
                        <operation name="http://tizen.org/appcontrol/operation/compose"/>
-               </application-service>
-               <application-service>
-                       <operation name="http://tizen.org/appcontrol/operation/compose"/>
                        <uri name="sms"/>
-               </application-service>
-               <application-service>
-                       <operation name="http://tizen.org/appcontrol/operation/compose"/>
                        <uri name="mmsto"/>
+                       <uri name=""/>
                </application-service>
                <application-service>
                        <operation name="http://tizen.org/appcontrol/operation/share"/>
-                       <mime name="*/*"/>
-               </application-service>
-               <application-service>
-                       <operation name="http://tizen.org/appcontrol/operation/share"/>
-                       <mime name="*/*"/>
                        <uri name="sms"/>
-               </application-service>
-               <application-service>
-                       <operation name="http://tizen.org/appcontrol/operation/share"/>
-                       <mime name="*/*"/>
                        <uri name="mmsto"/>
-               </application-service>
-               <application-service>
-                       <operation name="http://tizen.org/appcontrol/operation/multi_share"/>
+                       <uri name="file"/>
+                       <uri name=""/>
                        <mime name="*/*"/>
                </application-service>
                <application-service>
                        <operation name="http://tizen.org/appcontrol/operation/multi_share"/>
-                       <mime name="*/*"/>
                        <uri name="sms"/>
-               </application-service>
-               <application-service>
-                       <operation name="http://tizen.org/appcontrol/operation/multi_share"/>
-                       <mime name="*/*"/>
                        <uri name="mmsto"/>
-               </application-service>
-               <application-service>
-                       <operation name="http://tizen.org/appcontrol/operation/share_text"/>
+                       <uri name=""/>
+                       <mime name="*/*"/>
                </application-service>
                <application-service>
                        <operation name="http://tizen.org/appcontrol/operation/share_text"/>
                        <uri name="sms"/>
-               </application-service>
-               <application-service>
-                       <operation name="http://tizen.org/appcontrol/operation/share_text"/>
                        <uri name="mmsto"/>
+                       <uri name=""/>
                </application-service>
                <application-service>
                        <operation name="http://tizen.org/appcontrol/operation/share_contact"/>
index 5c20382..e52123a 100755 (executable)
@@ -32,9 +32,6 @@
 #define MSG_POPUP_DEFAULT_TIMEOUT 2
 #define MSG_POPUP_NO_TIMEOUT 0
 
-#define MSG_MULTILINE_FONT_SIZE "32"
-#define MSG_FIXED_SIZE_MULTILINE_TEMPLATE "<font_size="MSG_MULTILINE_FONT_SIZE">%s</font_size>"
-
 struct _msg_ui_setting_list_item {
        char *name;
        void (*func)(void *data, Evas_Object *obj, void *event_info);
index 0cb3b20..c8c80ea 100755 (executable)
@@ -50,7 +50,6 @@ static char *__msg_ui_settting_mms_gl_text_get(void *data, Evas_Object *obj, con
 {
        D_ENTER;
        int index = (int)data;
-       char buf[DEF_BUF_LEN_S] = {0, };
        D_MSG("part name : [%s]", part);
        D_MSG("index [%d]", index);
 
@@ -58,14 +57,10 @@ static char *__msg_ui_settting_mms_gl_text_get(void *data, Evas_Object *obj, con
                if (setting_menu_its[index].name)
                        return strdup(TEXT(setting_menu_its[index].name));
        } else if (!strcmp(part, "elm.text.multiline")) {
-               if (index == MSG_UI_SETTING_MM_MENU_AUTO_RETRIEVE) {
-                       snprintf(buf, sizeof(buf), MSG_FIXED_SIZE_MULTILINE_TEMPLATE, TEXT("IDS_MSG_BODY_RETRIEVE_MESSAGES_AUTOMATICALLY"));
-                       return strdup(buf);
-               }
-               else if (index == MSG_UI_SETTING_MM_MENU_ROAMING_AUTO_RETRIEVE || index == MSG_UI_SETTING_MM_MENU_DELIVERY_REPORT || index == MSG_UI_SETTING_MM_MENU_READ_REPORT) {
-                       snprintf(buf, sizeof(buf), MSG_FIXED_SIZE_MULTILINE_TEMPLATE, TEXT(setting_menu_its[index + 1].name));
-                       return strdup(buf);
-               }
+               if (index == MSG_UI_SETTING_MM_MENU_AUTO_RETRIEVE)
+                       return strdup(TEXT("IDS_MSG_BODY_RETRIEVE_MESSAGES_AUTOMATICALLY"));
+               else if (index == MSG_UI_SETTING_MM_MENU_ROAMING_AUTO_RETRIEVE || index == MSG_UI_SETTING_MM_MENU_DELIVERY_REPORT || index == MSG_UI_SETTING_MM_MENU_READ_REPORT)
+                       return strdup(TEXT(setting_menu_its[index + 1].name));
        }
        return NULL;
 }
index 06d4165..9f8bbd7 100755 (executable)
@@ -91,16 +91,12 @@ static char *__msg_ui_settting_textmsg_gl_text_get(void *data, Evas_Object *obj,
                if (setting_menu_its[index].name)
                        return strdup(TEXT(setting_menu_its[index].name));
        } else if (!strcmp(part, "elm.text.multiline")) {
-               if (index == MSG_UI_SETTING_TEXT_MENU_MANAGE_SIM_CARD_MSG) {
-                       snprintf(buf, sizeof(buf), MSG_FIXED_SIZE_MULTILINE_TEMPLATE, TEXT(setting_menu_its[index + 1].name));
-                       return strdup(buf);
-               }
+               if (index == MSG_UI_SETTING_TEXT_MENU_MANAGE_SIM_CARD_MSG)
+                       return strdup(TEXT(setting_menu_its[index + 1].name));
                if (index == MSG_UI_SETTING_TEXT_MENU_INPUT_MODE)
                        return strdup(TEXT(setting_menu_its[index + 1].name));
-               if (index == MSG_UI_SETTING_TEXT_MENU_DELIVERY_REPORT) {
-                       snprintf(buf, sizeof(buf), MSG_FIXED_SIZE_MULTILINE_TEMPLATE, TEXT(setting_menu_its[index + 1].name));
-                       return strdup(buf);
-               }
+               if (index == MSG_UI_SETTING_TEXT_MENU_DELIVERY_REPORT)
+                       return strdup(TEXT(setting_menu_its[index + 1].name));
        } else if (!strcmp(part, "elm.text.sub")) {
                if (index == MSG_UI_SETTING_TEXT_MENU_INPUT_MODE) {
                        settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMS_SEND;
index cff1c04..2cd28f3 100755 (executable)
@@ -250,8 +250,7 @@ static void __msg_ui_setting_sim_msg_copy_btn_clicked_cb(void *data, Evas_Object
 
        notification_status_message_post(TEXT("IDS_MSG_TPOP_SELECTED_MESSAGES_COPIED_TO_MOBILE_DEVICE"));
 
-       __msg_ui_setting_sim_msg_select_all_delete(settingData);
-       msg_ui_restore_initial_view(settingData);
+       __msg_ui_back_to_main_settings_view(settingData);
 }
 
 static void __msg_ui_setting_sim_msg_delete_worker_feedback_cb(void *data, Ecore_Thread *thread, void *msg_data)
index 1aa6130..9c5b509 100755 (executable)
@@ -569,6 +569,7 @@ void msg_ui_thread_searchbar_entry_change_cb(void *data, Evas_Object *obj, void
 void msg_ui_thread_searchbar_entry_click_cb(void *data, Evas_Object *obj, void *event_info);
 void msg_ui_thread_searchbar_activated_cb(void *data, Evas_Object *obj, void *event_info);
 void msg_ui_thread_msg_searchbar_entry_imf_state_cb(void * data, Ecore_IMF_Context *ctx, int value);
+void msg_ui_thread_searchbar_entry_imf_state_cb(void * data, Ecore_IMF_Context *ctx, int value);
 void msg_ui_thread_ctx_menu_delete_cb(void *data, Evas_Object *obj, void *event_info);
 void msg_ui_thread_ctx_menu_restore_cb(void *data, Evas_Object *obj, void *event_info);
 void msg_ui_thread_ctx_menu_block_cb(void *data, Evas_Object *obj, void *event_info);
index 777204f..b98de8d 100755 (executable)
@@ -1694,6 +1694,120 @@ void msg_ui_thread_msg_searchbar_entry_imf_state_cb(void *data, Ecore_IMF_Contex
        D_LEAVE;
 }
 
+void msg_ui_thread_searchbar_entry_imf_state_cb(void *data, Ecore_IMF_Context *ctx, int value)
+{
+       D_ENTER;
+       D_MSG_RETM_IF(!data, "data is NULL");
+       D_MSG_RETM_IF(!ctx, "ctx is NULL");
+
+       PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA) data;
+       PMSG_APP_THREAD_CONV_DATA_S item_data = NULL;
+       app_control_h svc_handle = NULL;
+
+       D_MSG("key state = %d", value);
+
+       if (pListData->sel_gen_item) {
+               D_MSG("sel_gen_item exists ");
+       } else {
+               D_MSG("sel_gen_item is NULL ");
+       }
+
+       if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE && pListData->sel_gen_type == THREAD_SEARCH_CONV) {
+
+               item_data = (PMSG_APP_THREAD_CONV_DATA_S) elm_object_item_data_get(pListData->sel_gen_item);
+               D_MSG_RETM_IF(item_data == NULL, "item_data is NULL");
+               D_MSG("pListData->sel_thread_id : %d, pListData->sel_msg_id : %d", item_data->thread_id, pListData->sel_msg_id);
+               D_MSG_RETM_IF(pListData->sel_thread_id == item_data->thread_id, "Already selected item. %d, %p", pListData->sel_thread_id, pListData->sel_gen_item);
+               D_MSG_RETM_IF(item_data->thread_id <= 0, "thread id is 0");
+
+               switch (pListData->view_mode) {
+                       case THREAD_NORMAL_VIEW:
+                       case THREAD_UNLOAD_VIEW:
+                               pListData->sel_thread_id = item_data->thread_id;
+                               if (pListData->sel_msg_id > 0)
+                                       pListData->sel_msg_id = 0;
+
+                               if (app_control_create(&svc_handle) < 0 || svc_handle == NULL) {
+                                       D_EMSG("app_control_create() is failed !!");
+                                       if (pListData->sel_gen_item)
+                                               elm_genlist_item_selected_set(pListData->sel_gen_item, false);
+                                       pListData->sel_gen_item = NULL;
+                                       pListData->sel_thread_id = 0;
+                               } else {
+                                       MessageComposerUgType ug_type = MSG_COMPOSER_UG_TYPE_NONE;
+                                       msg_struct_t listCond = msg_create_struct(MSG_STRUCT_MSG_LIST_CONDITION);
+                                       msg_struct_list_s draft_list;
+                                       msg_error_t err = MSG_SUCCESS;
+
+                                       msg_set_int_value(listCond, MSG_LIST_CONDITION_THREAD_ID_INT, item_data->thread_id);
+                                       msg_set_int_value(listCond, MSG_LIST_CONDITION_FOLDER_ID_INT, MSG_DRAFT_ID);
+                                       msg_set_int_value(listCond, MSG_LIST_CONDITION_STORAGE_ID_INT, MSG_STORAGE_PHONE);
+                                       err =  msg_get_message_list2(msg_ui_thread_get_data_handle(), listCond, &draft_list);
+
+                                       if (err != MSG_SUCCESS) {
+                                               D_EMSG("msg_get_message_list2() is failed !!: err = %d", err);
+                                               msg_release_list_struct(&draft_list);
+                                               msg_release_struct(&listCond);
+
+                                               if (pListData->sel_gen_item)
+                                                       elm_genlist_item_selected_set(pListData->sel_gen_item, false);
+                                               pListData->sel_gen_item = NULL;
+                                               pListData->sel_thread_id = 0;
+                                               app_control_destroy(svc_handle);
+                                               break;
+                                       }
+
+                                       if (item_data->bDraft && (item_data->sms_cnt + item_data->mms_cnt) == draft_list.nCount) {
+                                               int draft_id = 0;
+
+                                               msg_get_int_value(draft_list.msg_struct_info[0], MSG_MESSAGE_ID_INT, &draft_id);
+                                               msg_ui_thread_get_composer_data(draft_id, svc_handle);
+                                               ug_type = MSG_COMPOSER_UG_TYPE_COMPOSER;
+                                       } else {
+                                               msg_ui_thread_get_bubble_data(item_data, svc_handle);
+                                               ug_type = MSG_COMPOSER_UG_TYPE_VIEWER;
+                                       }
+
+                                       msg_release_list_struct(&draft_list);
+                                       msg_release_struct(&listCond);
+
+                                       if (msg_ui_load_composer_ug(svc_handle, ug_type, true) == MSG_UI_RET_ERR) {
+                                               D_EMSG("Failed to load composer ug");
+
+                                               if (pListData->sel_gen_item)
+                                                       elm_genlist_item_selected_set(pListData->sel_gen_item, false);
+                                               pListData->sel_gen_item = NULL;
+                                               pListData->sel_thread_id = 0;
+                                               app_control_destroy(svc_handle);
+                                               break;
+                                       }
+                                       app_control_destroy(svc_handle);
+
+                                       elm_genlist_item_item_class_update(pListData->sel_gen_item, &pListData->itc_read);
+                                       elm_genlist_item_update(pListData->sel_gen_item);
+                               }
+                               break;
+                       case THREAD_EDIT_VIEW:
+                               if (pListData->sel_gen_item)
+                                       elm_genlist_item_selected_set(pListData->sel_gen_item, false);
+                               item_data->is_check = !item_data->is_check;
+
+                               Evas_Object *ic_ly = elm_object_item_part_content_get(pListData->sel_gen_item, "elm.icon.2");
+                               Evas_Object *check = elm_layout_content_get(ic_ly, "elm.swallow.content");
+                               if (check) {
+                                       elm_check_state_set(check, item_data->is_check);
+                                       evas_object_smart_callback_call(check, "changed", NULL);
+                               }
+                               break;
+                       default:
+                               break;
+               }
+               pListData->sel_gen_type = THREAD_SEARCH_ALL;
+       }
+
+       D_LEAVE;
+}
+
 void msg_ui_thread_ctx_menu_delete_cb(void *data, Evas_Object *obj, void *event_info)
 {
        MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !obj || !data);
index cb5ca78..a75cae4 100755 (executable)
@@ -753,7 +753,33 @@ static void __msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_inf
                        free(search_str);
        }
 
-       item_data = (PMSG_APP_THREAD_CONV_DATA_S)elm_object_item_data_get(item);
+       if (pListData->search_mode == THREAD_SEARCH_ON && pListData->search_gl) {
+               D_MSG("Search Mode and searchbar layout exists !!!")
+               Evas_Object *entry = pListData->search_entry;
+
+               Ecore_IMF_Context *context = NULL;
+               Ecore_IMF_Input_Panel_State state = -1;
+
+               context = elm_entry_imf_context_get(entry);
+               state = ecore_imf_context_input_panel_state_get((Ecore_IMF_Context *)context);
+               D_MSG("keypad state = %d", state);
+
+               if (state ==  ECORE_IMF_INPUT_PANEL_STATE_SHOW) {
+                       item_data = (PMSG_APP_THREAD_CONV_DATA_S) elm_object_item_data_get(item);
+                       D_MSG_RETM_IF(item_data == NULL, "item_data is NULL");
+
+                       pListData->sel_gen_item = item;
+                       pListData->sel_gen_type = THREAD_SEARCH_CONV;
+
+                       ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, msg_ui_thread_searchbar_entry_imf_state_cb, data);
+                       D_MSG("Hiding Keypad");
+                       elm_entry_input_panel_hide(entry);
+                       D_MSG("Return after keypad hide");
+                       return;
+               }
+       }
+
+       item_data = (PMSG_APP_THREAD_CONV_DATA_S) elm_object_item_data_get(item);
        D_MSG_RETM_IF(item_data == NULL, "item_data is NULL");
        D_MSG("pListData->sel_thread_id : %d, item_data->thread_id : %d", pListData->sel_thread_id, item_data->thread_id);
        D_MSG_RETM_IF(pListData->sel_thread_id == item_data->thread_id, "Already selected item. %d, %p", pListData->sel_thread_id, pListData->sel_gen_item);
@@ -2545,6 +2571,8 @@ void msg_ui_thread_list_item_delete(PMSG_THREAD_LIST_DATA pListData, msg_thread_
        if (elm_genlist_item_selected_get(gen_item))
                elm_genlist_item_selected_set(gen_item, false);
 
+
+       free(item_data);
        elm_object_item_data_set(gen_item, NULL);
 
        elm_object_item_del((Elm_Object_Item *)gen_item);