2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "msg-ui-composer-subject.h"
20 #include "msg-ui-composer-util.h"
21 #include "msg-ui-composer-body.h"
22 #include "msg-ui-composer-message.h"
23 #include "msg-ui-composer-message-data.h"
24 #include "msg-ui-composer-attachment.h"
25 #include "msg-ui-composer-common.h"
26 #include "msg-ui-composer-recipient.h"
27 #include "msg-ui-composer-popup.h"
29 #include <glib-object.h>
33 #define MSG_DATA_TEMPPATH DATADIR "/"
35 #define MSG_COMPOSER_SMIL_SCREEN_WIDTH 480
36 #define MSG_COMPOSER_SMIL_SCREEN_HEIGHT 800
38 #define MSG_COMPOSER_SMIL_POS_TOP 1
39 #define MSG_COMPOSER_SMIL_POS_BOTTOM 50
40 #define MSG_COMPOSER_SMIL_POS_LEFT 0
42 #define MSG_COMPOSER_SMIL_REGION_WIDTH 100
43 #define MSG_COMPOSER_SMIL_REGION_HEIGHT 50
45 #define MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR 0xFFFFFF
46 #define MSG_COMPOSER_SMIL_DEFAULT_FONT_COLOR 0x000000
47 #define MSG_COMPOSER_SMIL_DEFAULT_FONT_SIZE 30
48 #define MSG_COMPOSER_SMIL_DEFAULT_BOLD false
49 #define MSG_COMPOSER_SMIL_DEFAULT_UNDERLINE false
54 static MSG_COMP_MSG_DATA_S *msg_data = NULL;
58 /****************************************************
62 *****************************************************/
64 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_init()
66 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
68 if (msg_data != NULL) {
73 msg_data = (MSG_COMP_MSG_DATA_S *)calloc(1, sizeof(MSG_COMP_MSG_DATA_S));
75 if (msg_data == NULL) {
76 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data calloc error");
77 return COMPOSER_RETURN_FAIL;
80 memset(msg_data, 0x00, sizeof(MSG_COMP_MSG_DATA_S));
82 return COMPOSER_RETURN_SUCCESS;
85 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_destroy()
87 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
89 if (msg_data == NULL) {
90 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] msg_data is already NULL");
91 return COMPOSER_RETURN_FAIL;
93 /* free recipient data */
94 if (msg_data->recp_list != NULL) {
95 g_slist_foreach(msg_data->recp_list, (GFunc) free, NULL);
96 g_slist_free(msg_data->recp_list);
97 msg_data->recp_list = NULL;
100 if (msg_data->sms_data.body_text != NULL) {
101 free(msg_data->sms_data.body_text);
102 msg_data->sms_data.body_text = NULL;
108 return COMPOSER_RETURN_SUCCESS;
111 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_add_address(char *number)
113 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
115 if (number == NULL) {
116 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] argument [number] is NULL !!");
117 return COMPOSER_RETURN_FAIL;
120 char *address = strdup(number);
121 msg_data->recp_list = g_slist_append(msg_data->recp_list, (void *)address);
123 return COMPOSER_RETURN_SUCCESS;
126 GSList *msg_ui_composer_message_get_address(void)
129 D_MSG_RETVM_IF(msg_data == NULL, NULL, "msg_data is NULL. need to init");
131 return msg_data->recp_list;
134 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_msg_type(COMPOSER_MSG_TYPE_E msg_type)
137 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL. need to init");
138 return COMPOSER_RETURN_NULL_POINTER;
141 msg_data->msg_type = msg_type;
143 return COMPOSER_RETURN_SUCCESS;
146 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_sms_body(char *body_text)
148 if (body_text == NULL) {
149 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] argument [body_text] is NULL !!");
150 return COMPOSER_RETURN_FAIL;
153 msg_data->sms_data.body_text = strdup(body_text);
154 msg_data->sms_data.body_length = strlen(body_text);
156 return COMPOSER_RETURN_SUCCESS;
159 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_subject(char *subject, int length)
162 if (msg_data == NULL || subject == NULL) {
163 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is NULL or no subject");
164 return COMPOSER_RETURN_FAIL;
167 if (subject && length > 0)
168 msg_data->mms_data.isSubject = true;
170 if (length <= sizeof(msg_data->mms_data.subject))
171 strncpy(msg_data->mms_data.subject, subject, length);
173 strncpy(msg_data->mms_data.subject, subject, sizeof(msg_data->mms_data.subject)-1);
176 return COMPOSER_RETURN_SUCCESS;
179 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_attach_count(int attach_count)
184 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL");
185 return COMPOSER_RETURN_NULL_POINTER;
188 MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data;
190 mms_data->attach_count = attach_count;
193 return COMPOSER_RETURN_SUCCESS;
196 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_add_attachments(const char *filepath, int filetype)
199 D_MSG_RETVM_IF(ecore_file_exists(filepath) == EINA_FALSE, COMPOSER_RETURN_FAIL,"File is NOT exist");
202 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL");
203 return COMPOSER_RETURN_NULL_POINTER;
206 MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data;
207 int attach_count = mms_data->attach_count;
210 for (i = 0; i < attach_count; i++) {
211 if (strlen(mms_data->attachlist[i].filepath) <= 0) {
212 mms_data->attachlist[i].filetype = filetype;
214 strncpy(mms_data->attachlist[i].filepath, filepath, strlen(filepath));
215 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] attachment file path : [%s]", mms_data->attachlist[i].filepath);
221 return COMPOSER_RETURN_SUCCESS;
224 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_page_count(int page_count)
229 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is not exist");
230 return COMPOSER_RETURN_NULL_POINTER;
233 msg_data->mms_data.page_count = page_count;
236 return COMPOSER_RETURN_SUCCESS;
239 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_is_text_top(bool isTextTop)
244 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is not exist");
245 return COMPOSER_RETURN_NULL_POINTER;
248 msg_data->mms_data.isTextTop = isTextTop;
251 return COMPOSER_RETURN_SUCCESS;
254 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_text(const char *text, int nPage)
259 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is not exist !!");
260 return COMPOSER_RETURN_NULL_POINTER;
263 MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data;
267 text_len = strlen(text);
269 if (text && text_len > 0) {
270 mms_data->pagelist[nPage].isText = true;
272 if (text_len <= COMPOSER_MMS_TEXT_MAX_BYTE)
273 strncpy(mms_data->pagelist[nPage].body_text, text, text_len);
275 strncpy(mms_data->pagelist[nPage].body_text, text, COMPOSER_MMS_TEXT_MAX_BYTE);
277 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] no text");
278 mms_data->pagelist[nPage].isText = false;
279 return COMPOSER_RETURN_FAIL;
283 return COMPOSER_RETURN_SUCCESS;
286 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_page_duration(int nPage, int duration)
291 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is NOT exist");
292 return COMPOSER_RETURN_NULL_POINTER;
295 if (nPage >= COMPOSER_MMS_MAX_PAGE) {
296 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] Invalid nPage index");
297 return COMPOSER_RETURN_FAIL;
300 MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data;
302 if (duration > COMPOSER_PAGE_DEFAULT_DURATION)
303 mms_data->pagelist[nPage].page_duration = duration;
307 return COMPOSER_RETURN_SUCCESS;
310 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_media(const char *file_path, COMPOSER_MEDIA_TYPE_E media_type, int nPage)
313 D_MSG_RETVM_IF(ecore_file_exists(file_path) == EINA_FALSE, COMPOSER_RETURN_FAIL, "File is NOT exist");
316 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is NOT exist");
317 return COMPOSER_RETURN_NULL_POINTER;
320 MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data;
323 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No file path");
324 return COMPOSER_RETURN_FAIL;
327 switch (media_type) {
328 case COMPOSER_MEDIA_TYPE_IMAGE:
329 mms_data->pagelist[nPage].isImage = true;
330 strncpy(mms_data->pagelist[nPage].image_file_path, file_path, strlen(file_path));
333 case COMPOSER_MEDIA_TYPE_VIDEO:
334 mms_data->pagelist[nPage].isVideo = true;
335 strncpy(mms_data->pagelist[nPage].image_file_path, file_path, strlen(file_path));
338 case COMPOSER_MEDIA_TYPE_AUDIO:
339 mms_data->pagelist[nPage].isSound = true;
340 strncpy(mms_data->pagelist[nPage].sound_file_path, file_path, strlen(file_path));
344 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid media type");
345 return COMPOSER_RETURN_INVALID_MEDIA_TYPE;
349 return COMPOSER_RETURN_SUCCESS;
352 /*****************************************************
354 * Framework message Handling
356 *******************************************************/
358 static COMPOSER_RETURN_TYPE_E __msg_ui_composer_set_recipient()
360 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
362 if (msg_data == NULL || msg_data->msgInfo == NULL) {
363 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL !!");
364 return COMPOSER_RETURN_FAIL;
367 int count = g_slist_length(msg_data->recp_list);
369 msg_struct_list_s *addr_list = NULL;
371 msg_get_list_handle(msg_data->msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void**)&addr_list);
373 addr_list->nCount = count;
374 for (i = 0; i < count; i++) {
375 char *address = (char *)g_slist_nth_data(msg_data->recp_list, i);
376 if (address == NULL) {
377 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] address is value NULL, skip");
381 int addr_type = get_address_type((const char*)address);
382 if (addr_type == COMPOSER_UTIL_ADDRTYPE_NUMBER)
383 msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, MSG_ADDRESS_TYPE_PLMN);
384 else if (addr_type == COMPOSER_UTIL_ADDRTYPE_EMAIL)
385 msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, MSG_ADDRESS_TYPE_EMAIL);
386 msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_RECIPIENT_TYPE_INT, MSG_RECIPIENTS_TYPE_TO);
387 msg_set_str_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, address, strlen(address));
390 return COMPOSER_RETURN_SUCCESS;
393 COMPOSER_RETURN_TYPE_E msg_ui_composer_create_new_message()
395 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
397 if (msg_data->msgInfo != NULL) {
398 msg_release_struct(&msg_data->msgInfo);
399 msg_data->msgInfo = NULL;
402 msg_data->msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
404 if (msg_data->msgInfo == NULL) {
405 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_create_struct failed");
406 return COMPOSER_RETURN_FAIL;
409 return COMPOSER_RETURN_SUCCESS;
412 COMPOSER_RETURN_TYPE_E msg_ui_composer_release_message()
414 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
416 if (msg_data->msgInfo == NULL) {
417 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is already destroyed !!");
418 return COMPOSER_RETURN_FAIL;
421 if (msg_release_struct(&msg_data->msgInfo) != MSG_SUCCESS) {
422 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is already destroyed !!");
423 return COMPOSER_RETURN_FAIL;
426 return COMPOSER_RETURN_SUCCESS;
429 static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_sms_message(msg_handle_t msg_handle)
431 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
433 if (msg_data == NULL || msg_data->msgInfo == NULL) {
434 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL !!");
435 return COMPOSER_RETURN_FAIL;
438 int err = MSG_SUCCESS;
439 /* set message type to SMS */
440 if (msg_set_int_value(msg_data->msgInfo, MSG_MESSAGE_TYPE_INT, MSG_TYPE_SMS) != MSG_SUCCESS) {
441 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]msg_ui_comp_core_set_message_type error !!");
442 return COMPOSER_RETURN_FAIL;
444 /* set message body text */
445 if (msg_data->sms_data.body_text)
446 err = msg_set_str_value(msg_data->msgInfo, MSG_MESSAGE_SMS_DATA_STR, msg_data->sms_data.body_text, strlen(msg_data->sms_data.body_text));
448 err = msg_set_str_value(msg_data->msgInfo, MSG_MESSAGE_SMS_DATA_STR, NULL, 0);
450 if (err != MSG_SUCCESS) {
451 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]msg_ui_comp_core_set_sms_body error !!");
452 return COMPOSER_RETURN_FAIL;
455 if (__msg_ui_composer_set_recipient(msg_data) != COMPOSER_RETURN_SUCCESS) {
456 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]__msg_ui_composer_set_recipient error !!");
457 return COMPOSER_RETURN_FAIL;
460 return COMPOSER_RETURN_SUCCESS;
463 static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_smil_header(msg_handle_t msg_handle, msg_struct_t mms_data, bool isTextTop)
465 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
468 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL");
469 return COMPOSER_RETURN_FAIL;
472 msg_struct_t text_region = NULL;
473 msg_struct_t image_region = NULL;
475 /************ make rootlayout ***************/
476 msg_set_int_value(mms_data, MSG_MMS_ROOTLAYOUT_WIDTH_INT, MSG_COMPOSER_SMIL_SCREEN_WIDTH);
477 msg_set_int_value(mms_data, MSG_MMS_ROOTLAYOUT_HEIGHT_INT, MSG_COMPOSER_SMIL_SCREEN_HEIGHT);
478 msg_set_int_value(mms_data, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR);
480 /************ make region ********************/
481 /* 1. add text region */
482 msg_mms_add_item(mms_data, MSG_STRUCT_MMS_REGION, &text_region);
483 msg_set_str_value(text_region, MSG_MMS_REGION_ID_STR, "Text", strlen("Text"));
484 msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_LEFT_INT, MSG_COMPOSER_SMIL_POS_LEFT);
487 msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_TOP);
489 msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_BOTTOM);
491 msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_WIDTH_INT, MSG_COMPOSER_SMIL_REGION_WIDTH);
492 msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_HEIGHT_INT, MSG_COMPOSER_SMIL_REGION_HEIGHT);
493 msg_set_int_value(text_region, MSG_MMS_REGION_BGCOLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR);
495 /* 2. image(video) region */
496 msg_mms_add_item(mms_data, MSG_STRUCT_MMS_REGION, &image_region);
497 msg_set_str_value(image_region, MSG_MMS_REGION_ID_STR, "Image", strlen("Image"));
498 msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_LEFT_INT, MSG_COMPOSER_SMIL_POS_LEFT);
501 msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_BOTTOM);
503 msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_TOP);
505 msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_WIDTH_INT, MSG_COMPOSER_SMIL_REGION_WIDTH);
506 msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_HEIGHT_INT, MSG_COMPOSER_SMIL_REGION_HEIGHT);
507 msg_set_int_value(image_region, MSG_MMS_REGION_BGCOLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR);
509 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
510 return COMPOSER_RETURN_SUCCESS;
513 static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_mms_body(msg_handle_t msg_handle, msg_struct_t fw_mms_data)
517 if (!msg_data || !fw_mms_data) {
518 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data or FW mms data pointer is NULL");
519 return COMPOSER_RETURN_NULL_POINTER;
522 MSG_COMP_MMS_DATA_S *ui_mms_data = &msg_data->mms_data;
523 int page_count = ui_mms_data->page_count;
526 for (i = 0; i < page_count; i++) {
527 msg_struct_t page_info = NULL;
528 int page_duration = 0;
530 /* verify page duration */
531 if (COMPOSER_PAGE_DEFAULT_DURATION < ui_mms_data->pagelist[i].page_duration)
532 page_duration = ui_mms_data->pagelist[i].page_duration;
534 page_duration = COMPOSER_PAGE_DEFAULT_DURATION;
536 D_MSG("%dth page's page duration = %d", i + 1, page_duration);
537 page_duration = page_duration * 1000;
540 if (msg_mms_add_item(fw_mms_data, MSG_STRUCT_MMS_PAGE, &page_info) != MSG_SUCCESS) {
541 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] create mms page error");
542 return COMPOSER_RETURN_FAIL;
545 msg_set_int_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT, page_duration);
549 if (ui_mms_data->pagelist[i].isText) {
551 char szFilePath[DEF_BUF_LEN_L] = { 0x00, };
552 char szFileName[DEF_BUF_LEN_L] = { 0x00, };
553 char strMsg[COMPOSER_MMS_TEXT_MAX_BYTE + 1] = { 0x00, };
555 msg_struct_t added_media = NULL;
556 msg_struct_t text_style = NULL;
558 /* create txt file */
559 snprintf(szFilePath, sizeof(szFilePath), "%sMMS_Temp_%d.txt", MSG_DATA_TEMPPATH, i + 1);
560 snprintf(szFileName, sizeof(szFileName), "MMS_Temp_%d.txt", i + 1);
562 fp = fopen(szFilePath, "wb");
564 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "fopen error");
565 return COMPOSER_RETURN_FAIL;
568 strncpy(strMsg, ui_mms_data->pagelist[i].body_text, sizeof(strMsg) - 1);
569 fwrite(strMsg, strlen(strMsg), 1, fp);
572 msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media);
573 msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_TEXT);
574 msg_set_str_value(added_media, MSG_MMS_MEDIA_REGION_ID_STR, "Text", strlen("Text"));
575 msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, szFilePath, strlen(szFilePath));
577 /** set font style */
578 text_style = msg_create_struct(MSG_STRUCT_MMS_SMIL_TEXT);
579 msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_COLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_FONT_COLOR);
580 msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_SIZE_INT, MSG_COMPOSER_SMIL_DEFAULT_FONT_SIZE);
581 msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_BOLD_BOOL, MSG_COMPOSER_SMIL_DEFAULT_BOLD);
582 msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_BOLD_BOOL, MSG_COMPOSER_SMIL_DEFAULT_UNDERLINE);
584 msg_set_struct_handle(added_media, MSG_MMS_MEDIA_SMIL_TEXT_HND, text_style);
585 msg_release_struct(&text_style);
588 /* 2) image / video */
589 if (ui_mms_data->pagelist[i].isImage) {
590 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] image file added");
591 msg_struct_t added_media = NULL;
592 char *filepath = ui_mms_data->pagelist[i].image_file_path;
594 msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media);
595 msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_IMG);
596 msg_set_str_value(added_media, MSG_MMS_MEDIA_REGION_ID_STR, "Image", strlen("Image"));
597 msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, filepath, strlen(filepath));
598 } else if (ui_mms_data->pagelist[i].isVideo) {
599 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] video file added");
600 msg_struct_t added_media = NULL;
601 char *filepath = ui_mms_data->pagelist[i].image_file_path;
603 msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media);
604 msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_VIDEO);
605 msg_set_str_value(added_media, MSG_MMS_MEDIA_REGION_ID_STR, "Image", strlen("Image"));
606 msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, filepath, strlen(filepath));
609 if (ui_mms_data->pagelist[i].isSound) {
610 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sound file added");
611 msg_struct_t added_media = NULL;
612 char *filepath = ui_mms_data->pagelist[i].sound_file_path;
614 msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media);
615 msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_AUDIO);
616 msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, filepath, strlen(filepath));
621 return COMPOSER_RETURN_SUCCESS;
624 static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_mms_message(msg_handle_t msg_handle)
626 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
628 msg_struct_t fw_mms_data = NULL;
629 MSG_COMP_MMS_DATA_S ui_mms_data = { 0, };
631 if (msg_data == NULL || msg_data->msgInfo == NULL) {
632 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL !! ");
633 return COMPOSER_RETURN_FAIL;
636 ui_mms_data = msg_data->mms_data;
638 /* set msg type to MMS */
639 if (msg_set_int_value(msg_data->msgInfo, MSG_MESSAGE_TYPE_INT, MSG_TYPE_MMS) != MSG_SUCCESS) {
640 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] set message type[MMS] error");
641 return COMPOSER_RETURN_FAIL;
643 /* create mms data */
644 fw_mms_data = msg_create_struct(MSG_STRUCT_MMS);
645 if (fw_mms_data == NULL) {
646 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] create mms message error!!");
647 return COMPOSER_RETURN_FAIL;
650 /* create smil header <rootlayout> <region> */
651 if (__msg_ui_composer_make_smil_header(msg_handle, fw_mms_data, ui_mms_data.isTextTop) != COMPOSER_RETURN_SUCCESS) {
652 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] smil header create error");
653 msg_release_struct(&fw_mms_data);
654 return COMPOSER_RETURN_FAIL;
657 int subject_len = strlen(ui_mms_data.subject);
658 if (ui_mms_data.isSubject == true || subject_len > 0) {
659 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] Set subject ");
660 if (msg_set_str_value(msg_data->msgInfo, MSG_MESSAGE_SUBJECT_STR, ui_mms_data.subject, subject_len) != MSG_SUCCESS)
661 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] mms set subject error ");
664 if (ui_mms_data.attach_count > 0) {
666 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ui_mms_data.attach_count = %d", ui_mms_data.attach_count);
668 if (ui_mms_data.attach_count > COMPOSER_MMS_MAX_ATTACH_COUNT) {
669 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] attachment count error, max count change");
670 ui_mms_data.attach_count = COMPOSER_MMS_MAX_ATTACH_COUNT;
673 for (i = 0; i < ui_mms_data.attach_count; i++) {
674 MSG_COMP_ATTACH_DATA_S *attach_data = &ui_mms_data.attachlist[i];
675 if (attach_data == NULL) {
676 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] attachment data is NULL");
679 msg_struct_t attachment = NULL;
680 msg_mms_add_item(fw_mms_data, MSG_STRUCT_MMS_ATTACH, &attachment);
681 msg_set_str_value(attachment, MSG_MMS_ATTACH_FILEPATH_STR, attach_data->filepath, strlen(attach_data->filepath));
686 __msg_ui_composer_make_mms_body(msg_handle, fw_mms_data);
688 /* 2) set MMS body */
689 msg_set_mms_struct(msg_data->msgInfo, fw_mms_data);
690 msg_release_struct(&fw_mms_data);
693 if (__msg_ui_composer_set_recipient() != COMPOSER_RETURN_SUCCESS) {
694 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]__msg_ui_composer_set_recipient error !!");
695 return COMPOSER_RETURN_FAIL;
698 return COMPOSER_RETURN_SUCCESS;
701 static COMPOSER_RETURN_TYPE_E __msg_ui_composer_send(msg_handle_t msg_handle)
703 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
705 if (msg_data == NULL || msg_data->msgInfo == NULL) {
706 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message is not initialized");
707 return COMPOSER_RETURN_FAIL;
710 msg_struct_t req = msg_create_struct(MSG_STRUCT_REQUEST_INFO);
711 int msg_type = MSG_TYPE_INVALID;
714 msg_struct_t sendOpt = NULL;
715 msg_get_struct_handle(req, MSG_REQUEST_SENDOPT_HND, &sendOpt);
716 msg_set_bool_value(sendOpt, MSG_SEND_OPT_SETTING_BOOL, false);
718 msg_set_struct_handle(req, MSG_REQUEST_MESSAGE_HND, msg_data->msgInfo);
719 msg_get_int_value(msg_data->msgInfo, MSG_MESSAGE_TYPE_INT, &msg_type);
721 if (msg_is_sms(msg_type)) {
722 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] try to send sms");
723 err = msg_sms_send_message(msg_handle, req);
724 } else if (msg_is_mms(msg_type)) {
725 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] try to send mms");
726 err = msg_mms_send_message(msg_handle, req);
728 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] error message type");
729 msg_release_struct(&req);
730 return COMPOSER_RETURN_FAIL;
733 msg_release_struct(&req);
735 if (err == MSG_SUCCESS) {
736 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending success");
737 return COMPOSER_RETURN_SUCCESS;
738 } else if (err == MSG_ERR_INVALID_PARAMETER) {
739 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d] : INVALID_PARAM ", err);
740 return COMPOSER_RETURN_NULL_POINTER;
741 } else if (err == MSG_ERR_NO_SIM) {
742 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d] : NO SIM", err);
743 return COMPOSER_RETURN_NO_SIM;
745 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d]", err);
746 return COMPOSER_RETURN_FAIL;
750 msg_struct_t msg_ui_composer_message_make_preview(msg_handle_t msg_handle)
752 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
754 if (msg_data == NULL) {
755 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] can not send message,,, msg_data is NULL");
759 if (msg_ui_composer_create_new_message() != COMPOSER_RETURN_SUCCESS) {
760 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] create new message error !!!");
764 if (__msg_ui_composer_make_mms_message(msg_handle)
765 != COMPOSER_RETURN_SUCCESS) {
766 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] make mms message error !!!");
770 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
771 return msg_data->msgInfo;
774 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(msg_handle_t msg_handle, msg_thread_id_t *tid)
776 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
778 if (msg_data == NULL) {
779 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] can not send message,,, msg_data is NULL");
780 return COMPOSER_RETURN_FAIL;
783 COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
785 /* 1. create a new message (create msg_struct_t) */
786 if (msg_ui_composer_create_new_message() != COMPOSER_RETURN_SUCCESS) {
787 return COMPOSER_RETURN_FAIL;
790 /* 2. make message */
791 if (msg_data->msg_type == COMPOSER_MSG_TYPE_SMS) {
792 if (__msg_ui_composer_make_sms_message(msg_handle) != COMPOSER_RETURN_SUCCESS)
793 ret = COMPOSER_RETURN_FAIL;
794 } else if (msg_data->msg_type == COMPOSER_MSG_TYPE_MMS) {
795 if (__msg_ui_composer_make_mms_message(msg_handle) != COMPOSER_RETURN_SUCCESS)
796 ret = COMPOSER_RETURN_FAIL;
798 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type");
799 ret = COMPOSER_RETURN_FAIL;
803 if (ret != COMPOSER_RETURN_FAIL) {
804 ret = __msg_ui_composer_send(msg_handle);
806 if (ret == COMPOSER_RETURN_SUCCESS || ret == COMPOSER_RETURN_NO_SIM) {
807 msg_struct_list_s *addr_list = NULL;
809 msg_get_list_handle(msg_data->msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list);
810 msg_get_thread_id_by_address(msg_handle, addr_list, tid);
814 /*4. release message */
815 msg_release_struct(&msg_data->msgInfo);
816 msg_data->msgInfo = NULL;
821 COMPOSER_RETURN_TYPE_E msg_ui_composer_save_message(msg_handle_t msg_handle)
823 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
825 if (msg_data == NULL) {
826 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] can not save message,,, msg_data is NULL");
827 return COMPOSER_RETURN_FAIL;
830 COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS;
832 /* 1. create a new message (create msg_struct_t) */
833 if (msg_ui_composer_create_new_message() != COMPOSER_RETURN_SUCCESS) {
834 return COMPOSER_RETURN_FAIL;
837 /* 2. make message */
838 if (msg_data->msg_type == COMPOSER_MSG_TYPE_SMS) {
839 if (__msg_ui_composer_make_sms_message(msg_handle) != COMPOSER_RETURN_SUCCESS)
840 ret = COMPOSER_RETURN_FAIL;
841 } else if (msg_data->msg_type == COMPOSER_MSG_TYPE_MMS) {
842 if (__msg_ui_composer_make_mms_message(msg_handle) != COMPOSER_RETURN_SUCCESS)
843 ret = COMPOSER_RETURN_FAIL;
845 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type");
846 ret = COMPOSER_RETURN_FAIL;
850 if (ret != COMPOSER_RETURN_FAIL) {
851 msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
852 msg_set_bool_value(sendOpt, MSG_SEND_OPT_SETTING_BOOL, false);
854 ret = msg_add_message(msg_handle, msg_data->msgInfo, sendOpt);
856 msg_release_struct(&sendOpt);
859 /*4. release message */
860 msg_release_struct(&msg_data->msgInfo);
861 msg_data->msgInfo = NULL;
866 COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_data(MSG_COMPOSER_VIEW_DATA_S *cd)
868 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
870 if (msg_data == NULL) {
871 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] can not save message,,, msg_data is NULL");
872 return COMPOSER_RETURN_FAIL;
875 MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, cd == NULL, COMPOSER_RETURN_FAIL);
877 if (msg_ui_composer_recipient_read_data(cd) != COMPOSER_RETURN_SUCCESS) {
878 D_EMSG("Make recipient data Error");
879 return COMPOSER_RETURN_FAIL;
882 if (__msg_ui_composer_body_read_data(cd) != COMPOSER_RETURN_SUCCESS) {
883 D_EMSG("Make body data Error");
884 return COMPOSER_RETURN_FAIL;
887 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
889 return COMPOSER_RETURN_SUCCESS;
892 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_load_message(msg_handle_t msg_handle, int msgID)
894 MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
897 MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_handle is NULL");
898 return COMPOSER_RETURN_NULL_POINTER;
901 msg_struct_t load_msg = NULL;
902 msg_struct_t sendOpt = NULL;
903 msg_struct_t mmsBody = NULL;
905 /* create new message */
906 load_msg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
907 if (load_msg == NULL) {
908 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] message create message failed.");
909 return COMPOSER_RETURN_FAIL;
911 sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT);
912 if (sendOpt == NULL) {
913 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] message create sendopt failed.");
914 msg_release_struct(&load_msg);
915 return COMPOSER_RETURN_FAIL;
918 if (msg_get_message(msg_handle,(msg_message_id_t)msgID, load_msg, sendOpt) != MSG_SUCCESS) {
919 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] msg_get_message failed");
920 msg_release_struct(&load_msg);
921 msg_release_struct(&sendOpt);
922 return COMPOSER_RETURN_FAIL;
925 /* load "FROM" address */
926 msg_struct_list_s *addr_list = NULL;
927 msg_get_list_handle(load_msg, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list);
930 int addr_count = addr_list->nCount;
932 char number_str[MAX_ADDRESS_VAL_LEN + 1] = {0,};
934 for (i = 0; i < addr_count; i++) {
935 memset(number_str, 0, sizeof(number_str));
937 msg_get_str_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, number_str, MAX_ADDRESS_VAL_LEN);
939 if (strlen(number_str))
940 msg_ui_composer_message_add_address(number_str);
944 /* load message type */
946 msg_get_int_value(load_msg, MSG_MESSAGE_TYPE_INT, &msgType);
948 if (msgType == MSG_TYPE_SMS) {
949 char *body_text = NULL;
952 msg_data->msg_type = COMPOSER_MSG_TYPE_SMS;
954 msg_get_int_value(load_msg, MSG_MESSAGE_DATA_SIZE_INT, &body_size);
957 body_text = (char *)calloc(1, body_size+1);
960 msg_get_str_value(load_msg, MSG_MESSAGE_SMS_DATA_STR, body_text, body_size);
962 if (body_text && strlen(body_text) > 0) {
963 msg_data->sms_data.body_text = strdup(body_text);
964 msg_data->sms_data.body_length = strlen(body_text);
970 } else if (msgType == MSG_TYPE_MMS) {
971 char subject[MAX_SUBJECT_LEN+1] = {0,};
972 msg_data->msg_type = COMPOSER_MSG_TYPE_MMS;
975 mmsBody = msg_create_struct(MSG_STRUCT_MMS);
976 if (mmsBody == NULL) {
977 msg_release_struct(&load_msg);
978 msg_release_struct(&sendOpt);
979 return COMPOSER_RETURN_FAIL;
981 msg_get_mms_struct(load_msg, mmsBody);
983 if (msg_get_str_value(load_msg, MSG_MESSAGE_SUBJECT_STR, subject, MAX_SUBJECT_LEN) != MSG_SUCCESS) {
984 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No subject data");
985 msg_data->mms_data.isSubject = false;
987 MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] loaded subject : [%s]", subject);
988 msg_data->mms_data.isSubject = true;
989 strncpy(msg_data->mms_data.subject, subject, COMPOSER_SUBJECT_MAX_BYTE);
993 msg_list_handle_t region_list = NULL;
994 msg_get_list_handle(mmsBody, MSG_MMS_REGION_LIST_HND, (void **)®ion_list);
996 int region_count = msg_list_length(region_list);
997 if (region_count >= 2) {
998 msg_struct_t region_info_0 = NULL;
999 msg_struct_t region_info_1 = NULL;
1000 bool is_text_top = false;
1002 region_info_0 = (msg_struct_t)msg_list_nth_data(region_list, 0);
1003 region_info_1 = (msg_struct_t)msg_list_nth_data(region_list, 1);
1005 if (msg_ui_composer_check_is_text_top(region_info_0, region_info_1, &is_text_top) == COMPOSER_RETURN_SUCCESS)
1006 msg_data->mms_data.isTextTop = is_text_top;
1008 D_EMSG("there is no region info region_count = %d", region_count);
1011 /* load attachment */
1012 msg_list_handle_t attach_list = NULL;
1013 msg_get_list_handle(mmsBody, MSG_MMS_ATTACH_LIST_HND, (void **)&attach_list);
1014 msg_data->mms_data.attach_count = msg_list_length(attach_list);
1016 if (msg_data->mms_data.attach_count > 0) {
1019 for (i = 0; i < msg_data->mms_data.attach_count ; i++) {
1020 msg_struct_t attach_info = (msg_struct_t)msg_list_nth_data(attach_list, i);
1022 if (attach_info == NULL) {
1023 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] attachment [%d]th item loading error ", i);
1027 msg_get_int_value(attach_info, MSG_MMS_ATTACH_MIME_TYPE_INT, &msg_data->mms_data.attachlist[i].filetype);
1028 msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, msg_data->mms_data.attachlist[i].filepath, sizeof(msg_data->mms_data.attachlist[i].filepath));
1029 msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILENAME_STR, msg_data->mms_data.attachlist[i].filename, sizeof(msg_data->mms_data.attachlist[i].filename));
1033 /* load body (page and text, media) */
1034 msg_list_handle_t page_list = NULL;
1035 msg_get_list_handle(mmsBody, MSG_MMS_PAGE_LIST_HND, (void **)&page_list);
1037 msg_data->mms_data.page_count = msg_list_length(page_list);
1039 if (msg_data->mms_data.page_count > 0) {
1042 for (i = 0; i < msg_data->mms_data.page_count; i++) {
1043 msg_struct_t pageInfo = msg_list_nth_data(page_list, i);
1044 msg_list_handle_t media_list = NULL;
1045 int media_count = 0;
1047 if (pageInfo == NULL) {
1048 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] MMS PAGE [%d]th page loading error ", i);
1052 /* get page duration */
1053 int page_duration = 0;
1054 msg_get_int_value(pageInfo, MSG_MMS_PAGE_PAGE_DURATION_INT, &page_duration);
1055 if (page_duration % 1000)
1056 page_duration = page_duration / 1000 + 1;
1058 page_duration = page_duration / 1000;
1060 msg_data->mms_data.pagelist[i].page_duration = page_duration;
1062 msg_get_list_handle(pageInfo, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&media_list);
1063 media_count = msg_list_length(media_list);
1065 if (media_count > 0) {
1068 for (j = 0; j < media_count; j++) {
1069 msg_struct_t mediaInfo = (msg_struct_t)msg_list_nth_data(media_list, j);
1072 if (mediaInfo == NULL) {
1073 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] MMS PAGE [%d]th page loading error ", j);
1077 msg_get_int_value(mediaInfo, MSG_MMS_MEDIA_TYPE_INT, &mediatype);
1078 /* if media type image or video */
1079 if (mediatype == MMS_SMIL_MEDIA_IMG) {
1080 msg_data->mms_data.pagelist[i].isImage = true;
1081 msg_get_str_value(mediaInfo, MSG_MMS_MEDIA_FILEPATH_STR, msg_data->mms_data.pagelist[i].image_file_path, sizeof(msg_data->mms_data.pagelist[i].image_file_path));
1082 } else if (mediatype == MMS_SMIL_MEDIA_VIDEO || mediatype == MMS_SMIL_MEDIA_IMG_OR_VIDEO) {
1083 msg_data->mms_data.pagelist[i].isVideo = true;
1084 msg_get_str_value(mediaInfo, MSG_MMS_MEDIA_FILEPATH_STR, msg_data->mms_data.pagelist[i].image_file_path, sizeof(msg_data->mms_data.pagelist[i].image_file_path));
1085 } else if (mediatype == MMS_SMIL_MEDIA_AUDIO) {
1086 msg_data->mms_data.pagelist[i].isSound = true;
1087 msg_get_str_value(mediaInfo, MSG_MMS_MEDIA_FILEPATH_STR, msg_data->mms_data.pagelist[i].sound_file_path, sizeof(msg_data->mms_data.pagelist[i].sound_file_path));
1088 } else if (mediatype == MMS_SMIL_MEDIA_TEXT) {
1090 char filepath[DEF_BUF_LEN_L] = {0,};
1091 msg_get_str_value(mediaInfo, MSG_MMS_MEDIA_FILEPATH_STR, filepath, sizeof(filepath));
1093 if (access(filepath, R_OK) == 0) {
1094 if (!(fp = fopen(filepath, "r"))) {
1095 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR]File Open Error");
1096 msg_data->mms_data.pagelist[i].isText = false;
1100 struct stat stat_buf;
1101 if (stat(filepath, &stat_buf) != 0) {
1102 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR]Getting file information Error");
1103 msg_data->mms_data.pagelist[i].isText = false;
1108 if (stat_buf.st_size <= 0) {
1109 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR]Getting file size is ZERO");
1110 msg_data->mms_data.pagelist[i].isText = false;
1115 msg_data->mms_data.pagelist[i].isText = true;
1117 int result = fread(msg_data->mms_data.pagelist[i].body_text, sizeof(char), stat_buf.st_size, fp);
1118 if (result != stat_buf.st_size)
1119 D_EMSG("fread result is different!! result = %d, stat_buf.st_size = %d", result, stat_buf.st_size);
1123 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] file access failed");
1124 msg_data->mms_data.pagelist[i].isText = false;
1128 msg_release_struct(&mmsBody);
1129 msg_release_struct(&load_msg);
1130 msg_release_struct(&sendOpt);
1131 return COMPOSER_RETURN_INVALID_MEDIA_TYPE;
1138 msg_data->msg_type = COMPOSER_MSG_TYPE_INVALID;
1139 MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid message type");
1140 msg_release_struct(&load_msg);
1141 msg_release_struct(&sendOpt);
1142 return COMPOSER_RETURN_INVALID_MSG_TYPE;
1145 if (msgType == MSG_TYPE_MMS)
1146 msg_release_struct(&mmsBody);
1148 msg_release_struct(&load_msg);
1149 msg_release_struct(&sendOpt);
1150 MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
1151 return COMPOSER_RETURN_SUCCESS;
1154 static void __msgc_warning_popup_ok_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1157 MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
1158 D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
1159 int page = (int)evas_object_data_get(cd->popup_end, "page_index");
1161 MSGC_EVAS_OBJECT_DEL(cd->popup_end);
1163 cd->body_data.creation_allowed = COMPOSER_CONTENT_CREATION_ALLOWED;
1165 msg_ui_composer_message_set_page_data(cd, page);
1167 cd->body_data.creation_allowed = COMPOSER_CONTENT_CREATION_NONE;
1169 msg_ui_composer_message_destroy();
1174 static void __msgc_warning_popup_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
1177 MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
1178 D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
1180 int page = (int)evas_object_data_get(cd->popup_end, "page_index");
1182 MSGC_EVAS_OBJECT_DEL(cd->popup_end);
1184 cd->body_data.creation_allowed = COMPOSER_CONTENT_CREATION_NOT_ALLOWED;
1186 msg_ui_composer_message_set_page_data(cd, page);
1188 cd->body_data.creation_allowed = COMPOSER_CONTENT_CREATION_NONE;
1190 msg_ui_composer_message_destroy();
1195 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_page_data(void *composer_data, int page)
1198 D_MSG_RETVM_IF(composer_data == NULL, COMPOSER_RETURN_FAIL, "composer data is NULL");
1199 MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)composer_data;
1200 int ret = COMPOSER_RETURN_SUCCESS;
1201 static bool is_drm = false;
1202 static bool is_restricted_mode = false;
1204 D_MSG("MMS PAGE COUNT [%d], page = %d", msg_data->mms_data.page_count, page);
1206 if (page > msg_data->mms_data.page_count)
1207 return COMPOSER_RETURN_FAIL;
1209 for (; page < msg_data->mms_data.page_count; page++) {
1210 if (msg_data->mms_data.pagelist[page].isImage) {
1211 ret = msg_ui_composer_body_set_loaded_media(cd, msg_data->mms_data.pagelist[page].image_file_path, COMPOSER_MEDIA_TYPE_IMAGE, page);
1212 } else if (msg_data->mms_data.pagelist[page].isVideo) {
1213 ret = msg_ui_composer_body_set_loaded_media(cd, msg_data->mms_data.pagelist[page].image_file_path, COMPOSER_MEDIA_TYPE_VIDEO, page);
1216 if (msg_data->mms_data.pagelist[page].isSound) {
1217 ret = msg_ui_composer_body_set_loaded_media(cd, msg_data->mms_data.pagelist[page].sound_file_path, COMPOSER_MEDIA_TYPE_AUDIO, page);
1220 if (ret == COMPOSER_RETURN_DRM_FORWARDLOCK) {
1221 D_MSG("ret COMPOSER_RETURN_DRM_FORWARDLOCK");
1223 } else if (ret == COMPOSER_RETURN_CREATION_RESTRICTED_MODE_FAIL) {
1224 D_MSG("ret COMPOSER_RETURN_CREATION_RESTRICTED_MODE_FAIL");
1225 is_restricted_mode = true;
1226 } else if (ret == COMPOSER_RETURN_CREATION_WARINING_MODE_FAIL) {
1227 D_MSG("ret COMPOSER_RETURN_CREATION_WARINING_MODE_FAIL");
1228 MSGC_EVAS_OBJECT_DEL(cd->popup_end);
1229 /* show warning mode popup */
1230 Evas_Object *popup = msg_ui_composer_status_popup_show(cd->navi_bar, cd, _MSGSTR("IDS_MSGF_POP_RESTRICTED_CONTENT_TYPE_ATTACH_ANYWAY_Q"), 0);
1231 Evas_Object *btn1 = elm_button_add(popup);
1232 elm_object_style_set(btn1, "popup_button/default");
1233 elm_object_text_set(btn1, MSGC_STR_BUTTON_OK);
1234 elm_object_part_content_set(popup, "button1", btn1);
1235 evas_object_smart_callback_add(btn1, "clicked", __msgc_warning_popup_ok_btn_clicked_cb, cd);
1237 Evas_Object *btn2 = elm_button_add(popup);
1238 elm_object_style_set(btn2, "popup_button/default");
1239 elm_object_text_set(btn2, MSGC_STR_BUTTON_CANCEL);
1240 elm_object_part_content_set(popup, "button2", btn2);
1241 evas_object_smart_callback_add(btn2, "clicked", __msgc_warning_popup_cancel_btn_clicked_cb, cd);
1242 cd->popup_end = popup;
1244 evas_object_data_set(popup, "page_index", (void *)page);
1249 if (msg_data->mms_data.pagelist[page].isText) {
1250 msg_ui_composer_body_set_loaded_text(cd, msg_data->mms_data.pagelist[page].body_text, page);
1253 /* set page duration */
1254 msg_ui_composer_body_set_loaded_page_duration(cd, msg_data->mms_data.pagelist[page].page_duration, page);
1258 /* show drm forwardlock popup */
1259 Evas_Object *popup = msg_ui_composer_status_popup_show(cd->navi_bar, cd, MSGC_STR_POP_FILE_IS_FORWARD_LOCK, 0);
1260 Evas_Object *btn1 = elm_button_add(popup);
1261 elm_object_style_set(btn1, "popup_button/default");
1262 elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
1263 elm_object_part_content_set(popup, "button1", btn1);
1264 evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);
1265 } else if (is_restricted_mode) {
1266 /* show restricted mode popup */
1267 Evas_Object *popup = msg_ui_composer_status_popup_show(cd->navi_bar, cd, _MSGSTR("Unsupported media type"), 0);
1268 Evas_Object *btn1 = elm_button_add(popup);
1269 elm_object_style_set(btn1, "popup_button/default");
1270 elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
1271 elm_object_part_content_set(popup, "button1", btn1);
1272 evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);
1276 is_restricted_mode = false;
1279 return COMPOSER_RETURN_SUCCESS;
1282 COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_loaded_data(void *composer_data, bool set_recipient)
1285 MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)composer_data;
1287 int ret = COMPOSER_RETURN_SUCCESS;
1290 if (set_recipient) {
1291 if (msg_data->recp_list) {
1293 int count = g_slist_length(msg_data->recp_list);
1294 char *address = NULL;
1296 for (i = 0; i < count; i++) {
1297 address = (char *)g_slist_nth_data(msg_data->recp_list, i);
1300 msg_ui_composer_recipient_set_loaded_data(cd, address, 0);
1305 if (msg_data->msg_type == COMPOSER_MSG_TYPE_SMS) {
1306 msg_ui_composer_body_set_loaded_text(cd, msg_data->sms_data.body_text, 0);
1307 return COMPOSER_RETURN_SUCCESS;
1311 if (msg_data->mms_data.isSubject)
1312 msg_ui_composer_subject_set_loaded_data(cd, msg_data->mms_data.subject);
1315 if (msg_data->mms_data.isTextTop)
1316 cd->body_data.region_order = COMPOSER_REGION_ORDER_TEXT_TOP;
1318 cd->body_data.region_order = COMPOSER_REGION_ORDER_IMAGE_TOP;
1321 for (i = 0; i < msg_data->mms_data.attach_count; i++) {
1322 char *filepath = msg_data->mms_data.attachlist[i].filepath;
1323 int filetype = msg_data->mms_data.attachlist[i].filetype;
1325 msg_ui_composer_attachment_set_loaded_data(cd, filepath, filetype);
1329 ret = msg_ui_composer_message_set_page_data(cd, 0);
1331 if (ret == COMPOSER_RETURN_CREATION_WARINING_MODE_FAIL)
1335 return COMPOSER_RETURN_SUCCESS;