diff options
author | Jaeyun Jeong <jyjeong@samsung.com> | 2012-08-21 18:40:43 +0900 |
---|---|---|
committer | Jaeyun Jeong <jyjeong@samsung.com> | 2012-08-21 18:40:43 +0900 |
commit | 92abf425ce0d141f966ddaecf1c4bc325fc9e189 (patch) | |
tree | 411d692f37dbfbd292f19c41f9cd717523c18295 | |
parent | 5f6271abd18e2d811315f56c48ecd927c9e9436c (diff) | |
download | message-app-92abf425ce0d141f966ddaecf1c4bc325fc9e189.tar.gz message-app-92abf425ce0d141f966ddaecf1c4bc325fc9e189.tar.bz2 message-app-92abf425ce0d141f966ddaecf1c4bc325fc9e189.zip |
Implement tizen 2.0 beta.
Change-Id: Ifea6bc144e2628ddfaa3cafa8f4f250d78005356
290 files changed, 55790 insertions, 9275 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 4d8f0a3..589d35f 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,6 +6,8 @@ SET(CMAKE_SOURCE_THREAD_DIR "${CMAKE_SOURCE_DIR}/thread") SET(CMAKE_SOURCE_BUBBLE_DIR "${CMAKE_SOURCE_DIR}/bubble") SET(CMAKE_SOURCE_COMPOSER_DIR "${CMAKE_SOURCE_DIR}/composer") SET(CMAKE_SOURCE_SETTING_DIR "${CMAKE_SOURCE_DIR}/setting") +SET(CMAKE_SOURCE_VIEWER_DIR "${CMAKE_SOURCE_DIR}/viewer") +SET(CMAKE_SOURCE_CLASS0_DIR "${CMAKE_SOURCE_DIR}/class0") SET(CMAKE_SOURCE_DIALOG_DIR "${CMAKE_SOURCE_DIR}/dialog") SET(PREFIX ${CMAKE_INSTALL_PREFIX}) @@ -34,4 +36,6 @@ ADD_SUBDIRECTORY(common) ADD_SUBDIRECTORY(main) ADD_SUBDIRECTORY(composer) ADD_SUBDIRECTORY(setting) +ADD_SUBDIRECTORY(viewer) +ADD_SUBDIRECTORY(class0) ADD_SUBDIRECTORY(dialog) diff --git a/class0/CMakeLists.txt b/class0/CMakeLists.txt new file mode 100755 index 0000000..95a37d4 --- /dev/null +++ b/class0/CMakeLists.txt @@ -0,0 +1,49 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(message C) + +SET(MSG_UI_CLASS0 msg-ui-class0) +SET(SRCS ./msg-ui-class0-main.c) +SET(CMAKE_SKIP_BUILD_RPATH TRUE) + +IF("${CMAKE_BUILD_TYPE}" STREQUAL "") + SET(CMAKE_BUILD_TYPE "Release") +ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "") +MESSAGE("Build type: ${CMAKE_BUILD_TYPE}") + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_COMMON_DIR} + ${CMAKE_SOURCE_CLASS0_DIR} + /usr/include/msg-service/ +) + +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED elementary aul dlog msg-service capi-appfw-application) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fpie") +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") + +FIND_PROGRAM(UNAME NAMES uname) +EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH") +IF("${ARCH}" STREQUAL "arm") + ADD_DEFINITIONS("-DTARGET") + MESSAGE("add -DTARGET") +ENDIF("${ARCH}" STREQUAL "arm") + +ADD_DEFINITIONS("-DDEBUG") +ADD_DEFINITIONS("-DDEBUG_ON") +ADD_DEFINITIONS("-DLCD_TYPE_WVGA") + +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie") + +ADD_EXECUTABLE(${MSG_UI_CLASS0} ${SRCS}) +TARGET_LINK_LIBRARIES(${MSG_UI_CLASS0} ${pkgs_LDFLAGS}) + +INSTALL(TARGETS ${MSG_UI_CLASS0} DESTINATION bin) + +# install desktop file & icon + +# i18n +#ADD_SUBDIRECTORY(po) diff --git a/class0/msg-ui-class0-main.c b/class0/msg-ui-class0-main.c new file mode 100755 index 0000000..9d3794f --- /dev/null +++ b/class0/msg-ui-class0-main.c @@ -0,0 +1,488 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "msg-ui-class0-main.h" + +static Eina_Bool __msg_ui_class0_keydown_cb(void *data, int type, void *event); +static int __msg_ui_class0_load_msg_data(void *data); +static char *__msg_ui_str_append(char *str, const char *txt, int *len, int *alloc); +static char *__msg_ui_text_to_markup(const char *text); +static void __msg_ui_class0_btn_clicked_event(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_class0_create_contents(void *data); +static int __msg_ui_class0_create_view(void *data); + +static void __msg_ui_class0_win_del(void *data, Evas_Object *obj, void *event); +static Evas_Object *__msg_ui_class0_create_win(const char *name); + + +void msg_ui_class0_exit(void *data) +{ + struct appdata *ad = data; + + int ret = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " "); + + if (ad->msgInfo != NULL) { + msg_release_struct(&ad->msgInfo); + ad->msgInfo = NULL; + } + + if (ad->msgHandle != NULL) { + ret = msg_close_msg_handle(&ad->msgHandle); + if (ret != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_close_msg_handle() is failed !! : ret value is %d", ret); + } + } + + elm_exit(); +} + +static Eina_Bool __msg_ui_class0_keydown_cb(void *data, int type, void *event) +{ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " "); + + if (data == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "data is null, calling elm_exit...\n"); + elm_exit(); + } + + Ecore_Event_Key *ev = event; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY = %s\n", ev->keyname); + + if (!strcmp(ev->keyname, KEY_END)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "keyname = %s ...calling elm_exit...\n", ev->keyname); + elm_exit(); + } + + return EINA_FALSE; +} + +static int __msg_ui_class0_load_msg_data(void *data) +{ + struct appdata *ad = data; + + msg_error_t err = MSG_SUCCESS; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " "); + + if (ad->msgHandle == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msgHandle is NULL !!"); + return MSG_UI_RET_ERR; + } + + ad->msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + if (ad->msgInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_new_message() is failed!"); + return MSG_UI_RET_ERR; + } + + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + err = msg_get_message(ad->msgHandle, ad->msg_id, ad->msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message is failed! : %d", err); + if (ad->msgInfo != NULL) { + msg_release_struct(&ad->msgInfo); + ad->msgInfo = NULL; + } + + return MSG_UI_RET_ERR; + } else + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message is success"); + + return MSG_UI_RET_SUCCESS; +} + +static char * +__msg_ui_str_append(char *str, const char *txt, int *len, int *alloc) +{ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " "); + + int txt_len = strlen(txt); + + if (txt_len <= 0) + return str; + + if ((*len + txt_len) >= *alloc) { + char *str2; + int alloc2; + + alloc2 = *alloc + txt_len + 128; + str2 = realloc(str, alloc2); + if (!str2) + return str; + + *alloc = alloc2; + str = str2; + } + + strcpy(str + *len, txt); + *len += txt_len; + return str; +} + +static char * +__msg_ui_text_to_markup(const char *text) +{ + char *str = NULL; + int str_len = 0, str_alloc = 0; + int ch, pos = 0, pos2 = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " "); + + if (!text) + return NULL; + + for (;;) { + pos = pos2; + pos2 = evas_string_char_next_get(text, pos2, &ch); + if ((ch <= 0) || (pos2 <= 0)) + break; + + if (ch == '\n') + str = __msg_ui_str_append(str, "<br>", &str_len, &str_alloc); + else if (ch == '\t') + str = __msg_ui_str_append(str, "<\t>", &str_len, &str_alloc); + else if (ch == '<') + str = __msg_ui_str_append(str, "<", &str_len, &str_alloc); + else if (ch == '>') + str = __msg_ui_str_append(str, ">", &str_len, &str_alloc); + else if (ch == '&') + str = __msg_ui_str_append(str, "&", &str_len, &str_alloc); + else { + char tstr[16]; + + strncpy(tstr, text + pos, pos2 - pos); + tstr[pos2 - pos] = 0; + str = __msg_ui_str_append(str, tstr, &str_len, &str_alloc); + } + } + + return str; +} + +static void __msg_ui_class0_btn_clicked_event(void *data, Evas_Object *obj, void *event_info) +{ + struct appdata *ad = data; + + int err = MSG_SUCCESS; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "obj = 0x%x", obj); + + if (obj == ad->right_btn) { + /* Save it to Inbox. */ + err = msg_move_msg_to_folder(ad->msgHandle, ad->msg_id, MSG_INBOX_ID); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_move_msg_to_folder() is failed : err = %d", err); + } + + msg_ui_class0_exit(ad); + } else if (obj == ad->left_btn) { + /* Discard this message */ + err = msg_delete_message(ad->msgHandle, ad->msg_id); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_delete_message() is failed : err = %d", err); + } + + msg_ui_class0_exit(ad); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid obj = 0x%x", obj); + return; + } +} + +static Evas_Object* +__msg_ui_class0_create_contents(void *data) +{ + struct appdata *ad = data; + + Evas_Object *scroller = NULL; + + char buf[2048] = { 0, }; + char *str = NULL; + + int msgSize = 0; + char pMsgBody[2048] = {0,}; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " "); + + /* Create scroller. */ + scroller = elm_scroller_add(ad->navi_frame); + evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_scroller_page_relative_set(scroller, 0.0, 0.0); + elm_scroller_bounce_set(scroller, FALSE, TRUE); + evas_object_show(scroller); + + /* Create label. */ + ad->label = elm_label_add(scroller); + elm_object_style_set(ad->label, "detail_view/description"); + evas_object_size_hint_align_set(ad->label, EVAS_HINT_FILL, 0.0); + evas_object_size_hint_weight_set(ad->label, EVAS_HINT_EXPAND, 0.0); + + msg_get_int_value(ad->msgInfo, MSG_MESSAGE_DATA_SIZE_INT, &msgSize); + if (msgSize > 0) { + msg_get_str_value(ad->msgInfo, MSG_MESSAGE_SMS_DATA_STR, pMsgBody, sizeof(pMsgBody)); + if (pMsgBody[0] != '\0') { + snprintf(buf, sizeof(buf), "%s", pMsgBody); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_sms_get_message_body() is failed !!"); + snprintf(buf, sizeof(buf), "Message is empty !!"); + } + } else { + snprintf(buf, sizeof(buf), "Message is empty !!"); + } + + buf[2047] = '\n'; + + str = __msg_ui_text_to_markup(buf); + elm_object_text_set(ad->label, str); + elm_label_line_wrap_set(ad->label, TRUE); + elm_object_content_set(scroller, ad->label); + evas_object_show(ad->label); + + if (str) + free(str); + + return scroller; +} + +static int __msg_ui_class0_create_view(void *data) +{ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, " "); + + struct appdata *ad = data; + + Evas_Object *content = NULL; + + Evas_Object *ctrl_bar; + Evas_Object *ctrl_btn_left; + Evas_Object *ctrl_btn_right; + Elm_Object_Item *ctrl_left_item; + Elm_Object_Item *ctrl_right_item; + Evas_Object *icon_left; + Evas_Object *icon_right; + + char buf[DEF_BUF_LEN_S]; + + /* Create layout */ + ad->layout_main = elm_layout_add(ad->win_main); + elm_layout_theme_set(ad->layout_main, "layout", "application", "default"); + evas_object_size_hint_weight_set(ad->layout_main, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(ad->win_main, ad->layout_main); + evas_object_show(ad->layout_main); + + /* Create navi_frame */ + ad->navi_frame = elm_naviframe_add(ad->layout_main); + elm_object_part_content_set(ad->layout_main, "elm.swallow.content", ad->navi_frame); + evas_object_show(ad->navi_frame); + + content = __msg_ui_class0_create_contents(ad); + if (content == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_ui_class0_create_contents() is failed !!"); + return MSG_UI_RET_ERR; + } + + ctrl_bar = elm_toolbar_add(ad->navi_frame); + elm_toolbar_shrink_mode_set(ctrl_bar, ELM_TOOLBAR_SHRINK_EXPAND); + MSG_UI_RETVM_IF(MSG_UI_LEVEL_DEBUG, ctrl_bar == NULL, MSG_UI_RET_ERR, "ctrl_bar is NULL !!"); + + elm_object_style_set(ctrl_bar, "naviframe"); + + ctrl_btn_left = elm_button_add(ctrl_bar); + elm_object_style_set(ctrl_btn_left, "naviframe_control/left"); + evas_object_size_hint_align_set(ctrl_btn_left, EVAS_HINT_FILL, 0.5); + icon_left = elm_icon_add(ctrl_btn_left); + memset(buf, 0x0, sizeof(buf)); + snprintf(buf, sizeof(buf), "%s", MSG_HEADER_ICON_CANCEL); + elm_icon_file_set(icon_left, buf, NULL); + elm_object_part_content_set(ctrl_btn_left, "elm.swallow.content", icon_left); + elm_object_text_set(ctrl_btn_left, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_DISCARD")); + evas_object_show(ctrl_btn_left); + evas_object_smart_callback_add(ctrl_btn_left, "clicked", __msg_ui_class0_btn_clicked_event, ad); + ad->left_btn = ctrl_btn_left; + + ctrl_btn_right = elm_button_add(ctrl_bar); + elm_object_style_set(ctrl_btn_right, "naviframe_control/right"); + evas_object_size_hint_align_set(ctrl_btn_right, EVAS_HINT_FILL, 0.5); + icon_right = elm_icon_add(ctrl_btn_right); + memset(buf, 0x0, sizeof(buf)); + snprintf(buf, sizeof(buf), "%s", MSG_HEADER_ICON_DONE); + elm_icon_file_set(icon_right, buf, NULL); + elm_object_part_content_set(ctrl_btn_right, "elm.swallow.content", icon_right); + elm_object_text_set(ctrl_btn_right, dgettext("sys_string", "IDS_COM_SK_SAVE")); + evas_object_show(ctrl_btn_right); + evas_object_smart_callback_add(ctrl_btn_right, "clicked", __msg_ui_class0_btn_clicked_event, ad); + ad->right_btn = ctrl_btn_right; + + ctrl_left_item = elm_toolbar_item_append(ctrl_bar, NULL, NULL, NULL, NULL); + elm_object_item_part_content_set(ctrl_left_item, "object", ctrl_btn_left); + elm_toolbar_item_append(ctrl_bar, NULL, NULL, NULL, NULL); + ctrl_right_item = elm_toolbar_item_append(ctrl_bar, NULL, NULL, NULL, NULL); + elm_object_item_part_content_set(ctrl_right_item, "object", ctrl_btn_right); + + Elm_Object_Item *nf_it = elm_naviframe_item_push(ad->navi_frame, dgettext(MESSAGE_PKGNAME, "Class 0 message"), NULL, NULL, content, NULL); + elm_object_item_part_content_set(nf_it, "optionheader", ctrl_bar); + + return MSG_UI_RET_SUCCESS; +} + +static void __msg_ui_class0_win_del(void *data, Evas_Object *obj, void *event) +{ + elm_exit(); +} + +static Evas_Object *__msg_ui_class0_create_win(const char *name) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + Evas_Object *eo; + int w, h; + + eo = elm_win_add(NULL, name, ELM_WIN_BASIC); + if (eo) { + elm_win_title_set(eo, name); + evas_object_smart_callback_add(eo, "delete,request", __msg_ui_class0_win_del, NULL); + ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); + evas_object_resize(eo, w, h); + } + + return eo; +} + +static bool app_create(void *data) +{ + struct appdata *ad = data; + + int ret = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg ID = %d", ad->msg_id); + + ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __msg_ui_class0_keydown_cb, ad); + + ret = msg_open_msg_handle(&ad->msgHandle); + if (ret != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "msg_open_msg_handle() is failed : ret = %d", ret); + msg_ui_class0_exit(ad); + return FALSE; + } + + /* init internationalization */ + if (bindtextdomain(MESSAGE_PKGNAME, LOCALEDIR) == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "bindtextdomain() is failed : ret = %d", ret); + return FALSE; + } + + if (textdomain(MESSAGE_PKGNAME) == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "textdomain() is failed : ret = %d", ret); + return FALSE; + } + + ad->win_main = __msg_ui_class0_create_win(PACKAGE); + if (ad->win_main == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "Main window is NULL"); + return FALSE; + } else { + evas_object_show(ad->win_main); + } + + /* Indicator */ + elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_HIDE); + + evas_object_geometry_get(ad->win_main, NULL, NULL, &ad->root_w, &ad->root_h); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "main window width[%d], height[%d]", ad->root_w, ad->root_h); + + /* draw background image */ + ad->bg = elm_bg_add(ad->win_main); + evas_object_size_hint_weight_set(ad->bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(ad->win_main, ad->bg); + evas_object_show(ad->bg); + + return TRUE; +} + +static void app_terminate(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + msg_ui_class0_exit(data); +} + +static void app_pause(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); +} + +static void app_resume(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); +} + +static void app_service(service_h service, void *data) +{ + struct appdata *ad = data; + + char *strMsgId = NULL; + int ret = 0; + + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + service_get_extra_data(service, MSG_BUNDLE_KEY_MSG_ID, &strMsgId); + + if (strMsgId == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_get_extra_data() is failed !!"); + return; + } else { + ad->msg_id = atoi(strMsgId); + + /* Load message data by using message ID. */ + ret = __msg_ui_class0_load_msg_data(ad); + if (ret < 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "__msg_ui_class0_load_msg_data() is failed : ret = %d", ret); + msg_ui_class0_exit(ad); + return; + } + + /* Create main view */ + __msg_ui_class0_create_view(ad); + + evas_object_show(ad->win_main); + } +} + +int main(int argc, char *argv[]) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + struct appdata ad; + memset(&ad, 0x0, sizeof(struct appdata)); + + app_event_callback_s event_callback; + + event_callback.create = app_create; + event_callback.terminate = app_terminate; + event_callback.pause = app_pause; + event_callback.resume = app_resume; + event_callback.service = app_service; + event_callback.low_memory = NULL; + event_callback.low_battery = NULL; + event_callback.device_orientation = NULL; + event_callback.language_changed = NULL; + event_callback.region_format_changed = NULL; + + return app_efl_main(&argc, &argv, &event_callback, &ad); +} diff --git a/class0/msg-ui-class0-main.h b/class0/msg-ui-class0-main.h new file mode 100755 index 0000000..6d94037 --- /dev/null +++ b/class0/msg-ui-class0-main.h @@ -0,0 +1,61 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef __DEF_msg_ui_class0_main_H__ +#define __DEF_msg_ui_class0_main_H__ + +#include <stdio.h> +#include <app.h> +#include <utilX.h> +#include <Ecore_X.h> +#include "msg-ui-util.h" +#include <msg.h> +#include <msg_storage.h> +#include <msg_transport.h> +#include <Elementary.h> + +#define PACKAGE "msg-ui-class0" /* for i18n */ +#define GRP_MAIN "main" + +struct appdata { + int root_w; + int root_h; + int root_x; + int root_y; + double w_ratio, h_ratio; + + Evas *evas; + Evas_Object *win_main; + Evas_Object *bg; + Evas_Object *layout_main; + Evas_Object *layout; + Evas_Object *navi_frame; + Evas_Object *label; + Evas_Object *left_btn; + Evas_Object *right_btn; + msg_handle_t msgHandle; + + /* argument */ + int msg_id; + + msg_struct_t msgInfo; +}; + +void msg_ui_class0_exit(void *data); +int main(int argc, char **argv); + +#endif /* __DEF_msg_ui_class0_main_H__ */ diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 3529d93..3ddad7d 100755 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -16,18 +16,22 @@ INCLUDE_DIRECTORIES( INCLUDE(FindPkgConfig) pkg_check_modules(pkgs REQUIRED - appcore-common appcore-efl appsvc + appsvc bundle capi-appfw-application contacts-service - dlog devman_haptic + dlog drm-client drm-trusted devman_haptic elementary ecore ecore-x ecore-input ecore-imf ecore-file eina glib-2.0 heynoti icu-i18n msg-service - ui-gadget + mm-common mm-player mm-session mmutil-jpeg mmutil-imgp mm-fileinfo + ui-gadget-1 utilX vconf + syspopup-caller + capi-media-sound-manager + status ) FOREACH(flag ${pkgs_CFLAGS}) @@ -40,10 +44,32 @@ SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{PREFIX}\"") ADD_DEFINITIONS("-DDATAFS=\"$ENV{DATADIR}\"") ADD_DEFINITIONS("-DTARGET") +ADD_DEFINITIONS("-DSLP_PROF") ADD_LIBRARY(${PROJECT_NAME} SHARED ${COMMON_SRCS}) SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES SOVERSION ${VERSION} ) TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} ${CMAKE_LDFLAGS}) +ADD_CUSTOM_TARGET(msg_common.edj + COMMAND edje_cc -id + ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image + ${CMAKE_SOURCE_COMMON_DIR}/data/msg_common.edc + ${CMAKE_SOURCE_COMMON_DIR}/data/msg_common.edj + DEPENDS ${CMAKE_SOURCE_COMMON_DIR}/data/msg_common.edc +) + +ADD_CUSTOM_TARGET(msg_custom_winset.edj + COMMAND edje_cc -id + ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image + ${CMAKE_SOURCE_COMMON_DIR}/data/msg_custom_winset.edc + ${CMAKE_SOURCE_COMMON_DIR}/data/msg_custom_winset.edj + DEPENDS ${CMAKE_SOURCE_COMMON_DIR}/data/msg_custom_winset.edc +) + +ADD_DEPENDENCIES(${PROJECT_NAME} msg_common.edj) +ADD_DEPENDENCIES(${PROJECT_NAME} msg_custom_winset.edj) + # Install so files. INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${LIBDIR}) +INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/msg_common.edj DESTINATION ${EDJDIR}) +INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/msg_custom_winset.edj DESTINATION ${EDJDIR}) diff --git a/common/data/edc_image/00_sweep_list_bg.png b/common/data/edc_image/00_MessageBubble_date_bg.png Binary files differindex b08f111..b0fb761 100755 --- a/common/data/edc_image/00_sweep_list_bg.png +++ b/common/data/edc_image/00_MessageBubble_date_bg.png diff --git a/common/data/edc_image/00_btn_circle_bg_normal.png b/common/data/edc_image/00_btn_circle_bg_normal.png Binary files differnew file mode 100755 index 0000000..981d624 --- /dev/null +++ b/common/data/edc_image/00_btn_circle_bg_normal.png diff --git a/common/data/image/controlbar/01_controlbar_icon_info.png b/common/data/edc_image/00_btn_circle_bg_press.png Binary files differindex 12a5b06..bc5f8b2 100755 --- a/common/data/image/controlbar/01_controlbar_icon_info.png +++ b/common/data/edc_image/00_btn_circle_bg_press.png diff --git a/common/data/edc_image/00_button_03_dim.png b/common/data/edc_image/00_button_03_dim.png Binary files differdeleted file mode 100755 index 118cbb9..0000000 --- a/common/data/edc_image/00_button_03_dim.png +++ /dev/null diff --git a/common/data/edc_image/00_button_03_focus.png b/common/data/edc_image/00_button_03_focus.png Binary files differdeleted file mode 100755 index e0f8ebf..0000000 --- a/common/data/edc_image/00_button_03_focus.png +++ /dev/null diff --git a/common/data/edc_image/00_button_03_normal.png b/common/data/edc_image/00_button_03_normal.png Binary files differdeleted file mode 100755 index 118cbb9..0000000 --- a/common/data/edc_image/00_button_03_normal.png +++ /dev/null diff --git a/common/data/edc_image/00_button_03_press.png b/common/data/edc_image/00_button_03_press.png Binary files differdeleted file mode 100755 index 2f0dbc3..0000000 --- a/common/data/edc_image/00_button_03_press.png +++ /dev/null diff --git a/common/data/edc_image/00_button_04_dim.png b/common/data/edc_image/00_button_04_dim.png Binary files differnew file mode 100755 index 0000000..76865ec --- /dev/null +++ b/common/data/edc_image/00_button_04_dim.png diff --git a/common/data/edc_image/00_button_04_normal.png b/common/data/edc_image/00_button_04_normal.png Binary files differnew file mode 100755 index 0000000..76865ec --- /dev/null +++ b/common/data/edc_image/00_button_04_normal.png diff --git a/common/data/edc_image/M01_btn_Unread_message_white_theme.png b/common/data/edc_image/00_button_04_normal_focus.png Binary files differindex 68772aa..06c39d8 100755 --- a/common/data/edc_image/M01_btn_Unread_message_white_theme.png +++ b/common/data/edc_image/00_button_04_normal_focus.png diff --git a/common/data/edc_image/00_button_04_press.png b/common/data/edc_image/00_button_04_press.png Binary files differnew file mode 100755 index 0000000..2c43c71 --- /dev/null +++ b/common/data/edc_image/00_button_04_press.png diff --git a/common/data/edc_image/00_list_bar_group_middle_focus.png b/common/data/edc_image/00_list_bar_group_middle_focus.png Binary files differdeleted file mode 100755 index 96374f5..0000000 --- a/common/data/edc_image/00_list_bar_group_middle_focus.png +++ /dev/null diff --git a/common/data/edc_image/00_list_bar_press_1x80.png b/common/data/edc_image/00_list_bar_press_1x80.png Binary files differdeleted file mode 100755 index 0e0becb..0000000 --- a/common/data/edc_image/00_list_bar_press_1x80.png +++ /dev/null diff --git a/common/data/edc_image/00_list_photo_default.png b/common/data/edc_image/00_list_photo_default.png Binary files differdeleted file mode 100755 index 2d15281..0000000 --- a/common/data/edc_image/00_list_photo_default.png +++ /dev/null diff --git a/common/data/edc_image/07_message_add files_bg.PNG b/common/data/edc_image/07_message_add files_bg.PNG Binary files differdeleted file mode 100755 index 074b806..0000000 --- a/common/data/edc_image/07_message_add files_bg.PNG +++ /dev/null diff --git a/common/data/edc_image/07_message_bubble_readmessage.png b/common/data/edc_image/07_message_bubble_readmessage.png Binary files differdeleted file mode 100755 index 5b57efe..0000000 --- a/common/data/edc_image/07_message_bubble_readmessage.png +++ /dev/null diff --git a/common/data/edc_image/07_message_bubble_reponsible_message.png b/common/data/edc_image/07_message_bubble_reponsible_message.png Binary files differdeleted file mode 100755 index 1e0f324..0000000 --- a/common/data/edc_image/07_message_bubble_reponsible_message.png +++ /dev/null diff --git a/common/data/edc_image/07_message_bubble_sentmessage.png b/common/data/edc_image/07_message_bubble_sentmessage.png Binary files differdeleted file mode 100755 index 7ae30ba..0000000 --- a/common/data/edc_image/07_message_bubble_sentmessage.png +++ /dev/null diff --git a/common/data/edc_image/07_message_list_badge_01.png b/common/data/edc_image/07_message_list_badge_01.png Binary files differdeleted file mode 100755 index d1acc0d..0000000 --- a/common/data/edc_image/07_message_list_badge_01.png +++ /dev/null diff --git a/common/data/edc_image/07_message_list_bg.PNG b/common/data/edc_image/07_message_list_bg.PNG Binary files differdeleted file mode 100755 index 2ba50b9..0000000 --- a/common/data/edc_image/07_message_list_bg.PNG +++ /dev/null diff --git a/common/data/edc_image/07_message_sweep_list_bg.png b/common/data/edc_image/07_message_sweep_list_bg.png Binary files differdeleted file mode 100755 index d32d1e3..0000000 --- a/common/data/edc_image/07_message_sweep_list_bg.png +++ /dev/null diff --git a/common/data/edc_image/27_textinput_predictive_btn_arrow_down.png b/common/data/edc_image/27_textinput_predictive_btn_arrow_down.png Binary files differdeleted file mode 100755 index 41932ca..0000000 --- a/common/data/edc_image/27_textinput_predictive_btn_arrow_down.png +++ /dev/null diff --git a/common/data/edc_image/27_textinput_predictive_btn_arrow_up.png b/common/data/edc_image/27_textinput_predictive_btn_arrow_up.png Binary files differdeleted file mode 100755 index 2fdda91..0000000 --- a/common/data/edc_image/27_textinput_predictive_btn_arrow_up.png +++ /dev/null diff --git a/common/data/edc_image/M01_btn_Unread_message.png b/common/data/edc_image/M01_btn_add_plus.png Binary files differindex 68772aa..7080f43 100755 --- a/common/data/edc_image/M01_btn_Unread_message.png +++ b/common/data/edc_image/M01_btn_add_plus.png diff --git a/common/data/edc_image/white/M01_search_input_field_bg.png b/common/data/edc_image/M01_input_bg.png Binary files differindex f5aaa5e..1c78dbb 100755 --- a/common/data/edc_image/white/M01_search_input_field_bg.png +++ b/common/data/edc_image/M01_input_bg.png diff --git a/common/data/edc_image/M01_play_btn_next.png b/common/data/edc_image/M01_play_btn_next.png Binary files differnew file mode 100755 index 0000000..3fe0def --- /dev/null +++ b/common/data/edc_image/M01_play_btn_next.png diff --git a/common/data/edc_image/M01_play_btn_next_press.png b/common/data/edc_image/M01_play_btn_next_press.png Binary files differnew file mode 100755 index 0000000..18a21c1 --- /dev/null +++ b/common/data/edc_image/M01_play_btn_next_press.png diff --git a/common/data/edc_image/white/M01_icon_minus.png b/common/data/edc_image/M01_play_btn_pause.png Binary files differindex 1943f8d..d3578d2 100755 --- a/common/data/edc_image/white/M01_icon_minus.png +++ b/common/data/edc_image/M01_play_btn_pause.png diff --git a/common/data/edc_image/M01_play_btn_pause_press.png b/common/data/edc_image/M01_play_btn_pause_press.png Binary files differnew file mode 100755 index 0000000..b851280 --- /dev/null +++ b/common/data/edc_image/M01_play_btn_pause_press.png diff --git a/common/data/edc_image/M01_btn_Unread_message_HD.png b/common/data/edc_image/M01_play_btn_play.png Binary files differindex 55004f5..3460a6a 100755 --- a/common/data/edc_image/M01_btn_Unread_message_HD.png +++ b/common/data/edc_image/M01_play_btn_play.png diff --git a/common/data/edc_image/M01_play_btn_play_press.png b/common/data/edc_image/M01_play_btn_play_press.png Binary files differnew file mode 100755 index 0000000..cdccbb4 --- /dev/null +++ b/common/data/edc_image/M01_play_btn_play_press.png diff --git a/common/data/edc_image/M01_play_btn_previous.png b/common/data/edc_image/M01_play_btn_previous.png Binary files differnew file mode 100755 index 0000000..405917c --- /dev/null +++ b/common/data/edc_image/M01_play_btn_previous.png diff --git a/common/data/edc_image/M01_play_btn_previous_press.png b/common/data/edc_image/M01_play_btn_previous_press.png Binary files differnew file mode 100755 index 0000000..7169310 --- /dev/null +++ b/common/data/edc_image/M01_play_btn_previous_press.png diff --git a/common/data/edc_image/M01_play_btn_volume.png b/common/data/edc_image/M01_play_btn_volume.png Binary files differnew file mode 100755 index 0000000..ecb8d3a --- /dev/null +++ b/common/data/edc_image/M01_play_btn_volume.png diff --git a/common/data/edc_image/M01_play_btn_volume_press.png b/common/data/edc_image/M01_play_btn_volume_press.png Binary files differnew file mode 100755 index 0000000..e209bd0 --- /dev/null +++ b/common/data/edc_image/M01_play_btn_volume_press.png diff --git a/common/data/image/white/M01_icon_minus.png b/common/data/edc_image/M01_player_bg.png Binary files differindex 1943f8d..b313430 100755 --- a/common/data/image/white/M01_icon_minus.png +++ b/common/data/edc_image/M01_player_bg.png diff --git a/common/data/edc_image/M01_player_progress_bar.png b/common/data/edc_image/M01_player_progress_bar.png Binary files differnew file mode 100755 index 0000000..a7bf3ca --- /dev/null +++ b/common/data/edc_image/M01_player_progress_bar.png diff --git a/common/data/edc_image/M01_player_progress_bg.png b/common/data/edc_image/M01_player_progress_bg.png Binary files differnew file mode 100755 index 0000000..b56bbc4 --- /dev/null +++ b/common/data/edc_image/M01_player_progress_bg.png diff --git a/common/data/edc_image/M01_search_input_field_attach_bg.png b/common/data/edc_image/M01_search_input_field_attach_bg.png Binary files differnew file mode 100755 index 0000000..0f7cbe3 --- /dev/null +++ b/common/data/edc_image/M01_search_input_field_attach_bg.png diff --git a/common/data/edc_image/M01_search_input_field_bg.png b/common/data/edc_image/M01_search_input_field_bg.png Binary files differindex 038da87..79aac96 100755 --- a/common/data/edc_image/M01_search_input_field_bg.png +++ b/common/data/edc_image/M01_search_input_field_bg.png diff --git a/common/data/edc_image/M01_title_btn_bg.png b/common/data/edc_image/M01_title_btn_bg.png Binary files differnew file mode 100755 index 0000000..b109553 --- /dev/null +++ b/common/data/edc_image/M01_title_btn_bg.png diff --git a/common/data/edc_image/M01_title_btn_bg_press.png b/common/data/edc_image/M01_title_btn_bg_press.png Binary files differnew file mode 100755 index 0000000..ba66399 --- /dev/null +++ b/common/data/edc_image/M01_title_btn_bg_press.png diff --git a/common/data/edc_image/Seven_IM_input_field_01.png b/common/data/edc_image/Seven_IM_input_field_01.png Binary files differdeleted file mode 100755 index 6125f7e..0000000 --- a/common/data/edc_image/Seven_IM_input_field_01.png +++ /dev/null diff --git a/common/data/edc_image/Seven_IM_input_field_02.png b/common/data/edc_image/Seven_IM_input_field_02.png Binary files differdeleted file mode 100755 index fed0b36..0000000 --- a/common/data/edc_image/Seven_IM_input_field_02.png +++ /dev/null diff --git a/common/data/edc_image/black/07_message_add files_bg.PNG b/common/data/edc_image/black/07_message_add files_bg.PNG Binary files differdeleted file mode 100755 index 074b806..0000000 --- a/common/data/edc_image/black/07_message_add files_bg.PNG +++ /dev/null diff --git a/common/data/edc_image/black/M01_search_input_field_bg.png b/common/data/edc_image/black/M01_search_input_field_bg.png Binary files differdeleted file mode 100755 index 038da87..0000000 --- a/common/data/edc_image/black/M01_search_input_field_bg.png +++ /dev/null diff --git a/common/data/edc_image/nf_title_separator.png b/common/data/edc_image/nf_title_separator.png Binary files differnew file mode 100755 index 0000000..e287978 --- /dev/null +++ b/common/data/edc_image/nf_title_separator.png diff --git a/common/data/edc_image/optionheader_arrow.png b/common/data/edc_image/optionheader_arrow.png Binary files differnew file mode 100755 index 0000000..508c2c8 --- /dev/null +++ b/common/data/edc_image/optionheader_arrow.png diff --git a/common/data/edc_image/white/07_message_add files_bg.PNG b/common/data/edc_image/white/07_message_add files_bg.PNG Binary files differdeleted file mode 100755 index 074b806..0000000 --- a/common/data/edc_image/white/07_message_add files_bg.PNG +++ /dev/null diff --git a/common/data/image/00_list_photo_default.png b/common/data/image/00_list_photo_default.png Binary files differdeleted file mode 100755 index 2d15281..0000000 --- a/common/data/image/00_list_photo_default.png +++ /dev/null diff --git a/common/data/image/01_controllbar_icon_add_to_contact.png b/common/data/image/01_controllbar_icon_add_to_contact.png Binary files differnew file mode 100755 index 0000000..5e92417 --- /dev/null +++ b/common/data/image/01_controllbar_icon_add_to_contact.png diff --git a/common/data/image/01_dialog_field_bg.png b/common/data/image/01_dialog_field_bg.png Binary files differdeleted file mode 100755 index 67d3908..0000000 --- a/common/data/image/01_dialog_field_bg.png +++ /dev/null diff --git a/common/data/image/01_dialog_field_bg_dim.png b/common/data/image/01_dialog_field_bg_dim.png Binary files differdeleted file mode 100755 index 25c4acf..0000000 --- a/common/data/image/01_dialog_field_bg_dim.png +++ /dev/null diff --git a/common/data/image/01_dialogue_field_bg_press.png b/common/data/image/01_dialogue_field_bg_press.png Binary files differdeleted file mode 100755 index 8686f16..0000000 --- a/common/data/image/01_dialogue_field_bg_press.png +++ /dev/null diff --git a/common/data/image/01_navi_icon_delete.png b/common/data/image/01_navi_icon_delete.png Binary files differdeleted file mode 100755 index 4f0f16e..0000000 --- a/common/data/image/01_navi_icon_delete.png +++ /dev/null diff --git a/common/data/image/07_message_title_button.png b/common/data/image/07_message_title_button.png Binary files differdeleted file mode 100755 index 3c6909b..0000000 --- a/common/data/image/07_message_title_button.png +++ /dev/null diff --git a/common/data/image/17_default_image.png b/common/data/image/17_default_image.png Binary files differdeleted file mode 100755 index 780985e..0000000 --- a/common/data/image/17_default_image.png +++ /dev/null diff --git a/common/data/image/M01_btn_Unread_message_press_HD.png b/common/data/image/M01_btn_Unread_message_press_HD.png Binary files differdeleted file mode 100755 index 55004f5..0000000 --- a/common/data/image/M01_btn_Unread_message_press_HD.png +++ /dev/null diff --git a/common/data/image/M01_btn_delete.png b/common/data/image/M01_btn_delete.png Binary files differnew file mode 100755 index 0000000..0ac1428 --- /dev/null +++ b/common/data/image/M01_btn_delete.png diff --git a/common/data/image/M01_btn_message_send.png b/common/data/image/M01_btn_message_send.png Binary files differnew file mode 100755 index 0000000..4b34e1f --- /dev/null +++ b/common/data/image/M01_btn_message_send.png diff --git a/common/data/image/M01_icon_DRM.png b/common/data/image/M01_icon_DRM.png Binary files differnew file mode 100755 index 0000000..a239ccb --- /dev/null +++ b/common/data/image/M01_icon_DRM.png diff --git a/common/data/image/M01_icon_DRM_64x64.png b/common/data/image/M01_icon_DRM_64x64.png Binary files differnew file mode 100755 index 0000000..c010fc6 --- /dev/null +++ b/common/data/image/M01_icon_DRM_64x64.png diff --git a/common/data/image/M01_icon_OTA_HD.png b/common/data/image/M01_icon_OTA_HD.png Binary files differdeleted file mode 100755 index ffeb5d3..0000000 --- a/common/data/image/M01_icon_OTA_HD.png +++ /dev/null diff --git a/common/data/image/M01_icon_OTA_press_HD.png b/common/data/image/M01_icon_OTA_press_HD.png Binary files differdeleted file mode 100755 index ffeb5d3..0000000 --- a/common/data/image/M01_icon_OTA_press_HD.png +++ /dev/null diff --git a/common/data/image/M01_icon_Push_HD.png b/common/data/image/M01_icon_Push_HD.png Binary files differdeleted file mode 100755 index b6be564..0000000 --- a/common/data/image/M01_icon_Push_HD.png +++ /dev/null diff --git a/common/data/image/M01_icon_Push_press.png b/common/data/image/M01_icon_Push_press.png Binary files differdeleted file mode 100755 index c229030..0000000 --- a/common/data/image/M01_icon_Push_press.png +++ /dev/null diff --git a/common/data/image/M01_icon_Push_press_HD.png b/common/data/image/M01_icon_Push_press_HD.png Binary files differdeleted file mode 100755 index b6be564..0000000 --- a/common/data/image/M01_icon_Push_press_HD.png +++ /dev/null diff --git a/common/data/image/M01_icon_Unsupported.png b/common/data/image/M01_icon_Unsupported.png Binary files differnew file mode 100755 index 0000000..91c5600 --- /dev/null +++ b/common/data/image/M01_icon_Unsupported.png diff --git a/common/data/image/M01_icon_attach_voice.png b/common/data/image/M01_icon_attach_voice.png Binary files differnew file mode 100755 index 0000000..92323d5 --- /dev/null +++ b/common/data/image/M01_icon_attach_voice.png diff --git a/common/data/image/M01_icon_broadcasting_HD.png b/common/data/image/M01_icon_broadcasting_HD.png Binary files differdeleted file mode 100755 index bd4d650..0000000 --- a/common/data/image/M01_icon_broadcasting_HD.png +++ /dev/null diff --git a/common/data/image/M01_icon_broadcasting_press.png b/common/data/image/M01_icon_broadcasting_press.png Binary files differdeleted file mode 100755 index 038cd2a..0000000 --- a/common/data/image/M01_icon_broadcasting_press.png +++ /dev/null diff --git a/common/data/image/M01_icon_broadcasting_press_HD.png b/common/data/image/M01_icon_broadcasting_press_HD.png Binary files differdeleted file mode 100755 index bd4d650..0000000 --- a/common/data/image/M01_icon_broadcasting_press_HD.png +++ /dev/null diff --git a/common/data/image/M01_icon_minus.png b/common/data/image/M01_icon_minus.png Binary files differdeleted file mode 100755 index bddc2cf..0000000 --- a/common/data/image/M01_icon_minus.png +++ /dev/null diff --git a/common/data/image/M01_btn_Unread_message_HD.png b/common/data/image/M01_icon_save.png Binary files differindex 55004f5..4bcf587 100755 --- a/common/data/image/M01_btn_Unread_message_HD.png +++ b/common/data/image/M01_icon_save.png diff --git a/common/data/image/M01_icon_video_call.png b/common/data/image/M01_icon_video_call.png Binary files differnew file mode 100755 index 0000000..6eaecd8 --- /dev/null +++ b/common/data/image/M01_icon_video_call.png diff --git a/common/data/image/M01_icon_view_contact.png b/common/data/image/M01_icon_view_contact.png Binary files differnew file mode 100755 index 0000000..bb35882 --- /dev/null +++ b/common/data/image/M01_icon_view_contact.png diff --git a/common/data/image/M01_btn_Unread_message.png b/common/data/image/M01_icon_voice.png Binary files differindex 55004f5..a682ffb 100755 --- a/common/data/image/M01_btn_Unread_message.png +++ b/common/data/image/M01_icon_voice.png diff --git a/common/data/image/M01_icon_voice_call.png b/common/data/image/M01_icon_voice_call.png Binary files differnew file mode 100755 index 0000000..13f496d --- /dev/null +++ b/common/data/image/M01_icon_voice_call.png diff --git a/common/data/image/M01_icon_OTA_press.png b/common/data/image/M01_photo_btn_delete.png Binary files differindex 7dcdb30..fdb4f0a 100755 --- a/common/data/image/M01_icon_OTA_press.png +++ b/common/data/image/M01_photo_btn_delete.png diff --git a/common/data/image/Seven_IM_clip_nor.png b/common/data/image/Seven_IM_clip_nor.png Binary files differnew file mode 100755 index 0000000..65f7dfa --- /dev/null +++ b/common/data/image/Seven_IM_clip_nor.png diff --git a/common/data/image/attach_icon.png b/common/data/image/attach_icon.png Binary files differnew file mode 100755 index 0000000..062ce45 --- /dev/null +++ b/common/data/image/attach_icon.png diff --git a/common/data/image/controlbar/01_controlbar_icon_Play.png b/common/data/image/controlbar/01_controlbar_icon_Play.png Binary files differnew file mode 100755 index 0000000..9de9162 --- /dev/null +++ b/common/data/image/controlbar/01_controlbar_icon_Play.png diff --git a/common/data/image/controlbar/01_controlbar_icon_move.png b/common/data/image/controlbar/01_controlbar_icon_move.png Binary files differdeleted file mode 100755 index fdc8c8a..0000000 --- a/common/data/image/controlbar/01_controlbar_icon_move.png +++ /dev/null diff --git a/common/data/image/controlbar/01_controlbar_icon_pause.png b/common/data/image/controlbar/01_controlbar_icon_pause.png Binary files differnew file mode 100755 index 0000000..8419334 --- /dev/null +++ b/common/data/image/controlbar/01_controlbar_icon_pause.png diff --git a/common/data/image/controlbar/01_controlbar_icon_save.png b/common/data/image/controlbar/01_controlbar_icon_save.png Binary files differnew file mode 100755 index 0000000..2d8db38 --- /dev/null +++ b/common/data/image/controlbar/01_controlbar_icon_save.png diff --git a/common/data/image/controlbar/01_controlbar_icon_settings.png b/common/data/image/controlbar/01_controlbar_icon_settings.png Binary files differnew file mode 100755 index 0000000..bbea504 --- /dev/null +++ b/common/data/image/controlbar/01_controlbar_icon_settings.png diff --git a/common/data/image/controlbar/01_controllbar_icon_add_to_contact.png b/common/data/image/controlbar/01_controllbar_icon_add_to_contact.png Binary files differdeleted file mode 100755 index 65d47e4..0000000 --- a/common/data/image/controlbar/01_controllbar_icon_add_to_contact.png +++ /dev/null diff --git a/common/data/image/controlbar/01_controlbar_icon_call.png b/common/data/image/controlbar/M01_controlbar_icon_attach.png Binary files differindex b8b7806..67959f0 100755 --- a/common/data/image/controlbar/01_controlbar_icon_call.png +++ b/common/data/image/controlbar/M01_controlbar_icon_attach.png diff --git a/common/data/image/controlbar/M01_controlbar_icon_more.png b/common/data/image/controlbar/M01_controlbar_icon_more.png Binary files differnew file mode 100755 index 0000000..e5589d3 --- /dev/null +++ b/common/data/image/controlbar/M01_controlbar_icon_more.png diff --git a/common/data/image/controlbar/M01_controlbar_icon_reply.png b/common/data/image/controlbar/M01_controlbar_icon_reply.png Binary files differnew file mode 100755 index 0000000..cb86286 --- /dev/null +++ b/common/data/image/controlbar/M01_controlbar_icon_reply.png diff --git a/common/data/image/controlbar/M01_controlbar_icon_resend.png b/common/data/image/controlbar/M01_controlbar_icon_resend.png Binary files differnew file mode 100755 index 0000000..1d97a6c --- /dev/null +++ b/common/data/image/controlbar/M01_controlbar_icon_resend.png diff --git a/common/data/image/myfile_icon_etc.png b/common/data/image/myfile_icon_etc.png Binary files differnew file mode 100755 index 0000000..0cc767d --- /dev/null +++ b/common/data/image/myfile_icon_etc.png diff --git a/common/data/image/myfile_icon_excel.png b/common/data/image/myfile_icon_excel.png Binary files differnew file mode 100755 index 0000000..109b7de --- /dev/null +++ b/common/data/image/myfile_icon_excel.png diff --git a/common/data/image/myfile_icon_html.png b/common/data/image/myfile_icon_html.png Binary files differnew file mode 100755 index 0000000..78646b4 --- /dev/null +++ b/common/data/image/myfile_icon_html.png diff --git a/common/data/image/myfile_icon_images.png b/common/data/image/myfile_icon_images.png Binary files differnew file mode 100755 index 0000000..4dd3be3 --- /dev/null +++ b/common/data/image/myfile_icon_images.png diff --git a/common/data/image/myfile_icon_java.png b/common/data/image/myfile_icon_java.png Binary files differnew file mode 100755 index 0000000..a083ee6 --- /dev/null +++ b/common/data/image/myfile_icon_java.png diff --git a/common/data/image/myfile_icon_music.png b/common/data/image/myfile_icon_music.png Binary files differnew file mode 100755 index 0000000..9909d9c --- /dev/null +++ b/common/data/image/myfile_icon_music.png diff --git a/common/data/image/myfile_icon_pdf.png b/common/data/image/myfile_icon_pdf.png Binary files differnew file mode 100755 index 0000000..2480d81 --- /dev/null +++ b/common/data/image/myfile_icon_pdf.png diff --git a/common/data/image/myfile_icon_ppt.png b/common/data/image/myfile_icon_ppt.png Binary files differnew file mode 100755 index 0000000..42c1100 --- /dev/null +++ b/common/data/image/myfile_icon_ppt.png diff --git a/common/data/image/myfile_icon_rss.png b/common/data/image/myfile_icon_rss.png Binary files differnew file mode 100755 index 0000000..1b566e2 --- /dev/null +++ b/common/data/image/myfile_icon_rss.png diff --git a/common/data/image/myfile_icon_svg.png b/common/data/image/myfile_icon_svg.png Binary files differnew file mode 100755 index 0000000..64a841c --- /dev/null +++ b/common/data/image/myfile_icon_svg.png diff --git a/common/data/image/myfile_icon_swf.png b/common/data/image/myfile_icon_swf.png Binary files differnew file mode 100755 index 0000000..ee50e85 --- /dev/null +++ b/common/data/image/myfile_icon_swf.png diff --git a/common/data/image/M01_btn_Unread_message_press.png b/common/data/image/myfile_icon_text.png Binary files differindex 55004f5..c937ef8 100755 --- a/common/data/image/M01_btn_Unread_message_press.png +++ b/common/data/image/myfile_icon_text.png diff --git a/common/data/image/myfile_icon_video.png b/common/data/image/myfile_icon_video.png Binary files differnew file mode 100755 index 0000000..a8e832a --- /dev/null +++ b/common/data/image/myfile_icon_video.png diff --git a/common/data/image/myfile_icon_word.png b/common/data/image/myfile_icon_word.png Binary files differnew file mode 100755 index 0000000..b399bad --- /dev/null +++ b/common/data/image/myfile_icon_word.png diff --git a/common/data/image/org.tizen.message.cb.png b/common/data/image/org.tizen.message.cb.png Binary files differindex e7bfab5..3a26d57 100755 --- a/common/data/image/org.tizen.message.cb.png +++ b/common/data/image/org.tizen.message.cb.png diff --git a/common/data/image/org.tizen.message.noti.png b/common/data/image/org.tizen.message.noti.png Binary files differindex e7bfab5..dcc17dc 100755 --- a/common/data/image/org.tizen.message.noti.png +++ b/common/data/image/org.tizen.message.noti.png diff --git a/common/data/image/org.tizen.message.png b/common/data/image/org.tizen.message.png Binary files differindex e7bfab5..8bf4018 100755 --- a/common/data/image/org.tizen.message.png +++ b/common/data/image/org.tizen.message.png diff --git a/common/data/image/org.tizen.message.voice.png b/common/data/image/org.tizen.message.voice.png Binary files differindex e7bfab5..85b6d51 100755 --- a/common/data/image/org.tizen.message.voice.png +++ b/common/data/image/org.tizen.message.voice.png diff --git a/common/data/msg_button.edc b/common/data/msg_button.edc new file mode 100755 index 0000000..dc25863 --- /dev/null +++ b/common/data/msg_button.edc @@ -0,0 +1,1097 @@ +#define BUTTON_STATE_ENABLED 0 +#define BUTTON_STATE_DISABLED 1 + +#define BUTTON_TEXT_STYLE1_BG_BORDER_INC 5 5 5 5 +#define BUTTON_TEXT_STYLE1_PADDING_MIN_INC 23 10 +#define BUTTON_TEXT_STYLE1_RIGHT_BOTTOM_PADDING_MIN_INC 23 10 +#define BUTTON_TEXT_STYLE1_BG_MIN_INC 108 74 + +#define BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC 108 74 +#define BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC 74 74 +#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC 62 54 +#define BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC 0 0 +#define BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC 62 54 +#define BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC 62 54 + +//text +#define BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC 249 249 249 255 +#define BUTTON_TEXT_STYLE1_FONT_SIZE_INC 32 +#define BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC 249 249 249 255 +#define BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC 249 249 249 255 +#define BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC 48 49 50 255 + +/////////////////////////////////////////////////////////////////////////////////////// +#define BUTTON_SEND_BG_NORMAL "00_button_04_normal.png" +#define BUTTON_SEND_BG_PRESS "00_button_04_press.png" +#define BUTTON_SEND_BG_DIM "00_button_04_dim.png" +#define BUTTON_SEND_BG_FOCUS "00_button_04_normal_focus.png" + + group { name: "elm/button/base/sendbutton"; + images { + image: BUTTON_SEND_BG_NORMAL COMP; + image: BUTTON_SEND_BG_PRESS COMP; + image: BUTTON_SEND_BG_DIM COMP; + image: BUTTON_SEND_BG_FOCUS COMP; + } + script { + public button_state = BUTTON_STATE_ENABLED; + } + parts { + part { name: "button_image"; + scale: 1; + description { state: "default" 0.0; + image { + normal: BUTTON_SEND_BG_NORMAL; + border: BUTTON_TEXT_STYLE1_BG_BORDER_INC; + border_scale: 1; + } + } + description { state: "clicked" 0.0; + inherit: "default" 0.0; + image.normal: BUTTON_SEND_BG_PRESS; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + image.normal: BUTTON_SEND_BG_DIM; + } + description { state: "focused" 0.0; + inherit: "default" 0.0; + image.normal: BUTTON_SEND_BG_FOCUS; + } + } + part { name: "padding_left_top"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + align: 0.0 0.0; + rel2.relative: 0.0 0.0; + min: BUTTON_TEXT_STYLE1_PADDING_MIN_INC; + fixed: 1 1; + visible: 0; + } + } + part { name: "bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + min: BUTTON_TEXT_STYLE1_BG_MIN_INC; + visible: 0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + min: BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC; + } + description { state: "icononly" 0.0; + inherit: "default" 0.0; + min: BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC; + } + } + part { name: "padding_right_bottom"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + align: 1.0 1.0; + rel1.relative: 1.0 1.0; + min: BUTTON_TEXT_STYLE1_RIGHT_BOTTOM_PADDING_MIN_INC; + fixed: 1 1; + visible: 0; + } + } + part { name: "icon_rect"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + min: 0 0; + fixed: 1 0; + rel1 { + relative: 1.0 1.0; + to: "padding_left_top"; + } + rel2 { + relative: 1.0 0.0; + to_x: "padding_left_top"; + to_y: "padding_right_bottom"; + } + align: 0.0 0.5; + } + description { state: "visible" 0.0; + visible: 0; + min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC; + max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC; + fixed: 1 0; + rel1 { + relative: 1.0 1.0; + to: "padding_left_top"; + } + rel2 { + relative: 1.0 0.0; + to_x: "padding_left_top"; + to_y: "padding_right_bottom"; + } + align: 0.0 0.5; + } + description { state: "icononly" 0.0; + inherit: "default" 0.0; + } + } + part { name: "padding_after_icon"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; //when only icon or no icon is there + align: 0.0 0.0; + rel1 { + relative: 1.0 0.0; + to: "icon_rect"; + } + rel2.to: "icon_rect"; + fixed: 1 0; + min: 0 0; + visible: 0; + } + description { state: "visible" 0.0; + visible: 0; + align: 0.0 0.0; + rel1 { + relative: 1.0 0.0; + to: "icon_rect"; + } + rel2.to: "icon_rect"; + fixed: 1 0; + min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC; + } + description { state: "icononly" 0.0; + inherit: "default" 0.0; + } + } + part { name: "padding_before_text"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; //when only icon or no icon is there + align: 1.0 0.5; + rel1 { + relative: 0.0 1.0; + to_x: "elm.text"; + to_y: "padding_left_top"; + } + rel2 { + relative: 0.0 0.0; + to_x: "elm.text"; + to_y: "padding_right_bottom"; + } + fixed: 1 0; + min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC; + visible: 0; + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + scale: 1; + clip_to: "clipper"; + description { state: "default" 0.0; + visible: 0; + align: 0.0 0.5; + rel1 { + relative: 1.0 1.0; + to: "padding_left_top"; + } + rel2 { + relative: 1.0 0.0; + to_x: "padding_left_top"; + to_y: "padding_right_bottom"; + } + fixed: 1 0; + } + description { state: "visible" 0.0; + fixed: 1 0; + min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC; + max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC; + align: 1.0 0.5; + rel1 { + relative: 0.0 1.0; + to_x: "padding_before_text"; + to_y: "padding_left_top"; + } + rel2 { + relative: 0.0 0.0; + to_x: "padding_before_text"; + to_y: "padding_right_bottom"; + } + } + description { state: "icononly" 0.0; + min: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC; + max: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC; + } + } + part { name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + clip_to: "clipper"; + description { state: "default" 0.0; + visible: 0; + rel1 { + relative: 1.0 1.0; + to_x: "padding_after_icon"; + to_y: "padding_left_top"; + } + rel2 { + relative: 0.0 0.0; + to: "padding_right_bottom"; + } + color: BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC; + text { + font: "SLP:style=Medium"; + size: BUTTON_TEXT_STYLE1_FONT_SIZE_INC; + min: 0 0; + max: 1 0; + text_class: "slp_medium"; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "clicked" 0.0; + inherit: "default" 0.0; + visible: 1; + color: BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 0 0 0 128; + } + description { state: "disabled_visible" 0.0; + inherit: "default" 0.0; + color: BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC; + visible: 1; + } + description { state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + color: BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC; + } + } + part { name: "over2"; + type: RECT; + repeat_events: 1; + ignore_flags: ON_HOLD; + description { state: "default" 0.0; + color: 0 0 0 0; + } + } + part { name: "over3"; + type: RECT; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + } + } + part { name: "clipper"; + type: RECT; + description { state: "default" 0.0; + color: 255 255 255 255; + } + } + part { name: "disabler"; + type: RECT; + description { state: "default" 0.0; + color: 0 0 0 0; + visible: 0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { name: "button_click"; + signal: "mouse,down,1"; + source: "over2"; + action: SIGNAL_EMIT "elm,action,press" ""; + after: "button_click_anim"; + } + program { name: "button_click_anim"; + action: STATE_SET "clicked" 0.0; + target: "button_image"; + after: "text_clicked"; + } + program { name: "text_clicked"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if (!strcmp(st, "visible")) + set_state(PART:"elm.text", "clicked", 0.0); + } + } + program { name: "button_unpress"; + action: SIGNAL_EMIT "elm,action,unpress" ""; + } + program { name: "button_mouseout_clicked"; + signal: "mouse,up,1"; + source: "over3"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.swallow.content", st, 30, vl); + if (strcmp(st, "icononly")) + { + emit("elm,action,default,text,set", ""); + set_state(PART:"elm.text", "visible", 0.0); + } + if (get_int(button_state) != BUTTON_STATE_DISABLED) + set_state(PART:"button_image", "default", 0.0); + } + after: button_unpress; + } + program { name: "touch_snd"; + signal: "mouse,clicked,1"; + source: "over2"; + // action: PLAY_SAMPLE "touch_sound" 1.0; + after: button_unclick3; + } + program { name: "button_unclick3"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { name: "text_show"; + signal: "elm,state,text,visible"; + source: "elm"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.swallow.content", st, 30, vl); + if (!strcmp(st, "icononly")) + { + set_state(PART:"elm.swallow.content", "visible", 0.0); + set_state(PART:"icon_rect", "visible", 0.0); + set_state(PART:"padding_after_icon", "visible", 0.0); + set_state(PART:"bg", "visible", 0.0); + } + if (get_int(button_state) != BUTTON_STATE_DISABLED) + set_state(PART:"elm.text", "visible", 0.0); + else + set_state(PART:"elm.text", "disabled_visible", 0.0); + } + } + program { name: "text_hide"; + signal: "elm,state,text,hidden"; + source: "elm"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.swallow.content", st, 30, vl); + if (!strcmp(st, "visible")) + { + set_state(PART:"elm.swallow.content", "icononly", 0.0); + set_state(PART:"icon_rect", "icononly", 0.0); + set_state(PART:"padding_after_icon", "icononly", 0.0); + set_state(PART:"bg", "icononly", 0.0); + } + set_state(PART:"elm.text", "default", 0.0); + } + } + program { name: "icon_show"; + signal: "elm,state,icon,visible"; + source: "elm"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if (!strcmp(st, "visible")) + { + set_state(PART:"elm.swallow.content", "visible", 0.0); + set_state(PART:"icon_rect", "visible", 0.0); + set_state(PART:"padding_after_icon", "visible", 0.0); + set_state(PART:"bg", "visible", 0.0); + } + else + { + set_state(PART:"elm.swallow.content", "icononly", 0.0); + set_state(PART:"icon_rect", "icononly", 0.0); + set_state(PART:"padding_after_icon", "icononly", 0.0); + set_state(PART:"bg", "icononly", 0.0); + } + } + } + program { name: "icon_hide"; + signal: "elm,state,icon,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + target: "padding_after_icon"; + target: "icon_rect"; + target: "bg"; + } + program { name: "disable"; + signal: "elm,state,disabled"; + source: "elm"; + action: STATE_SET "disabled" 0.0; + target: "button_image"; + target: "disabler"; + after: "disable_text"; + } + program { name: "disable_text"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if (!strcmp(st, "visible")) + set_state(PART:"elm.text", "disabled_visible", 0.0); + else + set_state(PART:"elm.text", "disabled", 0.0); + set_int(button_state, BUTTON_STATE_DISABLED); + } + } + program { name: "enable"; + signal: "elm,state,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "button_image"; + target: "disabler"; + after: "enable_text"; + } + program { name: "enable_text"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if (!strcmp(st, "disabled_visible")) + set_state(PART:"elm.text", "visible", 0.0); + else + set_state(PART:"elm.text", "default", 0.0); + set_int(button_state, BUTTON_STATE_ENABLED); + } + } + program { name: "focused"; + //signal: "elm,action,focus"; + //source: "elm"; + action: STATE_SET "focused" 0.0; + target: "button_image"; + target: "elm.text"; + } + program { name: "unfocused"; + //signal: "elm,action,unfocus"; + //source: "elm"; + action: STATE_SET "default" 0.0; + target: "button_image"; + after: "unfocus_text"; + } + program { name: "unfocus_text"; + action: STATE_SET "visible" 0.0; + target: "elm.text"; + } + } + } + +/////////////////////////////////////////////////////////////////////////////////////// +#define BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC 64 64 +#define BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC 64 64 +#define BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC_48 48 48 +#define BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC_48 48 48 + +#define BUTTON_CIRCLE_BG_NORMAL "00_btn_circle_bg_normal.png" +#define BUTTON_CIRCLE_BG_PRESS "00_btn_circle_bg_press.png" + +#define BUTTON_CIRCLE_STYLES(style_name, image_normal, image_press, min_width, min_height) \ + group { name: "elm/button/base/circle/"style_name; \ + images { \ + image: BUTTON_CIRCLE_BG_NORMAL COMP; \ + image: BUTTON_CIRCLE_BG_PRESS COMP; \ + image: image_normal COMP; \ + image: image_press COMP; \ + } \ + parts { \ + part { name: "button_image"; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC; \ + max: BUTTON_CIRCLE_STYLE_BG_MIN_MAX_INC; \ + image.normal: BUTTON_CIRCLE_BG_NORMAL; \ + color: 255 255 255 255; \ + } \ + description { \ + state: "clicked" 0.0; \ + inherit: "default" 0.0; \ + image.normal: BUTTON_CIRCLE_BG_PRESS; \ + } \ + description { \ + state: "disabled" 0.0; \ + inherit: "default" 0.0; \ + color: 255 255 255 128; \ + } \ + } \ + part { name: "button_center_part"; \ + scale: 1; \ + description { state: "default" 0.0; \ + min: BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC; \ + max: BUTTON_CIRCLE_STYLE_IMAGE_MIN_MAX_INC; \ + image.normal: image_normal; \ + color: 255 255 255 255; \ + } \ + description { \ + state: "clicked" 0.0; \ + inherit: "default" 0.0; \ + image.normal: image_press; \ + } \ + description { \ + state: "disabled" 0.0; \ + inherit: "default" 0.0; \ + color: 255 255 255 128; \ + } \ + } \ + part { name: "over1"; \ + type: RECT; \ + ignore_flags: ON_HOLD; \ + description { state: "default" 0.0; \ + color: 0 0 0 0; \ + min: min_width min_height; \ + } \ + } \ + part { name: "over2"; \ + repeat_events: 1; \ + description { state: "default" 0.0; \ + color: 0 0 0 0; \ + } \ + } \ + part { name: "disabler"; \ + type: RECT; \ + description { state: "default" 0.0; \ + color: 0 0 0 0; \ + visible: 0; \ + } \ + description { state: "disabled" 0.0; \ + inherit: "default" 0.0; \ + visible: 1; \ + } \ + } \ + } \ + programs { \ + program { name: "button_click"; \ + signal: "mouse,down,1"; \ + source: "over1"; \ + action: SIGNAL_EMIT "elm,action,press" ""; \ + after: "button_click_anim"; \ + } \ + program { name: "button_click_anim"; \ + action: STATE_SET "clicked" 0.0; \ + target: "button_image"; \ + target: "button_center_part"; \ + } \ + program { name: "button_unclick"; \ + signal: "mouse,up,1"; \ + source: "over2"; \ + action: SIGNAL_EMIT "elm,action,unpress" ""; \ + after: "button_unclick_anim"; \ + } \ + program { name: "button_unclick_anim"; \ + action: STATE_SET "default" 0.0; \ + target: "button_image"; \ + target: "button_center_part"; \ + } \ + program { name: "touch_snd"; \ + signal: "mouse,clicked,1"; \ + source: "over1"; \ + after: button_unclick3; \ + } \ + program { name: "button_unclick3"; \ + action: SIGNAL_EMIT "elm,action,click" ""; \ + } \ + program { name: "disable"; \ + signal: "elm,state,disabled"; \ + source: "elm"; \ + action: STATE_SET "disabled" 0.0; \ + target: "disabler"; \ + target: "button_image"; \ + target: "button_center_part"; \ + } \ + program { name: "enable"; \ + signal: "elm,state,enabled"; \ + source: "elm"; \ + action: STATE_SET "default" 0.0; \ + target: "disabler"; \ + target: "button_image"; \ + target: "button_center_part"; \ + } \ + } \ + } + +/////////////////////////////////////////////////////////////////////////////////////// +BUTTON_CIRCLE_STYLES("add_plus", "M01_btn_add_plus.png", "M01_btn_add_plus.png", 64, 64); +/////////////////////////////////////////////////////////////////////////////////////// + +/////////////////////////////////////////////////////////////////// +// button for navi title +/////////////////////////////////////////////////// + group { name: "elm/button/base/title_button"; + images { + image: "M01_title_btn_bg.png" COMP; + image: "M01_title_btn_bg_press.png" COMP; + image: "00_button_04_press.png" COMP; + } + script { + public button_state = BUTTON_STATE_ENABLED; + } + parts { + part { name: "button_image"; + scale: 1; + description { state: "default" 0.0; + image { + normal: "M01_title_btn_bg.png"; + border: 1 1 1 1; + border_scale: 1; + } + } + description { state: "clicked" 0.0; + inherit: "default" 0.0; + image.normal: "M01_title_btn_bg_press.png"; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + image.normal: "M01_title_btn_bg.png"; //"00_button_04_press.png"; + } + description { state: "focused" 0.0; + inherit: "default" 0.0; + image.normal: "M01_title_btn_bg.png"; //"00_button_04_press.png"; + } + } + part { name: "padding_left_top"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + align: 0.0 0.0; + rel2.relative: 0.0 0.0; + min: BUTTON_TEXT_STYLE1_PADDING_MIN_INC; + fixed: 1 1; + visible: 0; + } + } + part { name: "bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + min: BUTTON_TEXT_STYLE1_BG_MIN_INC; + visible: 0; + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + min: BUTTON_TEXT_STYLE1_VISIBLE_BG_MIN_INC; + } + description { state: "icononly" 0.0; + inherit: "default" 0.0; + min: BUTTON_TEXT_STYLE1_ICONONLY_BG_MIN_INC; + } + } + part { name: "padding_right_bottom"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + align: 1.0 1.0; + rel1.relative: 1.0 1.0; + min: BUTTON_TEXT_STYLE1_RIGHT_BOTTOM_PADDING_MIN_INC; + fixed: 1 1; + visible: 0; + } + } + part { name: "icon_rect"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; + visible: 0; + min: 0 0; + fixed: 1 0; + rel1 { + relative: 1.0 1.0; + to: "padding_left_top"; + } + rel2 { + relative: 1.0 0.0; + to_x: "padding_left_top"; + to_y: "padding_right_bottom"; + } + align: 0.0 0.5; + } + description { state: "visible" 0.0; + visible: 0; + min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC; + max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_RECT_MIN_MAX_INC; + fixed: 1 0; + rel1 { + relative: 1.0 1.0; + to: "padding_left_top"; + } + rel2 { + relative: 1.0 0.0; + to_x: "padding_left_top"; + to_y: "padding_right_bottom"; + } + align: 0.0 0.5; + } + description { state: "icononly" 0.0; + inherit: "default" 0.0; + } + } + part { name: "padding_after_icon"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; //when only icon or no icon is there + align: 0.0 0.0; + rel1 { + relative: 1.0 0.0; + to: "icon_rect"; + } + rel2.to: "icon_rect"; + fixed: 1 0; + min: 0 0; + visible: 0; + } + description { state: "visible" 0.0; + visible: 0; + align: 0.0 0.0; + rel1 { + relative: 1.0 0.0; + to: "icon_rect"; + } + rel2.to: "icon_rect"; + fixed: 1 0; + min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC; + } + description { state: "icononly" 0.0; + inherit: "default" 0.0; + } + } + part { name: "padding_before_text"; + type: RECT; + scale: 1; + mouse_events: 0; + description { state: "default" 0.0; //when only icon or no icon is there + align: 1.0 0.5; + rel1 { + relative: 0.0 1.0; + to_x: "elm.text"; + to_y: "padding_left_top"; + } + rel2 { + relative: 0.0 0.0; + to_x: "elm.text"; + to_y: "padding_right_bottom"; + } + fixed: 1 0; + min: BUTTON_TEXT_STYLE1_VISIBLE_PADDING_ICON_TEXT_MIN_INC; + visible: 0; + } + } + part { name: "elm.swallow.content"; + type: SWALLOW; + scale: 1; + clip_to: "clipper"; + description { state: "default" 0.0; + visible: 0; + align: 0.0 0.5; + rel1 { + relative: 1.0 1.0; + to: "padding_left_top"; + } + rel2 { + relative: 1.0 0.0; + to_x: "padding_left_top"; + to_y: "padding_right_bottom"; + } + fixed: 1 0; + } + description { state: "visible" 0.0; + fixed: 1 0; + min: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC; + max: BUTTON_TEXT_STYLE1_VISIBLE_ICON_MIN_MAX_INC; + align: 1.0 0.5; + rel1 { + relative: 0.0 1.0; + to_x: "padding_before_text"; + to_y: "padding_left_top"; + } + rel2 { + relative: 0.0 0.0; + to_x: "padding_before_text"; + to_y: "padding_right_bottom"; + } + } + description { state: "icononly" 0.0; + min: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC; + max: BUTTON_TEXT_STYLE1_ICONONLY_ICON_MIN_MAX_INC; + } + } + part { name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + clip_to: "clipper"; + description { state: "default" 0.0; + visible: 0; + rel1 { + relative: 1.0 1.0; + to_x: "padding_after_icon"; + to_y: "padding_left_top"; + } + rel2 { + relative: 0.0 0.0; + to: "padding_right_bottom"; + } + align: 0.0 0.5; + color: BUTTON_TEXT_STYLE1_NORMAL_COLOR_INC; + text { + font: "SLP:style=Medium"; + size: 52; + min: 0 0; + max: 1 0; + text_class: "slp_medium"; + } + } + description { state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "clicked" 0.0; + inherit: "default" 0.0; + visible: 1; + color: BUTTON_TEXT_STYLE1_PRESSED_COLOR_INC; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 0 0 0 128; + } + description { state: "disabled_visible" 0.0; + inherit: "default" 0.0; + color: BUTTON_TEXT_STYLE1_DISABLED_COLOR_INC; + visible: 1; + } + description { state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + color: BUTTON_TEXT_STYLE1_FOCUSED_COLOR_INC; + } + } + part { name: "over2"; + type: RECT; + repeat_events: 1; + ignore_flags: ON_HOLD; + description { state: "default" 0.0; + color: 0 0 0 0; + } + } + part { name: "over3"; + type: RECT; + repeat_events: 1; + description { state: "default" 0.0; + color: 0 0 0 0; + } + } + part { name: "clipper"; + type: RECT; + description { state: "default" 0.0; + color: 255 255 255 255; + } + } + part { name: "disabler"; + type: RECT; + description { state: "default" 0.0; + color: 0 0 0 0; + visible: 0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { name: "button_click"; + signal: "mouse,down,1"; + source: "over2"; + action: SIGNAL_EMIT "elm,action,press" ""; + after: "button_click_anim"; + } + program { name: "button_click_anim"; + action: STATE_SET "clicked" 0.0; + target: "button_image"; + after: "text_clicked"; + } + program { name: "text_clicked"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if (!strcmp(st, "visible")) + set_state(PART:"elm.text", "clicked", 0.0); + } + } + program { name: "button_unpress"; + action: SIGNAL_EMIT "elm,action,unpress" ""; + } + program { name: "button_mouseout_clicked"; + signal: "mouse,up,1"; + source: "over3"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.swallow.content", st, 30, vl); + if (strcmp(st, "icononly")) + { + emit("elm,action,default,text,set", ""); + set_state(PART:"elm.text", "visible", 0.0); + } + if (get_int(button_state) != BUTTON_STATE_DISABLED) + set_state(PART:"button_image", "default", 0.0); + } + after: button_unpress; + } + program { name: "touch_snd"; + signal: "mouse,clicked,1"; + source: "over2"; + // action: PLAY_SAMPLE "touch_sound" 1.0; + after: button_unclick3; + } + program { name: "button_unclick3"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { name: "text_show"; + signal: "elm,state,text,visible"; + source: "elm"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.swallow.content", st, 30, vl); + if (!strcmp(st, "icononly")) + { + set_state(PART:"elm.swallow.content", "visible", 0.0); + set_state(PART:"icon_rect", "visible", 0.0); + set_state(PART:"padding_after_icon", "visible", 0.0); + set_state(PART:"bg", "visible", 0.0); + } + if (get_int(button_state) != BUTTON_STATE_DISABLED) + set_state(PART:"elm.text", "visible", 0.0); + else + set_state(PART:"elm.text", "disabled_visible", 0.0); + } + } + program { name: "text_hide"; + signal: "elm,state,text,hidden"; + source: "elm"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.swallow.content", st, 30, vl); + if (!strcmp(st, "visible")) + { + set_state(PART:"elm.swallow.content", "icononly", 0.0); + set_state(PART:"icon_rect", "icononly", 0.0); + set_state(PART:"padding_after_icon", "icononly", 0.0); + set_state(PART:"bg", "icononly", 0.0); + } + set_state(PART:"elm.text", "default", 0.0); + } + } + program { name: "icon_show"; + signal: "elm,state,icon,visible"; + source: "elm"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if (!strcmp(st, "visible")) + { + set_state(PART:"elm.swallow.content", "visible", 0.0); + set_state(PART:"icon_rect", "visible", 0.0); + set_state(PART:"padding_after_icon", "visible", 0.0); + set_state(PART:"bg", "visible", 0.0); + } + else + { + set_state(PART:"elm.swallow.content", "icononly", 0.0); + set_state(PART:"icon_rect", "icononly", 0.0); + set_state(PART:"padding_after_icon", "icononly", 0.0); + set_state(PART:"bg", "icononly", 0.0); + } + } + } + program { name: "icon_hide"; + signal: "elm,state,icon,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + target: "padding_after_icon"; + target: "icon_rect"; + target: "bg"; + } + program { name: "disable"; + signal: "elm,state,disabled"; + source: "elm"; + action: STATE_SET "disabled" 0.0; + target: "button_image"; + target: "disabler"; + after: "disable_text"; + } + program { name: "disable_text"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if (!strcmp(st, "visible")) + set_state(PART:"elm.text", "disabled_visible", 0.0); + else + set_state(PART:"elm.text", "disabled", 0.0); + set_int(button_state, BUTTON_STATE_DISABLED); + } + } + program { name: "enable"; + signal: "elm,state,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "button_image"; + target: "disabler"; + after: "enable_text"; + } + program { name: "enable_text"; + script { + new st[31]; + new Float:vl; + get_state(PART:"elm.text", st, 30, vl); + if (!strcmp(st, "disabled_visible")) + set_state(PART:"elm.text", "visible", 0.0); + else + set_state(PART:"elm.text", "default", 0.0); + set_int(button_state, BUTTON_STATE_ENABLED); + } + } + program { name: "focused"; + //signal: "elm,action,focus"; + //source: "elm"; + action: STATE_SET "focused" 0.0; + target: "button_image"; + target: "elm.text"; + } + program { name: "unfocused"; + //signal: "elm,action,unfocus"; + //source: "elm"; + action: STATE_SET "default" 0.0; + target: "button_image"; + after: "unfocus_text"; + } + program { name: "unfocus_text"; + action: STATE_SET "visible" 0.0; + target: "elm.text"; + } + } + } + diff --git a/common/data/msg_common.edc b/common/data/msg_common.edc new file mode 100755 index 0000000..03ae507 --- /dev/null +++ b/common/data/msg_common.edc @@ -0,0 +1,222 @@ +collections { + group { + name: "title"; + images { + image: "nf_title_separator.png" COMP; + image: "optionheader_arrow.png" COMP; + } + script { + public more_show = 0; + public title_show = 0; + } + parts { + part { + name: "padding1"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min: 16 0; + align: 0 0.5; + rel1.relative: 0 0; + rel2.relative: 0 1; + visible: 0; + } + } + part { + name: "title_btn"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + min: 0 78; + align: 0 0.5; + rel1 { relative: 0.0 0.5;} + rel2 { relative: 0.0 0.5; to_x: "padding2";} + color: 255 0 0 255; + } + } + part { + name: "title_text"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + text { + font: "SLP:style=Medium"; + size: 52; + min: 0 0; + max: 1 0; + align: 0.5 0.5; + } + color: 249 249 249 255; + align: 0.0 0.5; + fixed: 1 0; + rel1 { relative: 1.0 0.5; to_x: "padding1";} + rel2 { relative: 0.0 0.5; to_x: "padding2";} + } + } + part { + name: "padding2"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min: 5 0; + align: 1.0 0.5; + rel1.to: "separator1"; + rel2.to: "separator1"; + rel1.relative: 0 0; + rel2.relative: 0 1; + visible: 0; + } + } + part { + name: "separator1"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + min: 2 48; + max: 2 48; + align: 1 0.5; + rel1.to: "more_btn"; + rel2.to: "more_btn"; + rel1.relative: 0 0; + rel2.relative: 0 1; + image.normal: "nf_title_separator.png"; + } + } + part { + name: "more_btn"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + min: 1 1; + align: 1 0.5; + rel1.to: "separator2"; + rel2.to: "separator2"; + rel1.relative: 0 0; + rel2.relative: 0 1; + } + } + part { + name: "separator2"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min: 2 48; + max: 2 48; + align: 1 0.5; + rel1.to_x: "prev_btn"; + rel2.to_x: "prev_btn"; + rel1.relative: 0 0; + rel2.relative: 0 1; + image.normal: "nf_title_separator.png"; + } + } + part { + name: "prev_btn"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + max: 136 0; + align: 1 0.5; + rel1.relative: 1 0; + rel2.relative: 1 1; + } + } + part { + name: "titlebtn_arrow"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + min: 28 24; + max: 28 24; + fixed: 1 1; + align: 0.5 0.0; + rel1 { relative: 0.0 0.89; to_x: "title_btn"; } + rel2 { relative: 1.0 0.89; to_x: "title_btn"; } + image.normal: "optionheader_arrow.png"; + color: 255 255 255 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "morebtn_arrow"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + min: 28 24; + max: 28 24; + fixed: 1 1; + align: 0.5 0.0; + rel1 { relative: 0.0 1.1; to: "more_btn"; } + rel2 { relative: 1.0 1.2; to: "more_btn"; } + image.normal: "optionheader_arrow.png"; + color: 255 255 255 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + } + programs { + program { + name: "title_show"; + signal: "elm,state,title,show"; + source: ""; + script { + set_int(title_show, 1); + set_state(PART:"titlebtn_arrow", "show", 0.0); + } + } + program { + name: "title_hide"; + signal: "elm,state,title,hide"; + source: ""; + script { + set_int(title_show, 0); + set_state(PART:"titlebtn_arrow", "default", 0.0); + } + } + program { + name: "more_show"; + signal: "elm,state,more,show"; + source: ""; + script { + set_int(more_show, 1); + set_state(PART:"morebtn_arrow", "show", 0.0); + } + } + program { + name: "more_hide"; + signal: "elm,state,more,hide"; + source: ""; + script { + set_int(more_show, 0); + set_state(PART:"morebtn_arrow", "default", 0.0); + } + } + } + } +} + diff --git a/common/data/msg_custom_winset.edc b/common/data/msg_custom_winset.edc new file mode 100755 index 0000000..d329451 --- /dev/null +++ b/common/data/msg_custom_winset.edc @@ -0,0 +1,4 @@ +collections +{ +#include "msg_button.edc" +} diff --git a/common/msg-ui-bundle.h b/common/msg-ui-bundle.h index 2ac8b7c..7f3ce8c 100755 --- a/common/msg-ui-bundle.h +++ b/common/msg-ui-bundle.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __MSG_BUNDLE_H__ #define __MSG_BUNDLE_H__ @@ -33,13 +34,15 @@ #define MSG_BUNDLE_KEY_TO "TO" #define MSG_BUNDLE_KEY_CC "CC" #define MSG_BUNDLE_KEY_BCC "BCC" - +#define MSG_BUNDLE_KEY_ATTACHFILE "ATTACHFILE" +#define MSG_BUNDLE_KEY_SUBJECT "SUBJECT" #define MSG_BUNDLE_KEY_BODY "BODY" #define MSG_BUNDLE_KEY_FORWARD "FORWARD" +#define MSG_BUNDLE_KEY_RESEND "RESEND" +#define MSG_BUNDLE_KEY_DELETE_MSG "delete_msg" #define MSG_BUNDLE_KEY_RECIPIENT "recipient" #define MSG_BUNDLE_KEY_NUMBER_INDEX "number/index" #define MSG_BUNDLE_KEY_INDEX "index" -#define MSG_BUNDLE_KEY_COMPOSER_RESPONSE "composer_resp" #define MSG_BUNDLE_KEY_REQUEST_TYPE "request_type" #define MSG_BUNDLE_KEY_FILE_TYPE "file_type" @@ -77,11 +80,14 @@ #define MSG_BUNDLE_KEY_VCALL_PARTY_NUM "KEY_CALLING_PARTY_NUMBER" #define MSG_BUNDLE_KEY_VCALL_CLI_CAUSE "KEY_CLI_CAUSE" #define MSG_BUNDLE_KEY_VCALL_FORWARDED "KEY_FORWARDED" +#define MSG_BUNDLE_KEY_DRMTYPE "drm_type" +#define MSG_BUNDLE_KEY_SYSPOPUP_CONTENT "_SYSPOPUP_CONTENT_" /* Bundle value name */ #define MSG_BUNDLE_VALUE_COMPOSE "compose" #define MSG_BUNDLE_VALUE_SMS_URI "sms" #define MSG_BUNDLE_VALUE_MMSTO_URI "mmsto" +#define MSG_BUNDLE_VALUE_FILE_URI "file" #define MSG_BUNDLE_VALUE_NEW_MSG "new_msg" #define MSG_BUNDLE_VALUE_MSG_ID "msg_id" #define MSG_BUNDLE_VALUE_CREATE_MSG "create_msg" @@ -131,8 +137,9 @@ #define MSG_BUNDLE_VALUE_AUTO_REJECT_LIST "1" #define MSG_BUNDLE_VALUE_CONTACT_CHECK_LIST "46" -#define MSG_BUNDLE_VALUE_RET_YES "yes" -#define MSG_BUNDLE_VALUE_RET_NO "no" +#define MSG_BUNDLE_VALUE_DRM_WITHOUT_FL "DRM_WITHOUT_FL" + +#define MSG_BUNDLE_VALUE_SPAM_SETTING "spam_setting" #endif /* __MSG_BUNDLE_H__ */ diff --git a/common/msg-ui-common-utility.c b/common/msg-ui-common-utility.c index c4fb2bc..d71747b 100755 --- a/common/msg-ui-common-utility.c +++ b/common/msg-ui-common-utility.c @@ -14,11 +14,13 @@ * limitations under the License. */ + /*================= * INCLUDE HEADERS * ================= */ #include <msg-ui-util.h> #include <msg-ui-common-utility.h> +#include <msg-ui-image-resource.h> /* for i18n */ #include <unicode/uloc.h> @@ -27,6 +29,33 @@ #include <unicode/udatpg.h> #include <unicode/ustring.h> +#include <stdlib.h> +#include <vconf-keys.h> +#include <bundle.h> +#include <syspopup_caller.h> +#include <drm_client.h> + +static char *icon_array[MSG_APP_FILE_TYPE_MAX] = { + [MSG_APP_FILE_TYPE_IMAGE] = MSG_COMMON_FILE_IMAGE_ICON, + [MSG_APP_FILE_TYPE_VIDEO] = MSG_COMMON_FILE_VIDEO_ICON, + [MSG_APP_FILE_TYPE_MUSIC] = MSG_COMMON_FILE_MUSIC_ICON, + [MSG_APP_FILE_TYPE_SOUND] = MSG_COMMON_FILE_SOUND_ICON, + [MSG_APP_FILE_TYPE_PDF] = MSG_COMMON_FILE_PDF_ICON, + [MSG_APP_FILE_TYPE_DOC] = MSG_COMMON_FILE_DOC_ICON, + [MSG_APP_FILE_TYPE_PPT] = MSG_COMMON_FILE_PPT_ICON, + [MSG_APP_FILE_TYPE_EXCEL] = MSG_COMMON_FILE_EXCEL_ICON, + [MSG_APP_FILE_TYPE_VOICE] = MSG_COMMON_FILE_VOICE_ICON, + [MSG_APP_FILE_TYPE_HTML] = MSG_COMMON_FILE_HTML_ICON, + [MSG_APP_FILE_TYPE_FLASH] = MSG_COMMON_FILE_FLASH_ICON, + [MSG_APP_FILE_TYPE_TXT] = MSG_COMMON_FILE_TXT_ICON, + [MSG_APP_FILE_TYPE_VCONTACT] = MSG_COMMON_FILE_VCONTACT_ICON, + [MSG_APP_FILE_TYPE_VCALENDAR] = MSG_COMMON_FILE_VCALENDAR_ICON, + [MSG_APP_FILE_TYPE_VNOTE] = MSG_COMMON_FILE_VNOTE_ICON, + [MSG_APP_FILE_TYPE_RSS] = MSG_COMMON_FILE_RSS_ICON, + [MSG_APP_FILE_TYPE_JAVA] = MSG_COMMON_FILE_JAVA_ICON, + [MSG_APP_FILE_TYPE_ETC] = MSG_COMMON_FILE_ETC_ICON, +}; + /*========================== * FUNCTION IMPLEMENTATIONS *========================== */ @@ -41,6 +70,21 @@ const char *msg_common_get_default_locale() return locale; } +int msg_common_get_timeformat() +{ + int timeformat = 0; + + if (vconf_get_int(VCONFKEY_REGIONFORMAT_TIME1224, &timeformat) < 0) + return MSG_TIME_FORMAT_UNKNOWN; + + if (timeformat == VCONFKEY_TIME_FORMAT_12) + return MSG_TIME_FORMAT_12H; + else if (timeformat == VCONFKEY_TIME_FORMAT_24) + return MSG_TIME_FORMAT_24H; + else + return MSG_TIME_FORMAT_UNKNOWN; +} + char *msg_common_get_date_best_pattern(const char* locale, char* skeleton) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); @@ -176,6 +220,161 @@ char *msg_common_get_date_text(const char* locale, char* skeleton, void* time) return strdup(formattedString); } +char *msg_common_get_display_date(const char* locale, char* bestPattern, time_t *msg_t) +{ + struct tm msg_time, cur_time; + time_t cur_t; + char msg_date_buf[DEF_BUF_LEN] = { '0', }; + char *date_str = NULL; + int diffday = 0, msg_day = 0, cur_day = 0; + + cur_t = (time_t) time(NULL); + + localtime_r(msg_t, &msg_time); + localtime_r(&cur_t, &cur_time); + + msg_day = (msg_time.tm_year - 1900) * 365 + msg_time.tm_yday + (msg_time.tm_year - 1900 - 1) / 4; + cur_day = (cur_time.tm_year - 1900) * 365 + cur_time.tm_yday + (cur_time.tm_year - 1900 - 1) / 4; + + diffday = cur_day - msg_day; + + if (diffday == 0) + snprintf(msg_date_buf, sizeof(msg_date_buf), "%s", dgettext("sys_string", "IDS_COM_BODY_TODAY")); + else if (diffday == 1) + snprintf(msg_date_buf, sizeof(msg_date_buf), "%s", dgettext("sys_string", "IDS_COM_BODY_YESTERDAY")); + else { + date_str = msg_common_get_formatted_date(locale, bestPattern, msg_t); + if (date_str) { + strncpy(msg_date_buf, date_str, sizeof(msg_date_buf) - 1); + free(date_str); + } + } + + return strdup(msg_date_buf); +} + +static MSG_BOOL __msg_common_make_normal_markup_text(Eina_Strbuf *markup_text, Eina_Strbuf *font_style, const char *src, int strlen) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, markup_text == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, font_style == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, src == NULL, FALSE); + + char *tmp_body_buf = NULL; + tmp_body_buf = (char *) calloc(strlen + 1, sizeof(char)); + if (tmp_body_buf) { + strncpy(tmp_body_buf, src, strlen); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return FALSE; + } + + eina_strbuf_append_printf(markup_text, "%s%s%s", MSG_COMMON_TAG_TEXT, eina_strbuf_string_get(font_style), tmp_body_buf); + if (tmp_body_buf) { + free(tmp_body_buf); + tmp_body_buf = NULL; + } + + return TRUE; +} + +Eina_Strbuf *msg_common_get_markup_text(const char *src, int fontsize, char *fontcolor, char *fontstyle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, src == NULL, NULL); + + const char *src_text = src; + + if (src_text && strlen(src_text) > 0) { + Eina_Strbuf *markup_text = NULL; + Eina_Strbuf *font_buf = NULL; + char *token = NULL; + char *tmp_buf = NULL; + char *remained_string = NULL; + int src_text_len = 0; + + src_text_len = strlen(src_text); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src_text_len : %d", src_text_len); + tmp_buf = (char *) calloc(src_text_len + 1, sizeof(char)); + if (tmp_buf == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "tmp mem alloc is failed!"); + return NULL; + } + + font_buf = eina_strbuf_new(); + if (font_buf == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "font_buf eina_strbuf_new is failed!"); + if (tmp_buf) { + free(tmp_buf); + tmp_buf = NULL; + } + return NULL; + } + + markup_text = eina_strbuf_new(); + if (markup_text == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "markup_text eina_strbuf_new is failed!"); + if (tmp_buf) { + free(tmp_buf); + tmp_buf = NULL; + } + + if (font_buf) { + eina_strbuf_free(font_buf); + font_buf = NULL; + } + return NULL; + } + + /* make font style */ + if (fontstyle) + eina_strbuf_append_printf(font_buf, "<%s>", fontstyle); + +/* + * unsupport font size + * if (fontsize > 0) + * eina_strbuf_append_printf(font_buf, "<font_size=%d>", fontsize); + */ + if (fontcolor) + eina_strbuf_append_printf(font_buf, "<color=%s>", fontcolor); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font_buf : (%s)", eina_strbuf_string_get(font_buf)); + + snprintf(tmp_buf, src_text_len + 1, "%s\n", (char *) src_text); + + token = strtok_r(tmp_buf, "\n", &remained_string); + + int token_len = 0; + + while (token) { + token_len = strlen(token); + + if (token[token_len - 1] == 0x0D) { /* if Enter is added via Window system, CR+LF is added. */ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "CR length is decreased"); + token_len = token_len - 1; + } + + if (!__msg_common_make_normal_markup_text(markup_text, font_buf, token, token_len)) + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "__msg_common_make_normal_markup_text is failed"); + + token = strtok_r(NULL, "\n", &remained_string); + if (token) + eina_strbuf_append(markup_text, "<br>"); + } + + if (tmp_buf) { + free(tmp_buf); + tmp_buf = NULL; + } + + if (font_buf) { + eina_strbuf_free(font_buf); + font_buf = NULL; + } + + return markup_text; + } else { + return NULL; + } +} MSG_BOOL msg_common_is_valid_phone_number(const char *address) { @@ -260,49 +459,467 @@ MSG_BOOL msg_common_is_connected_call(void) return FALSE; } -char *msg_common_get_current_theme_name(void) +MSG_BOOL msg_common_is_sim_inserted(void) { - char *theme_name = NULL; - char *save_ptr = NULL; + int sim_slot_status = 0; - /* Get current theme path. Return value is a full path of theme file. */ - const char *current_theme_path = elm_theme_get(NULL); - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current_theme_path is %s", current_theme_path); + if (vconf_get_int(VCONFKEY_TELEPHONY_SIM_SLOT, &sim_slot_status) < 0) + return FALSE; - if (current_theme_path == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "current_theme_path is NULL !!"); - return NULL; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "sim_slot_status = %d", sim_slot_status); + + if (sim_slot_status == VCONFKEY_TELEPHONY_SIM_INSERTED) + return TRUE; + else + return FALSE; +} + +MSG_BOOL msg_common_get_font_size(int *index, int *font_size) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, index == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, font_size == NULL, FALSE); + + if (vconf_get_int(VCONFKEY_MSG_APP_FONT_SIZE, index) < 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_get_int(font_size) is failed !!"); + return FALSE; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected index = %d", *index); } - theme_name = strdup(current_theme_path); - if (theme_name == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "strdup is NULL !!"); - return NULL; + switch (*index) { + case MSG_APP_FONT_SIZE_INDEX_HUGE : + *font_size = MSG_APP_FONT_SIZE_HUGE; + break; + case MSG_APP_FONT_SIZE_INDEX_LARGE : + *font_size = MSG_APP_FONT_SIZE_LARGE; + break; + case MSG_APP_FONT_SIZE_INDEX_NORMAL : + *font_size = MSG_APP_FONT_SIZE_NORMAL; + break; + case MSG_APP_FONT_SIZE_INDEX_SMALL : + *font_size = MSG_APP_FONT_SIZE_SMALL; + break; + case MSG_APP_FONT_SIZE_INDEX_TINY : + *font_size = MSG_APP_FONT_SIZE_TINY; + break; + case MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT : + default : + *font_size = MSG_APP_FONT_SIZE_NORMAL; + break; } - theme_name = strtok_r(theme_name, ":", &save_ptr); - if (theme_name == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "theme_name_dup is NULL !!"); - return NULL; + return TRUE; +} + +MSG_BOOL msg_common_set_font_size(int index) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + if (index < MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT || + index >= MSG_APP_FONT_SIZE_INDEX_MAX) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index = %d", index); + return FALSE; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected index = %d", index); } - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "theme_name is %s", theme_name); + if (vconf_set_int(VCONFKEY_MSG_APP_FONT_SIZE, index) < 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "vconf_set_int(font_size) is failed !!"); + return FALSE; + } - return theme_name; + return TRUE; } -MSG_BOOL msg_common_is_sim_inserted(void) +MSG_BOOL msg_common_apply_font_size(const char *widget_name, Evas_Object *obj) { - int sim_slot_status = 0; + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, widget_name == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, obj == NULL, FALSE); - if (vconf_get_int(VCONFKEY_TELEPHONY_SIM_SLOT, &sim_slot_status) < 0) + int index = 0; + int font_size = 0; + Evas_Font_Size font_size_scale = 0; + + if (msg_common_get_font_size(&index, &font_size) != TRUE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_common_get_font_size() is failed !!"); return FALSE; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected index = %d", index); + } - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "sim_slot_status = %d", sim_slot_status); + if (index == MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT) { + edje_text_class_del(widget_name); + } else { + /* Calculate the scale factor */ + font_size_scale -= (font_size * 100) / MSG_APP_FONT_SIZE_NORMAL; - if (sim_slot_status == VCONFKEY_TELEPHONY_SIM_INSERTED) + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font_size = %d, font_size_scale = %d", font_size, font_size_scale); + + edje_text_class_del(widget_name); + edje_text_class_set(widget_name, NULL, font_size_scale); + elm_widget_theme_specific(obj, NULL, EINA_TRUE); + } + + return TRUE; +} + +void msg_common_reset_font_size(const char *widget_name) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, widget_name == NULL); + + edje_text_class_del(widget_name); + + return; +} + +static char *__msg_common_get_file_ext(const char *a_pszfile_name) +{ + if (a_pszfile_name != NULL) { + int nlen = strlen(a_pszfile_name); + char *psztemp = (char *)a_pszfile_name + nlen; + + while (nlen--) { + psztemp--; + if (*psztemp == '.') { + psztemp++; + break; + } + } + return psztemp; + } + + return NULL; +} + +static MSG_BOOL __msg_common_is_drm_file(const char *filepath) +{ + D_ENTER; + D_MSG_RETVM_IF(filepath == NULL, FALSE, "filepath is NULL"); + drm_bool_type_e is_drm_file = DRM_UNKNOWN; + int ret = DRM_RETURN_SUCCESS; + + ret = drm_is_drm_file(filepath, &is_drm_file); + + if (ret == DRM_RETURN_SUCCESS && is_drm_file == DRM_TRUE) { return TRUE; - else + } else { + D_MSG("ret = %d", ret); return FALSE; + } +} + +static MSG_APP_FILE_TYPE_E __msg_common_get_file_type_by_file_ext(const char *file_ext, const char *fullpath) +{ + D_ENTER; + int i = 0; + + if (file_ext == NULL) { + D_EMSG("file_ext is NULL"); + return MSG_APP_FILE_TYPE_ETC; + } + + switch (file_ext[i]) { + case 'a': + case 'A': + if (strcasecmp("ASF", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VIDEO; + } + if (strcasecmp("AMR", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VOICE; + } + if (strcasecmp("AWB", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VOICE; + } + if (strcasecmp("AAC", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_MUSIC; + } + if (strcasecmp("AVI", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VIDEO; + } + if (strcasecmp("AAC", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_MUSIC; + } + break; + + case 'b': + case 'B': + if (strcasecmp("BMP", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_IMAGE; + } + break; + + case 'd': + case 'D': + if (strcasecmp("DOC", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_DOC; + } + if (strcasecmp("DOCX", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_DOC; + } + if (strcasecmp("DIVX", &file_ext[i]) == 0) { + if (__msg_common_is_drm_file(fullpath) == 0) { + return MSG_APP_FILE_TYPE_DRM; + } else { + return MSG_APP_FILE_TYPE_VIDEO; + } + } + if (strcasecmp("DCF", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_DRM; + } + break; + + case 'g': + case 'G': + if (strcasecmp("GIF", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_IMAGE; + } + if (strcasecmp("G72", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_MUSIC; + } + break; + + case 'h': + case 'H': + if (strcasecmp("H263", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_MUSIC; + } + if (strcasecmp("HTML", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_HTML; + } + if (strcasecmp("HTM", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_HTML; + } + break; + + case 'i': + case 'I': + if (strcasecmp("IMY", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SOUND; + } + break; + + case 'j': + case 'J': + if (strcasecmp("JAD", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_JAVA; + } + if (strcasecmp("JAR", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_JAVA; + } + + if (strcasecmp("JPG", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_IMAGE; + } + if (strcasecmp("JPEG", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_IMAGE; + } + if (strcasecmp("JPE", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_IMAGE; + } + break; + + case 'm': + case 'M': + if (strcasecmp("MMF", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SOUND; + } + if (strcasecmp("MP3", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_MUSIC; + } + if (strcasecmp("MID", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SOUND; + } + if (strcasecmp("MIDI", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SOUND; + } + if (strcasecmp("MP4", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VIDEO; + } + if (strcasecmp("MPG", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VIDEO; + } + if (strcasecmp("MPEG", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VIDEO; + } + if (strcasecmp("M4A", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_MUSIC; + } + if (strcasecmp("M3G", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_FLASH; + } + if (strcasecmp("MXMF", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SOUND; + } + if (strcasecmp("MKV", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VIDEO; + } + if (strcasecmp("MKA", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_MUSIC; + } + break; + + case 'o': + case 'O': + if (strcasecmp("opml", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_RSS; + } + break; + + case 'p': + case 'P': + if (strcasecmp("PNG", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_IMAGE; + } + if (strcasecmp("PJPEG", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_IMAGE; + } + if (strcasecmp("PDF", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_PDF; + } + if (strcasecmp("PPT", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_PPT; + } + if (strcasecmp("PPTX", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_PPT; + } + break; + + case 'r': + case 'R': + break; + + case 's': + case 'S': + if (strcasecmp("SDP", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VIDEO; + } + if (strcasecmp("SPM", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SOUND; + } + if (strcasecmp("SMP", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SOUND; + } + if (strcasecmp("SPF", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SOUND; + } + if (strcasecmp("SWF", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_FLASH; + } + if (strcasecmp("SVG", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SVG; + } + if (strcasecmp("SVGZ", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SVG; + } + break; + + case 't': + case 'T': + if (strcasecmp("TXT", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_TXT; + } + break; + + case 'v': + case 'V': + if (strcasecmp("VCF", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VCONTACT; + } + if (strcasecmp("VCS", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VCALENDAR; + } + if (strcasecmp("VNT", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VNOTE; + } + if (strcasecmp("VBM", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VBOOKMARK; + } + break; + + case 'w': + case 'W': + if (strcasecmp("WAV", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SOUND; + } + if (strcasecmp("WBMP", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_IMAGE; + } + if (strcasecmp("WGT", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_WGT; + } + if (strcasecmp("WMA", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_MUSIC; + } + if (strcasecmp("WMV", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VIDEO; + } + break; + + case 'x': + case 'X': + if (strcasecmp("XLS", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_EXCEL; + } + if (strcasecmp("XLSX", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_EXCEL; + } + if (strcasecmp("XMF", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_SOUND; + } + if (strcasecmp("XHTML", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_HTML; + } + break; + + case '3': + if (strcasecmp("3GP", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VIDEO; + } + if (strcasecmp("3GPP", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VIDEO; + } + if (strcasecmp("3G2", &file_ext[i]) == 0) { + return MSG_APP_FILE_TYPE_VIDEO; + } + break; + } + + return MSG_APP_FILE_TYPE_ETC; +} + +const char *__msg_common_get_file_icon_by_file_type(MSG_APP_FILE_TYPE_E file_type) +{ + const char *icon_path = MSG_COMMON_FILE_ETC_ICON; + if (file_type < MSG_APP_FILE_TYPE_NONE || file_type > MSG_APP_FILE_TYPE_MAX) { + D_EMSG("Invalid file_type!! file_type = %d", file_type); + return NULL; + } + + if (icon_array[file_type]) { + icon_path = icon_array[file_type]; + } + + return icon_path; } +const char *msg_common_get_file_icon(const char *filepath) +{ + D_ENTER; + D_MSG_RETVM_IF(filepath == NULL, NULL, "filepath is NULL"); + const char *icon_path = MSG_COMMON_FILE_ETC_ICON; + char *file_ext = __msg_common_get_file_ext(filepath); + + if (file_ext) { + MSG_APP_FILE_TYPE_E file_type = MSG_APP_FILE_TYPE_NONE; + + file_type = __msg_common_get_file_type_by_file_ext(file_ext, filepath); + icon_path = __msg_common_get_file_icon_by_file_type(file_type); + } else { + D_EMSG("file_ext is NULL"); + } + + return icon_path; +} diff --git a/common/msg-ui-common-utility.h b/common/msg-ui-common-utility.h index 144115d..657781f 100755 --- a/common/msg-ui-common-utility.h +++ b/common/msg-ui-common-utility.h @@ -14,13 +14,13 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMMON_UTILITY_H__ #define __MSG_UI_COMMON_UTILITY_H__ /*================================================================================================== INCLUDE HEADERS * ==================================================================================================*/ - #include <glib.h> #include <Elementary.h> @@ -31,45 +31,77 @@ #define MSG_COMMON_MAX_UCHAR_PATTERN_LEN 64 #define MSG_COMMON_MAX_CHAR_PATTERN_LEN 128 -/* for cutlink*/ #define MSG_COMMON_TAG_TEXT "<wrap=char>" -#define MSG_COMMON_TAG_LINK "<color=#72b1f2 underline=on underline_color=#72b1f2>" -#define MSG_COMMON_CUTLINK_MAX_NUMBER_LEN 40 -#define MSG_COMMON_CUTLINK_MAX_EMAIL_LEN 128 -#define MSG_COMMON_CUTLINK_MAX_URL_LEN 256 -#define MSG_COMMON_MAX_CUTLINK_LEN MSG_COMMON_CUTLINK_MAX_URL_LEN -#define MSG_COMMON_CUTLINK_COUNT_MAX 50 /* maximum cutlink count */ - #define MSG_COMMON_NUMBER_MAX_LEN 40 +/* Define vconf key */ +#define VCONFKEY_MSG_APP_FONT_SIZE "db/private/org.tizen.message/font_size" + +#define MSG_COMMON_EDJ EDJDIR"/msg_common.edj" +#define MSG_CUSTOM_WINSET_EDJ EDJDIR"/msg_custom_winset.edj" + /*================================================================================================== ENUMERATIONS *==================================================================================================*/ typedef enum { - MSG_COMMON_LINK_NONE, - MSG_COMMON_LINK_PHONE, - MSG_COMMON_LINK_EMAIL, - MSG_COMMON_LINK_URL, - MSG_COMMON_LINK_RTSP, - MSG_COMMON_LINK_WAP, -} MsgLinkType; + MSG_APP_FONT_SIZE_TINY = 28, + MSG_APP_FONT_SIZE_SMALL = 36, + MSG_APP_FONT_SIZE_NORMAL = 44, + MSG_APP_FONT_SIZE_LARGE = 70, + MSG_APP_FONT_SIZE_HUGE = 102, -/*================================================================================================== - STRUCTURES - *==================================================================================================*/ + MSG_APP_FONT_SIZE_MAX + +} MSG_APP_FONT_SIZE_E; + +typedef enum { + MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT, + MSG_APP_FONT_SIZE_INDEX_HUGE, + MSG_APP_FONT_SIZE_INDEX_LARGE, + MSG_APP_FONT_SIZE_INDEX_NORMAL, + MSG_APP_FONT_SIZE_INDEX_SMALL, + MSG_APP_FONT_SIZE_INDEX_TINY, + + MSG_APP_FONT_SIZE_INDEX_MAX -typedef struct { - gchar *pattern; - MsgLinkType type; -} MsgLinkPattern; +} MSG_APP_FONT_SIZE_INDEX_E; -typedef struct { - gchar *string; - MsgLinkType type; - gint s_offset; - gint e_offset; -} MsgLinkInfo; +typedef enum { + MSG_SYS_FONT_SIZE_INDEX_SMALL, + MSG_SYS_FONT_SIZE_INDEX_NORMAL, + MSG_SYS_FONT_SIZE_INDEX_LARGE, + MSG_SYS_FONT_SIZE_INDEX_HUGE, + MSG_SYS_FONT_SIZE_INDEX_GIANT, + MSG_SYS_FONT_SIZE_INDEX_MAX +} MSG_SYS_FONT_SIZE_INDEX_E; + +typedef enum { + MSG_APP_FILE_TYPE_NONE = 0, + MSG_APP_FILE_TYPE_IMAGE, /**< Image category */ + MSG_APP_FILE_TYPE_VIDEO, /**< Video category */ + MSG_APP_FILE_TYPE_MUSIC, /**< Music category */ + MSG_APP_FILE_TYPE_SOUND, /**< Sound category */ + MSG_APP_FILE_TYPE_PDF, /**< Pdf category */ + MSG_APP_FILE_TYPE_DOC, /**< Word category */ + MSG_APP_FILE_TYPE_PPT, /**< Powerpoint category */ + MSG_APP_FILE_TYPE_EXCEL, /**< Excel category */ + MSG_APP_FILE_TYPE_VOICE, /**< Voice category */ + MSG_APP_FILE_TYPE_HTML, /**< Html category */ + MSG_APP_FILE_TYPE_FLASH, /**< Flash category */ + MSG_APP_FILE_TYPE_TXT, /**< Txt category */ + MSG_APP_FILE_TYPE_VCONTACT, /**< Vcontact category */ + MSG_APP_FILE_TYPE_VCALENDAR, /**< Vcalendar category */ + MSG_APP_FILE_TYPE_VNOTE, /**< Vnote category */ + MSG_APP_FILE_TYPE_VBOOKMARK, /**< Vbookmark category */ + MSG_APP_FILE_TYPE_SVG, /**< Svg category */ + MSG_APP_FILE_TYPE_RSS, /**< Rss reader file, *.opml */ + MSG_APP_FILE_TYPE_JAVA, /**< java file, *.jad, *.jar */ + MSG_APP_FILE_TYPE_WGT, /**< wrt , *.wgt, *.wgt */ + MSG_APP_FILE_TYPE_DRM, /**< drm file , *.dcf */ + MSG_APP_FILE_TYPE_ETC, /**< Other files category */ + MSG_APP_FILE_TYPE_MAX +} MSG_APP_FILE_TYPE_E; /*================================================================================================== FUNCTION DECLARATIONS @@ -84,7 +116,7 @@ typedef struct { const char *msg_common_get_default_locale(); /* - *@fn msg_common_get_date_text(const char* locale, char* skeleton, void* time); + *@fn msg_common_get_date_text(const char *locale, char *skeleton, void *time); *@brief This function is used to get data & time string based on both locale and skeleton. * Caller must free returned string after using it, else memory will be leaked *@return data and time formated string on success, else NULL pointer on failure @@ -92,10 +124,33 @@ const char *msg_common_get_default_locale(); *@param[in] skeleton skeleton string caller want to see *@param[in] time_t time_t pointer to be diaplayed. If NULL is passed, current time will be displayed */ -char *msg_common_get_date_text(const char* locale, char* skeleton, void* time); +char *msg_common_get_date_text(const char *locale, char *skeleton, void *time); + +/* + *@fn msg_common_get_display_date(const char *locale, char *bestPattern, time_t *msg_t); + *@brief This function is used to get date string based on both locale and bestPattern. + * Caller must free returned string after using it, else memory will be leaked + *@return date string on success, else NULL pointer on failure + *@param[in] locale locale info. of current setting + *@param[in] bestPattern best pattern for date and time based on locale + *@param[in] time_t time_t pointer to be diaplayed. If NULL is passed, current time will be displayed + */ +char *msg_common_get_display_date(const char *locale, char *bestPattern, time_t *msg_t); + +/* + *@fn msg_common_get_markup_text(const char *src, int fontsize, char *fontcolor); + *@brief This function is used to get marked up string from src text. + * Caller must free returned string by using eina_strbuf_free(), else memory will be leaked + *@return Eina_Strbuf* marked up string on success, else NULL pointer on failure + *@param[in] src original text to be displayed + *@param[in] fontsize fontsize to be displayed. If 0 is passed, it is not set + *@param[in] fontcolor fontcolor to be displayed. It must be "#ffffff" style. If NULL is passed, it is not set + *@param[in] fontstyle fontstyle to be displayed. It must be passed font style like "hilight". If NULL is passed, it is not set + */ +Eina_Strbuf *msg_common_get_markup_text(const char *src, int fontsize, char *fontcolor, char *fontstyle); /* - *@fn msg_common_is_valid_phone_number(const char* address); + *@fn msg_common_is_valid_phone_number(const char *address); *@brief This function is used to check address is valid number or not *@return return TRUE if address is valide number type, else FALSE *@param[in] address string pointer of address @@ -103,7 +158,7 @@ char *msg_common_get_date_text(const char* locale, char* skeleton, void* time); MSG_BOOL msg_common_is_valid_phone_number(const char *address); /* - *@fn msg_common_is_valid_email_addr(const char* address); + *@fn msg_common_is_valid_email_addr(const char *address); *@brief This function is used to check address is valid email address or not *@return return TRUE if address is valide email address type, else FALSE *@param[in] address string pointer of address @@ -118,30 +173,23 @@ MSG_BOOL msg_common_is_valid_email_addr(const char *address); MSG_BOOL msg_common_is_connected_call(void); /* - *@fn msg_common_get_date_best_pattern(const char* locale, char* skeleton); + *@fn msg_common_get_date_best_pattern(const char *locale, char *skeleton); *@brief This function is used to get best pattern string based on both locale and skeleton. *@return best pattern based on locale for data and time on success, else NULL pointer on failure *@param[in] locale locale info. of current setting *@param[in] skeleton skeleton string caller want to see */ -char *msg_common_get_date_best_pattern(const char* locale, char* skeleton); +char *msg_common_get_date_best_pattern(const char *locale, char *skeleton); /* - *@fn msg_common_get_formatted_date(const char* locale, char* bestPattern, void *time); + *@fn msg_common_get_formatted_date(const char *locale, char *bestPattern, void *time); *@brief This function is used to get data & time string from best pattern based on locale. *@return data and time formated string on success, else NULL pointer on failure *@param[in] locale locale info. of current setting *@param[in] bestPattern best pattern for date and time based on locale *@param[in] time_t time_t pointer to be diaplayed. If NULL is passed, current time will be displayed */ -char *msg_common_get_formatted_date(const char* locale, char* bestPattern, void *time); - -/* - *@fn msg_common_get_current_theme_name(void); - *@brief This function is used to get current theme name. - *@return return theme name. if it is failed, it will return NULL. Caller should free the memory. - */ -char *msg_common_get_current_theme_name(void); +char *msg_common_get_formatted_date(const char *locale, char *bestPattern, void *time); /* *@fn msg_common_check_sim_existence(void); @@ -150,6 +198,53 @@ char *msg_common_get_current_theme_name(void); */ MSG_BOOL msg_common_is_sim_inserted(void); +/* + *@fn msg_common_get_font_size(int *index, int *font_size); + *@brief This function is used to get the font size. + *@param[in] index index of font size. It is used in message setting. + *@param[in] font_size font size which is used in message app. + *@return return TRUE if vconf API is success, else FALSE + */ +MSG_BOOL msg_common_get_font_size(int *index, int *font_size); + +/* + *@fn msg_common_set_font_size(void); + *@brief This function is used to set the font size. + *@return return TRUE if vconf API is success, else FALSE + */ +MSG_BOOL msg_common_set_font_size(int index); + +/* + *@fn msg_common_apply_font_size(void); + *@brief This function is used to change the font size. + *@param[in] widget_name The widget name which font size is changed. + *@param[in] obj The widget which font size is changed. + *@return return TRUE if it is success to apply font size, else FALSE + */ +MSG_BOOL msg_common_apply_font_size(const char *widget_name, Evas_Object *obj); + +/* + *@fnmsg_common_reset_font_size(const char *widget_name); + *@brief This function is used to reset the font size. + *@param[in] widget_name The widget name which font size is changed. + */ +void msg_common_reset_font_size(const char *widget_name); + +/* + *@fn msg_common_get_file_icon(const char *filepath); + *@brief This function is used to get file icon + *@param[in] filepath filepath + *@return return file icon path, else NULL + */ +const char *msg_common_get_file_icon(const char *filepath); + +/* + *@fn msg_common_get_timeformat(); + *@brief This function is used to get time format (format 12H, format 24H) + *@param[in] filepath filepath + *@return return enum msg_time_format + */ +int msg_common_get_timeformat(); #endif diff --git a/common/msg-ui-image-resource.h b/common/msg-ui-image-resource.h new file mode 100755 index 0000000..075327b --- /dev/null +++ b/common/msg-ui-image-resource.h @@ -0,0 +1,76 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef __MSG_UI_IMAGE_RESOURCE__ +#define __MSG_UI_IMAGE_RESOURCE__ + +/* viewer image resources */ +#define MSG_VIEWER_IMAGE_PATH IMGDIR + +#define MSG_VIEWER_IMAGE_ATTACH_ICON MSG_VIEWER_IMAGE_PATH"/attach_icon.png" +#define MSG_VIEWER_IMAGE_DRM_ICON MSG_VIEWER_IMAGE_PATH"/M01_icon_DRM.png" +#define MSG_VIEWER_IMAGE_DRM_SMALL_ICON MSG_VIEWER_IMAGE_PATH"/M01_icon_DRM_64x64.png" +#define MSG_VIEWER_IMAGE_UNSUPPORT_ICON MSG_VIEWER_IMAGE_PATH"/M01_icon_Unsupported.png" +#define MSG_VIEWER_IMAGE_SAVE_ICON MSG_VIEWER_IMAGE_PATH"/M01_icon_save.png" + +/* composer image resources */ +#define MSGC_UI_IMG_PATH IMGDIR + +#define MSGC_IMG_ATTACHMENT_ICON MSGC_UI_IMG_PATH"/60_myfiles_file_etc.png" +#define MSGC_IMG_ATTACHMENT_DEL_ICON MSGC_UI_IMG_PATH"/M01_btn_delete.png" + +#define MSGC_IMG_SEND_ICON MSGC_UI_IMG_PATH"/M01_btn_message_send.png" + +#define MSGC_IMG_INSERT_VOICE_ICON MSGC_UI_IMG_PATH"/M01_icon_attach_voice.png" +#define MSGC_IMG_INSERT_ETC_ICON MSGC_UI_IMG_PATH"/60_myfiles_file_etc.png" +#define MSGC_IMG_INSERT_DEL_ICON MSGC_UI_IMG_PATH"/M01_photo_btn_delete.png" +#define MSGC_SOUND_INSERT_DEL_ICON MSGC_UI_IMG_PATH"/M01_btn_delete.png" +#define MSGC_IMG_PAGE_DEL_ICON MSGC_UI_IMG_PATH"/M01_btn_delete.png" +#define MSGC_IMG_SUBJECT_DEL_ICON MSGC_UI_IMG_PATH"/M01_btn_delete.png" + +/* thread list image resources */ +#define MSG_UI_THREAD_LIST_PATH IMGDIR + +#define MSG_UI_THREAD_LIST_PUSH_ICON MSG_UI_THREAD_LIST_PATH"/M01_icon_Push.png" +#define MSG_UI_THREAD_LIST_OTA_ICON MSG_UI_THREAD_LIST_PATH"/M01_icon_OTA.png" +#define MSG_UI_THREAD_LIST_CB_ICON MSG_UI_THREAD_LIST_PATH"/M01_icon_broadcasting.png" + + +/* common image resources */ +#define MSG_COMMON_FILE_ETC_ICON IMGDIR"/myfile_icon_etc.png" + +#define MSG_COMMON_FILE_IMAGE_ICON IMGDIR"/myfile_icon_images.png" +#define MSG_COMMON_FILE_VIDEO_ICON IMGDIR"/myfile_icon_video.png" +#define MSG_COMMON_FILE_MUSIC_ICON IMGDIR"/myfile_icon_music.png" +#define MSG_COMMON_FILE_SOUND_ICON IMGDIR"/myfile_icon_music.png" +#define MSG_COMMON_FILE_PDF_ICON IMGDIR"/myfile_icon_pdf.png" +#define MSG_COMMON_FILE_DOC_ICON IMGDIR"/myfile_icon_word.png" +#define MSG_COMMON_FILE_PPT_ICON IMGDIR"/myfile_icon_ppt.png" +#define MSG_COMMON_FILE_EXCEL_ICON IMGDIR"/myfile_icon_excel.png" +#define MSG_COMMON_FILE_VOICE_ICON IMGDIR"/myfile_icon_music.png" +#define MSG_COMMON_FILE_HTML_ICON IMGDIR"/myfile_icon_html.png" +#define MSG_COMMON_FILE_FLASH_ICON IMGDIR"/myfile_icon_swf.png" +#define MSG_COMMON_FILE_TXT_ICON IMGDIR"/myfile_icon_text.png" +#define MSG_COMMON_FILE_VCONTACT_ICON IMGDIR"/myfile_icon_svg.png" +#define MSG_COMMON_FILE_VCALENDAR_ICON IMGDIR"/myfile_icon_svg.png" +#define MSG_COMMON_FILE_VNOTE_ICON IMGDIR"/myfile_icon_text.png" +#define MSG_COMMON_FILE_RSS_ICON IMGDIR"/myfile_icon_rss.png" +#define MSG_COMMON_FILE_JAVA_ICON IMGDIR"/myfile_icon_java.png" + + +#endif /*__MSG_UI_IMAGE_RESOURCE__*/ + diff --git a/common/msg-ui-util.h b/common/msg-ui-util.h index 83af85b..1f0b2c1 100755 --- a/common/msg-ui-util.h +++ b/common/msg-ui-util.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __MSG_UTIL_H__ #define __MSG_UTIL_H__ @@ -135,8 +136,6 @@ enum { } \ } while (0) -#define MSG_THEME_BLUE_HD "blue-hd" -#define MSG_THEME_WHITE_HD "white-hd" #define MSG_THREAD_UG_NAME "msg-thread-efl" #define MSG_COMPOSER_UG_NAME "msg-composer-efl" @@ -148,6 +147,11 @@ enum { #define EMAIL_COMPOSER_UG_NAME "email-composer-efl" #define CALL_SETTING_UG_NAME "setting-call-efl" +/* Other application's pkg name */ +#define VIDEO_CALL_PKG_NAME "org.tizen.vtmain" +#define VOICE_CALL_PKG_NAME "org.tizen.call" +#define VIDEO_PLAYER_PKG_NAME "org.tizen.video-player" + /* NOTIFY MESSAGE */ #define MSG_UI_NOTI_UNDER_CONTRUCT "Under construction" #define MSG_UI_NOTI_BLOCKED "Blocked" @@ -157,18 +161,29 @@ enum { #define MSG_HEADER_ICON_CANCEL IMGDIR"/01_header_icon_cancel.png" #define MSG_HEADER_ICON_DONE IMGDIR"/01_header_icon_done.png" +#define MSG_TITLE_ICON_VOICECALL IMGDIR"/M01_icon_voice_call.png" +#define MSG_TITLE_ICON_VIDEOCALL IMGDIR"/M01_icon_video_call.png" +#define MSG_TITLE_ICON_ADD_TO_CONTACT IMGDIR"/01_controllbar_icon_add_to_contact.png" +#define MSG_CONTROLBAR_ICON_VIEW_CONTACT IMGDIR"/M01_icon_view_contact.png" + /* Controlbar Icon */ #define MSG_CONTROLBAR_IMG_PATH IMGDIR"/controlbar/" #define MSG_CONTROLBAR_ICON_COMPOSE MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_compose.png" #define MSG_CONTROLBAR_ICON_CANCEL MSG_CONTROLBAR_IMG_PATH"01_controllbar_icon_close.png" -#define MSG_CONTROLBAR_ICON_EDIT MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_edit.png" #define MSG_CONTROLBAR_ICON_DELETE MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_delete.png" -#define MSG_CONTROLBAR_ICON_MOVE MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_move.png" #define MSG_CONTROLBAR_ICON_FORWARD MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_forward.png" -#define MSG_CONTROLBAR_ICON_VOICE_CALL MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_call.png" -#define MSG_CONTROLBAR_ICON_ADD_TO_CONTACT MSG_CONTROLBAR_IMG_PATH"01_controllbar_icon_add_to_contact.png" -#define MSG_CONTROLBAR_ICON_VIEW_CONTACT_DETAIL MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_info.png" +#define MSG_CONTROLBAR_ICON_MORE MSG_CONTROLBAR_IMG_PATH"M01_controlbar_icon_more.png" +#define MSG_CONTROLBAR_ICON_SETTINGS MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_settings.png" +#define MSG_CONTROLBAR_ICON_EDIT MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_edit.png" + +/* viewer */ +#define MSG_CONTROLBAR_ICON_PAUSE MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_pause.png" +#define MSG_CONTROLBAR_ICON_PLAY MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_Play.png" +#define MSG_CONTROLBAR_ICON_SAVE MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_save.png" +#define MSG_CONTROLBAR_ICON_ATTACH MSG_CONTROLBAR_IMG_PATH"M01_controlbar_icon_attach.png" +#define MSG_CONTROLBAR_ICON_REPLY MSG_CONTROLBAR_IMG_PATH"M01_controlbar_icon_reply.png" +#define MSG_CONTROLBAR_ICON_RESEND MSG_CONTROLBAR_IMG_PATH"M01_controlbar_icon_resend.png" /* setting */ #define MSG_CONTROLBAR_ICON_CREATE MSG_CONTROLBAR_IMG_PATH"01_controlbar_icon_create.png" @@ -182,11 +197,6 @@ typedef enum { } msg_time_format; enum { - MSG_UI_THEME_WHITE, - MSG_UI_THEME_BLUE_HD, -}; - -enum { CONTROLBAR_ITEM_1 = 0, CONTROLBAR_ITEM_2, CONTROLBAR_ITEM_3, diff --git a/composer/CMakeLists.txt b/composer/CMakeLists.txt index 87671e6..cde262b 100755 --- a/composer/CMakeLists.txt +++ b/composer/CMakeLists.txt @@ -7,11 +7,11 @@ SET (UGCOMPOSER ug-msg-composer-efl) # Message composer # ################################# SET(COMPOSER_SRCS - ./src/core/msg-ui-composer-core.c ./src/gadget/msg-ui-composer-gadget.c ./src/external/msg-ui-composer-external.c ./src/message/msg-ui-composer-message.c ./src/util/msg-ui-composer-util.c + ./src/ui-composer/msg-ui-composer-attachment.c ./src/ui-composer/msg-ui-composer-body.c ./src/ui-composer/msg-ui-composer-body-page.c ./src/ui-composer/msg-ui-composer-body-callback.c @@ -19,7 +19,9 @@ SET(COMPOSER_SRCS ./src/ui-composer/msg-ui-composer-recipient-callback.c ./src/ui-composer/msg-ui-composer-popup.c ./src/ui-composer/msg-ui-composer-predictsearch.c + ./src/ui-composer/msg-ui-composer-subject.c ./src/ui-composer/msg-ui-composer-common.c + ./src/ui-composer/msg-ui-composer-pageduration.c ./src/ui-composer/msg-ui-composer-main.c ./src/bubble/msg-ui-composer-bubble-main.c ./src/bubble/msg-ui-composer-bubble-list.c @@ -46,6 +48,7 @@ SET(CMAKE_LDFLAGS "-Wl,-zdefs" ) ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{PREFIX}\"") ADD_DEFINITIONS("-DDATAFS=\"$ENV{DATADIR}\"") ADD_DEFINITIONS("-DTARGET") +ADD_DEFINITIONS("-DSLP_PROF") ADD_LIBRARY(${UGCOMPOSER} SHARED ${COMPOSER_SRCS}) TARGET_LINK_LIBRARIES(${UGCOMPOSER} ${CMAKE_LDFLAGS} ${pkgs_LDFLAGS} -L${CMAKE_SOURCE_COMMON_DIR} -lmsg-common) @@ -58,21 +61,9 @@ ADD_CUSTOM_TARGET(composer.edj DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/data/composer_edc/composer_main.edc ) -ADD_DEPENDENCIES(${UGCOMPOSER} composer.edj) +ADD_DEPENDENCIES(${UGCOMPOSER} composer.edj) INSTALL(TARGETS ${UGCOMPOSER} DESTINATION ${UGDIR}) INSTALL(FILES ${CMAKE_BINARY_DIR}/composer/data/composer_edc/composer.edj DESTINATION ${EDJDIR}) -ADD_CUSTOM_TARGET(white_theme_composer.edj - COMMAND edje_cc -id - ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image/white - ${CMAKE_CURRENT_SOURCE_DIR}/data/composer_edc/white_theme_composer.edc - ${CMAKE_CURRENT_SOURCE_DIR}/data/composer_edc/white_theme_composer.edj - DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/data/composer_edc/white_theme_composer.edc - -) -ADD_DEPENDENCIES(${UGCOMPOSER} white_theme_composer.edj) - -INSTALL(FILES ${CMAKE_BINARY_DIR}/composer/data/composer_edc/white_theme_composer.edj DESTINATION ${EDJDIR}) - diff --git a/composer/data/composer_edc/composer_main.edc b/composer/data/composer_edc/composer_main.edc index ae6088c..26dae7c 100755 --- a/composer/data/composer_edc/composer_main.edc +++ b/composer/data/composer_edc/composer_main.edc @@ -3,7 +3,12 @@ #include "msg-ui-composer-data.edc" #define IMG_BODY_INPUT_FIELD "M01_search_input_field_bg.png" -#define BORDER_BODY_INPUT_FIELD 6 6 6 6 +#define IMG_BODY_ATTACH_INPUT_FIELD "M01_search_input_field_attach_bg.png" +#define IMG_BODY_BG_FIELD "M01_input_bg.png" + +#define BORDER_BODY_INPUT_FIELD 8 8 8 8 +#define BORDER_ATTACH_INPUT_FIELD 7 7 7 7 +#define BORDER_BODY_BG_FIELD 2 2 2 2 collections { @@ -12,6 +17,9 @@ collections #include "msg-ui-composer-body.edc" #include "msg-ui-composer-recipient.edc" +#include "msg-ui-composer-subject.edc" +#include "msg-ui-composer-attachment.edc" #include "msg-ui-composer-custom.edc" + #include "msg-ui-composer-bubble.edc" } diff --git a/composer/data/composer_edc/msg-ui-composer-attachment.edc b/composer/data/composer_edc/msg-ui-composer-attachment.edc new file mode 100755 index 0000000..879ab3a --- /dev/null +++ b/composer/data/composer_edc/msg-ui-composer-attachment.edc @@ -0,0 +1,264 @@ +/*********************************************************************** + * Attachment + **************************************************************************/ + +#define MSG_COMPOSER_ATTACHMENT_H 90 +#define MSG_COMPOSER_ATTACHMENT_FIELD_H 74 +#define ATTACHMENT_DELBUTTON_SIZE 48 48 +#define ATTACHMENT_IMAGE_SIZE 48 48 +#define COLOR_BODY_ATTACH_TEXT 251 85 40 255 + +group +{ + name: "composer/attachment/main"; + images { + image: IMG_BODY_ATTACH_INPUT_FIELD COMP; + } + + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 MSG_COMPOSER_ATTACHMENT_H; + fixed: 0 1; + color: 0 0 0 0; + } + } + PADDING_TOP("padding_top_16", 16); + PADDING_TOP("padding_top", 29); + PADDING_LEFT("padding_left", 16); + PADDING_RIGHT("padding_right", 16); + PADDING_RIGHT("padding_right_32", 32); + PADDING_BOTTOM("padding_bottom", 13); + part { + name: "img.body"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + min: 0 MSG_COMPOSER_ATTACHMENT_FIELD_H; + fixed: 1 0; + rel1 { + to_y: "padding_top_16"; + relative: 0.0 1.0; + } + rel2 { + to_x: "padding_right"; + relative: 0.0 1.0; + } + image { + normal: IMG_BODY_ATTACH_INPUT_FIELD; + border: BORDER_ATTACH_INPUT_FIELD; + } + } + } + part { + name: "swl.image"; + type: SWALLOW; + scale: 1; + + description { + state: "default" 0.0; + min: ATTACHMENT_IMAGE_SIZE; + max: ATTACHMENT_IMAGE_SIZE; + fixed: 1 1; + rel1 { + to_x: "padding_left"; + to_y: "padding_top"; + relative: 1.0 1.0; + } + rel2 { + to_x: "padding_left"; + to_y: "padding_bottom"; + relative: 1.0 0.0; + } + align: 0.0 0.5; + } + } + part { + name: "text.filename"; + type: TEXT; + scale: 1; + mouse_events: 0; + + description { + state: "default" 0.0; + rel1 { + to_x: "swl.image"; + to_y: "padding_top"; + relative: 1.0 1.0; + offset: 16 0; + } + rel2 { + to_x: "padding_right_32"; + to_y: "padding_bottom"; + relative: 0.0 0.0; + offset: 0 0; + } + align: 0.0 0.5; + color: COLOR_BODY_ATTACH_TEXT; + text { + font: SLP_FONT_REGULAR; + text_class: FONT_TEXT_CLASS_REGULAR; + size: 34; + align: 0.0 0.5; + text: ""; + } + } + } + } +} + +group +{ + name: "composer/attachment/item"; + images { + image: IMG_BODY_ATTACH_INPUT_FIELD COMP; + } + + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 MSG_COMPOSER_ATTACHMENT_H; + fixed: 0 1; + color: 0 0 0 0; + } + } + PADDING_TOP("padding_top_16", 16); + PADDING_TOP("padding_top", 29); + PADDING_LEFT("padding_left", 16); + PADDING_RIGHT("padding_right", 16); + PADDING_RIGHT("padding_right_32", 32); + PADDING_BOTTOM("padding_bottom", 13); + part { + name: "img.body"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + min: 0 MSG_COMPOSER_ATTACHMENT_FIELD_H; + fixed: 1 0; + rel1 { + to_y: "padding_top_16"; + relative: 0.0 1.0; + } + rel2 { + to_x: "padding_right"; + relative: 0.0 1.0; + } + image { + normal: IMG_BODY_ATTACH_INPUT_FIELD; + border: BORDER_ATTACH_INPUT_FIELD; + } + } + } + part { + name: "swl.image"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: ATTACHMENT_IMAGE_SIZE; + max: ATTACHMENT_IMAGE_SIZE; + fixed: 1 1; + rel1 { + to_x: "padding_left"; + to_y: "padding_top"; + relative: 1.0 1.0; + } + rel2 { + to_x: "padding_left"; + to_y: "padding_bottom"; + relative: 1.0 0.0; + } + align: 0.0 0.5; + } + } + part { + name: "text.filename"; + type: TEXT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1 { + to_x: "swl.image"; + to_y: "padding_top"; + relative: 1.0 1.0; + offset: 16 0; + } + rel2 { + to_x: "swl.delete_btn"; + to_y: "padding_bottom"; + relative: 0.0 0.0; + offset: -16 0; + } + align: 0.0 0.5; + color: COLOR_BODY_ATTACH_TEXT; + text { + font: SLP_FONT_REGULAR; + text_class: FONT_TEXT_CLASS_REGULAR; + size: 32; + align: 0.0 0.5; + text: ""; + } + } + } + part { + name: "rect.delete_btn"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: ATTACHMENT_DELBUTTON_SIZE; + max: ATTACHMENT_DELBUTTON_SIZE; + fixed: 1 1; + rel1 { + to_x: "padding_right_32"; + to_y: "padding_top"; + relative: 0.0 1.0; + } + rel2 { + to_x: "padding_right_32"; + to_y: "padding_bottom"; + relative: 0.0 0.0; + } + align: 1.0 0.0; + color: 155 55 155 255; + visible: 0; + } + } + part { + name: "swl.delete_btn"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: ATTACHMENT_DELBUTTON_SIZE; + max: ATTACHMENT_DELBUTTON_SIZE; + fixed: 1 1; + rel1 { + to_x: "padding_right_32"; + to_y: "padding_top"; + relative: 0.0 1.0; + } + rel2 { + to_x: "padding_right_32"; + to_y: "padding_top"; + relative: 0.0 1.0; + } + align: 1.0 0.0; + } + } + } +} + diff --git a/composer/data/composer_edc/msg-ui-composer-body.edc b/composer/data/composer_edc/msg-ui-composer-body.edc index 6bc8e59..bfb2864 100755 --- a/composer/data/composer_edc/msg-ui-composer-body.edc +++ b/composer/data/composer_edc/msg-ui-composer-body.edc @@ -1,286 +1,635 @@ -#define MSGC_BODY_PAGE_MIN_H 90 -#define MSGC_BODY_MAIN_MIN_H (MSGC_BODY_PAGE_MIN_H + 16 + 16) +#define MSGC_BODY_PAGE_IMAGE_H 74 +#define MSGC_BODY_PAGE_MIN_H 74 +#define MSGC_BODY_MAIN_MIN_H (MSGC_BODY_PAGE_MIN_H + 20 + 20) +#define BODY_ADDBUTTON_SIZE 64 64 #define BODY_SENDBUTTON_SIZE 108 74 -#define BODYPAGE_DELBUTTON_SIZE 44 36 -#define MSGC_BODY_PAGE_IMAGE_H 74 +#define BODYPAGE_DELBUTTON_SIZE 48 48 + +#define BODY_CHAR_COUNT_TEXT_SIZE 24 + +#define COLOR_BODY_MEDIA_TEXT 251 85 40 255 +#define BODY_MEDIA_TEXT_SIZE 34 group { - name: "composer/body/page"; - images - { + name: "composer/body/media_sound"; + images { image: IMG_BODY_INPUT_FIELD COMP; } - - parts - { - part - { + parts { + part { name: "rect"; type: RECT; scale: 1; - mouse_events: 0; - description - { + mouse_events: 0; + description { state: "default" 0.0; - min: 0 MSGC_BODY_PAGE_MIN_H; + min: 0 76; + fixed: 0 1; color: 0 0 0 0; + align: 0.5 0.5; } } + PADDING_TOP(padding_top_1, 1); + PADDING_TOP(padding_top, 6); + PADDING_LEFT(padding_left, 16); + PADDING_RIGHT(padding_right, 16); + PADDING_BOTTOM(padding_bottom, 21); + PADDING_BOTTOM(padding_bottom_15, 15); + part { + name: "rect.thumbnail"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1{to: "swl.thumbnail"; relative: 0.0 0.0;} + rel2{to: "swl.thumbnail"; relative: 1.0 1.0;} + align: 0.5 0.5; + color: 0 0 0 0; + } + } + part { + name: "bg_image"; + scale: 1; + mouse_events: 0; - PADDING_TOP("padding_top",16); - PADDING_LEFT("padding_left",0); - PADDING_RIGHT("padding_right",16); - PADDING_BOTTOM("padding_bottom",0); - - part - { - name: "img.body"; - type: IMAGE; + description { + state: "default" 0.0; + rel1{ to_x: "padding_left"; to_y: "padding_top_1"; relative: 1.0 1.0;} + rel2{ to_x: "padding_right"; to_y: "padding_bottom_15"; relative: 0.0 0.0;} + align: 0.5 0.5; + image { + normal: IMG_BODY_ATTACH_INPUT_FIELD; + border: BORDER_ATTACH_INPUT_FIELD; + } + } + } + part { + name: "swl.thumbnail"; + type: SWALLOW; scale: 1; - description - { + + description { state: "default" 0.0; - min: 0 MSGC_BODY_PAGE_IMAGE_H; + min: 48 48; fixed: 1 0; - rel1 - { + rel1 { to_x: "padding_left"; to_y: "padding_top"; relative: 1.0 1.0; } - rel2 - { + rel2 { + to_x: "padding_left"; + to_y: "padding_bottom"; + relative: 1.0 0.0; + } + align: 0.0 0.0; + } + } + part { + name: "text.filename"; + type: TEXT; + scale: 1; + mouse_events: 0; + + description { + state: "default" 0.0; + rel1 { + to_x: "swl.thumbnail"; + to_y: "padding_top"; + relative: 1.0 1.0; + offset: 16 0; + } + rel2 { + to_x: "swl.del_button"; + to_y: "padding_bottom"; + relative: 0.0 0.0; + offset: -16 0; + } + align: 0.0 0.5; + color: COLOR_BODY_MEDIA_TEXT; + text { + font: SLP_FONT_REGULAR; + text_class: FONT_TEXT_CLASS_REGULAR; + size: BODY_MEDIA_TEXT_SIZE; + align: 0.0 0.5; + text: ""; + } + } + } + part { + name: "swl.del_button"; + type: SWALLOW; + scale: 1; + + description { + state: "default" 0.0; + min: BODYPAGE_DELBUTTON_SIZE; + max: BODYPAGE_DELBUTTON_SIZE; + fixed: 1 1; + + rel1 { + to_x: "padding_right"; + to_y: "padding_top"; + relative: 0.0 1.0; + } + rel2 { to_x: "padding_right"; to_y: "padding_bottom"; relative: 0.0 0.0; } - image - { + align: 1.0 0.0; + } + } + } +} + +group +{ + name: "composer/body/media_default"; + images { + image: IMG_BODY_INPUT_FIELD COMP; + } + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 100; + fixed: 1 1; + color: 0 0 0 0; + align: 0.5 0.5; + } + } + part { + name: "rect.thumbnail"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 132 132; + max: 132 132; + rel1{ relative: 0.0 0.0; } + rel2{ relative: 0.0 1.0; } + align: 0.0 0.0; + } + } + part { + name: "bg_image"; + scale: 1; + mouse_events: 0; + + description { + state: "default" 0.0; + rel1{ to:"rect.thumbnail";relative: 0.0 0.0; } + rel2{ to:"rect.thumbnail";relative: 1.0 1.0; } + align: 0.5 0.5; + image { normal: IMG_BODY_INPUT_FIELD; border: BORDER_BODY_INPUT_FIELD; - } + } } } + part { + name: "swl.thumbnail"; + type: SWALLOW; + scale: 1; - part - { + description { + state: "default" 0.0; + fixed: 0 0; + rel1 { + to: "rect.thumbnail"; + relative: 0.0 0.0; + } + rel2 { + to: "rect.thumbnail"; + relative: 1.0 1.0; + } + align: 0.0 0.0; + } + } + part { + name: "swl.del_button"; + type: SWALLOW; + scale: 1; + + description { + state: "default" 0.0; + min: BODYPAGE_DELBUTTON_SIZE; + max: BODYPAGE_DELBUTTON_SIZE; + fixed: 1 1; + rel1 { + to: "rect.thumbnail"; + relative: 1.0 0.0; + } + rel2 { + to: "rect.thumbnail"; + relative: 1.0 0.0; + } + align: 1.0 0.0; + } + } + } +} + +group { + name: "composer/body/page"; + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 MSGC_BODY_PAGE_MIN_H; + color: 0 0 0 0; + } + } + PADDING_TOP("padding_top", 7); + PADDING_TOP("padding_top_13", 13); + PADDING_LEFT("padding_left", 16); + PADDING_RIGHT("padding_right", 16); + PADDING_BOTTOM("padding_bottom", 7); + part { name: "swl.page"; type: SWALLOW; scale:1; - description - { + description { //hide delete button state: "default" 0.0; min: 0 0; fixed: 1 0; - rel1 - { - to:"img.body"; - relative: 0.0 0.0; - offset: 16 5; + rel1 { to_x: "padding_left"; to_y: "padding_top"; relative: 1.0 1.0; } + rel2 { to_x: "padding_right"; to_y: "padding_bottom"; relative: 0.0 0.0; } + align: 0.5 0.5; + } + description { //show delete button + state: "default" 0.1; + min: 0 0; + fixed: 1 0; + rel1 { to_x: "padding_left"; to_y: "padding_top"; relative: 1.0 1.0; } + rel2 { to_x: "rect.del_button"; to_y: "padding_bottom"; relative: 0.0 0.0; offset: -16 0; } + align: 0.5 0.5; + } + } + part { + name: "rect.del_button"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: BODYPAGE_DELBUTTON_SIZE; + max: BODYPAGE_DELBUTTON_SIZE; + fixed: 1 1; + visible: 0; + rel1 { + to_x: "padding_right"; + to_y: "padding_top_13"; + relative: 0.0 1.0; } - rel2 - { - to:"img.body"; - relative: 1.0 1.0; - offset: -16 -5; + rel2 { + to_x: "padding_right"; + to_y: "padding_top_13"; + relative: 0.0 1.0; } - align: 0.5 0.5; + align: 1.0 0.0; } } - part - { + part { name: "swl.del_button"; type: SWALLOW; scale: 1; - description - { - state: "default" 0.0; + description { + state: "default" 0.0; //hide min: BODYPAGE_DELBUTTON_SIZE; max: BODYPAGE_DELBUTTON_SIZE; fixed: 1 1; - rel1 - { + visible: 0; + rel1 { to_x: "padding_right"; - to_y: "padding_top"; - relative: 1.0 0.0; + to_y: "padding_top_13"; + relative: 0.0 1.0; } - rel2 - { + rel2 { to_x: "padding_right"; - to_y: "padding_top"; - relative: 1.0 0.0; + to_y: "padding_top_13"; + relative: 0.0 1.0; + } + align: 1.0 0.0; + } + description { + state: "default" 0.1; //show + min: BODYPAGE_DELBUTTON_SIZE; + max: BODYPAGE_DELBUTTON_SIZE; + fixed: 1 1; + visible: 1; + rel1 { + to_x: "padding_right"; + to_y: "padding_top_13"; + relative: 0.0 1.0; + } + rel2 { + to_x: "padding_right"; + to_y: "padding_top_13"; + relative: 0.0 1.0; } align: 1.0 0.0; } } } + programs + { + program { + name: "hide.delete"; + signal: "hide.delete"; + source: "*"; + action: STATE_SET "default" 0.0; + target: "swl.page"; + target: "swl.del_button"; + } + program { + name: "show.delete"; + signal: "show.delete"; + source: "*"; + action: STATE_SET "default" 0.1; + target: "swl.page"; + target: "swl.del_button"; + } + } } -group -{ - name: "composer/body/main"; +/************************************************************************************************/ - parts - { - part - { +group { + name: "composer/body/page_main"; + images { + image: IMG_BODY_INPUT_FIELD COMP; + } + + parts { + part { name: "rect"; type: RECT; scale: 1; mouse_events: 0; - description - { + description { state: "default" 0.0; - min: 0 MSGC_BODY_MAIN_MIN_H; - rel1{relative: 0.0 0.0;} - rel2{relative: 1.0 1.0;} + min: 0 MSGC_BODY_PAGE_MIN_H; color: 0 0 0 0; } } + PADDING_TOP("padding_top_16", 16); + PADDING_RIGHT("padding_right", 16); + part { + name: "img.body"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + min: 0 MSGC_BODY_PAGE_IMAGE_H; + fixed: 0 1; + visible: 1; + rel1 { to_y: "padding_top_16"; relative: 0.0 1.0; } + rel2 { to_x: "padding_right"; relative: 0.0 1.0; } + image { + normal: IMG_BODY_INPUT_FIELD; + border: BORDER_BODY_INPUT_FIELD; + } + } + } + part { + name: "swl.page.main"; + type: SWALLOW; + scale:1; + description { + state: "default" 0.0; + min: 0 MSGC_BODY_PAGE_MIN_H; + fixed: 1 0; + rel1 { to_y: "padding_top_16"; relative: 0.0 1.0; } + rel2 { to_x: "padding_right"; relative: 0.0 1.0; } + align: 0.5 0.5; + } + } + } +} - PADDING_TOP("padding_top",16); - PADDING_TOP("padding_top_32",32); - PADDING_LEFT("padding_left_16",16); - PADDING_RIGHT("padding_right_16",16); - - PADDING_BOTTOM("padding_bottom_16",16); - PADDING_BOTTOM("padding_bottom_21",21); - part - { +group { + name: "composer/body/main"; + images { + image: IMG_BODY_BG_FIELD COMP; + } + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 MSGC_BODY_MAIN_MIN_H; + rel1{ relative: 0.0 0.0; } + rel2{ relative: 1.0 1.0; } + } + } + part { + name: "img.body.bg"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + min: 0 MSGC_BODY_MAIN_MIN_H; + fixed: 0 1; + visible: 1; + rel1 { relative: 0.0 0.0; } + rel2 { relative: 1.0 1.0; } + image { + normal: IMG_BODY_BG_FIELD; + border: BORDER_BODY_BG_FIELD; + } + } + } + PADDING_TOP("padding_top", 4); + PADDING_LEFT("padding_left", 16); + PADDING_RIGHT("padding_right", 16); + PADDING_BOTTOM("padding_bottom", 20); + PADDING_BOTTOM("padding_bottom_25", 25); + part { + name: "rect_top_bg"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 1; + fixed: 0 1; + visible: 1; + rel1{ relative: 0.0 0.0; } + rel2{ relative: 1.0 0.0; } + align: 0.0 0.0; + color: 57 60 65 255; + } + } + part { name: "rb_rect"; type: RECT; scale: 1; mouse_events: 0; - description - { + description { state: "default" 0.0; min: 0 0; max: 9999 110; fixed: 0 1; visible: 1; - rel1 - { + rel1 { to_x: "body.swl.send_button"; - to_y: "padding_top_32"; + to_y: "padding_top"; relative: 0.0 1.0; offset: 0 2; } - rel2 - { + rel2 { to_x: "body.swl.send_button"; - to_y: "padding_bottom_16"; + to_y: "padding_bottom"; relative: 1.0 0.0; } align: 1.0 1.0; - color: 255 255 255 255; } } - - part - { + part { + name: "rect.add_bt_area"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: BODY_ADDBUTTON_SIZE; + max: BODY_ADDBUTTON_SIZE; + fixed: 1 1; + rel1 { + to_x: "padding_left"; + to_y: "padding_bottom_25"; + relative: 1.0 0.0; + } + rel2 { + to_x: "padding_left"; + to_y: "padding_bottom_25"; + relative: 1.0 0.0; + } + align: 0.0 1.0; + color: 0 0 0 0; + } + } + part { + name: "rect.tap_area_add_main"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 16 0; + fixed: 1 0; + visible: 0; + rel1 { + to_x: "rect.add_bt_area"; + relative: 1.0 0.0; + } + rel2 { + to_x: "rect.add_bt_area"; + relative: 1.0 1.0; + } + align: 0.0 0.0; + } + } + part { + name: "body.swl.add_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + rel1 { + to: "rect.add_bt_area"; + relative: 0.0 0.0; + } + rel2 { + to: "rect.add_bt_area"; + relative: 1.0 1.0; + } + align: 0.5 0.5; + } + } + part { name: "body.swl.main"; type: SWALLOW; scale: 1; - description - { + description { state: "default" 0.0; min: 0 0; fixed: 0 0; - rel1 - { - to_x: "padding_left_16"; + rel1 { + to_x: "rect.tap_area_add_main"; to_y: "padding_top"; relative: 1.0 1.0; offset: 0 0; } - rel2 - { + rel2 { to_x: "body.swl.send_button"; - to_y: "padding_bottom_16"; + to_y: "padding_bottom"; relative: 0.0 0.0; } align: 0.0 1.0; } } - - part - { + part { name: "text.char_count"; type: TEXT; scale: 1; mouse_events: 0; clip_to: "rb_rect"; - description - { + description { state: "default" 0.0; - rel1 - { + rel1 { to_x: "body.swl.send_button"; to_y: "rb_rect"; relative: 0.0 0.0; } - rel2 - { - to_y: "body.swl.send_button"; + rel2 { + to: "body.swl.send_button"; relative: 1.0 0.0; } align: 0.5 0.5; - color: 255 255 255 255; - text - { - font: SLP_FONT_MEDIUM - size: 20; + color: 249 249 249 255; + text { + font: SLP_FONT_REGULAR; + text_class: FONT_TEXT_CLASS_REGULAR; + size: BODY_CHAR_COUNT_TEXT_SIZE; align: 0.5 0.5; text: ""; } } } - - part - { + part { name: "body.swl.send_button"; type: SWALLOW; scale: 1; - description - { + description { state: "default" 0.0; min: BODY_SENDBUTTON_SIZE; max: BODY_SENDBUTTON_SIZE; fixed: 1 1; - rel1 - { - to_x: "padding_right_16"; - to_y: "padding_bottom_16"; - relative: 1.0 0.0; - offset: 0 0; - } - rel2 - { - to_x: "padding_right_16"; - to_y: "padding_bottom_16"; - relative: 1.0 0.0; - offset: 0 0; - } - align: 0.0 1.0; - } - description - { - state: "contract" 0.0; - inherit: "default" 0.0; - - rel1 - { - to_x:"padding_right_16"; - to_y:"padding_bottom_16"; + rel1 { + to_x: "padding_right"; + to_y: "padding_bottom"; relative: 0.0 0.0; offset: 0 0; } - rel2 - { - to_x: "padding_right_16"; - to_y: "padding_bottom_16"; + rel2 { + to_x: "padding_right"; + to_y: "padding_bottom"; relative: 0.0 0.0; offset: 0 0; } @@ -288,24 +637,4 @@ group } } } - - programs - { - program - { - name: "body_contract"; - signal: "body_contract"; - source: "*"; - action: STATE_SET "contract" 0.0; - target: "body.swl.send_button"; - } - program - { - name: "body_expand"; - signal: "body_expand"; - source: "*"; - action: STATE_SET "default" 0.0; - target: "body.swl.send_button"; - } - } } diff --git a/composer/data/composer_edc/msg-ui-composer-bubble.edc b/composer/data/composer_edc/msg-ui-composer-bubble.edc index ff158df..931afe0 100755 --- a/composer/data/composer_edc/msg-ui-composer-bubble.edc +++ b/composer/data/composer_edc/msg-ui-composer-bubble.edc @@ -1,6 +1,3 @@ -#define SLP_FONT_BOLD "SLP:style=Bold";
-#define SLP_FONT_MEDIUM "SLP:style=Medium";
-#define SLP_FONT_ROMAN "SLP:style=Roman";
group
{
@@ -62,6 +59,185 @@ group group {
+ name: "composer/content/bubble/media";
+
+ parts {
+ part{
+ name: "rect";
+ type: RECT;
+ scale: 1;
+ mouse_events : 0;
+ description
+ {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "bubble.media.padding_bottom";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ fixed: 1 1;
+ min: 0 1;
+ max: 0 1;
+ rel1{relative: 0.0 1.0;}
+ rel2{relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bubble.media.padding_right";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ color: 0 0 0 0;
+ fixed: 1 1;
+ min: 1 0;
+ max: 1 0;
+ rel1{relative: 1.0 0.0;}
+ rel2{relative: 1.0 1.0;}
+ }
+ }
+ part {
+ name: "bubble.swallow.media";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 0;
+ align: 0.0 0.0;
+ rel1{to: "rect"; relative: 0.0 0.0;}
+ rel2{to: "rect"; relative: 1.0 0.0;}
+ }
+ }
+
+ part {
+ name: "bubble.swallow.more";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 0;
+ align: 1.0 0.0;
+ rel1{
+ to_x: "bubble.media.padding_right";
+ to_y: "bubble.swallow.media";
+ relative: 0.0 1.0;
+ }
+ rel2{
+ to_x: "bubble.media.padding_right";
+ to_y: "bubble.media.padding_bottom";
+ relative: 0.0 0.0;
+ }
+ }
+ }
+ }
+}
+
+group {
+ name: "composer/content/bubble/date_line";
+
+ images {
+ image: "00_MessageBubble_date_bg.png" COMP;
+ }
+
+ parts {
+ part {
+ name: "top_padding";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 5;
+ color: 0 0 0 0;
+ rel1 {relative: 0.0 0.0;}
+ rel2 {relative: 1.0 0.0;}
+ align: 0.0 0.0;
+ }
+ }
+ part {
+ name: "base";
+ type: RECT;
+ scale: 1;
+ repeat_events: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 38;
+ color: 0 0 0 0;
+ rel1 {to_y: "top_padding"; relative: 0.0 1.0;}
+ rel2 {to_y: "bottom_padding"; relative: 1.0 0.0;}
+ align: 0.0 0.5;
+ }
+ }
+ part {
+ name: "bottom_padding";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ min: 0 20;
+ color: 0 0 0 0;
+ rel1 { relative: 0.0 1.0;}
+ rel2 { relative: 1.0 1.0;}
+ align: 0.0 1.0;
+ }
+ }
+ part {
+ name: "date_line_left";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 1;
+ align: 0.0 0.5;
+ rel1 {relative: 0.0 0.45;}
+ rel2 {relative: 0.38 0.55;}
+ image {
+ normal: "00_MessageBubble_date_bg.png";
+ }
+ }
+ }
+ part {
+ name: "elm.text.date";
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.0 0.5;
+ min: 0 38;
+ fixed: 0 1;
+ text {
+ font: "SLP:style=Roman";
+ size: 32;
+ align: 0.5 0.5;
+ }
+ color: 128 128 128 255;
+ rel1 { to_x : "date_line_left"; relative: 1.0 0.0;}
+ rel2 { to_x : "date_line_right"; relative: 0.0 1.0;}
+ }
+ }
+
+ part {
+ name: "date_line_right";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 1;
+ align: 1.0 0.5;
+ rel1 {relative: 0.62 0.45;}
+ rel2 {relative: 1.0 0.55;}
+ image {
+ normal: "00_MessageBubble_date_bg.png";
+ }
+ }
+ }
+ }
+}
+
+group {
name: "msg_2button_popup";
#define BUTTON_WIDTH 304.0
#define BUTTON_HEIGHT 46.0
diff --git a/composer/data/composer_edc/msg-ui-composer-custom.edc b/composer/data/composer_edc/msg-ui-composer-custom.edc index 0582a41..b632537 100755 --- a/composer/data/composer_edc/msg-ui-composer-custom.edc +++ b/composer/data/composer_edc/msg-ui-composer-custom.edc @@ -1,180 +1,132 @@ -#define MSGC_DIALOGUE_H 70 -#define MSGC_DIALOGUE_ICON_W 64 -#define MSGC_DIALOGUE_PADDING_W 16 -#define MSGC_DIALOGUE_ENTRY_W 20 -#define MSGC_DIALOGUE_TEXT_W 180 -#define MSGC_DIALOGUE_TEXT_COLOR 249 249 249 255 -#define MSGC_DIALOGUE_TEXT_SIZE 44 +#define MSGC_POPUP_INFO_TXT_COLOR_INC "#000000" +#define MSGC_POPUP_INFO_TXT_SIZE 40 +#define MSGC_POPUP_ENTRY_FIELD_H 74 -group -{ - name: "composer/dialogue/custom"; - - parts - { - part - { - name: "rect"; - type: RECT; - scale: 1; - mouse_events: 0; - description - { - state: "default" 0.0; - min: 0 MSGC_DIALOGUE_H; - fixed: 1 1; - color: 0 0 0 0; - } +group { + name: "composer/popup/entryview"; + styles { + style { + name: "popup_desc_style"; + base: "font=SLP:style=Roman font_size="MSGC_POPUP_INFO_TXT_SIZE" align=center color="MSGC_POPUP_INFO_TXT_COLOR_INC" wrap=mixed text_class=slp_roman"; + tag: "br" "\n"; + tag: "ps" "ps"; + tag: "whitecolor" "+ color=#ffffff"; + tag: "tab" "\t"; } - - PADDING_RIGHT("padding_right",MSGC_DIALOGUE_PADDING_W); - - part - { - name: "padding.text.left"; + } + parts { + PADDING_TOP("padding_top", 15); + PADDING_LEFT("padding_left", 16); + PADDING_RIGHT("padding_right", 16); + PADDING_BOTTOM("padding_bottom", 22); + part { + name: "rect.text"; type: RECT; scale: 1; description { state: "default" 0.0; - min: MSGC_DIALOGUE_PADDING_W 0; - fixed: 1 0; - rel1{ - relative: 0.0 0.0; - to_x: "elm.text"; + min: 0 120; + fixed: 0 1; + rel1 { + to_x: "padding_left"; + to_y: "padding_top"; + relative: 1.0 1.0; } - rel2{ + rel2 { + to_x: "padding_right"; + to_y: "padding_top"; relative: 0.0 1.0; - to_x: "elm.text"; } - - align: 1.0 0.0; + align: 0.0 0.0; visible: 0; } } - - part - { - name: "padding.entry.left"; - type: RECT; + part { + name: "elm.text"; + type: TEXTBLOCK; scale: 1; description { state: "default" 0.0; - min: MSGC_DIALOGUE_PADDING_W 0; - fixed: 1 0; - rel1{ - relative: 0.0 0.0; - to_x: "dialogue.swl.entry"; - } - rel2{ - relative: 0.0 1.0; - to_x: "dialogue.swl.entry"; + fixed: 1 1; + rel1 { to: "rect.text"; relative: 0.0 0.0; offset: 50 0;} + rel2 { to: "rect.text"; relative: 1.0 1.0; offset: -50 0;} + text { + style: "popup_desc_style"; + min: 0 0; + max: 0 1; + align: 0.5 0.0; } - align: 1.0 0.0; - visible: 0; } } - part { - name: "elm.text"; - type: TEXT; + name: "padding.text.middle"; + type: RECT; scale: 1; - mouse_events: 0; description { state: "default" 0.0; - min: MSGC_DIALOGUE_TEXT_W 0; - fixed: 1 0; - rel1{ - to_x: "padding_right"; - relative: 0.0 0.0; - } - rel2{ - to_x: "padding_right"; + min: 0 15; + fixed: 0 1; + rel1 { + to: "rect.text"; relative: 0.0 1.0; } - align: 1.0 0.0; - color: MSGC_DIALOGUE_TEXT_COLOR; - text { - font: "SLP:style=Roman"; - size: MSGC_DIALOGUE_TEXT_SIZE; - min: 0 1; - align: 0.0 0.5; - text: ""; + rel2 { + to: "rect.text"; + relative: 1.0 1.0; } + align: 0.5 0.0; + visible: 0; } } - part { - name: "dialogue.swl.entry"; - type: SWALLOW; + name: "img.body"; + type: IMAGE; scale: 1; description { state: "default" 0.0; - min: MSGC_DIALOGUE_ENTRY_W 0; + min: 0 MSGC_POPUP_ENTRY_FIELD_H; fixed: 1 0; rel1 { - to_x: "padding.text.left"; + to_x: "padding_left"; + to_y: "padding.text.middle"; + relative: 1.0 1.0; + } + rel2 { + to_x: "padding_right"; + to_y: "padding_bottom"; relative: 0.0 0.0; } - rel2 + image { - to_x: "padding.text.left"; - relative: 0.0 1.0; + normal: IMG_BODY_INPUT_FIELD; + border: BORDER_BODY_INPUT_FIELD; } - align: 1.0 0.5; } } - } -} - -#define MSGC_DATEFIELD_TXT_COLOR 173 170 165 255 -#define MSGC_DATEFIELD_TXT_SIZE 24 -#define MSGC_DATEFIELD_TEXT_H 60 - -group { - name: "composer/datefield"; - parts { - PADDING_LEFT("padding_left",16); - part { - name: "text"; - type: TEXT; - scale: 1; + part{ + name:"swl.entry"; + type: SWALLOW; + scale : 1; description { state: "default" 0.0; - min: 0 MSGC_DATEFIELD_TEXT_H; - fixed: 0 1; - align: 0.5 0.0; + min: 0 0; + align: 0.5 1.0; + fixed: 1 0; rel1 { - to :"padding_left"; - relative: 1 0; + to: "img.body"; + relative: 0.0 0.0; + offset: 10 7; } rel2 { - relative: 1 0; - } - color: MSGC_DATEFIELD_TXT_COLOR; - text { - font: "SLP:style=Roman"; - size: MSGC_DATEFIELD_TXT_SIZE; - min: 1 0; - align: 0.0 0.0; - text: "Date & Time "; + to: "img.body"; + relative: 1.0 1.0; + offset: -10 -7; } } } - - part { - name: "picker"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - align: 0.5 0.0; - fixed: 1 1; - rel1 { relative: 0 1; to: "text"; } - rel2 { relative: 1 1; to: "text"; } - } - } } } + diff --git a/composer/data/composer_edc/msg-ui-composer-data.edc b/composer/data/composer_edc/msg-ui-composer-data.edc index ed22c7e..6efa248 100755 --- a/composer/data/composer_edc/msg-ui-composer-data.edc +++ b/composer/data/composer_edc/msg-ui-composer-data.edc @@ -1,11 +1,17 @@ #define IMAGE_PATH ""
#define PREDICT_LIST_H 80
-#define SLP_FONT_BOLD "SLP:style=Bold";
-#define SLP_FONT_MEDIUM "SLP:style=Medium";
-#define SLP_FONT_ROMAN "SLP:style=Roman";
+#define SLP_FONT_BOLD "SLP:style=Bold"
+#define SLP_FONT_MEDIUM "SLP:style=Medium"
+#define SLP_FONT_ROMAN "SLP:style=Roman"
+#define FONT_TEXT_CLASS_BOLD "slp_bold"
+#define FONT_TEXT_CLASS_MEDIUM "slp_medium"
+#define FONT_TEXT_CLASS_ROMAN "slp_roman"
+#define FONT_TEXT_CLASS_LABEL "label"
-#define PADDING_LEFT( param_padding_name ,param_padding_size ) \
+#define VISIBLE 0
+
+#define PADDING_LEFT(param_padding_name, param_padding_size) \
part \
{ \
name: param_padding_name; \
@@ -17,14 +23,14 @@ state: "default" 0.0; \
min: param_padding_size 0; \
fixed: 1 0; \
- visible: 0; \
+ visible: VISIBLE; \
rel1{relative: 0.0 0.0;} \
rel2{relative: 0.0 1.0;} \
align: 0.0 0.0; \
- color: 0 55 0 55; \
- } \
-}
-#define PADDING_TOP( param_padding_name ,param_padding_size ) \
+ color: 100 255 0 0; \
+ } \
+ }
+#define PADDING_TOP(param_padding_name, param_padding_size) \
part \
{ \
name: param_padding_name; \
@@ -36,14 +42,14 @@ state: "default" 0.0; \
min: 0 param_padding_size ; \
fixed: 0 1; \
- visible: 0; \
+ visible: VISIBLE; \
rel1{relative: 0.0 0.0;} \
rel2{relative: 1.0 0.0;} \
align: 0.0 0.0; \
- color: 0 55 0 55; \
- } \
-}
-#define PADDING_BOTTOM( param_padding_name ,param_padding_size ) \
+ color: 0 0 0 0; \
+ } \
+ }
+#define PADDING_BOTTOM(param_padding_name, param_padding_size) \
part \
{ \
name: param_padding_name; \
@@ -55,16 +61,15 @@ state: "default" 0.0; \
min: 0 param_padding_size; \
fixed: 0 1; \
- visible: 0; \
+ visible: VISIBLE; \
rel1{relative: 0.0 1.0;} \
rel2{relative: 1.0 1.0;} \
align: 0.0 1.0; \
- color: 0 55 0 55; \
+ color: 0 0 0 0; \
} \
}
-
-#define PADDING_RIGHT( param_padding_name ,param_padding_size ) \
+#define PADDING_RIGHT(param_padding_name, param_padding_size) \
part \
{ \
name: param_padding_name; \
@@ -76,11 +81,11 @@ state: "default" 0.0; \
min: param_padding_size 0; \
fixed: 1 0; \
- visible: 0; \
+ visible: VISIBLE; \
rel1{relative: 1.0 0.0;} \
rel2{relative: 1.0 1.0;} \
align: 1.0 0.0; \
- color: 0 55 0 55; \
+ color: 0 0 0 0; \
} \
}
#define PART_DISCLIP \
diff --git a/composer/data/composer_edc/msg-ui-composer-main.edc b/composer/data/composer_edc/msg-ui-composer-main.edc index ef1e3c6..c7ce727 100755 --- a/composer/data/composer_edc/msg-ui-composer-main.edc +++ b/composer/data/composer_edc/msg-ui-composer-main.edc @@ -6,7 +6,7 @@ group name: "rect"; type: RECT; scale: 1; - mouse_events : 0; + mouse_events: 0; description { state: "default" 0.0; @@ -14,27 +14,27 @@ group } } part{ - name : "swl.sel_all"; - type : SWALLOW; - scale : 1; + name: "swl.sel_all"; + type: SWALLOW; + scale: 1; description{ state: "default" 0.0; - fixed : 1 1; - min : 0 0; - align : 0.0 0.0; + fixed: 1 1; + min: 0 0; + align: 0.0 0.0; rel1 {to: "rect"; relative:0.0 0.0;} rel2 {to: "rect"; relative:1.0 0.0;} } } part{ name: "swl.recipient"; - type : SWALLOW; - scale : 1; + type: SWALLOW; + scale: 1; description{ state: "default" 0.0; - fixed : 1 1; - min : 0 0; - align : 0.0 0.0; + fixed: 1 1; + min: 0 0; + align: 0.0 0.0; rel1 {to: "rect"; relative:0.0 0.0;} rel2 {to: "rect"; relative:1.0 0.0;} } @@ -47,17 +47,17 @@ group description { state: "default" 0.0; - fixed :1 1; - min : 0 1; + fixed: 1 1; + min: 0 1; align: 0.0 1.0; - rel1{to: "swl.recipient"; relative: 0.0 1.0;} + rel1{to: "rect"; relative: 0.0 1.0;} rel2{to: "rect"; relative: 1.0 1.0;} } description { state: "default" 0.1; - fixed :1 1; - min : 0 1; + fixed: 1 1; + min: 0 1; align: 0.0 1.0; rel1{to: "rect"; relative: 0.0 1.0;} rel2{to: "rect"; relative: 1.0 1.0;} @@ -74,22 +74,46 @@ group min: 0 1; rel1 { - to: "swl.sel_all"; + to: "swl.sel_all"; relative: 0.0 1.0; offset: 0 20; } rel2 { - to: "swl.composer.body"; + to: "swl.composer.body"; relative: 1.0 0.0; } } } + part { + name: "swl.bubble.titlemenu"; + type: SWALLOW; + scale: 1; + description + { + state: "default" 0.0; + fixed: 0 1; + min: 0 0; + rel1 { to: "swl.sel_all"; relative: 0.0 1.0; } + rel2 { to: "swl.sel_all"; relative: 1.0 1.0; } + align: 0.0 0.0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + fixed: 0 0; + } description { + state: "hide" 0.0; + inherit: "default" 0.0; + min: 0 0; + max: 0 0; + } + } part { name: "swl.bg_predictsearch"; type: SWALLOW; - scale:1; + scale: 1; repeat_events: 0; description { state: "default" 0.0; @@ -109,7 +133,7 @@ group { name: "swl.predictsearch"; type: SWALLOW; - scale:1; + scale: 1; repeat_events: 0; description { state: "default" 0.0; @@ -128,7 +152,7 @@ group programs { program { - name: "hide.predictsearch"; + name: "hide.predictsearch"; signal: "hide.predictsearch"; source: "*"; action: STATE_SET "hide" 0.0; @@ -137,7 +161,7 @@ group } program { - name: "show.predictsearch"; + name: "show.predictsearch"; signal: "show.predictsearch"; source: "*"; action: STATE_SET "default" 0.0; @@ -145,7 +169,7 @@ group target: "swl.bg_predictsearch"; } program { - name: "change.bubble"; + name: "change.bubble"; signal: "change.bubble"; source: "*"; action: STATE_SET "default" 0.1; @@ -158,6 +182,22 @@ group action: STATE_SET "default" 0.0; target: "swl.composer.body"; } + program { + name: "title_menu_open"; + signal: "elm,state,title_menu,open"; + source: ""; + action: STATE_SET "show" 0.0; + target: "swl.bubble.titlemenu"; + transition: LINEAR 0.2; + } + program { + name: "title_menu_close"; + signal: "elm,state,title_menu,close"; + source: ""; + action: STATE_SET "hide" 0.0; + target: "swl.bubble.titlemenu"; + transition: LINEAR 0.2; + } } } } diff --git a/composer/data/composer_edc/msg-ui-composer-subject.edc b/composer/data/composer_edc/msg-ui-composer-subject.edc new file mode 100755 index 0000000..277d157 --- /dev/null +++ b/composer/data/composer_edc/msg-ui-composer-subject.edc @@ -0,0 +1,160 @@ +/************************ + * subject + **********************/ + +#define MSG_COMPOSER_SUBJECT_H 74 +#define MSG_COMPOSER_SUBJECT_FIELD_H 74 +#define SUBJECT_DELBUTTON_SIZE 44 36 +#define COLOR_SUBJECT_GUIDE_TEXT 158 158 158 255 + +group { + name: "composer/subject/main"; + + images { + image: IMG_BODY_INPUT_FIELD COMP; + } + + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + min: 0 MSG_COMPOSER_SUBJECT_H; + fixed: 1 1; + color: 0 0 0 0; + } + } + PADDING_TOP("padding_top", 16); + PADDING_TOP("padding_top_29", 29); + PADDING_LEFT("padding_left", 16); + PADDING_RIGHT("padding_right", 16); + PADDING_RIGHT("padding_right_32", 32); + PADDING_BOTTOM("padding_bottom", 7); + part { + name: "img.body"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + min: 0 MSG_COMPOSER_SUBJECT_FIELD_H; + fixed: 1 0; + rel1 { to_y: "padding_top"; relative: 0.0 1.0; } + rel2 { to_x: "padding_right"; relative: 0.0 1.0; } + image { + normal: IMG_BODY_INPUT_FIELD; + border: BORDER_BODY_INPUT_FIELD; + } + } + } + part { + name: "subject.guidetxt"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + color: COLOR_SUBJECT_GUIDE_TEXT; + rel1 { to_x: "padding_left"; to_y: "padding_top"; relative: 1.0 1.0; } + rel2 { to_x: "rect.del_button"; to_y: "padding_bottom"; relative: 0.0 0.0; offset: -16 0; } + text { + font: SLP_FONT_REGULAR; + text_class: FONT_TEXT_CLASS_REGULAR; + size: 32; + align: 0.0 0.5; + } + } + } + part { + name: "subject.swl.entry"; + type: SWALLOW; + scale: 1; + description { //hide delete button + state: "default" 0.0; + min: 0 0; + fixed: 1 0; + rel1 { to_x: "padding_left"; to_y: "padding_top"; relative: 1.0 1.0; } + rel2 { to_x: "padding_right_32"; to_y: "padding_bottom"; relative: 0.0 0.0; } + align: 0.5 0.5; + } + description { //show delete button + state: "default" 0.1; + min: 0 0; + fixed: 1 0; + rel1 { to_x: "padding_left"; to_y: "padding_top"; relative: 1.0 1.0; } + rel2 { to_x: "rect.del_button"; to_y: "padding_bottom"; relative: 0.0 0.0; offset: -16 0; } + align: 0.5 0.5; + } + } + part { + name: "rect.del_button"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: BODYPAGE_DELBUTTON_SIZE; + max: BODYPAGE_DELBUTTON_SIZE; + fixed: 1 1; + visible: 0; + rel1 { + to_x: "padding_right_32"; + to_y: "padding_top_29"; + relative: 0.0 1.0; + } + rel2 { + to_x: "padding_right_32"; + to_y: "padding_top_29"; + relative: 0.0 1.0; + } + align: 1.0 0.0; + } + } + part { + name: "subject.swl.del_button"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; //hide + min: BODYPAGE_DELBUTTON_SIZE; + max: BODYPAGE_DELBUTTON_SIZE; + fixed: 1 1; + visible: 0; + rel1 { to_x: "padding_right_32"; to_y: "padding_top_29"; relative: 0.0 1.0; } + rel2 { to_x: "padding_right_32"; to_y: "padding_top_29"; relative: 0.0 1.0; } + align: 1.0 0.0; + } + description { + state: "default" 0.1; //show + min: BODYPAGE_DELBUTTON_SIZE; + max: BODYPAGE_DELBUTTON_SIZE; + fixed: 1 1; + visible: 1; + rel1 { to_x: "padding_right_32"; to_y: "padding_top_29"; relative: 0.0 1.0; } + rel2 { to_x: "padding_right_32"; to_y: "padding_top_29"; relative: 0.0 1.0; } + align: 1.0 0.0; + } + } + } + + programs { + program { + name: "hide.delete"; + signal: "hide.delete"; + source: "*"; + action: STATE_SET "default" 0.0; + target: "subject.swl.entry"; + target: "subject.swl.del_button"; + } + program { + name: "show.delete"; + signal: "show.delete"; + source: "*"; + action: STATE_SET "default" 0.1; + target: "subject.swl.entry"; + target: "subject.swl.del_button"; + } + } +} + diff --git a/composer/data/composer_edc/white_theme_composer.edc b/composer/data/composer_edc/white_theme_composer.edc deleted file mode 100755 index d93e800..0000000 --- a/composer/data/composer_edc/white_theme_composer.edc +++ /dev/null @@ -1,18 +0,0 @@ - -#include "msg-ui-composer-data.edc" - -#define IMG_BODY_INPUT_FIELD "M01_search_input_field_bg.png" -#define BORDER_BODY_INPUT_FIELD 3 3 3 3 - -#define COLOR_SUBJECT_GUIDE_TEXT 163 157 138 255 - -collections -{ - -#include "msg-ui-composer-main.edc" -#include "msg-ui-composer-body.edc" -#include "msg-ui-composer-recipient.edc" - -#include "msg-ui-composer-custom.edc" - -} diff --git a/composer/include/msg-ui-composer-attachment.h b/composer/include/msg-ui-composer-attachment.h new file mode 100755 index 0000000..33b6909 --- /dev/null +++ b/composer/include/msg-ui-composer-attachment.h @@ -0,0 +1,38 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef __MSG_UI_COMPOSER_ATTACHMENT_H_ +#define __MSG_UI_COMPOSER_ATTACHMENT_H_ + +#include "msg-ui-composer-data.h" + +int64 msg_ui_composer_get_attached_item_size(void *data); + +COMPOSER_RETURN_TYPE_E msg_ui_composer_add_attach_media(MSG_COMPOSER_VIEW_DATA_S *cd, + const char *filepath, + COMPOSER_MEDIA_TYPE_E media_type); +COMPOSER_RETURN_TYPE_E msg_ui_composer_read_attachments(MSG_COMPOSER_VIEW_DATA_S *cd); + +COMPOSER_RETURN_TYPE_E msg_ui_composer_attachment_set_loaded_data(void *data, const char *filepath, int filetype); + +void msg_ui_composer_attachment_clear(MSG_COMPOSER_VIEW_DATA_S *cd); + +void msg_ui_composer_expand_attach_list(MSG_COMPOSER_VIEW_DATA_S *cd); +void msg_ui_composer_contract_attach_list(MSG_COMPOSER_VIEW_DATA_S *cd); +int msg_ui_composer_get_attach_count(MSG_COMPOSER_VIEW_DATA_S *cd); + +#endif /*__MSG_UI_COMPOSER_ATTACHMENT_H_*/ diff --git a/composer/include/msg-ui-composer-body-callback.h b/composer/include/msg-ui-composer-body-callback.h index 969a18f..eae3896 100755 --- a/composer/include/msg-ui-composer-body-callback.h +++ b/composer/include/msg-ui-composer-body-callback.h @@ -14,14 +14,23 @@ * limitations under the License.
*/
+
#ifndef MSG_UI_COMPOSER_BODY_CALLBACK_H_
#define MSG_UI_COMPOSER_BODY_CALLBACK_H_
#include <Elementary.h>
-
void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_add_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
void msg_ui_composer_body_entry_changed_cb(void *data, Evas_Object *obj, void *event_info);
void msg_ui_composer_body_entry_focused_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_entry_press_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_entry_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_entry_maxlength_reached_cb(void *data, Evas_Object *obj, void *event_info);
+
+void msg_ui_composer_body_page_del_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_media_del_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info);
+void msg_ui_composer_body_body_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info);
#endif /* MSG_UI_COMPOSER_BODY_CALLBACK_H_ */
diff --git a/composer/include/msg-ui-composer-body-page.h b/composer/include/msg-ui-composer-body-page.h index 4259caa..a8bd7e2 100755 --- a/composer/include/msg-ui-composer-body-page.h +++ b/composer/include/msg-ui-composer-body-page.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMPOSER_BODY_PAGE_H_ #define __MSG_UI_COMPOSER_BODY_PAGE_H_ @@ -28,17 +29,26 @@ /* structures*/ /* function prototypes*/ +Evas_Object *msg_ui_composer_body_page_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent); +Evas_Object *msg_ui_composer_body_sms_page_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent); + COMPOSER_RETURN_TYPE_E msg_ui_composer_body_read_sms_body(MSG_COMPOSER_VIEW_DATA_S *cd); +COMPOSER_RETURN_TYPE_E msg_ui_composer_body_read_mms_body(MSG_COMPOSER_VIEW_DATA_S *cd); COMPOSER_RETURN_TYPE_E msg_ui_composer_body_add_page(MSG_COMPOSER_VIEW_DATA_S *cd); +COMPOSER_RETURN_TYPE_E msg_ui_composer_body_insert_media(MSG_COMPOSER_VIEW_DATA_S *cd, const char *file_path, COMPOSER_MEDIA_TYPE_E media_type); +COMPOSER_RETURN_TYPE_E msg_ui_composer_mms_insert_item_remove(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_item, COMPOSER_MEDIA_TYPE_E media_type); +int msg_ui_composer_get_inserted_item_size(MSG_COMPOSER_VIEW_DATA_S *cd); COMPOSER_RETURN_TYPE_E msg_ui_composer_sms_body_clear(MSG_COMPOSER_VIEW_DATA_S *cd); +void msg_ui_composer_mms_body_clear(MSG_COMPOSER_VIEW_DATA_S *cd); -COMPOSER_RETURN_TYPE_E msg_ui_composer_body_remove_page(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_page); +COMPOSER_RETURN_TYPE_E msg_ui_composer_mms_body_remove_page(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_page); -void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd); +void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S *cd); int msg_ui_composer_body_entry_char_count(void *data, const unsigned char *body_ucs2_text, int ucs2_len, int *char_count); +void msg_ui_composer_body_apply_font_size(MSG_COMPOSER_VIEW_DATA_S *cd, const char *font_sytle); #endif /* __MSG_UI_COMPOSER_BODY_PAGE_H_ */ diff --git a/composer/include/msg-ui-composer-body.h b/composer/include/msg-ui-composer-body.h index aeee88f..c3c6bd0 100755 --- a/composer/include/msg-ui-composer-body.h +++ b/composer/include/msg-ui-composer-body.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMPOSER_BODY_H_ #define __MSG_UI_COMPOSER_BODY_H_ @@ -22,15 +23,48 @@ #include "msg-ui-composer-body-page.h" #include <Elementary.h> +/* defines*/ +#define COMPOSER_FRAME_BODY_LANDSCAPE_HEIGHT_MIN (88) +#define COMPOSER_ENOUGH_TEXT_RENDERING_BODY_HEIGHT (130) + +#define COMPOSER_RESIZE_LOOP_MAX (3) + +/* enum types*/ +typedef enum { + COMPOSER_THREAD_STATUS_UNKNOWN = 0, + COMPOSER_THREAD_STATUS_RESIZE, + COMPOSER_THREAD_STATUS_RESIZE_SUCCESS, + COMPOSER_THREAD_STATUS_RESIZE_FAIL, + COMPOSER_THREAD_STATUS_SUCCESS, + COMPOSER_THREAD_STATUS_FAIL +} COMPOSER_THREAD_STATUS_E; + +/* structures*/ +typedef struct _msg_ui_thread_data_s { + MSG_COMPOSER_VIEW_DATA_S *cd; + int fail_count; + COMPOSER_THREAD_STATUS_E status; + int64 wishsize; + bool need_ChangeResolution; + char filepath[DEF_BUF_LEN_L]; +} COMPOSER_THREAD_DATA_S; /* function prototypes*/ Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent); +void msg_ui_composer_body_delete(MSG_COMPOSER_VIEW_DATA_S *cd); +COMPOSER_RETURN_TYPE_E msg_ui_composer_body_items_add(MSG_COMPOSER_VIEW_DATA_S *cd); +COMPOSER_RETURN_TYPE_E msg_ui_composer_body_item_add(MSG_COMPOSER_VIEW_DATA_S *cd, const char *item_path); + + +COMPOSER_RETURN_TYPE_E msg_ui_composer_body_set_loaded_media(MSG_COMPOSER_VIEW_DATA_S *pcomp_data, char *filepath, int filetype, int nPage); COMPOSER_RETURN_TYPE_E msg_ui_composer_body_set_loaded_text(MSG_COMPOSER_VIEW_DATA_S *pcomp_data, const char *body_text, int nPage); -void msg_ui_composer_body_focus_set(MSG_COMPOSER_VIEW_DATA_S *cd, int nPage); -COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_size(MSG_COMPOSER_VIEW_DATA_S* cd, int64 *size); +COMPOSER_RETURN_TYPE_E msg_ui_composer_read_preview_message(MSG_COMPOSER_VIEW_DATA_S *cd); +Eina_Bool msg_ui_composer_body_is_mms(MSG_COMPOSER_VIEW_DATA_S *cd); +void msg_ui_composer_body_focus_set(MSG_COMPOSER_VIEW_DATA_S *cd, int nPage); +COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_size(MSG_COMPOSER_VIEW_DATA_S *cd, int64 *size); void msg_ui_composer_body_clear(MSG_COMPOSER_VIEW_DATA_S *cd); COMPOSER_RETURN_TYPE_E __msg_ui_composer_body_read_data(MSG_COMPOSER_VIEW_DATA_S *cd); #endif/*__MSG_UI_COMPOSER_BODY_H_*/ diff --git a/composer/include/msg-ui-composer-bubble.h b/composer/include/msg-ui-composer-bubble.h index d48a08d..43f6c53 100755 --- a/composer/include/msg-ui-composer-bubble.h +++ b/composer/include/msg-ui-composer-bubble.h @@ -21,19 +21,16 @@ #include <stdlib.h> #include <glib.h> -#include <MsgStorageTypes.h> -#include <MsgTransportTypes.h> -#include <MapiControl.h> -#include <MapiStorage.h> -#include <MapiTransport.h> -#include <MapiMessage.h> +#include <msg.h> +#include <msg_storage.h> +#include <msg_transport.h> #include <libintl.h> #include <bundle.h> -#include <appcore-efl.h> #include <Ecore.h> #include <Elementary.h> #include <ui-gadget-module.h> +#include <aul.h> #include <time.h> #include "msg-ui-util.h" @@ -45,17 +42,18 @@ #define MSG_BUBBLE_SIM_MSG_ICON IMGDIR"/07_message_sim.png" #define MSG_BUBBLE_ATTACH_ICON IMGDIR"/Seven_IM_clip_nor.png" -#define MSG_VCONF_KEY_SELECTED_THEME "db/setting/selected_theme" - /* STYLE for genlist and entry */ #define MSG_BUBBLE_STYLE_SENT "sentmessage" #define MSG_BUBBLE_STYLE_RECV "readmessage" #define MSG_BUBBLE_CONTENT_H (653) -#define MSG_BUBBLE_IMG_MAX_W (75) //FIXME :: It should be fixed at Entry.edc +#define MSG_BUBBLE_IMG_MAX_W (320) +#define MSG_BUBBLE_IMG_MAX_H (320) #define MSG_BUBBLE_CONTROLBAR_ITEM_NUM (4) +#define MSG_BUBBLE_DELETE_NOTI_TIME (1.5) + typedef enum { BUBBLE_NORMAL_VIEW = 0, BUBBLE_EDIT_VIEW, @@ -92,19 +90,25 @@ typedef enum { } MsgBoxPackType; typedef struct { - MSG_MESSAGE_ID_T msgId; + msg_message_id_t msgId; int msgType; - MSG_STORAGE_ID_T storageId; + msg_storage_id_t storageId; time_t *msgTime; char displayDate[DEF_BUF_LEN_S]; - MSG_NETWORK_STATUS_T networkStatus; + char subject[DEF_BUF_LEN_S]; + msg_network_status_t networkStatus; bool bRead; bool bProtected; int direction; + int attachment_cnt; + char thumbNailPath[DEF_IMG_PATH_LEN + 1]; char msgText[DEF_MAX_MSG_TEXT_LEN+1]; Evas_Object *ly; Evas_Object *entry; + Evas_Object *resend_button; + Evas_Object *del_button; + Evas_Object *progressbar; Evas_Object *chk; Eina_Bool isCheck; @@ -116,6 +120,17 @@ typedef struct { MsgBoxPackType pack_type; }BUBBLE_PACK_INFO; +typedef struct { + int contact_id; + char address[DEF_THREAD_ADDR_LEN+1]; + char name[DEF_THREAD_NAME_LEN+1]; +}BUBBLE_ADDRESS_INFO; + +typedef struct { + int addr_cnt; + BUBBLE_ADDRESS_INFO addr_info[MAX_TO_ADDRESS_CNT]; +}BUBBLE_ADDRESS_LIST; + typedef struct _MSG_BUBBLE_DATA { Evas_Object *layout_main; Evas_Object *scrl; @@ -126,9 +141,12 @@ typedef struct _MSG_BUBBLE_DATA { BubbleViewMode viewmode; BubbleUGState ug_state; + bool isRotate; Evas_Object *parent_layout; Evas_Object *bubble_layout; + Evas_Object *title_button; + Evas_Object *title_genlist; Evas_Object *sel_all_ly; Evas_Object *sel_all_box; Evas_Object *noc_ly; @@ -139,6 +157,7 @@ typedef struct _MSG_BUBBLE_DATA { Evas_Object *select_info; Evas_Object *selectioninfo_layout; + Evas_Object *deleted_info; Eina_List *bubble_list; Eina_List *realized_list; @@ -147,6 +166,12 @@ typedef struct _MSG_BUBBLE_DATA { Eina_Bool sel_all_checked; +#ifdef _BUBBLE_FLICK_EVENT + Evas_Coord m_x; + Evas_Coord m_y; +#endif + Elm_Genlist_Item_Class itc_title; + char *time_12h_ptn; char *time_24h_ptn; char *date_ptn; @@ -163,16 +188,18 @@ typedef struct _MSG_BUBBLE_DATA { Ecore_Idler *conformant_idler; Ecore_Thread *del_thread; - MSG_HANDLE_T msgHandle; - MSG_THREAD_ID_T threadId; - MSG_CONTACT_ID_T contactId; - char threadAddr[DEF_THREAD_ADDR_LEN+1]; + msg_handle_t msgHandle; + msg_thread_id_t threadId; + BUBBLE_ADDRESS_LIST addr_list; char threadName[DEF_THREAD_NAME_LEN+1]; int bubble_count; int bubble_index; int added_count; int msg_type; /* type of the latest message in the selected converstaion list*/ + bool isDraft; + bool title_optionheader_opened; + bool del_cancel; int check_cnt; int del_index; @@ -181,34 +208,45 @@ typedef struct _MSG_BUBBLE_DATA { /* FUNCTIONS */ -PMSG_BUBBLE_DATA msg_ui_bubble_init_bubble_data(MSG_HANDLE_T msgHandle, void *callback_data); +PMSG_BUBBLE_DATA msg_ui_bubble_init_bubble_data(msg_handle_t msgHandle, void *callback_data); void msg_ui_bubble_deinit_bubble_data(void *data); -void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, bundle *b); +void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, service_h svc_handle); void msg_ui_bubble_start_bubble_list(PMSG_BUBBLE_DATA bubble_data); void msg_ui_bubble_init_bubble_list(PMSG_BUBBLE_DATA bubble_data); -Evas_Object *msg_ui_bubble_create_controlbar(Evas_Object *parent, void *user_data); Evas_Object *msg_ui_bubble_create_view(Evas_Object *parent, void *user_data); void msg_ui_bubble_start_view(PMSG_BUBBLE_DATA bubble_data); -void msg_ui_bubble_add_normal_control_item(void *user_data); void msg_ui_bubble_reg_bubble_cb_func(PMSG_BUBBLE_DATA pData); PMSG_BUBBLE_DATA msg_ui_bubble_get_bubble_data(void); void msg_ui_bubble_fill_bubble_contents(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S item_data); Eina_Bool msg_ui_bubble_item_load_cb(void *data); +void msg_ui_bubble_resend_msg(PMSG_BUBBLE_DATA bubble_data, int msg_id); +void msg_ui_bubble_delete_msg(PMSG_BUBBLE_DATA bubble_data, int msg_id); void msg_ui_bubble_list_load(PMSG_BUBBLE_DATA bubble_data); void msg_ui_bubble_list_data_update(PMSG_BUBBLE_DATA bubble_data); -void msg_ui_bubble_item_data_update(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg); +void msg_ui_bubble_item_data_update(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg); Eina_Bool msg_ui_bubble_item_add_cb(void *data); -void msg_ui_bubble_list_append(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg); -void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg); +void msg_ui_bubble_list_append(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg); +void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg); void msg_ui_bubble_change_normal_navi_control(PMSG_BUBBLE_DATA pData); -void msg_ui_bubble_msg_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE_TYPE_T type, MSG_MSGID_LIST_S *pMsgIdList, void *user_param); -void msg_ui_bubble_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_bubble_title_button_clicked_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_bubble_open_title_menu_genlist(PMSG_BUBBLE_DATA bubble_data); +void msg_ui_bubble_close_title_menu_genlist(PMSG_BUBBLE_DATA bubble_data); +Evas_Object *msg_ui_bubble_create_toolbar(void *user_data); +void msg_ui_bubble_add_normal_toolbar_item(Evas_Object *toolbar, void *user_data); + +void msg_ui_bubble_msg_storage_change_cb(msg_handle_t handle, msg_storage_change_type_t type, msg_id_list_s *pMsgIdList, void *user_param); +void msg_ui_bubble_ctlbar_multi_del_cb(void *data, Evas_Object *obj, void *event_info); +Evas_Object *msg_ui_bubble_toolbar_btn_create(Evas_Object *parent, char *icon_path, char *button_text); +void msg_ui_bubble_option_header_delete_clicked_cb(void *data, Evas_Object *obj, void *event_info); + void msg_ui_bubble_ctlbar_call_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_bubble_ctlbar_vcall_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_bubble_ctlbar_email_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_bubble_ctlbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_bubble_ctlbar_view_ct_detail_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_bubble_ctlbar_delete_cb(void *data, Evas_Object *obj, void *event_info); @@ -218,25 +256,34 @@ void msg_ui_bubble_ctlbar_cancel_cb(void *data, Evas_Object *obj, void *event_in void msg_ui_bubble_sel_all_clicked_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_bubble_item_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); void msg_ui_bubble_item_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +#ifdef _BUBBLE_FLICK_EVENT void msg_ui_bubble_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); void msg_ui_bubble_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +#endif void msg_ui_bubble_list_checked_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_bubble_timezone_change_cb(void *data); void msg_ui_bubble_scroll_edge_top_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_bubble_scroll_drag_start_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_bubble_anchor_menu_click_cb(void *data, Evas_Object *obj, void *event_info); + void msg_ui_bubble_launch_voice_call(const char *call_num); +void msg_ui_bubble_launch_video_call(const char *call_num); char *msg_ui_bubble_get_trimmed_number(const char *org_num); void msg_ui_bubble_launch_add_to_contact_ug(PMSG_BUBBLE_DATA pData); void msg_ui_bubble_launch_contact_list_ug(PMSG_BUBBLE_DATA pData, int type, const char *str); void msg_ui_bubble_launch_contact_detail_ug(PMSG_BUBBLE_DATA pData, int ct_id); void msg_ui_bubble_show_notify(PMSG_BUBBLE_DATA bubbleData, char *msg); -void msg_ui_bubble_show_notify_with_timeout(PMSG_BUBBLE_DATA pData, char *msg, double timeout); Evas_Object* msg_ui_bubble_show_notify_with_progressbar(PMSG_BUBBLE_DATA pData, int count); void msg_ui_bubble_show_select_info(PMSG_BUBBLE_DATA pData); +void msg_ui_bubble_show_deleted_info(PMSG_BUBBLE_DATA pData); void msg_ui_bubble_contact_info_update(PMSG_BUBBLE_DATA pData); +unsigned char msg_ui_bubble_check_word_type(char *txt); void msg_ui_bubble_get_time_format(PMSG_BUBBLE_DATA pData); void msg_ui_bubble_get_locale(PMSG_BUBBLE_DATA pData); +bool msg_is_sms(int msg_type); +bool msg_is_mms(int msg_type); + #endif diff --git a/composer/include/msg-ui-composer-common.h b/composer/include/msg-ui-composer-common.h index 9e0def0..be2052b 100755 --- a/composer/include/msg-ui-composer-common.h +++ b/composer/include/msg-ui-composer-common.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __MSG_COMPOSER_COMMON_H__ #define __MSG_COMPOSER_COMMON_H__ @@ -21,10 +22,14 @@ typedef enum { COMPOSER_TICKERNOTI_UNKNOWN = 0, - COMPOSER_TICKERNOTI_COUNT_MAX = 1, - COMPOSER_TICKERNOTI_DUP_RECP = 2, - COMPOSER_TICKERNOTI_INVALID_RECP = 3, - COMPOSER_TICKERNOTI_CHANGED_SMS = 4, + COMPOSER_TICKERNOTI_COUNT_MAX, + COMPOSER_TICKERNOTI_DUP_RECP, + COMPOSER_TICKERNOTI_INVALID_RECP, + COMPOSER_TICKERNOTI_CHANGED_SMS, + COMPOSER_TICKERNOTI_CHANGED_MMS, + COMPOSER_TICKERNOTI_AUTO_SAVED, + COMPOSER_TICKERNOTI_NO_RECIPIENT, + COMPOSER_TICKERNOTI_MAXLENGHT_CHAR } COMPOSER_TICKERNOTI_TYPE_E; /*layout*/ @@ -33,11 +38,14 @@ Evas_Object *msg_ui_composer_load_edj(Evas_Object *parent, const char *edj_file, Evas_Object *msg_ui_composer_layout_create(Evas_Object *parent, bool indicator); Evas_Object *msg_ui_composer_conformant_create(Evas_Object *parent_win, Evas_Object *inner); Evas_Object *msg_ui_composer_bg_create(Evas_Object *parent); +Evas_Object *msg_ui_composer_toolbar_create(Evas_Object *parent); /*file*/ int64 msg_composer_get_file_size(const char *path); char *msg_common_get_file_ext(const char *a_pszfile_name); +COMPOSER_RETURN_TYPE_E msg_composer_common_get_media_duration(const char *file_path, int *duration); +COMPOSER_MEDIA_TYPE_E msg_composer_get_media_type(const char *a_pszfile_path); void msg_ui_composer_clear(MSG_COMPOSER_VIEW_DATA_S *cd); /*focus*/ @@ -47,16 +55,28 @@ void msg_ui_composer_last_focused_entry_set(void *data, Evas_Object *entry); Evas_Object *msg_ui_composer_last_focused_entry_get(void *data); void bundle_send_to_result(void *data, char *key, char *val); +COMPOSER_RETURN_TYPE_E msg_ui_composer_change_message_type(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_MSG_TYPE_E msg_type); bool msg_ui_composer_common_is_send_possible(MSG_COMPOSER_VIEW_DATA_S *cd); void msg_ui_composer_common_play_vibration(); +COMPOSER_MSG_TYPE_E msg_ui_composer_check_message_type(MSG_COMPOSER_VIEW_DATA_S *cd); +void msg_ui_composer_message_type_check_and_change(MSG_COMPOSER_VIEW_DATA_S *cd); + +COMPOSER_RETURN_TYPE_E msg_composer_common_get_thumbnail(MSG_COMPOSER_VIEW_DATA_S *cd, const char *src_file_path, char *thumb_file_path, int size_thumb_file_path); +COMPOSER_RETURN_TYPE_E msg_composer_common_get_image_in_video(const char *video_file_path, char *image_file_path); +COMPOSER_RETURN_TYPE_E msg_ui_composer_common_get_file(MSG_COMPOSER_VIEW_DATA_S *cd, const char * src_file_path, char *dst_file_path, int size_dst_file_path); + void msg_composer_entry_filter_remove_markup(void *data, Evas_Object *entry, char **text); int msg_ui_composer_convert_UTF8ToUCS2(unsigned char *pDestText, int maxLength, const char *pSrcText, int srcTextLen); void msg_ui_composer_common_tickernoti(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_TICKERNOTI_TYPE_E tickertype); +void msg_composer_entry_filter_addimage(void *data, Evas_Object *entry, char **text); void msg_ui_composer_entry_imf_state_cb(void * data, Ecore_IMF_Context *ctx, int value); +void msg_ui_composer_entry_imf_resize_cb(void * data, Ecore_IMF_Context *ctx, int value); + +int msg_ui_composer_get_keypad_height(Evas_Object *entry); +void msg_ui_composer_change_body_scroll_size(MSG_COMPOSER_VIEW_DATA_S *cd, int keypad_height); -int msg_ui_composer_thread_id_get(MSG_HANDLE_T msg_handle, const char *recipient); -char *msg_ui_composer_thread_recipient_get(MSG_HANDLE_T msg_handle, int inp_tid); +int msg_ui_composer_get_font_size(int index, int type); +void msg_ui_composer_apply_font_size(MSG_COMPOSER_VIEW_DATA_S *cd); -void msg_ui_composer_evas_object_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info); #endif/*__MSG_COMPOSER_COMMON_H__*/ diff --git a/composer/include/msg-ui-composer-core.h b/composer/include/msg-ui-composer-core.h deleted file mode 100755 index d027c8c..0000000 --- a/composer/include/msg-ui-composer-core.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.tizenopensource.org/license - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef __MSG_UI_COMPOSER_CORE_H_ -#define __MSG_UI_COMPOSER_CORE_H_ - -#include "msg-ui-composer-data.h" -#include "msg-ui-composer-message.h" -#include <MsgSettingTypes.h> - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_open_msg_handle(MSG_HANDLE_T *msgHandle); -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_close_msg_handle(MSG_HANDLE_T *msgHandle); - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_create_new_message(msg_message_t *msgInfo); -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_release_message(msg_message_t msgInfo); - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_get_message(MSG_HANDLE_T msgHandle, msg_message_t msgInfo, int msgID, MSG_SENDINGOPT_S *sendOpt); - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_msg_get_config(MSG_HANDLE_T msg_handle, MSG_SETTING_S *opt); -COMPOSER_MSG_TYPE_E msg_ui_comp_core_get_msg_type(msg_message_t msg_data); -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_get_sms_body(msg_message_t msgInfo, char **sms_text); - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_set_message_type(msg_message_t msgInfo, COMPOSER_MSG_TYPE_E comp_msg_type); -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_add_recipient(msg_message_t msgInfo, char *number, COMPOSER_RECP_TYPE_E recp_type); -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_set_sms_body(msg_message_t msgInfo, char *body_text); - - - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_send_sms(MSG_HANDLE_T msg_handle, MSG_REQUEST_S *req); - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_reg_sent_status_cb(MSG_HANDLE_T msg_handle, void *cbfunc, void *cbdata); - -#endif /* __MSG_UI_COMPOSER_CORE_H_ */ diff --git a/composer/include/msg-ui-composer-data.h b/composer/include/msg-ui-composer-data.h index a3211fa..1b3caef 100755 --- a/composer/include/msg-ui-composer-data.h +++ b/composer/include/msg-ui-composer-data.h @@ -14,16 +14,17 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMPOSER_DATA_H_ #define __MSG_UI_COMPOSER_DATA_H_ /*********************** * includes ************************/ -#include <MsgTypes.h> -#include <MsgMmsTypes.h> +#include <msg.h> +#include <msg_storage.h> +#include <msg_transport.h> -#include <appcore-efl.h> #include <Elementary.h> #include <X11/Xlib.h> #include <glib-object.h> @@ -33,6 +34,7 @@ #include <contacts-svc.h> #include <assert.h> +#include <time.h> #include "msg-ui-util.h" #include "msg-ui-composer-string.h" @@ -50,6 +52,8 @@ typedef long long int64; #endif #define TO_FIELD_LABEL_SIZE_MAX 512 +#define COMPOSER_RECIPIENT_PORTRAIT_HEIGHT_MAX 150 +#define COMPOSER_RECIPIENT_LANDSCAPE_HEIGHT_MAX 150 #define COMPARE_STRING_NUM 8 #ifndef MAX_TO_ADDRESS_CNT @@ -70,12 +74,17 @@ typedef long long int64; #endif #define COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX MAX_ADDRESS_VAL_LEN +#define COMPOSER_SUBJECT_MAX_CHAR (40) +#define COMPOSER_SUBJECT_MAX_BYTE (COMPOSER_SUBJECT_MAX_CHAR * 3) -#define COMPOSER_TEXT_MAX_CHAR (1530) +#define COMPOSER_MMS_TEXT_MAX_CHAR (2000) +#define COMPOSER_MMS_TEXT_MAX_BYTE (COMPOSER_MMS_TEXT_MAX_CHAR * 3) -#define COMPOSER_MAX_PAGE (2) +#define COMPOSER_MMS_MAX_PAGE (20) +#define COMPOSER_MMS_MAX_ATTACH_COUNT (10) #define COMPOSER_FILEPATH_LEN_MAX (1024) #define COMPOSER_FILENAME_LEN_MAX (256) +#define COMPOSER_PAGE_DEFAULT_DURATION (5) //sec #define COMPOSER_COMMON_EXT_MAX_LENGTH (7) #define COMPOSER_COMMON_MIME_MAX_LEN (64) @@ -88,14 +97,31 @@ typedef long long int64; #define COMPOSER_CMS_UNICODE_MAX_LEN (67) #define COMPOSER_CMS_GSM7_MAX_LEN (153) -// temporary 10 pages, it needs to be changed by operator spec. +/* temporary 10 pages, it needs to be changed by operator spec. */ #define COMPOSER_CMS_MAX_PAGE (10) #define COMPOSER_TMP_PATH "/tmp" #define MSGC_1KB 1024 +#define MSGC_RESTRICT_MAX_IMG_W 640 +#define MSGC_RESTRICT_MAX_IMG_H 480 + +#define MSGC_INDICATOR_H 50 +#define MSGC_NAVIBAR_TITLE_H 108 +#define MSGC_BODY_TOP_PADDING 4 +#define MSGC_BODY_BOTTOM_PADDING 20 +#define MSGC_BODY_PADDING (MSGC_BODY_TOP_PADDING + MSGC_BODY_BOTTOM_PADDING) + +#define MSGC_IMAGE_THUMB_WIDTH 132 +#define MSGC_IMAGE_THUMB_HEIGHT 132 +#define MSGC_SOUND_THUMB_WIDTH 48 +#define MSGC_SOUND_THUMB_HEIGHT 48 + +#define MSGC_RECIPIENT_POPUP_W 620 +#define MSGC_RECIPIENT_POPUP_LIST_H 130 +#define MSGC_BODY_FONT_SIZE 32 /********************* * enum types @@ -127,12 +153,14 @@ typedef enum { COMPOSER_RETURN_RECIPIENT_DUPLICATE = -16, COMPOSER_RETURN_MSG_SIZE_OVER = -17, COMPOSER_RETURN_RESIZE_IMAGE = -18, - COMPOSER_RETURN_OVERSIZE_FILE = -19, + COMPOSER_RETURN_DRM_FORWARDLOCK = -19, + COMPOSER_RETURN_OVERSIZE_FILE = -20, } COMPOSER_RETURN_TYPE_E; typedef enum { COMPOSER_MSG_TYPE_INVALID, COMPOSER_MSG_TYPE_SMS, + COMPOSER_MSG_TYPE_MMS, } COMPOSER_MSG_TYPE_E; typedef enum { @@ -145,6 +173,23 @@ typedef enum { } COMPOSER_RECP_TYPE_E; typedef enum { + COMPOSER_MEDIA_TYPE_UNKNOWN, + COMPOSER_MEDIA_TYPE_IMAGE, + COMPOSER_MEDIA_TYPE_VIDEO, + COMPOSER_MEDIA_TYPE_AUDIO, + COMPOSER_MEDIA_TYPE_TEXT, + COMPOSER_MEDIA_TYPE_ANIMATE, + COMPOSER_MEDIA_TYPE_DRM, + COMPOSER_MEDIA_TYPE_MAX = 0xff +} COMPOSER_MEDIA_TYPE_E; + +typedef enum { + COMPOSER_REGION_ORDER_UNDETERMINDED = 0x00, + COMPOSER_REGION_ORDER_IMAGE_TOP, + COMPOSER_REGION_ORDER_TEXT_TOP, +} COMPOSER_MMS_REGION_ORDER_E; + +typedef enum { COMPOSER_STATE_TYPE_INVALID = 0, COMPOSER_STATE_TYPE_CREATE, COMPOSER_STATE_TYPE_RUNNING, @@ -161,13 +206,22 @@ typedef enum { COMPOSER_STATUS_POPUP_BUTTON_MAX, } COMPOSER_POPUP_BUTTON_TYPE_E; +enum { + COMPOSER_CREATION_MODE_RESTRICTED = 0, + COMPOSER_CREATION_MODE_WARNING, + COMPOSER_CREATION_MODE_FREE, + COMPOSER_CREATION_MODE_MAX, +}; + typedef enum { COMPOSER_FOCUS_RECIPIENT = 0, COMPOSER_FOCUS_BODY, - COMPOSER_FOCUS_MAX, + COMPOSER_FOCUS_SUBJECT, + COMPOSER_FOCUS_DEFAULT, } COMPOSER_FOCUS_E; typedef enum { + COMPOSER_RECP_ADDR_NONE, COMPOSER_RECP_ADDR_INVALID, COMPOSER_RECP_ADDR_VALID_NUMBER, COMPOSER_RECP_ADDR_VALID_EMAIL, @@ -188,13 +242,61 @@ typedef enum { COMPOSER_PREDICTSEARCH_END, } COMPOSER_PREDICTSEARCH_STATE_E; +typedef enum { + COMPOSER_ROTATE_UNKNOWN = 0, + COMPOSER_ROTATE_PORTRAIT = APP_DEVICE_ORIENTATION_0, + COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN = APP_DEVICE_ORIENTATION_180, + COMPOSER_ROTATE_LANDSCAPE = APP_DEVICE_ORIENTATION_270, + COMPOSER_ROTATE_LANDSCAPE_UPSIDEDOWN = APP_DEVICE_ORIENTATION_90, +} COMPOSER_ROTATE_TYPE_E; + +typedef enum { + COMPOSER_EDIT_NONE, + COMPOSER_EDIT_RECIPIENT, + COMPOSER_EDIT_BODY, + COMPOSER_EDIT_RECIPIENT_AND_BODY, +} COMPOSER_EDIT_STATE_E; + +enum { + COMPOSER_ADDR_TYPE_NUMBER, + COMPOSER_ADDR_TYPE_EMAIL +}; + +typedef enum { + COMPOSER_FONT_SIZE_NONE, + COMPOSER_SYSTEM_FONT_SIZE, + COMPOSER_MSG_FONT_SIZE +} COMPOSER_FONT_SIZE_TYPE_E; + /****************************** * structures *******************************/ +typedef struct _FONT_SIZE_S { + int sys_font_size; + int msg_font_size; + COMPOSER_FONT_SIZE_TYPE_E last_updated_setting; +} FONT_SIZE_S; + +typedef struct { + char m_szextend[COMPOSER_COMMON_EXT_MAX_LENGTH + 1]; + char m_szmime_type[COMPOSER_COMMON_MIME_MAX_LEN + 1]; + COMPOSER_MEDIA_TYPE_E m_ncontent_type; +} composer_mime_type_t; + +/* +Used change number for contact info +*/ +typedef struct _CONTACT_ITEM_S { + int index; + int type; /*COMPOSER_ADDR_TYPE_NUMBER:number, COMPOSER_ADDR_TYPE_EMAIL:email*/ + int contact_type; /*number or email type of contact like Mobile, Home*/ + char recipient[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1]; +} CONTACT_ITEM_S; + /* Used MBE's data && PredictSearch */ -typedef struct _recipient_item_s { +typedef struct _RECIPIENT_ITEM_S { COMPOSER_RECP_ADDR_E type; int index; char recipient[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1]; @@ -206,15 +308,26 @@ typedef struct _recipient_s { const char *name; void *cd; int mode; + int recipient_h; + Evas_Object *parent; Evas_Object *bx_main; Evas_Object *sc; Evas_Object *ly_to; Evas_Object *mbe; Evas_Object *ly_bt; + + Evas_Object *popup_selected; + Elm_Object_Item *sel_mbe_item; + RECIPIENT_ITEM_S *sel_r_item; + Evas_Object *popup_change_number; + Elm_Genlist_Item_Class change_number_itc; Ecore_Idler *scroll_down_idler; + + COMPOSER_RECP_ADDR_E type; + Ecore_Idler *notify_popup_idler; } RECIPIENT_S; typedef struct _predictsearch_s { @@ -236,6 +349,25 @@ typedef struct _predictsearch_s { int count; } PREDICTSEARCH_S; +typedef struct _subject_s { + Evas_Object *layout; + Evas_Object *entry; + Evas_Object *del_icon; +} SUBJECT_S; + +typedef struct _MSG_COMPOSER_ATTACHITEM_S { + Evas_Object *layout; + char file_path[COMPOSER_FILEPATH_LEN_MAX + 1]; + char file_name[COMPOSER_FILEPATH_LEN_MAX + 1]; + int type; +} MSG_COMPOSER_ATTACH_ITEM_S; + +typedef struct _MSG_COMPOSER_ATTACH_S { + int attachment_Cnt; + long long attachfileSize; + Eina_List *attachitem_list; +} MSG_COMPOSER_ATTACH_S; + typedef struct _text_info { COMPOSER_CHAR_ENCODE_E encode; int char_count; @@ -243,9 +375,24 @@ typedef struct _text_info { typedef struct _MSG_COMPOSER_BODY_PAGE_S { Evas_Object *layout; + Evas_Object *page_main_box; + + Evas_Object *upper_layout; Evas_Object *page_box; + Evas_Object *del_icon; + + bool is_image_item; + bool isVideo; + Evas_Object *image_item; + char image_file_path[COMPOSER_FILEPATH_LEN_MAX + 1]; + Evas_Object *entry; text_info_s text_info; + + bool is_sound_item; + Evas_Object *sound_item; + char sound_file_path[COMPOSER_FILEPATH_LEN_MAX + 1]; + int sound_duration; } MSG_COMPOSER_BODY_PAGE_S; typedef struct _MSG_COMPOSER_BODY_S { @@ -257,51 +404,74 @@ typedef struct _MSG_COMPOSER_BODY_S { typedef struct _MSG_COMPOSER_DATA_S { /*ug data & callback*/ - struct ui_gadget *ug; + ui_gadget_h ug; + ui_gadget_h loaded_ug; struct ug_cbs cbs; - struct ui_gadget *loaded_ug; /*composer mode & state*/ MSG_UG_MODE_E msg_ug_mode; COMPOSER_STATE_TYPE_E state; + COMPOSER_ROTATE_TYPE_E rotate; COMPOSER_MSG_TYPE_E msg_type; - bundle *msg_bundle; + bool isLoad; bool isFullview; bool isMsgInternal; + bool isAppControl; bool sending_success; bool send_button_clicked; + bool add_button_clicked; bool add_menu_clicked; - bool destroy_req; bool loaded_aul; + bool isSubject; bool send_button_is_show; + bool isclosed; /* backkey is pressed */ + bool loading_draft; /* draft msg loading status */ - int current_theme; int current_edit_entry; int first_focus; - char recipient_number[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX+1]; + + int window_w; + int window_h; + + int ly_body_h; char *working_path; + /* setting data */ + FONT_SIZE_S font_size; + int mms_max_size; + int page_duration; + /*message handler*/ - MSG_HANDLE_T msg_handle; + msg_handle_t msg_handle; /*module data*/ + SUBJECT_S sub_data; MSG_COMPOSER_BODY_S body_data; + MSG_COMPOSER_ATTACH_S attach_data; - RECIPIENT_ITEM_S recipient_frame; - + Eina_List *recipient_list; /* recipient list for bubble composer */ RECIPIENT_S *recipient; PREDICTSEARCH_S *predictsearch; + Eina_List *attachlist; + Eina_List *iter_list; + int attach_index; /*current added attach index*/ /*Evas Object*/ Evas_Object *main_window; Evas_Object *base; Evas_Object *navi_bar; + Evas_Object *navi_title_layout; + Evas_Object *title_menu_layout; + Evas_Object *more_btn; Evas_Object *back_btn; - Elm_Object_Item *toollbar_item_top[4]; + Evas_Object *toolbar_top; + Elm_Object_Item *toolbar_item_top[4]; + Evas_Object *toolbar_btn[4]; Elm_Object_Item *navi_it; + Eina_Bool navi_optionheader_opened; Evas_Object *content_layout; Evas_Object *bg; @@ -309,17 +479,33 @@ typedef struct _MSG_COMPOSER_DATA_S { Evas_Object *ly_recipient; Evas_Object *conform; Evas_Object *popup_conform; + + Evas_Object *add_button; Evas_Object *send_button; Evas_Object *body_scroll; Evas_Object *body_box; + + Evas_Object *ly_attach_main; + + Evas_Object *add_popup; Evas_Object *progress_popup; Evas_Object *popup_end; + Evas_Object *custom_popup; Eina_List *popup_list; - Evas_Object *noti; + Evas_Object *page_duration_entry; + Evas_Object *last_focus_entry; - MSG_BUBBLE_DATA *bubble_data; // For bubble data structure + + Ecore_Idler *last_focus_idler; + + Ecore_Thread *attach_thread; + Ecore_Job *job_thread_end; + + Elm_Theme *th; + + MSG_BUBBLE_DATA *bubble_data; /* For bubble data structure */ } MSG_COMPOSER_VIEW_DATA_S; #endif /* __MSG_UI_COMPOSER_DATA_H_ */ diff --git a/composer/include/msg-ui-composer-external.h b/composer/include/msg-ui-composer-external.h index 0729ec8..1515748 100755 --- a/composer/include/msg-ui-composer-external.h +++ b/composer/include/msg-ui-composer-external.h @@ -14,27 +14,50 @@ * limitations under the License. */ + #ifndef __MSG_COMPOSER_EXTERNAL_H__ #define __MSG_COMPOSER_EXTERNAL_H__ #include "msg-ui-composer-data.h" -#define TXT_UG_NAME_LOG "phonelog-efl" +#define GALLERY_TOKEN ";" +#define MYFILE_TOKEN "?" + +#define TXT_UG_NAME_CALLLOG "logcheck-efl" #define TXT_UG_NAME_CONTACT "contacts-list-efl" +#define TXT_UG_NAME_MYFILE "myfile-efl" +#define TXT_UG_NAME_MSG_VIEWER "msg-viewer-efl" +#define TXT_UG_NAME_MEMO "memo-efl" +#define TXT_UG_NAME_GALLERY "gallery-efl" +#define TXT_UG_NAME_CALENDAR "calendar-efl" +#define TXT_UG_NAME_LOG "phonelog-efl" + typedef enum { + COMPOSER_EXT_TYPE_GALLERY, + COMPOSER_EXT_TYPE_MYFILE, + COMPOSER_EXT_TYPE_VOICEREC, COMPOSER_EXT_TYPE_LOG, + COMPOSER_EXT_TYPE_CONTACT, COMPOSER_EXT_TYPE_CONTACTLIST, + COMPOSER_EXT_TYPE_NAMECARD, + COMPOSER_EXT_TYPE_CALENDAR, + COMPOSER_EXT_TYPE_MEMO, + COMPOSER_EXT_TYPE_CAMERA, + COMPOSER_EXT_TYPE_CAMCORDER, + COMPOSER_EXT_TYPE_MSGVIEWER, + COMPOSER_EXT_TYPE_COMMON, COMPOSER_EXT_TYPE_MAX = 0xff, } COMPOSER_EXT_TYPE_E; - COMPOSER_RETURN_TYPE_E msg_ui_composer_external_call(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_EXT_TYPE_E ext_type, void *reserved); -struct ui_gadget *msg_ui_composer_launch_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *b); -struct ui_gadget *msg_ui_composer_launch_contact_detail_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int ct_id); -struct ui_gadget *msg_ui_composer_launch_contact_list_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int type, const char *str); +ui_gadget_h msg_ui_composer_launch_contact_detail_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int ct_id); +ui_gadget_h msg_ui_composer_launch_contact_list_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int type, const char *str); +ui_gadget_h msg_ui_composer_launch_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle); +ui_gadget_h msg_ui_composer_launch_email_create(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle); +ui_gadget_h msg_ui_composer_launch_viewer_create(void *data, service_h svc_handle); #endif/*__MSG_COMPOSER_EXTERNAL_H__*/ diff --git a/composer/include/msg-ui-composer-main.h b/composer/include/msg-ui-composer-main.h index 20f0017..77c0174 100755 --- a/composer/include/msg-ui-composer-main.h +++ b/composer/include/msg-ui-composer-main.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMPOSER_MAIN_H_ #define __MSG_UI_COMPOSER_MAIN_H_ @@ -22,15 +23,19 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_init(MSG_COMPOSER_VIEW_DATA_S *cd); COMPOSER_RETURN_TYPE_E msg_ui_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd); -COMPOSER_RETURN_TYPE_E msg_ui_composer_start(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *bundle); -COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *bundle); +COMPOSER_RETURN_TYPE_E msg_ui_composer_start(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle); +COMPOSER_RETURN_TYPE_E msg_ui_composer_rotate(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_ROTATE_TYPE_E rotate); +COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle); COMPOSER_RETURN_TYPE_E msg_ui_composer_destroy(MSG_COMPOSER_VIEW_DATA_S *cd); -void msg_ui_composer_reset_request(MSG_COMPOSER_VIEW_DATA_S *cd); -void msg_ui_composer_destroy_request(MSG_COMPOSER_VIEW_DATA_S *cd); +void msg_ui_composer_reset_request(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle); COMPOSER_RETURN_TYPE_E msg_ui_composer_change_bubble_view(MSG_COMPOSER_VIEW_DATA_S *cd); COMPOSER_RETURN_TYPE_E msg_ui_composer_change_composer_view(MSG_COMPOSER_VIEW_DATA_S *cd); -COMPOSER_RETURN_TYPE_E msg_ui_composer_bubble_data_set(MSG_COMPOSER_VIEW_DATA_S *cd, const char *address, const char *name, int contact_id, int thread_id); +COMPOSER_RETURN_TYPE_E msg_ui_composer_bubble_data_set(MSG_COMPOSER_VIEW_DATA_S *cd, int thread_id); void msg_ui_composer_editable_set(MSG_COMPOSER_VIEW_DATA_S *cd, Eina_Bool editable); -void msg_ui_composer_bubble_del_all(void *data, bundle *b); -void msg_ui_bubble_composer_navi_title_set(void *data); +void msg_ui_composer_bubble_del_all(void *data, service_h svc_handle); +void msg_ui_composer_toolbar_top_item_change(MSG_COMPOSER_VIEW_DATA_S *cd, bool smstype); +void msg_ui_composer_toolbar_top_update(MSG_COMPOSER_VIEW_DATA_S *cd); +Evas_Object *msg_ui_composer_create_navi_title_bar(void *data); +void msg_ui_composer_navi_title_set(void *data); + #endif/*__MSG_UI_COMPOSER_MAIN_H_*/ diff --git a/composer/include/msg-ui-composer-message-data.h b/composer/include/msg-ui-composer-message-data.h index 9da224a..77e1bfe 100755 --- a/composer/include/msg-ui-composer-message-data.h +++ b/composer/include/msg-ui-composer-message-data.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef _MSG_UI_COMPOSER_MESSAGE_DATA_H_ #define _MSG_UI_COMPOSER_MESSAGE_DATA_H_ @@ -27,17 +28,51 @@ * structures * *************** *******/ + +typedef struct _MSG_COMPOSER_MMS_PAGE_S { + bool isText; + char body_text[COMPOSER_MMS_TEXT_MAX_BYTE + 1]; + + bool isImage; + bool isVideo; + char image_file_path[DEF_BUF_LEN_L]; + + bool isSound; + char sound_file_path[DEF_BUF_LEN_L]; + + int page_duration; + +} MSG_COMP_MMS_PAGE_S; + +typedef struct _MSG_COMPOSER_ATTACHMENT_DATA_S { + char filepath[COMPOSER_FILEPATH_LEN_MAX + 1]; + char filename[COMPOSER_FILENAME_LEN_MAX + 1]; + int filetype; +} MSG_COMP_ATTACH_DATA_S; + +typedef struct _MSG_COMPOSER_MMS_DATA_S { + bool isTextTop; + bool isSubject; + char subject[COMPOSER_SUBJECT_MAX_BYTE + 1]; + int page_count; + MSG_COMP_MMS_PAGE_S pagelist[COMPOSER_MMS_MAX_PAGE]; + int attach_count; + MSG_COMP_ATTACH_DATA_S attachlist[COMPOSER_MMS_MAX_ATTACH_COUNT]; +} MSG_COMP_MMS_DATA_S; + typedef struct _MSG_COMPOSER_SMS_DATA_S { char *body_text; int body_length; + } MSG_COMP_SMS_DATA_S; typedef struct _MSG_COMPOSER_MESSAGE_DATA_S { - msg_message_t msgInfo; + msg_struct_t msgInfo; GSList *recp_list; COMPOSER_MSG_TYPE_E msg_type; MSG_COMP_SMS_DATA_S sms_data; + MSG_COMP_MMS_DATA_S mms_data; } MSG_COMP_MSG_DATA_S; #endif /* _MSG_UI_COMPOSER_MESSAGE_DATA_H_ */ diff --git a/composer/include/msg-ui-composer-message.h b/composer/include/msg-ui-composer-message.h index 7c7feeb..720c019 100755 --- a/composer/include/msg-ui-composer-message.h +++ b/composer/include/msg-ui-composer-message.h @@ -14,23 +14,25 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMPOSER_MSG_H_ #define __MSG_UI_COMPOSER_MSG_H_ #include "msg-ui-composer-data.h" -#include <MsgSettingTypes.h> + /****************************** * structures *******************************/ -enum __COMPOSER_CONFIG_TYPE_E { - COMPOSER_CONFIG_TYPE_GENERAL = MSG_GENERAL_OPT, - COMPOSER_CONFIG_TYPE_SMS_SEND = MSG_SMS_SENDOPT, - COMPOSER_CONFIG_TYPE_SMSC_LIST = MSG_SMSC_LIST, - COMPOSER_CONFIG_TYPE_PUSHMSG = MSG_PUSHMSG_OPT, - COMPOSER_CONFIG_TYPE_CBMSG = MSG_CBMSG_OPT, -}; +typedef struct _COMPOSER_SMIL_REGION_S_ { + char szID[MAX_SMIL_REGION_ID + 1]; + int left; + int top; + int width; + int height; + int bgcolor; +} MSG_COMP_REGION_S; /***************************** * structures @@ -44,18 +46,33 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_release_message(); COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_msg_type(COMPOSER_MSG_TYPE_E msg_type); /* Recipient*/ -COMPOSER_RETURN_TYPE_E msg_ui_composer_add_address(char *number); +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_add_address(char *number); +GSList *msg_ui_composer_message_get_address(); /* SMS*/ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_sms_body(char *body_text); +/* MMS - attachment*/ +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_add_attachments(const char *filepath, int filetype); +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_attach_count(int attach_count); + +/* MMS - subject*/ +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_subject(char *subject, int length); + +/* MMS - body*/ +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_page_count(int page_count); +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_is_text_top(bool isTextTop); +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_text(const char *text, int nPage); +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_media(const char *file_path, COMPOSER_MEDIA_TYPE_E media_type, int nPage, int duration); + /* save send*/ -COMPOSER_RETURN_TYPE_E msg_ui_composer_save_message(); -COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(MSG_HANDLE_T msg_handle); +COMPOSER_RETURN_TYPE_E msg_ui_composer_save_message(msg_handle_t msg_handle); +COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_data(MSG_COMPOSER_VIEW_DATA_S *cd); -COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_loaded_data(void *composer_data); -COMPOSER_RETURN_TYPE_E msg_ui_composer_message_load_message(MSG_HANDLE_T msg_handle, int msgID); +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(msg_handle_t msg_handle, msg_thread_id_t *tid); -COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_config(MSG_HANDLE_T msg_handle, MSG_SETTING_S *opt, int type); +msg_struct_t msg_ui_composer_message_make_preview(msg_handle_t msg_handle); +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_loaded_data(void *composer_data); +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_load_message(msg_handle_t msg_handle, int msgID); #endif /*__MSG_UI_COMPOSER_MSG_H_*/ diff --git a/composer/include/msg-ui-composer-pageduration.h b/composer/include/msg-ui-composer-pageduration.h new file mode 100755 index 0000000..33feeda --- /dev/null +++ b/composer/include/msg-ui-composer-pageduration.h @@ -0,0 +1,33 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef __MSG_UI_COMPOSER_PAGEDURATION_H_ +#define __MSG_UI_COMPOSER_PAGEDURATION_H_ + +#include "msg-ui-composer-data.h" + +typedef enum { + MSGC_PAGE_DURATION_CUSTOM = 0, + MSGC_PAGE_DURATION_2 = 2, + MSGC_PAGE_DURATION_5 = 5, + MSGC_PAGE_DURATION_10 = 10, +} MSGC_PAGE_DURATION_E; + +void msg_ui_composer_pageduration_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd); +/* get pageduration value from setting */ +int msg_ui_composer_pageduration_value_get(MSG_COMPOSER_VIEW_DATA_S *cd); +#endif/*__MSG_UI_COMPOSER_PAGEDURATION_H_*/ diff --git a/composer/include/msg-ui-composer-popup.h b/composer/include/msg-ui-composer-popup.h index b2be418..09de63e 100755 --- a/composer/include/msg-ui-composer-popup.h +++ b/composer/include/msg-ui-composer-popup.h @@ -14,34 +14,33 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMPOSER_POPUP_H_ #define __MSG_UI_COMPOSER_POPUP_H_ /* includes*/ #include "msg-ui-composer-data.h" #include <Elementary.h> +#include <status.h> /* defines*/ #define COMPOSER_STATUS_POPUP_DEFAULT_TIME 2 -/* enum types*/ -typedef enum _msgc_notify_orient -{ - MSGC_NOTIFY_ORIENT_TOP = ELM_NOTIFY_ORIENT_TOP , /**< Notify should appear in the top of parent, default */ - MSGC_NOTIFY_ORIENT_BOTTOM = ELM_NOTIFY_ORIENT_BOTTOM, /**< Notify should appear in the bottom of parent */ - MSGC_NOTIFY_ORIENT_LAST = ELM_NOTIFY_ORIENT_LAST /**< Sentinel value, @b don't use */ -} MSGC_NOTIFY_ORIENT; /* function prototypes*/ -Evas_Object *msg_ui_composer_notify_show(Evas_Object *parent, const char *msg, int time, MSGC_NOTIFY_ORIENT orient, bool is_horizon_mode); +void msg_ui_composer_status_noti_show(const char *msg); Evas_Object *msg_ui_composer_status_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, const char *msg, int time); -Evas_Object *msg_ui_composer_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char * title, Evas_Object * list); +Evas_Object *msg_ui_composer_status_btn_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, const char *msg, int time, const char *btn_text); + +Evas_Object *msg_ui_composer_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char *title, Evas_Object *list, const char *style); +Evas_Object *msg_ui_composer_custom_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char *title, Evas_Object *parent, Evas_Object *layout); + Evas_Object *msg_ui_composer_progress_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, const char *msg); void msg_ui_composer_status_popup_response_cb(void *data, Evas_Object *obj, void *event_info); -Eina_Bool msg_ui_composer_popup_exist(void * data); -void msg_ui_composer_popup_focus(void * data); +Eina_Bool msg_ui_composer_popup_exist(void *data); +void msg_ui_composer_popup_focus(void *data); void msg_ui_composer_popup_delete_all(void *data); #endif /* __MSG_UI_COMPOSER_POPUP_H_ */ diff --git a/composer/include/msg-ui-composer-predictsearch.h b/composer/include/msg-ui-composer-predictsearch.h index 6367fed..001a253 100755 --- a/composer/include/msg-ui-composer-predictsearch.h +++ b/composer/include/msg-ui-composer-predictsearch.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMPOSER_PREDICTSEARCH_H_ #define __MSG_UI_COMPOSER_PREDICTSEARCH_H_ diff --git a/composer/include/msg-ui-composer-recipient-callback.h b/composer/include/msg-ui-composer-recipient-callback.h index 5a5f9be..7680822 100755 --- a/composer/include/msg-ui-composer-recipient-callback.h +++ b/composer/include/msg-ui-composer-recipient-callback.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMPOSER_RECIPIENT_CALLBACK_H_ #define __MSG_UI_COMPOSER_RECIPIENT_CALLBACK_H_ @@ -28,8 +29,10 @@ void msg_ui_recipient_multibuttonentry_focused_cb(void *data, Evas_Object *obj, void msg_ui_recipient_multibuttonentry_unfocused_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_recipient_multibuttonentry_clicked_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_recipient_entry_changed_cb(void *data, Evas_Object *obj, void *event_info); -void msg_ui_recipient_multibuttonentry_item_selected_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_recipient_multibuttonentry_item_clicked_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_recipient_multibuttonentry_item_added_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_recipient_multibuttonentry_item_deleted_cb(void *data, Evas_Object *obj, void *event_info); Eina_Bool msg_ui_recipient_multibuttonentry_item_verify_cb(Evas_Object *obj, const char *item_label, void *item_data, void *data); +void msg_ui_recipient_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); + #endif/*__MSG_UI_COMPOSER_RECIPIENT_CALLBACK_H_*/ diff --git a/composer/include/msg-ui-composer-recipient.h b/composer/include/msg-ui-composer-recipient.h index abc32d8..6d9e2fd 100755 --- a/composer/include/msg-ui-composer-recipient.h +++ b/composer/include/msg-ui-composer-recipient.h @@ -14,12 +14,12 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMPOSER_RECIPIENT_H_ #define __MSG_UI_COMPOSER_RECIPIENT_H_ /* includes*/ #include <Elementary.h> -#include <MsgTypes.h> #include "msg-ui-composer-data.h" @@ -37,16 +37,24 @@ void msg_ui_composer_recipient_entry_text_set(RECIPIENT_S *rd, const char *str); void msg_ui_composer_recipient_focus_set(RECIPIENT_S *rd); +Eina_Bool msg_ui_composer_recipient_is_mms(MSG_COMPOSER_VIEW_DATA_S *cd); Eina_Bool msg_ui_composer_recipient_vaild_check(const char *recipient); +void msg_ui_composer_recipient_select_popup_create(void *data); +void msg_ui_composer_recipient_selected_delete(MSG_COMPOSER_VIEW_DATA_S *cd); +void msg_ui_composer_recipient_selected_edit(MSG_COMPOSER_VIEW_DATA_S *cd); +RECIPIENT_ITEM_S *msg_ui_composer_recipient_selected_item_data_get(MSG_COMPOSER_VIEW_DATA_S *cd); + COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_read_data(MSG_COMPOSER_VIEW_DATA_S *cd); -COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_set_recipient(MSG_COMPOSER_VIEW_DATA_S *cd, const char * recipient); COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_duplicate_check(RECIPIENT_S *rd, const char *recipient); +COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_set_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd, msg_thread_id_t thread_id); +COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_add_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd, const char *recipient); +COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_clear_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd); RECIPIENT_ITEM_S *msg_ui_composer_recipient_item_make_by_string(const char *str); COMPOSER_RECP_ADDR_E msg_ui_composer_recipient_type_get(const char *recipient); - - +COMPOSER_RECP_ADDR_E msg_ui_composer_recipient_addr_type_get(RECIPIENT_S *rd); +void msg_ui_composer_recipient_addr_type_set(RECIPIENT_S *rd, COMPOSER_RECP_ADDR_E type); int msg_ui_composer_recipient_count_get(RECIPIENT_S *rd); Eina_List *msg_ui_composer_recipient_invalid_recipient_list_get(RECIPIENT_S *rd); #endif/* __MSG_UI_COMPOSER_RECIPIENT_H_ */ diff --git a/composer/include/msg-ui-composer-res.h b/composer/include/msg-ui-composer-res.h index 1294582..fc9f43c 100755 --- a/composer/include/msg-ui-composer-res.h +++ b/composer/include/msg-ui-composer-res.h @@ -14,12 +14,22 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMPOSER_RES_H_ #define __MSG_UI_COMPOSER_RES_H_ +/*********************** + * includes + ************************/ +#include <msg-ui-image-resource.h> + /************************ * defines ************************/ +#ifndef PKGNAME +#define PKGNAME "org.tizen.message" +#endif + #ifndef PREFIX #define PREFIX "/opt/apps/" PKGNAME #endif @@ -41,43 +51,26 @@ #endif #define MSGC_UI_EDJ_PATH EDJDIR -#define MSGC_UI_IMG_PATH IMGDIR #define MSGC_UI_DAT_PATH DATADIR #define MSGC_UI_TMP_PATH "/tmp" /*edj*/ #define MSGC_UI_DEFAULT_EDJ MSGC_UI_EDJ_PATH "/composer.edj" -#define MSGC_UI_WHITE_EDJ MSGC_UI_EDJ_PATH "/white_theme_composer.edj" /*edj group*/ #define MSGC_EDJ_GRP_SUBJECT_FIELD "composer/subject/main" #define MSGC_EDJ_GRP_RECIPIENT_TO_FIELD "composer/recipient/to_field" #define MSGC_EDJ_GRP_RECIPIENT_BT_FIELD "composer/recipient/bt_field" #define MSGC_EDJ_GRP_BODY_FIELD "composer/body/main" +#define MSGC_EDJ_GRP_BODY_PAGE_MAIN "composer/body/page_main" #define MSGC_EDJ_GRP_BODY_PAGE "composer/body/page" #define MSGC_EDJ_GRP_BODY_SOUND "composer/body/media_sound" #define MSGC_EDJ_GRP_BODY_MEDIA "composer/body/media_default" -#define MSGC_EDJ_GRP_ATTACHMENT "composer/attachment/main" +#define MSGC_EDJ_GRP_ATTACHMENT_MAIN "composer/attachment/main" +#define MSGC_EDJ_GRP_ATTACHMENT_ITEM "composer/attachment/item" #define MSGC_EDJ_GRP_CONTENT_LAYOUT "composer/content/full" #define MSGC_EDJ_GRP_BUBBLE_LAYOUT "composer/content/bubble" +#define MSGC_EDJ_GRP_BUBBLE_MEDIA_LAYOUT "composer/content/bubble/media" -/*Image*/ -#define MSGC_IMG_ATTACHMENT_ICON MSGC_UI_IMG_PATH "/60_myfiles_file_etc.png" -#define MSGC_IMG_ATTACHMENT_MSWORD_ICON MSGC_UI_IMG_PATH "/U01_icon_word.png" -#define MSGC_IMG_ATTACHMENT_EXCEL_ICON MSGC_UI_IMG_PATH "/U01_icon_excel.png" -#define MSGC_IMG_ATTACHMENT_PPT_ICON MSGC_UI_IMG_PATH "/U01_icon_ppt.png" -#define MSGC_IMG_ATTACHMENT_PDF_ICON MSGC_UI_IMG_PATH "/U01_icon_swf.png" -#define MSGC_IMG_ATTACHMENT_SWF_ICON MSGC_UI_IMG_PATH "/U01_icon_swf.png" -#define MSGC_IMG_ATTACHMENT_TXT_ICON MSGC_UI_IMG_PATH "/U01_icon_text.png" -#define MSGC_IMG_ATTACHMENT_HTML_ICON MSGC_UI_IMG_PATH "/U01_icon_html.png" -#define MSGC_IMG_ATTACHMENT_DEL_ICON MSGC_UI_IMG_PATH "/M01_icon_minus.png" -#define MSGC_IMG_ATTACHMENT_DEL_ICON_W MSGC_UI_IMG_PATH "/white/M01_icon_minus.png" - -#define MSGC_IMG_INSERT_ETC_ICON MSGC_UI_IMG_PATH "/60_myfiles_file_etc.png" -#define MSGC_IMG_INSERT_DEL_ICON MSGC_UI_IMG_PATH "/M01_icon_minus.png" -#define MSGC_IMG_INSERT_DEL_ICON_W MSGC_UI_IMG_PATH "/white/M01_icon_minus.png" - -#define MSGC_IMG_SUBJECT_DEL_ICON MSGC_UI_IMG_PATH "/M01_icon_minus.png" -#define MSGC_IMG_SUBJECT_DEL_ICON_W MSGC_UI_IMG_PATH "/white/M01_icon_minus.png" #endif/* __MSG_UI_COMPOSER_RES_H_ */ diff --git a/composer/include/msg-ui-composer-string.h b/composer/include/msg-ui-composer-string.h index 115311a..06da61b 100755 --- a/composer/include/msg-ui-composer-string.h +++ b/composer/include/msg-ui-composer-string.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __MSG_UI_COMPOSER_STRING_H_ #define __MSG_UI_COMPOSER_STRING_H_ @@ -30,9 +31,6 @@ #define MSGC_STR_SUBJECT _SYSSTR("IDS_COM_BODY_SUBJECT") #define MSGC_STR_PREVIEW _MSGSTR("IDS_MSGC_HEADER_PREVIEW") #define MSGC_STR_GALLERY _SYSSTR("IDS_COM_BODY_GALLERY") -#define MSGC_STR_TAKEPHOTO _MSGSTR("IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO") -#define MSGC_STR_RECVIDEO _MSGSTR("IDS_MSGC_OPT_RECORD_VIDEO") -#define MSGC_STR_RECSOUND _MSGSTR("IDS_MSGC_OPT_CREATEITEMRECORDSOUND") #define MSGC_STR_MYFILE _SYSSTR("IDS_COM_BODY_MY_FILES") #define MSGC_STR_CONTACT _SYSSTR("IDS_COM_BODY_CONTACTS") #define MSGC_STR_CALENDAR _SYSSTR("IDS_COM_BODY_CALENDAR") @@ -40,7 +38,6 @@ #define MSGC_STR_RECENT _SYSSTR("IDS_COM_BUTTON_RECENT") /*Title*/ -#define MSGC_STR_ADD _SYSSTR("IDS_COM_ADD") #define MSGC_STR_NEW_MESSAGE _SYSSTR("IDS_COM_POP_NEW_MESSAGE") #define MSGC_STR_TO _MSGSTR("IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO") #define MSGC_STR_ADD_RECIPIENT _SYSSTR("IDS_COM_BODY_TAP_TO_ADD_RECIPIENT") @@ -58,7 +55,6 @@ #define MSGC_STR_POP_RESTRICT _MSGSTR("IDS_MSGF_BODY_CREATIONMODERESTRICTED") #define MSGC_STR_POP_FILE_EXIST _MSGSTR("IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS") #define MSGC_STR_POP_FILE_IS_FORWARD_LOCK _MSGSTR("IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED") -#define MSGC_STR_POP_MDM_RESTICT_MODE _MSGSTR("IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES") #define MSGC_STR_POP_ADDING _MSGSTR("IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING") /*Notify*/ @@ -67,6 +63,7 @@ #define MSGC_STR_NOTI_RECIPIENT_INVALID _MSGSTR("IDS_MSGF_BODY_INVALID_RECIPIENT") #define MSGC_STR_NOTI_RECIPIENTS_INVALID _MSGSTR("IDS_MSGF_BODY_INVALID_RECIPIENTS") #define MSGC_STR_NOTI_CHANGE_SMS _MSGSTR("IDS_MSGC_POP_CHANGED_TO_SMS") +#define MSGC_STR_NOTI_CHANGE_MMS _MSGSTR("IDS_MSGC_POP_CHANGED_TO_MMS") #define MSGC_STR_PAGE_DURATION _MSGSTR("IDS_MSGF_BODY_SETUP_PAGE_DURATION") #define MSGC_STR_SECONDS _SYSSTR("IDS_COM_BODY_SECONDS_LC") @@ -75,6 +72,4 @@ #define MSGC_STR_10_SECONDS _MSGSTR("IDS_MSGF_OPT_10SEC") #define MSGC_STR_CUSTOM_TIME _MSGSTR("IDS_MSGF_BODY_CUSTOM_TIME") -#define MSGC_STR_SCHEDULED_MESSAGE _MSGSTR("IDS_MSGC_HEADER_SCHEDULED_MESSAGE") - #endif/* __MSG_UI_COMPOSER_STRING_H_ */ diff --git a/composer/include/msg-ui-composer-subject.h b/composer/include/msg-ui-composer-subject.h new file mode 100755 index 0000000..9a92620 --- /dev/null +++ b/composer/include/msg-ui-composer-subject.h @@ -0,0 +1,32 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef __MSG_UI_COMPOSER_SUBJECT_H_ +#define __MSG_UI_COMPOSER_SUBJECT_H_ + +/* includes*/ +#include "msg-ui-composer-data.h" + +/* function prototypes*/ +Evas_Object *msg_ui_composer_create_subject_layout(Evas_Object *parent, MSG_COMPOSER_VIEW_DATA_S *cd); +COMPOSER_RETURN_TYPE_E msg_ui_composer_add_subject(MSG_COMPOSER_VIEW_DATA_S *cd); +COMPOSER_RETURN_TYPE_E msg_ui_composer_subject_clear(MSG_COMPOSER_VIEW_DATA_S *cd); +COMPOSER_RETURN_TYPE_E msg_ui_composer_read_subject(MSG_COMPOSER_VIEW_DATA_S *cd); +COMPOSER_RETURN_TYPE_E msg_ui_composer_subject_set_loaded_data(void *data, const char *subject); +COMPOSER_RETURN_TYPE_E msg_ui_composer_remove_subject_layout(MSG_COMPOSER_VIEW_DATA_S *cd); + +#endif /*__MSG_UI_COMPOSER_SUBJECT_H_*/ diff --git a/composer/src/bubble/msg-ui-composer-bubble-callback.c b/composer/src/bubble/msg-ui-composer-bubble-callback.c index 6a7e003..1d9d9b4 100755 --- a/composer/src/bubble/msg-ui-composer-bubble-callback.c +++ b/composer/src/bubble/msg-ui-composer-bubble-callback.c @@ -19,6 +19,13 @@ #include "msg-ui-composer-main.h" #include "msg-ui-composer-recipient.h" #include "msg-ui-composer-external.h" +#include "msg-ui-composer-common.h" + +#define BUBBLE_TITLE_MENU_GENLIST_MAX_LINE 3 +#define BUBBLE_TITLE_MENU_GENLIST_1LINE_HEIGHT 129 +#define BUBBLE_RETURN_DELETE_CANCEL 1000 + +Elm_Genlist_Item_Class itc_popup = {0,}; /** itc for list style popup */ Evas_Coord g_mouse_down_x = 0, g_mouse_down_y = 0; @@ -85,13 +92,17 @@ static void _bubble_add_edit_controlbar(PMSG_BUBBLE_DATA pData) elm_object_item_del(pData->toolbar_item[i]); } - pData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \ + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)pData->callback_data; + Evas_Object *toolbar = msg_ui_bubble_create_toolbar(pData); + elm_object_item_part_content_set(cd->navi_it, "controlbar", toolbar); + + pData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \ msg_ui_bubble_ctlbar_delete_cb, pData->callback_data); - pData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL); - pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL); + pData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); - pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_CANCEL, NULL, \ - msg_ui_bubble_ctlbar_cancel_cb, pData->callback_data); + pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_CANCEL, NULL, \ + msg_ui_bubble_ctlbar_cancel_cb, pData->callback_data); elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); @@ -100,6 +111,24 @@ static void _bubble_add_edit_controlbar(PMSG_BUBBLE_DATA pData) D_LEAVE; } +static void _bubble_change_edit_mode_title(PMSG_BUBBLE_DATA pData) +{ + D_ENTER; + + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData); + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)pData->callback_data; + + Evas_Object *content = elm_object_part_content_get(cd->navi_title_layout, "title_btn"); + + if (content) + evas_object_hide(content); + + elm_object_part_content_unset(cd->navi_title_layout, "title_btn"); + elm_object_part_text_set(cd->navi_title_layout, "title_text", dgettext("sys_string", "IDS_COM_SK_DELETE")); + D_LEAVE; +} + static void _sel_all_ly_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) { MSG_UI_ENTER(); @@ -155,13 +184,13 @@ static void _delete_finish(PMSG_BUBBLE_DATA pData) if (pData->popup) _progress_popup_delete(pData); - if (pData->del_index + 1 == pData->bubble_count) + if (pData->del_index + 1 == pData->bubble_count) { pData->bubble_count = 0; - else { - _bubble_show_normal_mode(pData->callback_data); - msg_ui_bubble_list_load(pData); } + _bubble_show_normal_mode(pData->callback_data); + msg_ui_bubble_list_load(pData); + pData->del_thread = NULL; } @@ -180,17 +209,37 @@ static void _del_thread_feedback_fn(void *data, Ecore_Thread *thread, void *msg_ elm_object_text_set(pData->progresslabel, buf); elm_progressbar_value_set(pData->progressbar, (double) (pData->del_index + 1) / pData->check_cnt); } + } else if (*ret == BUBBLE_RETURN_DELETE_CANCEL) { + if (pData->del_cancel == true) { + _delete_finish(pData); + + if (ret) + free(ret); + pData->del_cancel = false; + return; + } } else { if (pData->popup) _progress_popup_delete(pData); msg_ui_bubble_show_notify(pData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE")); + + _bubble_show_normal_mode(pData->callback_data); + msg_ui_bubble_list_load(pData); + + pData->del_thread = NULL; + + if (ret) + free(ret); + return; } - if (*ret != MSG_SUCCESS || pData->del_index + 1 == pData->check_cnt) + if (pData->del_index + 1 == pData->check_cnt) { + msg_ui_bubble_show_deleted_info(pData); _delete_finish(pData); - else + } else { pData->del_index++; + } if (ret) free(ret); @@ -207,6 +256,12 @@ static void _del_thread_fn(void *data, Ecore_Thread *thread) EINA_LIST_FOREACH(pData->chk_list, l, item_data) { int *ret = calloc(1, sizeof(int)); + if (pData->del_cancel == true) { + *ret = BUBBLE_RETURN_DELETE_CANCEL; + ecore_thread_feedback(thread, (void *)ret); + return; + } + if (item_data) { D_MSG("del_msg_id = [%d]", item_data->msgId); *ret = msg_delete_message(pData->msgHandle, item_data->msgId); @@ -228,15 +283,18 @@ static void _del_all_item(PMSG_BUBBLE_DATA pData) { D_ENTER; - MSG_ERROR_T err = MSG_SUCCESS; + msg_error_t err = MSG_SUCCESS; err = msg_delete_thread_message_list(pData->msgHandle, pData->threadId); if (err == MSG_SUCCESS) { pData->bubble_count = 0; - msg_ui_bubble_show_notify(pData, dgettext("sys_string", "IDS_COM_POP_DELETED")); + msg_ui_bubble_show_deleted_info(pData); } else { msg_ui_bubble_show_notify(pData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE")); + + _bubble_show_normal_mode(pData->callback_data); + msg_ui_bubble_list_load(pData); } D_LEAVE; @@ -249,20 +307,346 @@ void msg_ui_bubble_change_normal_navi_control(PMSG_BUBBLE_DATA pData) MSG_COMPOSER_VIEW_DATA_S *cd = pData->callback_data; - msg_ui_bubble_add_normal_control_item(pData); + elm_object_item_signal_emit(cd->navi_it, "elm,state,controlbar,close", ""); + Evas_Object *toolbar = elm_object_item_part_content_unset(cd->navi_it, "controlbar"); + + if (toolbar) + evas_object_del(toolbar); if (cd->back_btn) { evas_object_show(cd->back_btn); - elm_object_item_part_content_set(cd->navi_it, "prev_btn", cd->back_btn); + elm_object_part_content_set(cd->navi_title_layout, "prev_btn", cd->back_btn); } + if (cd->more_btn) { + evas_object_show(cd->more_btn); + elm_object_part_content_set(cd->navi_title_layout, "more_btn", cd->more_btn); + } + + /* change title */ + Evas_Object *content = elm_object_part_content_get(cd->navi_title_layout, "title_btn"); + if (content) { + elm_object_part_content_unset(cd->navi_title_layout, "title_btn"); + evas_object_del(content); + } + + elm_object_part_text_set(cd->navi_title_layout, "title_text", ""); + + if (pData->title_button) + elm_object_part_content_set(cd->navi_title_layout, "title_btn", pData->title_button); + if (pData->msg_type == MSG_TYPE_SMS_WAPPUSH || pData->msg_type == MSG_TYPE_SMS_CB || pData->msg_type == MSG_TYPE_SMS_SYNCML) msg_ui_composer_editable_set(cd, EINA_FALSE); else msg_ui_composer_editable_set(cd, EINA_TRUE); } -void msg_ui_bubble_msg_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE_TYPE_T type, MSG_MSGID_LIST_S *pMsgIdList, void *user_param) +void msg_ui_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_BUBBLE_DATA pData = (PMSG_BUBBLE_DATA)data; + + if (pData->popup) { + evas_object_del(pData->popup); + pData->popup = NULL; + } +} + +static void __msg_ui_bubble_list_popup_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + + BUBBLE_ADDRESS_INFO *addr_info = (BUBBLE_ADDRESS_INFO *)data; + PMSG_BUBBLE_DATA bubble_data = evas_object_data_get(obj, "bubble_data"); + + if (!bubble_data) { + D_EMSG("[ERROR] bubble_data is NULL"); + return; + } + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data; + + if (!cd) { + D_EMSG("[ERROR] composer data is NULL"); + return; + } + + if (bubble_data->popup) { + evas_object_del(bubble_data->popup); + bubble_data->popup = NULL; + } + + const char *label = elm_object_item_text_get((Elm_Object_Item *) event_info); + + if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) { + msg_ui_bubble_launch_voice_call(addr_info->address); + } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) { + msg_ui_bubble_launch_video_call(addr_info->address); + } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")) == 0) { /* Add to contact with phone number string... */ + msg_ui_composer_launch_contact_list_ug(cd, CT_UG_REQUEST_UPDATE_WITH_NUM, addr_info->address); + } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) { + msg_ui_composer_launch_contact_detail_ug(cd, addr_info->contact_id); + } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) { + service_h svc_handle; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, addr_info->address); + + msg_ui_composer_launch_email_create(cd, svc_handle); + if (!cd->loaded_ug) + msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_OPEN")); + + service_destroy(svc_handle); + } + } + + D_LEAVE; +} + +static char *__msg_ui_bubble_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + PMSG_BUBBLE_DATA bubble_data = evas_object_data_get(obj, "bubble_data"); + BUBBLE_ADDRESS_INFO *addr_info = (BUBBLE_ADDRESS_INFO *)data; + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !bubble_data || !addr_info, NULL); + + if (g_strcmp0(part, "elm.text.1") == 0) { + if (addr_info->contact_id > 0 && addr_info->name) + return strdup(addr_info->name); + else if (addr_info->address) + return strdup (addr_info->address); + else + return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + } else if (g_strcmp0(part, "elm.text.2") == 0) { + if (addr_info->address) + return strdup(addr_info->address); + else + return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + } + + return NULL; +} + + +static Evas_Object * __msg_ui_bubble_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + // Currently, this function do nothing, caller_id concept is not determined + // TODO: add callerId + return NULL; +} + +static void __msg_ui_bubble_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data; + Elm_Object_Item *item = NULL; + BUBBLE_ADDRESS_INFO *addr_info = NULL; + + Evas_Object *popup = NULL; + Evas_Object *list = NULL; + Evas_Object *btn_close = NULL; + unsigned char num_type; + + item = (Elm_Object_Item *) event_info; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !item, "Item is NULL or Item is not Message item\n"); + + addr_info = (BUBBLE_ADDRESS_INFO *) elm_object_item_data_get(item); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, addr_info == NULL, "item_data is NULL"); + + elm_genlist_item_selected_set(item, 0); + + + if (bubble_data->popup) { + evas_object_del(bubble_data->popup); + bubble_data->popup = NULL; + } + + num_type = msg_ui_bubble_check_word_type(addr_info->address); + + /** create popup */ + popup = elm_popup_add(cd->navi_bar); + elm_object_style_set(popup, "min_menustyle"); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + btn_close = elm_button_add(popup); + elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE")); + elm_object_part_content_set(popup, "button1", btn_close); + evas_object_smart_callback_add(btn_close, "clicked", msg_ui_popup_close_clicked_cb, bubble_data); + + list = elm_list_add(popup); + elm_list_mode_set(list, ELM_LIST_EXPAND); + + evas_object_data_set(list, "bubble_data", bubble_data); + + if (num_type == WORD_TYPE_NUM) { + elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_CALL"), NULL, NULL, __msg_ui_bubble_list_popup_selected_cb, (void *)addr_info); + elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL"), NULL, NULL, __msg_ui_bubble_list_popup_selected_cb, (void *)addr_info); + } else if (num_type == WORD_TYPE_EMAIL) { + elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL"), NULL, NULL, __msg_ui_bubble_list_popup_selected_cb, (void *)addr_info); + } else { + D_MSG("invalid_numtype"); + } + + if (addr_info->contact_id > 0) { + elm_object_part_text_set(popup, "title,text", addr_info->name); + elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT"), NULL, NULL, __msg_ui_bubble_list_popup_selected_cb, (void *)addr_info); + } else { + elm_object_part_text_set(popup, "title,text", addr_info->address); + elm_list_item_append(list, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, NULL, __msg_ui_bubble_list_popup_selected_cb, (void *)addr_info); + } + + evas_object_size_hint_max_set(list, -1, 512 * elm_scale_get()); + + elm_list_go(list); + elm_object_content_set(popup, list); + evas_object_show(popup); + + bubble_data->popup = popup; + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_bubble_open_title_menu_genlist(PMSG_BUBBLE_DATA bubble_data) +{ + D_ENTER; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ASSERT, !bubble_data, "[ERROR] bubble_data is NULL !!"); + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ASSERT, !cd, "[ERROR] cd is NULL !!"); + int i = 0; + + /** 2. create box -- for setting min. size of genlist.*/ + Evas_Object *box = elm_box_add(cd->content_layout); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + + elm_object_part_content_set(cd->content_layout, "swl.bubble.titlemenu", box); + + /** 3. create genlist */ + Evas_Object *genlist = elm_genlist_add(box); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_genlist_homogeneous_set(genlist, EINA_TRUE); + evas_object_data_set(genlist, "bubble_data", bubble_data); + evas_object_show(genlist); + + elm_box_pack_end(box, genlist); + + /** 3.1 set genlist styles */ + bubble_data->itc_title.item_style = "2text.1icon.2"; + bubble_data->itc_title.func.text_get = __msg_ui_bubble_gl_text_get; + bubble_data->itc_title.func.content_get = __msg_ui_bubble_gl_content_get; + bubble_data->itc_title.func.state_get = NULL; + bubble_data->itc_title.func.del = NULL; + + /** 3.2 genlist list load */ + for (i = 0; i < bubble_data->addr_list.addr_cnt; i++) + elm_genlist_item_append(genlist, &(bubble_data->itc_title), &bubble_data->addr_list.addr_info[i], NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_bubble_gl_sel, bubble_data); + + + bubble_data->title_genlist = genlist; + cd->title_menu_layout = box; + + /** emit signal for changing state of swl.bubble.titlemenu to open */ + elm_object_signal_emit(cd->title_menu_layout, "elm,state,title_menu,open", ""); + + /** Determine genlist size to show - it shows maxmum 3 rows */ + if (bubble_data->addr_list.addr_cnt >= BUBBLE_TITLE_MENU_GENLIST_MAX_LINE) + evas_object_size_hint_min_set(box, 0, BUBBLE_TITLE_MENU_GENLIST_1LINE_HEIGHT * BUBBLE_TITLE_MENU_GENLIST_MAX_LINE); + else + evas_object_size_hint_min_set(box, 0, BUBBLE_TITLE_MENU_GENLIST_1LINE_HEIGHT * bubble_data->addr_list.addr_cnt); + + D_LEAVE; +} + +void msg_ui_bubble_close_title_menu_genlist(PMSG_BUBBLE_DATA bubble_data) +{ + D_ENTER; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ASSERT, !bubble_data, "[ERROR] bubble_data is NULL !!"); + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ASSERT, !cd, "[ERROR] cd is NULL !!"); + + elm_object_signal_emit(cd->title_menu_layout, "elm,state,title_menu,close", ""); + + Evas_Object *layout = elm_object_part_content_unset(cd->content_layout, "swl.bubble.titlemenu"); + if (layout) + evas_object_del(layout); + + D_LEAVE; +} + + +void msg_ui_bubble_title_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + + if (!data) { + D_EMSG("data is NULL"); + return; + } + + MSG_COMPOSER_VIEW_DATA_S *cd = data; + PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; + + if (bubble_data->title_optionheader_opened) { + elm_object_signal_emit(cd->navi_title_layout, "elm,state,title,hide", ""); + + if (cd->title_menu_layout) + msg_ui_bubble_close_title_menu_genlist(bubble_data); + else + elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,close", ""); + } else { + Evas_Object *content = NULL; + + if (cd->navi_optionheader_opened) { + elm_object_signal_emit(cd->navi_title_layout, "elm,state,more,hide", ""); + cd->navi_optionheader_opened = EINA_FALSE; + } + + content = elm_object_item_part_content_unset(cd->navi_it, "optionheader"); + if (content) { + if (content == bubble_data->toolbar) { + int i = 0; + for (i = 0; i < MSG_BUBBLE_CONTROLBAR_ITEM_NUM; i++) { + if (bubble_data->toolbar_item[i] != NULL) { + elm_object_item_del(bubble_data->toolbar_item[i]); + bubble_data->toolbar_item[i] = NULL; + } + } + } + evas_object_del(content); + } + + if (bubble_data->addr_list.addr_cnt == 1) { + Evas_Object *toolbar = msg_ui_bubble_create_toolbar(bubble_data); + + msg_ui_bubble_add_normal_toolbar_item(toolbar, bubble_data); + elm_object_item_part_content_set(cd->navi_it, "optionheader", toolbar); + + bubble_data->toolbar = toolbar; + + elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,open", ""); + + } else if (bubble_data->addr_list.addr_cnt > 1) { + msg_ui_bubble_open_title_menu_genlist(bubble_data); + } else { + D_EMSG("invalid address count [%d]", bubble_data->addr_list.addr_cnt); + return; + } + + elm_object_signal_emit(cd->navi_title_layout, "elm,state,title,show", ""); + } + + bubble_data->title_optionheader_opened = !bubble_data->title_optionheader_opened; + + D_LEAVE; +} + +void msg_ui_bubble_msg_storage_change_cb(msg_handle_t handle, msg_storage_change_type_t type, msg_id_list_s *pMsgIdList, void *user_param) { D_ENTER; @@ -283,18 +667,24 @@ void msg_ui_bubble_msg_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE int i; for (i = 0; i < pMsgIdList->nCount; i++) { - msg_message_t msg = msg_new_message(); - MSG_SENDINGOPT_S sendOpt = {0}; - MSG_ERROR_T err = MSG_SUCCESS; + msg_struct_t msg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + msg_error_t err = MSG_SUCCESS; - err = msg_get_message(BubbleData->msgHandle, pMsgIdList->msgIdList[i], msg, &sendOpt); + err = msg_get_message(BubbleData->msgHandle, pMsgIdList->msgIdList[i], msg, sendOpt); if (err != MSG_SUCCESS) { - msg_release_message(&msg); + msg_release_struct(&msg); + msg_release_struct(&sendOpt); return; } - if (BubbleData->threadId == msg_get_ith_thread_id(msg, 0)) { + int folder_id = 0; + int thread_id = 0; + msg_get_int_value(msg, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); + msg_get_int_value(msg, MSG_MESSAGE_THREAD_ID_INT, &thread_id); + + if (BubbleData->threadId == thread_id && folder_id != MSG_SPAMBOX_ID) { switch (type) { case MSG_STORAGE_CHANGE_INSERT : msg_ui_bubble_list_append(BubbleData, msg); @@ -309,13 +699,65 @@ void msg_ui_bubble_msg_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE } } - msg_release_message(&msg); + msg_release_struct(&msg); + msg_release_struct(&sendOpt); } D_LEAVE; } -void msg_ui_bubble_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info) +void msg_ui_bubble_option_header_delete_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + 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; + + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !bubble_data); + + bubble_data->viewmode = BUBBLE_EDIT_VIEW; + bubble_data->check_cnt = 0; + bubble_data->del_index = 0; + + elm_object_part_content_unset(cd->navi_title_layout, "prev_btn"); + elm_object_part_content_unset(cd->navi_title_layout, "more_btn"); + + if (cd->back_btn) + evas_object_hide(cd->back_btn); + + if (cd->more_btn) + evas_object_hide(cd->more_btn); + + + Eina_List *l; + PMSG_APP_CONV_DATA_S item_data = NULL; + EINA_LIST_FOREACH(bubble_data->realized_list, l, item_data) { + if (item_data) { + Evas_Object *check = NULL; + if (!item_data->chk) { + check = elm_check_add(item_data->ly); + elm_check_state_pointer_set(check, &item_data->isCheck); + evas_object_data_set(check, "item_data", (const void *)item_data); + evas_object_smart_callback_add(check, "changed", msg_ui_bubble_list_checked_cb, (const void *)bubble_data); + evas_object_propagate_events_set(check, EINA_FALSE); + item_data->chk = check; + } + evas_object_event_callback_add(item_data->ly, EVAS_CALLBACK_MOUSE_DOWN, msg_ui_bubble_item_mouse_down_cb, (const void*)item_data); + elm_object_style_set(check, "default/genlist_edit"); + elm_object_part_content_set(item_data->ly, "elm.swallow.select_icon", item_data->chk); + elm_object_signal_emit(item_data->ly, "elm,state,select,enable", "elm"); + } + } + + msg_ui_composer_editable_set(cd, EINA_FALSE); + + _bubble_change_edit_mode_title(bubble_data); + _bubble_add_edit_controlbar(bubble_data); + _bubble_add_navi_select_all_ly(bubble_data); +} + +void msg_ui_bubble_ctlbar_multi_del_cb(void *data, Evas_Object *obj, void *event_info) { D_ENTER; MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); @@ -328,7 +770,8 @@ void msg_ui_bubble_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info pData->check_cnt = 0; pData->del_index = 0; - elm_object_item_part_content_unset(cd->navi_it, "prev_btn"); + elm_object_item_part_content_unset(cd->navi_it, "title_right_btn"); + if (cd->back_btn) { evas_object_hide(cd->back_btn); } @@ -359,6 +802,30 @@ void msg_ui_bubble_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info _bubble_add_navi_select_all_ly(pData); } +void msg_ui_bubble_ctlbar_email_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); + MSG_COMPOSER_VIEW_DATA_S *cd = data; + PMSG_BUBBLE_DATA pData = cd->bubble_data; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData); + + if (pData->addr_list.addr_cnt == 1) { + service_h svc_handle; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, pData->addr_list.addr_info[0].address); + msg_ui_composer_launch_email_create(cd, svc_handle); + if (!cd->loaded_ug) + msg_ui_bubble_show_notify(pData, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_OPEN")); + service_destroy(svc_handle); + } + } +} + void msg_ui_bubble_ctlbar_call_cb(void *data, Evas_Object *obj, void *event_info) { D_ENTER; @@ -367,7 +834,20 @@ void msg_ui_bubble_ctlbar_call_cb(void *data, Evas_Object *obj, void *event_info PMSG_BUBBLE_DATA pData = cd->bubble_data; MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData); - msg_ui_bubble_launch_voice_call(pData->threadAddr); + if (pData->addr_list.addr_cnt == 1) + msg_ui_bubble_launch_voice_call(pData->addr_list.addr_info[0].address); +} + +void msg_ui_bubble_ctlbar_vcall_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); + MSG_COMPOSER_VIEW_DATA_S *cd = data; + PMSG_BUBBLE_DATA pData = cd->bubble_data; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData); + + if (pData->addr_list.addr_cnt == 1) + msg_ui_bubble_launch_video_call(pData->addr_list.addr_info[0].address); } void msg_ui_bubble_ctlbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info) @@ -379,7 +859,8 @@ void msg_ui_bubble_ctlbar_add_to_contact_cb(void *data, Evas_Object *obj, void * PMSG_BUBBLE_DATA pData = cd->bubble_data; MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData); - msg_ui_composer_launch_contact_list_ug(cd, CT_UG_REQUEST_UPDATE_WITH_NUM, pData->threadAddr); + if (pData->addr_list.addr_cnt == 1) + msg_ui_composer_launch_contact_list_ug(cd, CT_UG_REQUEST_UPDATE_WITH_NUM, pData->addr_list.addr_info[0].address); } void msg_ui_bubble_ctlbar_view_ct_detail_cb(void *data, Evas_Object *obj, void *event_info) @@ -392,7 +873,8 @@ void msg_ui_bubble_ctlbar_view_ct_detail_cb(void *data, Evas_Object *obj, void * PMSG_BUBBLE_DATA pData = cd->bubble_data; MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData); - msg_ui_composer_launch_contact_detail_ug(cd, pData->contactId); + if (pData->addr_list.addr_cnt == 1) + msg_ui_composer_launch_contact_detail_ug(cd, pData->addr_list.addr_info[0].contact_id); } void msg_ui_bubble_ctlbar_delete_cb(void *data, Evas_Object *obj, void *event_info) @@ -409,12 +891,16 @@ void msg_ui_bubble_ctlbar_delete_cb(void *data, Evas_Object *obj, void *event_in pData->popup = NULL; } - if (pData->sel_all_checked) + bool isDraft = msg_ui_composer_common_is_send_possible(cd); + + if (pData->sel_all_checked && isDraft == false) { + pData->bubble_count = 0; _del_all_item(pData); - else { + } else { pData->popup = msg_ui_bubble_show_notify_with_progressbar(pData, pData->check_cnt); pData->del_thread = ecore_thread_feedback_run(_del_thread_fn, _del_thread_feedback_fn, NULL, NULL, (void *)pData, EINA_TRUE); } + } @@ -513,6 +999,167 @@ void msg_ui_bubble_item_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, voi evas_object_event_callback_add(item_data->ly, EVAS_CALLBACK_MOUSE_UP, msg_ui_bubble_item_mouse_up_cb, (const void*)item_data); } +#ifdef _BUBBLE_FLICK_EVENT +void msg_ui_bubble_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !event_info); + + Evas_Coord x, y, w, h; + Evas_Event_Mouse_Down *ev = event_info; + int width = 0; + int rotate = 0; + Evas_Coord start_x; + Evas_Coord start_y; + Evas_Coord end_x; + Evas_Coord end_y; + int move_x = 0; + int move_y = 0; + + PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data; + + evas_object_geometry_get(bubble_data->bubble_layout, &x, &y, &w, &h); + + rotate = elm_win_rotation_get(cd->main_window); + if (rotate == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT mode"); + start_x = bubble_data->m_x; + end_x = ev->canvas.x; + start_y = bubble_data->m_y; + end_y = ev->canvas.y; + width = w-x; + } else if (rotate == 180) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT reverse mode"); + start_x = ev->canvas.x; + end_x = bubble_data->m_x; + start_y = bubble_data->m_y; + end_y = ev->canvas.y; + width = w-x; + } else if (rotate == 90) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE mode"); + start_x = ev->canvas.y; + end_x = bubble_data->m_y; + start_y = bubble_data->m_x; + end_y = ev->canvas.x; + width = h-y; + } else if (rotate== 270) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE reverse mode"); + start_x = bubble_data->m_y; + end_x = ev->canvas.y; + start_y = bubble_data->m_x; + end_y = ev->canvas.x; + width = h-y; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid rotation value"); + evas_object_event_callback_del(bubble_data->bubble_layout, EVAS_CALLBACK_MOUSE_UP, msg_ui_bubble_layout_mouse_up_cb); + return; + } + + move_x = abs(start_x - end_x); + move_y = abs(start_y - end_y); + + if (move_x > move_y) { + if (move_x > (width / 3)) { // It should be moved over 1/3 of the screen width to show next/previous converstaions. + int row = 0; + int selected = 0; + msg_struct_list_s peerList = {0,}; + msg_struct_t sortRule = NULL; + msg_struct_list_s addrList = {0,}; + + sortRule = msg_create_struct(MSG_STRUCT_SORT_RULE); + msg_set_int_value(sortRule, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE); + msg_set_bool_value(sortRule, MSG_SORT_RULE_ACSCEND_BOOL, false); + + msg_get_thread_view_list(cd->msg_handle, sortRule, &peerList); + msg_release_struct(&sortRule); + + for (row=0; row < peerList.nCount; row++) { + int thread_id = 0; + msg_get_int_value(peerList.msg_struct_info[row], MSG_THREAD_ID_INT, &thread_id); + + if (bubble_data->threadId == thread_id) { + msg_ui_bubble_init_bubble_list(bubble_data); + if (start_x > end_x) // show next + selected = row+1 < peerList.nCount ? row+1 : 0; + else // show previous + selected = row-1 < 0 ? peerList.nCount-1 : row-1; + + int selecte_thread_id = 0; + msg_get_int_value(peerList.msg_struct_info[selected], MSG_THREAD_ID_INT, &selecte_thread_id); + bubble_data->threadId = selecte_thread_id; + + msg_get_address_list(bubble_data->msgHandle, bubble_data->threadId, &addrList); + + bubble_data->addr_list.addr_cnt = addrList.nCount; + int i = 0; + + /* clear recipient_list of bubble composer */ + msg_ui_composer_recipient_clear_recipient_list(cd); + + for (i=0; i < addrList.nCount; i++) { + int contact_id = 0; + + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, bubble_data->addr_list.addr_info[i].address, DEF_THREAD_ADDR_LEN); + msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id); + + if (contact_id > 0) { + bubble_data->addr_list.addr_info[i].contact_id = contact_id; + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, bubble_data->addr_list.addr_info[i].name, DEF_THREAD_NAME_LEN); + } else { + bubble_data->addr_list.addr_info[i].contact_id = 0; + } + + /* set recipient_list for bubble composer */ + msg_ui_composer_recipient_add_recipient_list(cd, addrList.addrInfo[i].addressVal); + } + + // bubble list update + msg_ui_bubble_list_load(bubble_data); + msg_ui_composer_navi_title_set((void *)cd); + service_h svc_handle; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + char buf[DEF_BUF_LEN_S] = {0,}; + snprintf(buf, DEF_BUF_LEN_L, "%d", bubble_data->threadId); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf); + + ug_send_result(cd->ug, svc_handle); + + service_destroy(svc_handle); + } + + msg_release_list_struct(&addrList); + + break; + } + } + msg_release_list_struct(&peerList); + } + } + evas_object_event_callback_del(bubble_data->bubble_layout, EVAS_CALLBACK_MOUSE_UP, msg_ui_bubble_layout_mouse_up_cb); +} + +void msg_ui_bubble_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + D_ENTER; + + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data; + + Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info; + + if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) + return; + + bubble_data->m_x = ev->canvas.x; + bubble_data->m_y = ev->canvas.y; + + evas_object_event_callback_add(bubble_data->bubble_layout, EVAS_CALLBACK_MOUSE_UP, msg_ui_bubble_layout_mouse_up_cb, (const void*)bubble_data); +} +#endif + void msg_ui_bubble_list_checked_cb(void *data, Evas_Object *obj, void *event_info) { MSG_UI_ENTER(); @@ -599,3 +1246,60 @@ void msg_ui_bubble_scroll_drag_start_cb(void *data, Evas_Object *obj, void *even D_LEAVE; } +void msg_ui_bubble_anchor_menu_click_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); + MSG_COMPOSER_VIEW_DATA_S *cd = data; + PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !bubble_data); + + Elm_Object_Item *item = (Elm_Object_Item *) event_info; + elm_list_item_selected_set(item, 0); + + const char *label = elm_object_item_text_get(item); + const char *title = elm_object_part_text_get(bubble_data->popup, "title,text"); + + if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) { + msg_ui_bubble_launch_voice_call(title); + } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_SEND_MESSAGE")) == 0) { + service_h svc_handle; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, title); + msg_ui_composer_launch_composer_create(cd, svc_handle); + if (!cd->loaded_ug) + msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_OPEN")); + + service_destroy(svc_handle); + } + } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) { + msg_ui_bubble_launch_video_call(title); + } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")) == 0) { /* Add to contact with phone number string... */ + msg_ui_composer_launch_contact_list_ug(cd, CT_UG_REQUEST_UPDATE_WITH_NUM, title); + } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) { + msg_ui_composer_launch_contact_detail_ug(cd, bubble_data->addr_list.addr_info[0].contact_id); + } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) { + service_h svc_handle; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, title); + msg_ui_composer_launch_email_create(cd, svc_handle); + if (!cd->loaded_ug) + msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_OPEN")); + + service_destroy(svc_handle); + } + } + + if (bubble_data->popup) { + evas_object_del(bubble_data->popup); + bubble_data->popup = NULL; + } + + D_LEAVE; +} + diff --git a/composer/src/bubble/msg-ui-composer-bubble-list.c b/composer/src/bubble/msg-ui-composer-bubble-list.c index dfaf67d..1e77f38 100755 --- a/composer/src/bubble/msg-ui-composer-bubble-list.c +++ b/composer/src/bubble/msg-ui-composer-bubble-list.c @@ -18,6 +18,9 @@ #include "appsvc.h" #include "msg-ui-composer-external.h" #include "msg-ui-composer-main.h" +#include "msg-ui-composer-message.h" +#include "msg-ui-composer-common.h" +#include "syspopup_caller.h" bool g_isVisible = false; bool g_isFirstLoading = true; @@ -27,42 +30,6 @@ bool g_isFirstLoading = true; static void __anchor_click_cb(void *data, Evas_Object *obj, void *event_info); static void __longpressed_cb(void *data, Evas_Object *obj, void *event_info); -static char *__msg_ui_get_display_date(time_t *msg_t) -{ - struct tm msg_time, cur_time; - time_t cur_t; - char msg_date_buf[DEF_BUF_LEN] = { '0', }; - char *date_str = NULL; - int diffday = 0, msg_day = 0, cur_day = 0; - - PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_get_bubble_data(); - - cur_t = (time_t) time(NULL); - - localtime_r(msg_t, &msg_time); - localtime_r(&cur_t, &cur_time); - - msg_day = (msg_time.tm_year - 1900) * 365 + msg_time.tm_yday + (msg_time.tm_year - 1900 - 1) / 4; - cur_day = (cur_time.tm_year - 1900) * 365 + cur_time.tm_yday + (cur_time.tm_year - 1900 - 1) / 4; - - diffday = cur_day - msg_day; - - if (diffday == 0) - snprintf(msg_date_buf, sizeof(msg_date_buf), "%s", dgettext("sys_string", "IDS_COM_BODY_TODAY")); - else if (diffday == 1) - snprintf(msg_date_buf, sizeof(msg_date_buf), "%s", dgettext("sys_string", "IDS_COM_BODY_YESTERDAY")); - else { - date_str = msg_common_get_formatted_date(bubble_data->locale, bubble_data->date_ptn, msg_t); - if (date_str) { - strncpy(msg_date_buf, date_str, sizeof(msg_date_buf) - 1); - free(date_str); - } - } - - return strdup(msg_date_buf); - -} - static char *__msg_ui_get_display_time(time_t *msg_t) { if (!msg_t) @@ -90,99 +57,79 @@ static char *__msg_ui_get_display_time(time_t *msg_t) static void __msg_bubble_add_content(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S conv_data) { - - char *token_line = NULL, *token_words = NULL; - char *remain_l = NULL, *remain_w = NULL; - char tmp_buf[DEF_BUF_LEN_L] = { 0, }; bool isMsgText = false; - Eina_Strbuf *msg_data = eina_strbuf_new(); - eina_strbuf_append(msg_data, "<font_size=32>"); - - /* Message Text */ - strncpy(tmp_buf, conv_data->msgText, strlen(conv_data->msgText)); - - token_line = strtok_r(tmp_buf, "\n", &remain_l); - - while (token_line) { - token_words = strtok_r(token_line, " ", &remain_w); + /* Subject */ + if ((conv_data->msgType == MSG_TYPE_MMS || conv_data->msgType == MSG_TYPE_MMS_NOTI)) { + if (conv_data->subject[0] != '\0') { + char *subject = NULL; + eina_strbuf_append(msg_data, "<color=#050288FF>"); - if (isMsgText == false) - isMsgText = true; - while (token_words) { - char *tmp_str = elm_entry_utf8_to_markup(token_words); + subject = elm_entry_utf8_to_markup(conv_data->subject); + eina_strbuf_append(msg_data, subject); - eina_strbuf_append(msg_data, "<color=#4D3A17FF>"); - eina_strbuf_append(msg_data, tmp_str); - - token_words = strtok_r(NULL, " ", &remain_w); - if (token_words) - eina_strbuf_append(msg_data, " "); - - if (tmp_str) - free(tmp_str); - } - - token_line = strtok_r(NULL, "\n", &remain_l); - if (token_line) + if (subject) + free(subject); eina_strbuf_append(msg_data, "<br>"); + } } - /* Message time / Status */ - eina_strbuf_append(msg_data, "<font_size=24>"); - - if (isMsgText) - eina_strbuf_append(msg_data, "<br>"); - - if (conv_data->networkStatus != MSG_NETWORK_SENDING) { - PMSG_APP_CONV_DATA_S prev_data = NULL; - Eina_List *cur_list = NULL, *prev_list = NULL; - char *display_time = NULL; - - display_time = __msg_ui_get_display_time(conv_data->msgTime); - - cur_list = eina_list_data_find_list(bubble_data->bubble_list, (const void *)conv_data); - if (cur_list) - prev_list = cur_list->prev; + /* Message Text */ + eina_strbuf_append(msg_data, "<color=#4D3A17FF>"); + char *tmp_str = elm_entry_utf8_to_markup(conv_data->msgText); + eina_strbuf_append(msg_data, tmp_str); + if (tmp_str) { + isMsgText = true; + free(tmp_str); + } - prev_data = (PMSG_APP_CONV_DATA_S)eina_list_nth(prev_list, 0); + if (conv_data->msgType == MSG_TYPE_MMS) { - if(!prev_data || g_strcmp0(prev_data->displayDate, conv_data->displayDate) != 0) - eina_strbuf_append_printf(msg_data, "<color=#8F783FFF>%s %s", conv_data->displayDate, display_time); - else - eina_strbuf_append_printf(msg_data, "<color=#8F783FFF>%s", display_time); + if (conv_data->attachment_cnt > 0) { + eina_strbuf_append(msg_data, "<font_size=24>"); + eina_strbuf_append_printf(msg_data, "<br><item size=32x32 vsize=full href=file://%s>%d</item>", MSG_BUBBLE_ATTACH_ICON, conv_data->attachment_cnt); + } - if (display_time) - free(display_time); - } + if (conv_data->thumbNailPath[0] != '\0') { + Evas_Object *tmp_obj = NULL; + + int w = 0; + int h = 0; + double rate = 0.0; + + //FIXME :: It should be fixed at elm_image.c + tmp_obj = evas_object_image_filled_add(evas_object_evas_get(conv_data->entry)); + evas_object_image_file_set(tmp_obj, conv_data->thumbNailPath, NULL); + evas_object_image_size_get(tmp_obj, &w, &h); + if (tmp_obj) + evas_object_del(tmp_obj); + + if (w >= h) { + rate = MSG_BUBBLE_IMG_MAX_W / (double) w; + w = MSG_BUBBLE_IMG_MAX_W; + h = h * rate; + } else { + rate = MSG_BUBBLE_IMG_MAX_H / (double)h; + w = h * rate; + h = MSG_BUBBLE_IMG_MAX_H; + } - switch (conv_data->networkStatus) { - case MSG_NETWORK_SEND_FAIL: - eina_strbuf_append(msg_data, " <color=#FF2020FF>"); - eina_strbuf_append(msg_data, dgettext("sys_string", "IDS_COM_POP_SENDING_FAILED")); - break; - case MSG_NETWORK_SENDING: - eina_strbuf_append(msg_data, "<color=#00A200FF>"); - eina_strbuf_append(msg_data, dgettext("sys_string", "IDS_COM_POP_SENDING")); - break; - default: - break; - } + if (isMsgText) + eina_strbuf_append(msg_data, "<br>"); - if (conv_data->direction == MSG_DIRECTION_TYPE_MO && conv_data->networkStatus == MSG_NETWORK_SEND_FAIL) { - eina_strbuf_append_printf(msg_data, - "<br><font_size=32><color=#0500D5FF><align=center><a href=resend.%d><underline=on underline_color=#0500D5FF>(%s)<underline=off></a></font_size></align>", - conv_data->msgId, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_SK_RESEND")); - } + eina_strbuf_append(msg_data, "<font_size=8>"); + eina_strbuf_append_printf(msg_data, "<br><a href=image.%d>", conv_data->msgId); + eina_strbuf_append_printf(msg_data, "<item size=%dx%d vsize=full href=file://%s><br></item></a>", w, h, conv_data->thumbNailPath); + /** <br> between <item>, </item> is needed, if it is not exist, it couldn't use anchor */ + } + } else if (conv_data->msgType == MSG_TYPE_SMS && conv_data->storageId == MSG_STORAGE_SIM) { + if (isMsgText) { + eina_strbuf_append(msg_data, "<font_size=24>"); + eina_strbuf_append(msg_data, "<br>"); + } - if (conv_data->msgType == MSG_TYPE_SMS && conv_data->storageId == MSG_STORAGE_SIM) { eina_strbuf_append_printf(msg_data, "<item size=25x25 vsize=full href=file://%s></item>", MSG_BUBBLE_SIM_MSG_ICON); - } else if (conv_data->msgType == MSG_TYPE_SMS_SYNCML) { - eina_strbuf_append(msg_data, "<br><font_size=8><br></font_size>"); - eina_strbuf_append_printf(msg_data, - "<font_size=32><color=#0500D5FF><align=center><a href=install.%d><underline=on underline_color=#0500D5FF>(%s)</a><underline=off></font_size></align>", - conv_data->msgId, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_INSTALL")); } elm_entry_entry_set(conv_data->entry, eina_strbuf_string_get(msg_data)); @@ -213,6 +160,8 @@ static void __add_bubble_item(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S elm_entry_input_panel_enabled_set(entry, EINA_FALSE); elm_entry_editable_set(entry, EINA_FALSE); elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_NO_IMAGE); + elm_entry_context_menu_disabled_set(entry, EINA_TRUE); + elm_entry_magnifier_disabled_set(entry, EINA_TRUE); conv_data->entry = entry; conv_data->ly = layout; @@ -265,20 +214,89 @@ static void __add_bubble_item(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S } } - -static void __msg_url_clicked_cb(char *content) +static void __msg_image_clicked_cb(PMSG_BUBBLE_DATA bubble_data, char *msgID) { D_ENTER; - MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, content == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !msgID); + + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !bubble_data); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, bubble_data->viewmode != BUBBLE_NORMAL_VIEW, "Not Normal Mode!"); + + msg_error_t err = MSG_SUCCESS; + msg_struct_t msg_t = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + msg_struct_t mms_data = NULL; + msg_list_handle_t page_list = NULL; + msg_struct_t mms_page = NULL; + msg_struct_t mms_media = NULL; + char filepath[DEF_BUF_LEN_L+1] = {0,}; + + int msg_id = atoi(msgID); + int i = 0; + int j = 0; + int pageCnt = 0; + + err = msg_get_message(bubble_data->msgHandle, msg_id, msg_t, sendOpt); + if (err != MSG_SUCCESS) { + D_MSG("err = [%d]", err); + msg_release_struct(&msg_t); + msg_release_struct(&sendOpt); + return; + } + + mms_data = msg_create_struct(MSG_STRUCT_MMS); + err = msg_get_mms_struct(msg_t, mms_data); + if (err != MSG_SUCCESS) { + D_MSG("err = [%d]", err); + goto OUTSIDE_OF_LOOP; + } + + msg_get_list_handle(mms_data, MSG_MMS_PAGE_LIST_HND, (void **)&page_list); + pageCnt = msg_list_length(page_list); + + for (i = 0 ; i < pageCnt; i++) { + mms_page = (msg_struct_t)msg_list_nth_data(page_list, i); + msg_list_handle_t medialist = NULL; + int mediaCnt = 0; + + msg_get_list_handle(mms_page, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist); + mediaCnt = msg_list_length(medialist); - D_MSG("url=%s", content); + for (j = 0; j < mediaCnt; j++) { + int media_type; + mms_media = (msg_struct_t)msg_list_nth_data(medialist, i); + + msg_get_int_value(mms_media, MSG_MMS_MEDIA_TYPE_INT, &media_type); + + if (media_type == MMS_SMIL_MEDIA_IMG) { + goto OUTSIDE_OF_LOOP; + } + } + } - bundle *b = bundle_create(); - appsvc_set_operation(b, APPSVC_OPERATION_VIEW); - appsvc_set_uri(b, content); - appsvc_run_service(b, 0, NULL, NULL); +OUTSIDE_OF_LOOP: + if (mms_media) + msg_get_str_value(mms_media, MSG_MMS_MEDIA_FILEPATH_STR, filepath, sizeof(filepath)-1); + + if (mms_media && filepath[0] != '\0') { + service_h svc_handle; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + service_set_operation(svc_handle, SERVICE_OPERATION_VIEW); + service_set_uri(svc_handle, filepath); + + if (service_send_launch_request(svc_handle, NULL, NULL) < 0) + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request is failed"); + + service_destroy(svc_handle); + } + } + + msg_release_struct(&mms_data); + msg_release_struct(&msg_t); + msg_release_struct(&sendOpt); - bundle_free(b); D_LEAVE; } @@ -289,9 +307,9 @@ static void __msg_install_clicked_cb(PMSG_BUBBLE_DATA bubble_data, int msg_id) D_MSG("syncml message operation, msg id = [%d]", msg_id); - MSG_ERROR_T err = MSG_SUCCESS; + msg_error_t err = MSG_SUCCESS; - err = msg_syncml_message_operation(bubble_data->msgHandle, (MSG_MESSAGE_ID_T) msg_id); + err = msg_syncml_message_operation(bubble_data->msgHandle, (msg_message_id_t) msg_id); if (err != MSG_SUCCESS) D_MSG("msg_syncml_message_operation failed."); @@ -302,49 +320,62 @@ Eina_Bool __resend_idler_cb(void *data) { PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_get_bubble_data(); - msg_message_t failed_msg = msg_new_message(); - MSG_SENDINGOPT_S sendOpt = { 0, }; - MSG_ERROR_T err = MSG_SUCCESS; + msg_struct_t failed_msg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + msg_error_t err = MSG_SUCCESS; + int msg_type = MSG_TYPE_INVALID; int msg_id = (int)data; D_MSG("Re-send message, msg id = [%d]", msg_id); - err = msg_get_message(bubble_data->msgHandle, msg_id, failed_msg, &sendOpt); + err = msg_get_message(bubble_data->msgHandle, msg_id, failed_msg, sendOpt); if (err != MSG_SUCCESS) { D_MSG("msg_get_message is failed."); + msg_release_struct(&sendOpt); + msg_release_struct(&failed_msg); return EINA_FALSE; } - MSG_REQUEST_S req = { 0, failed_msg, sendOpt }; + msg_struct_t req = msg_create_struct(MSG_STRUCT_REQUEST_INFO); + msg_set_struct_handle(req, MSG_REQUEST_MESSAGE_HND, failed_msg); + msg_set_struct_handle(req, MSG_REQUEST_SENDOPT_HND, sendOpt); - if (msg_is_sms(failed_msg)) - err = msg_sms_send_message(bubble_data->msgHandle, &req); + msg_get_int_value(failed_msg, MSG_MESSAGE_TYPE_INT, &msg_type); + + if (msg_is_sms(msg_type)) + err = msg_sms_send_message(bubble_data->msgHandle, req); + else + err = msg_mms_send_message(bubble_data->msgHandle, req); if (err != MSG_SUCCESS) { D_MSG("Send_message is failed."); msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_DETAILSSENDINGFAILED")); } - msg_release_message(&failed_msg); + msg_release_struct(&failed_msg); + msg_release_struct(&sendOpt); + msg_release_struct(&req); bubble_data->resend_idler = NULL; return EINA_FALSE; } -static void __msg_resend_clicked_cb(PMSG_BUBBLE_DATA bubble_data, int msg_id) +void msg_ui_bubble_resend_msg(PMSG_BUBBLE_DATA bubble_data, int msg_id) { D_ENTER; MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, bubble_data == NULL); - PMSG_APP_CONV_DATA_S conv_data = NULL; + PMSG_APP_CONV_DATA_S conv_data = NULL; Eina_List *l; + EINA_LIST_FOREACH(bubble_data->bubble_list, l, conv_data) { if (conv_data) { if (msg_id == conv_data->msgId) { conv_data->networkStatus = MSG_NETWORK_SENDING; msg_ui_bubble_fill_bubble_contents(bubble_data, conv_data); + elm_object_signal_emit(conv_data->ly, "elm,state,contents,disabled", "elm"); break; } } @@ -356,6 +387,69 @@ static void __msg_resend_clicked_cb(PMSG_BUBBLE_DATA bubble_data, int msg_id) D_LEAVE; } +static Eina_Bool __retrieve_idler_cb(void *data) +{ + PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_get_bubble_data(); + + msg_error_t err = MSG_SUCCESS; + int msg_id = (int)data; + msg_struct_t retrieve_msg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + D_MSG("Retrieve mms message, msg id = [%d]", msg_id); + + err = msg_get_message(bubble_data->msgHandle, msg_id, retrieve_msg, sendOpt); + if (err != MSG_SUCCESS) { + D_MSG("msg_get_message is failed."); + return EINA_FALSE; + } + + msg_struct_t req = msg_create_struct(MSG_STRUCT_REQUEST_INFO); + msg_set_struct_handle(req, MSG_REQUEST_MESSAGE_HND, retrieve_msg); + msg_set_struct_handle(req, MSG_REQUEST_SENDOPT_HND, sendOpt); + + err = msg_mms_retrieve_message(bubble_data->msgHandle, req); + + if (err != MSG_SUCCESS) { + D_MSG("msg_mms_retrieve_message is failed."); + msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_RETRIEVING_FAILED")); + } + + msg_release_struct(&retrieve_msg); + msg_release_struct(&sendOpt); + msg_release_struct(&req); + + bubble_data->retrieve_idler = NULL; + + return EINA_FALSE; +} + +static void __msg_retrieve_clicked_cb(PMSG_BUBBLE_DATA bubble_data, int msg_id) +{ + D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, bubble_data == NULL); + + PMSG_APP_CONV_DATA_S conv_data = NULL; + Eina_List *l; + + EINA_LIST_FOREACH(bubble_data->bubble_list, l, conv_data) { + if (conv_data && msg_id == conv_data->msgId) { + Evas_Object *retrieve_btn = elm_object_part_content_get(conv_data->entry, "elm.swallow.end"); + + if (retrieve_btn) + elm_object_disabled_set(retrieve_btn, EINA_TRUE); + + conv_data->networkStatus = MSG_NETWORK_RETRIEVING; + msg_ui_bubble_fill_bubble_contents(bubble_data, conv_data); + break; + } + } + + if (!bubble_data->retrieve_idler) + bubble_data->retrieve_idler = ecore_idler_add(__retrieve_idler_cb, (void *)msg_id); + + D_LEAVE; +} static void __popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info) { @@ -380,6 +474,10 @@ static void __anchor_click_cb(void *data, Evas_Object *obj, void *event_info) if(bubble_data->viewmode != BUBBLE_NORMAL_VIEW) return; + /* Avoiding conflict long_press_menu popup */ + if (bubble_data->popup) + return; + char *token = NULL, *tok_r = NULL; char type[DEF_BUF_LEN] = { 0, }; @@ -392,13 +490,8 @@ static void __anchor_click_cb(void *data, Evas_Object *obj, void *event_info) MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, tok_r == NULL); - if (g_strcmp0(token, "url") == 0) { - __msg_url_clicked_cb(tok_r); - } else if (g_strcmp0(token, "install") == 0) { - __msg_install_clicked_cb(bubble_data, atoi(tok_r)); - } else if (g_strcmp0(token, "resend") == 0) { - __msg_resend_clicked_cb(bubble_data, atoi(tok_r)); - } + if (g_strcmp0(token, "image") == 0) + __msg_image_clicked_cb(bubble_data, tok_r); D_LEAVE; } @@ -421,9 +514,34 @@ static void __msg_copy_clicked_cb(void *data, Evas_Object *obj, void *event_info return; } - char *text = elm_entry_markup_to_utf8(elm_entry_entry_get(conv_data->entry)); + const char *origin_text = elm_entry_entry_get(conv_data->entry); + char *text_temp = NULL; + char *text = NULL; + + if (origin_text) { + text_temp = strdup(origin_text); + const char *startTag = NULL; + if (text_temp) { + startTag = strstr(text_temp, "<item"); + if (startTag != NULL) { + int offset = (int)(startTag-text_temp); + text_temp[offset] = '\0'; + } else { + } + text = elm_entry_markup_to_utf8(text_temp); + g_free(text_temp); + } else { + D_EMSG("text_temp is NULL (strdup error)"); + return; + } + } if (text) { + const char *startTag = strstr(text, "<item"); + if (startTag != NULL) { + int offset = (int)(startTag-text); + text[offset] = '\0'; + } elm_cnp_selection_set(conv_data->entry, ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT, text, strlen(text)); g_free(text); } @@ -438,7 +556,7 @@ static void __msg_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data; PMSG_APP_CONV_DATA_S conv_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(bubble_data->popup, "conv_data"); - MSG_MESSAGE_ID_T msg_id; + msg_message_id_t msg_id; int err; if (bubble_data->popup) { @@ -451,8 +569,9 @@ static void __msg_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event return; } - /** remove thread, if only one bubble exist */ - if (bubble_data->bubble_count == 1) { + bool isDraft = msg_ui_composer_common_is_send_possible((MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data); + + if (bubble_data->bubble_count == 1 && isDraft == false) { bubble_data->bubble_count = 0; err = msg_delete_thread_message_list(bubble_data->msgHandle, bubble_data->threadId); } else { @@ -464,7 +583,7 @@ static void __msg_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event if (err != MSG_SUCCESS) { msg_ui_bubble_show_notify(bubble_data, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE")); } else { - msg_ui_bubble_show_notify(bubble_data, dgettext("sys_string", "IDS_COM_POP_DELETED")); + msg_ui_bubble_show_deleted_info(bubble_data); } return; @@ -544,31 +663,81 @@ static void __msg_forward_clicked_cb(void *data, Evas_Object *obj, void *event_i } char buf[DEF_BUF_LEN_S] = { 0, }; - bundle *b = NULL; - b = bundle_create(); - if (b) { + service_h svc_handle; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { snprintf(buf, sizeof(buf), "%d", conv_data->msgId); - bundle_add(b, MSG_BUNDLE_KEY_FORWARD, buf); - msg_ui_composer_launch_composer_create(cd, b); - bundle_free(b); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FORWARD, buf); + msg_ui_composer_launch_composer_create(cd, svc_handle); + service_destroy(svc_handle); + } + D_LEAVE; +} + +static void __msg_move_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); + + PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data; + PMSG_APP_CONV_DATA_S conv_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data"); + + if (bubble_data->popup) { + evas_object_del(bubble_data->popup); + bubble_data->popup = NULL; + } + + if (!conv_data) { + D_EMSG("conv_data is NULL"); + msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_MOVE")); + return; + } + + msg_error_t err = MSG_SUCCESS; + + if (conv_data->msgType == MSG_TYPE_SMS) { + if (conv_data->storageId == MSG_STORAGE_PHONE) { + err = msg_move_msg_to_storage(bubble_data->msgHandle, conv_data->msgId, MSG_STORAGE_SIM); + } else if (conv_data->storageId == MSG_STORAGE_SIM) { + err = msg_move_msg_to_storage(bubble_data->msgHandle, conv_data->msgId, MSG_STORAGE_PHONE); + } else { + D_EMSG("invalid storage id [%d]", conv_data->storageId); + msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_MOVE")); + return; + } + } else { + D_EMSG("invalid msg_type [%d]", conv_data->msgType); + msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_MOVE")); + return; + } + + if (err == MSG_SUCCESS) { + msg_ui_bubble_show_notify(bubble_data, dgettext("sys_string", "IDS_COM_POP_MOVED")); + msg_ui_bubble_list_load(bubble_data); + } else { + msg_ui_bubble_show_notify(bubble_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_UNABLE_TO_MOVE")); } D_LEAVE; } + static void __longpressed_cb(void *data, Evas_Object *obj, void *event_info) { D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data; MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !cd); Evas_Object *popup = NULL; Evas_Object *list = NULL; char title[DEF_THREAD_ADDR_LEN+1] = {0,}; - int length = 0; PMSG_APP_CONV_DATA_S conv_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data"); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !conv_data); /** create popup */ popup = elm_popup_add(cd->main_window); @@ -581,22 +750,10 @@ static void __longpressed_cb(void *data, Evas_Object *obj, void *event_info) /** set popup title */ /** Sender: contents ... ex> "01012341234: Hello......" */ - if (bubble_data->contactId > 0) { - if (bubble_data->threadName[0] != '\0') - strncpy(title, bubble_data->threadName, DEF_THREAD_ADDR_LEN); - else - strncpy(title,dgettext("sys_string", "IDS_COM_BODY_NO_NAME"), DEF_THREAD_ADDR_LEN); - } else { - if (bubble_data->threadAddr[0] != '\0') - strncpy(title, bubble_data->threadAddr, DEF_THREAD_ADDR_LEN); - else - strncpy(title, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"), DEF_THREAD_ADDR_LEN); - } - - length = DEF_THREAD_ADDR_LEN - strlen(title); - strncat(title, ": ", 2); - length = length + 2; - strncat(title, conv_data->msgText, length); + if (bubble_data->threadName[0] != '\0') + snprintf(title, DEF_THREAD_ADDR_LEN, "%s: %s", bubble_data->threadName, conv_data->msgText); + else + snprintf(title, DEF_THREAD_ADDR_LEN, "%s: %s", dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"), conv_data->msgText); /** create menu list */ list = elm_list_add(cd->main_window); @@ -609,6 +766,14 @@ static void __longpressed_cb(void *data, Evas_Object *obj, void *event_info) elm_list_item_append(list, dgettext("sys_string", "IDS_COM_SK_DELETE"), NULL, NULL, __msg_delete_clicked_cb, bubble_data); elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_FORWARD"), NULL, NULL, __msg_forward_clicked_cb, bubble_data); + if (conv_data->msgType == COMPOSER_MSG_TYPE_SMS) { + if (conv_data->storageId == MSG_STORAGE_PHONE) + elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_MOVE_TO_SIM"), NULL, NULL, __msg_move_clicked_cb, bubble_data); + else if (conv_data->storageId == MSG_STORAGE_SIM) + elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_MOVE_TO_PHONE"), NULL, NULL, __msg_move_clicked_cb, bubble_data); + + } + elm_list_go(list); elm_object_part_text_set(popup,"title,text",title); @@ -627,40 +792,49 @@ static void __longpressed_cb(void *data, Evas_Object *obj, void *event_info) } -static void __set_msg_data_by_conv_data(PMSG_APP_CONV_DATA_S conv_data, msg_message_t msgInfo) +static void __set_msg_data_by_conv_data(PMSG_APP_CONV_DATA_S conv_data, msg_struct_t msgInfo) { MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !conv_data || !msgInfo); - const char *msg_body = NULL; char *msg_date = NULL; - conv_data->msgId = msg_get_message_id(msgInfo); - conv_data->msgType = msg_get_message_type(msgInfo); - conv_data->storageId = msg_get_storage_id(msgInfo); + msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, (int *)(&conv_data->msgId)); + msg_get_int_value(msgInfo, MSG_MESSAGE_TYPE_INT, &conv_data->msgType); + msg_get_int_value(msgInfo, MSG_MESSAGE_STORAGE_ID_INT, (int *)(&conv_data->storageId)); if (conv_data->msgTime == NULL) conv_data->msgTime = (time_t *) calloc(1, sizeof(time_t)); if (conv_data->msgTime) { + PMSG_BUBBLE_DATA bubble_data = msg_ui_bubble_get_bubble_data(); + bzero(conv_data->msgTime,sizeof(time_t)); - memcpy(conv_data->msgTime, msg_get_time(msgInfo), sizeof(time_t)); - msg_date = __msg_ui_get_display_date(conv_data->msgTime); + msg_get_int_value(msgInfo, MSG_MESSAGE_DISPLAY_TIME_INT, (int *)conv_data->msgTime); + msg_date = msg_common_get_display_date(bubble_data->locale, bubble_data->date_ptn, conv_data->msgTime); snprintf(conv_data->displayDate, sizeof(conv_data->displayDate), "%s", msg_date); if (msg_date) free(msg_date); } - conv_data->networkStatus = msg_get_network_status(msgInfo); - conv_data->bRead = msg_is_read(msgInfo); - conv_data->bProtected = msg_is_protected(msgInfo); - conv_data->direction = msg_get_direction_info(msgInfo); + msg_get_int_value(msgInfo, MSG_MESSAGE_NETWORK_STATUS_INT, (int *)(&conv_data->networkStatus)); + msg_get_bool_value(msgInfo, MSG_MESSAGE_READ_BOOL, &conv_data->bRead); + msg_get_bool_value(msgInfo, MSG_MESSAGE_PROTECTED_BOOL, &conv_data->bProtected); + msg_get_int_value(msgInfo, MSG_MESSAGE_DIRECTION_INT, &conv_data->direction); - msg_body = msg_sms_get_message_body(msgInfo); + bzero(conv_data->thumbNailPath, sizeof(conv_data->thumbNailPath)); + msg_get_str_value(msgInfo, MSG_MESSAGE_THUMBNAIL_PATH_STR, conv_data->thumbNailPath, DEF_IMG_PATH_LEN); - bzero(conv_data->msgText, sizeof(conv_data->msgText)); + bzero(conv_data->subject, sizeof(conv_data->subject)); + msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, conv_data->subject, DEF_BUF_LEN_S); - if (msg_body) - strncpy(conv_data->msgText, msg_body, DEF_MAX_MSG_TEXT_LEN); + if (conv_data->msgType == MSG_TYPE_MMS) { + msg_get_str_value(msgInfo, MSG_MESSAGE_SMS_DATA_STR, conv_data->msgText, DEF_MAX_MSG_TEXT_LEN); /** get body text */ + msg_get_int_value(msgInfo, MSG_MESSAGE_ATTACH_COUNT_INT, &conv_data->attachment_cnt); /** get attachment count */ + } else if (conv_data->msgType == MSG_TYPE_MMS_NOTI) { + bzero(conv_data->msgText, sizeof(conv_data->msgText)); + } else { + msg_get_str_value(msgInfo, MSG_MESSAGE_SMS_DATA_STR, conv_data->msgText, DEF_MAX_MSG_TEXT_LEN); + } } static int __calc_scroller_geometry(PMSG_BUBBLE_DATA bubble_data) @@ -690,13 +864,232 @@ static Eina_Bool __unfreeze_scroller_cb(void *data) return ECORE_CALLBACK_CANCEL; } -void msg_ui_bubble_fill_bubble_contents(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S item_data) +void __msg_resend_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + + PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data; + PMSG_APP_CONV_DATA_S item_data = NULL; + + item_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data"); + + msg_ui_bubble_resend_msg(bubble_data, item_data->msgId); + + D_LEAVE; +} + +void __msg_install_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + + PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data; + PMSG_APP_CONV_DATA_S item_data = NULL; + + item_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data"); + + __msg_install_clicked_cb(bubble_data, item_data->msgId); + + D_LEAVE; +} + +void __msg_retrieve_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + + PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data; + PMSG_APP_CONV_DATA_S item_data = NULL; + + item_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data"); + + __msg_retrieve_clicked_cb(bubble_data, item_data->msgId); + + D_LEAVE; +} + +void __msg_more_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) { D_ENTER; - if (!bubble_data || !item_data) return; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, bubble_data->viewmode != BUBBLE_NORMAL_VIEW); + + + PMSG_APP_CONV_DATA_S item_data = NULL; + item_data = (PMSG_APP_CONV_DATA_S)evas_object_data_get(obj, "conv_data"); + + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !item_data); + + int BatteryStatus; + + vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &BatteryStatus); + D_MSG("Battery status = [%d]", BatteryStatus); + + if (BatteryStatus == VCONFKEY_SYSMAN_BAT_POWER_OFF) { + msg_ui_bubble_show_notify(bubble_data, dgettext("sys_string", "IDS_COM_BODY_LOW_BATTERY")); + } else { + service_h svc_handle; + char msgId[DEF_BUF_LEN_S] = {0,}; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + snprintf(msgId, DEF_BUF_LEN_S, "%d", item_data->msgId); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, msgId); + msg_ui_composer_launch_viewer_create(bubble_data->callback_data, svc_handle); + service_destroy(svc_handle); + } + } +} +void msg_ui_bubble_fill_bubble_contents(PMSG_BUBBLE_DATA bubble_data, PMSG_APP_CONV_DATA_S item_data) +{ + D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, !bubble_data || !item_data); + char time_status_str[DEF_BUF_LEN + DEF_BUF_LEN_S + 1] = {0, }; + char *time_str = NULL; __msg_bubble_add_content(bubble_data, item_data); + + if (item_data->msgType == MSG_TYPE_MMS) { + Evas_Object *prev_obj = NULL; + Evas_Object *media_layout = elm_layout_add(item_data->entry); + + elm_layout_file_set(media_layout, MSGC_UI_DEFAULT_EDJ, MSGC_EDJ_GRP_BUBBLE_MEDIA_LAYOUT); + + prev_obj = elm_object_part_content_get(item_data->entry, "elm.swallow.end"); + if (prev_obj) { + elm_object_part_content_unset(item_data->entry, "elm.swallow.end"); + evas_object_del(prev_obj); + } + + if (item_data->networkStatus == MSG_NETWORK_SEND_SUCCESS || item_data->networkStatus == MSG_NETWORK_SEND_FAIL || item_data->networkStatus == MSG_NETWORK_RETRIEVE_SUCCESS) { + /** add more button */ + Evas_Object *more_btn = elm_button_add(media_layout); + elm_object_style_set(more_btn, "reveal"); + evas_object_data_set(more_btn, "conv_data", item_data); + evas_object_smart_callback_add(more_btn, "clicked", __msg_more_btn_clicked_cb, bubble_data); + + elm_object_part_content_set(media_layout, "bubble.swallow.more", more_btn); + + evas_object_show(more_btn); + } + + evas_object_show(media_layout); + elm_object_part_content_set(item_data->entry, "elm.swallow.end", media_layout); + } else if (item_data->msgType == MSG_TYPE_MMS_NOTI && item_data->networkStatus != MSG_NETWORK_RETRIEVE_SUCCESS && item_data->networkStatus != MSG_NETWORK_RETRIEVING) { + Evas_Object *prev_obj = NULL; + Evas_Object *retrieve_btn = NULL; + prev_obj = elm_object_part_content_get(item_data->entry, "elm.swallow.end"); + if (prev_obj) { + elm_object_part_content_unset(item_data->entry, "elm.swallow.end"); + evas_object_del(prev_obj); + } + + retrieve_btn = elm_button_add(item_data->entry); + elm_object_text_set(retrieve_btn, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_RETRIEVE")); + evas_object_data_set(retrieve_btn, "conv_data", item_data); + + evas_object_smart_callback_add(retrieve_btn, "clicked", __msg_retrieve_btn_clicked_cb, bubble_data); + + elm_object_part_content_set(item_data->entry, "elm.swallow.end", retrieve_btn); + } else if (item_data->msgType == MSG_TYPE_SMS_SYNCML) { + Evas_Object *prev_obj = NULL; + Evas_Object *install_btn = NULL; + prev_obj = elm_object_part_content_get(item_data->entry, "elm.swallow.end"); + if (prev_obj) { + elm_object_part_content_unset(item_data->entry, "elm.swallow.end"); + evas_object_del(prev_obj); + } + + install_btn = elm_button_add(item_data->entry); + elm_object_text_set(install_btn, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_INSTALL")); + evas_object_data_set(install_btn, "conv_data", item_data); + + evas_object_smart_callback_add(install_btn, "clicked", __msg_install_btn_clicked_cb, bubble_data); + + elm_object_part_content_set(item_data->entry, "elm.swallow.end", install_btn); + } + + if (item_data->direction == MSG_DIRECTION_TYPE_MO && item_data->networkStatus == MSG_NETWORK_SEND_FAIL) { + /** create & show resend button */ + Evas_Object *resend_btn = elm_button_add(item_data->ly); + elm_object_style_set(resend_btn, "send"); + elm_object_part_content_set(item_data->ly, "elm.swallow.icon2", resend_btn); + + evas_object_data_set(resend_btn, "conv_data", item_data); + evas_object_smart_callback_add(resend_btn, "clicked", __msg_resend_btn_clicked_cb, bubble_data); + + /** create & show delete button */ + Evas_Object *del_btn = elm_button_add(item_data->ly); + elm_object_style_set(del_btn, "cancel"); + elm_object_part_content_set(item_data->ly, "elm.swallow.icon1", del_btn); + + evas_object_data_set(del_btn, "conv_data", item_data); + evas_object_smart_callback_add(del_btn, "clicked", __msg_delete_clicked_cb, bubble_data); + + /** elm.swallow.icon1 & elm.swallow.icon2 will be shown only when state is "content_on" */ + /** "elm,state,contents,enabled" signal make bubble state to "content_on" */ + elm_object_signal_emit(item_data->ly, "elm,state,contents,enabled", "elm"); + + evas_object_show(resend_btn); + evas_object_show(del_btn); + + item_data->del_button = del_btn; + item_data->resend_button = resend_btn; + } + + /** Network status (Sending, Retrieving); */ + switch (item_data->networkStatus) { + case MSG_NETWORK_SEND_FAIL: + case MSG_NETWORK_RETRIEVE_FAIL: + /** elm.text.status */ + strncpy(time_status_str, dgettext("sys_string", "IDS_COM_POP_FAILED"), sizeof(time_status_str)-1); + break; + case MSG_NETWORK_SENDING: + case MSG_NETWORK_RETRIEVING: + /** Add progress icon */ + if (item_data->progressbar) { + evas_object_del(item_data->progressbar); + item_data->progressbar = NULL; + } + + item_data->progressbar = elm_progressbar_add(item_data->entry); + elm_object_style_set(item_data->progressbar, "list_process_small"); + evas_object_show(item_data->progressbar); + elm_progressbar_pulse(item_data->progressbar, EINA_TRUE); + elm_object_part_content_set(item_data->entry, "elm.swallow.icon1", item_data->progressbar); + + elm_object_signal_emit(item_data->entry, "elm,state,text,status,disabled", "elm"); + elm_object_signal_emit(item_data->entry, "elm,state,content,status,enabled", "elm"); + + + break; + default: + /** display time */ + time_str = __msg_ui_get_display_time(item_data->msgTime); + if (time_str) { + strncpy(time_status_str, time_str, sizeof(time_status_str)-1); + free(time_str); + } else { + /** This "else" case is for avoiding NULL of the time_status_str */ + /** if time_status_str is NULL, it could be shown progress icon although it's not sending or retrieving */ + strncpy(time_status_str, item_data->displayDate, sizeof(time_status_str)-1); + } + break; + } + + if (time_status_str[0] != '\0') { + if (item_data->progressbar) { + evas_object_del(item_data->progressbar); + item_data->progressbar = NULL; + } + + elm_object_part_text_set(item_data->entry, "elm.text.time", time_status_str); + elm_object_signal_emit(item_data->entry, "elm,state,text,status,enabled", "elm"); + elm_object_signal_emit(item_data->entry, "elm,state,content,status,disabled", "elm"); + } + } Eina_Bool msg_ui_bubble_item_load_cb(void *data) @@ -740,6 +1133,23 @@ Eina_Bool msg_ui_bubble_item_load_cb(void *data) elm_scroller_gravity_set(bubble_data->scrl, 0.0, 1.0); __add_bubble_item(bubble_data, item_data, MSG_BOX_PACK_START, NULL); + + /* add date seperator */ + PMSG_APP_CONV_DATA_S prev_data = NULL; + Evas_Object * layout = NULL; + prev_data = (PMSG_APP_CONV_DATA_S) eina_list_nth(bubble_data->bubble_list, bubble_data->bubble_index-1); + + if((!prev_data || g_strcmp0(prev_data->displayDate, item_data->displayDate) != 0)) { + layout = elm_layout_add(bubble_data->box); + elm_layout_file_set(layout, MSGC_UI_DEFAULT_EDJ, "composer/content/bubble/date_line"); + elm_object_part_text_set(layout, "elm.text.date", item_data->displayDate); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout,EVAS_HINT_FILL,EVAS_HINT_FILL); + evas_object_show(layout); + + elm_box_pack_start(bubble_data->box, layout); + } + bubble_data->realized_list = eina_list_append(bubble_data->realized_list, item_data); bubble_data->bubble_index--; @@ -769,9 +1179,9 @@ void msg_ui_bubble_list_load(PMSG_BUBBLE_DATA bubble_data) MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !bubble_data); - MSG_ERROR_T err = MSG_SUCCESS; + msg_error_t err = MSG_SUCCESS; MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data; - MSG_LIST_S msg_list; + msg_struct_list_s msg_list; PMSG_APP_CONV_DATA_S item_data = NULL; int i; @@ -788,27 +1198,55 @@ void msg_ui_bubble_list_load(PMSG_BUBBLE_DATA bubble_data) bubble_data->bubble_count = msg_list.nCount; if (bubble_data->bubble_count <= 0) { - msg_release_message_list(&msg_list); + msg_release_list_struct(&msg_list); return; } - for (i = 0; i < bubble_data->bubble_count; i++) { + int folder_id = MSG_MAX_FOLDER_ID; + int msg_id = 0; + + for (i = 0; i < msg_list.nCount; i++) { + msg_get_int_value(msg_list.msg_struct_info[i], MSG_MESSAGE_FOLDER_ID_INT, &folder_id); + + if (folder_id == MSG_DRAFT_ID) { + msg_get_int_value(msg_list.msg_struct_info[i], MSG_MESSAGE_ID_INT, &msg_id); + D_MSG("msg_id = %d is a draft message", msg_id); + + bubble_data->bubble_count--; + bubble_data->isDraft = true; + + continue; + } + item_data = (PMSG_APP_CONV_DATA_S) calloc(1, sizeof(MSG_APP_CONV_DATA_S)); - __set_msg_data_by_conv_data(item_data, msg_list.msgInfo[i]); + __set_msg_data_by_conv_data(item_data, msg_list.msg_struct_info[i]); bubble_data->bubble_list = eina_list_append(bubble_data->bubble_list, (const void *)item_data); + } - if (i == (bubble_data->bubble_count-1)) { - bubble_data->msg_type = item_data->msgType; - if (bubble_data->msg_type == MSG_TYPE_SMS_WAPPUSH || bubble_data->msg_type == MSG_TYPE_SMS_CB || bubble_data->msg_type == MSG_TYPE_SMS_SYNCML) - msg_ui_composer_editable_set(cd, EINA_FALSE); - else - msg_ui_composer_editable_set(cd, EINA_TRUE); + /* load last draft message */ + if (bubble_data->isDraft) { + D_MSG("last draft msgid is %d", msg_id); - } + cd->loading_draft = true; + + msg_ui_composer_message_init(); + msg_ui_composer_message_load_message(cd->msg_handle, msg_id); + msg_ui_composer_message_set_loaded_data(cd); + msg_ui_composer_message_destroy(); + + cd->loading_draft = false; + } + + if (item_data) { + bubble_data->msg_type = item_data->msgType; + if (bubble_data->msg_type == MSG_TYPE_SMS_WAPPUSH || bubble_data->msg_type == MSG_TYPE_SMS_CB || bubble_data->msg_type == MSG_TYPE_SMS_SYNCML) + msg_ui_composer_editable_set(cd, EINA_FALSE); + else + msg_ui_composer_editable_set(cd, EINA_TRUE); } - msg_release_message_list(&msg_list); + msg_release_list_struct(&msg_list); bubble_data->bubble_index = bubble_data->bubble_count - 1; // bubble_index : Message index to append on box. bubble_data->load_animator = ecore_animator_add(msg_ui_bubble_item_load_cb, (const void *)bubble_data); @@ -833,23 +1271,31 @@ void msg_ui_bubble_list_data_update(PMSG_BUBBLE_DATA bubble_data) MSG_UI_LEAVE(); } -void msg_ui_bubble_item_data_update(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg) +void msg_ui_bubble_item_data_update(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg) { MSG_UI_ENTER(); PMSG_APP_CONV_DATA_S item_data = NULL; + int msg_id = 0 ; + time_t msgTime = 0; + msg_get_int_value(msg, MSG_MESSAGE_ID_INT, &msg_id); + msg_get_int_value(msg, MSG_MESSAGE_DISPLAY_TIME_INT, (int *)(&msgTime)); + Eina_List *l = NULL; EINA_LIST_FOREACH (bubble_data->bubble_list, l, item_data) { if (item_data) { - if (item_data->msgId == msg_get_message_id(msg)) { - + if (item_data->msgId == msg_id) { if (bubble_data->ug_state != BUBBLE_UG_PAUSE) - msg_update_read_status(bubble_data->msgHandle, msg_get_message_id(msg), true); - - __set_msg_data_by_conv_data(item_data, msg); - msg_ui_bubble_fill_bubble_contents(bubble_data, item_data); - + msg_update_read_status(bubble_data->msgHandle, msg_id, true); + + if ( *item_data->msgTime != msgTime ){ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "item_data->msgTime = %d and msgTime = %d", *item_data->msgTime, msgTime); + msg_ui_bubble_list_item_move(bubble_data, msg); + } else { + __set_msg_data_by_conv_data(item_data, msg); + msg_ui_bubble_fill_bubble_contents(bubble_data, item_data); + } break; } } @@ -916,14 +1362,18 @@ Eina_Bool msg_ui_bubble_item_add_cb(void *data) } -void msg_ui_bubble_list_append(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg) +void msg_ui_bubble_list_append(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg) { MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !bubble_data); + int msg_id = 0; Eina_List *l = NULL; PMSG_APP_CONV_DATA_S item_data = NULL; + + msg_get_int_value(msg, MSG_MESSAGE_ID_INT, &msg_id); + EINA_LIST_FOREACH(bubble_data->bubble_list, l, item_data) { - if (item_data && item_data->msgId == msg_get_message_id(msg)) + if (item_data && item_data->msgId == msg_id) return; } @@ -950,20 +1400,23 @@ void msg_ui_bubble_list_append(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg) D_LEAVE; } -void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t msg) +void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_struct_t msg) { MSG_UI_ENTER(); MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !bubble_data); + int msg_id = 0; PMSG_APP_CONV_DATA_S prev_data = NULL; PMSG_APP_CONV_DATA_S insert_data = NULL; BUBBLE_PACK_INFO *add_pack_info = NULL; + msg_get_int_value(msg, MSG_MESSAGE_ID_INT, &msg_id); + Eina_List *l; EINA_LIST_FOREACH(bubble_data->added_list, l, add_pack_info) { if (add_pack_info) { - if (add_pack_info->add_item->msgId == msg_get_message_id(msg)) { + if (add_pack_info->add_item->msgId == msg_id) { bubble_data->added_list = eina_list_remove(bubble_data->added_list, (const void *)add_pack_info); free(add_pack_info); break; @@ -973,7 +1426,7 @@ void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t ms EINA_LIST_FOREACH(bubble_data->bubble_list, l, prev_data) { if (prev_data) { - if (prev_data->msgId == msg_get_message_id(msg)) { + if (prev_data->msgId == msg_id) { if (eina_list_data_find(bubble_data->realized_list, (const void *)prev_data)) { elm_box_unpack(bubble_data->box, prev_data->ly); evas_object_hide(prev_data->ly); @@ -984,9 +1437,12 @@ void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t ms bubble_data->bubble_list = eina_list_remove(bubble_data->bubble_list, (const void *)prev_data); + bubble_data->bubble_count--; + if (prev_data) { if (prev_data->msgTime) free(prev_data->msgTime); + free(prev_data); } break; @@ -1017,3 +1473,32 @@ void msg_ui_bubble_list_item_move(PMSG_BUBBLE_DATA bubble_data, msg_message_t ms MSG_UI_LEAVE(); } +void msg_ui_bubble_delete_msg(PMSG_BUBBLE_DATA bubble_data, int msg_id) +{ + D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !bubble_data); + int err; + + if (bubble_data->popup) { + evas_object_del(bubble_data->popup); + bubble_data->popup = NULL; + } + + bool isDraft = msg_ui_composer_common_is_send_possible((MSG_COMPOSER_VIEW_DATA_S *)bubble_data->callback_data); + + if (bubble_data->bubble_count == 1 && isDraft == false) { + bubble_data->bubble_count = 0; + err = msg_delete_thread_message_list(bubble_data->msgHandle, bubble_data->threadId); + } else { + err = msg_delete_message(bubble_data->msgHandle, msg_id); + msg_ui_bubble_list_load(bubble_data); + } + + if (err != MSG_SUCCESS) { + msg_ui_bubble_show_notify(bubble_data, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE")); + } else { + msg_ui_bubble_show_deleted_info(bubble_data); + } + + return; +} diff --git a/composer/src/bubble/msg-ui-composer-bubble-main.c b/composer/src/bubble/msg-ui-composer-bubble-main.c index 7f4c019..f47c686 100755 --- a/composer/src/bubble/msg-ui-composer-bubble-main.c +++ b/composer/src/bubble/msg-ui-composer-bubble-main.c @@ -15,33 +15,53 @@ */ #include "msg-ui-composer-bubble.h" +#include "msg-ui-composer-data.h" PMSG_BUBBLE_DATA g_bubble_data; -static int _parse_bundle_data(PMSG_BUBBLE_DATA bubble_data, bundle *data) +static int _parse_bundle_data(PMSG_BUBBLE_DATA bubble_data, service_h svc_handle) { D_ENTER; - if (!data) + if (!svc_handle) return -1; - const char *thread_id = NULL; - const char *contact_id = NULL; + char *thread_id = NULL; + msg_struct_t threadInfo = NULL; + int err; - thread_id = bundle_get_val(data, MSG_BUNDLE_KEY_THREAD_ID); - bubble_data->threadId = thread_id?(MSG_THREAD_ID_T)atoi(thread_id):0; + service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, &thread_id); + bubble_data->threadId = thread_id?(msg_thread_id_t)atoi(thread_id):0; MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread ID from bundle data=%d", bubble_data->threadId); - snprintf(bubble_data->threadAddr, DEF_THREAD_ADDR_LEN, "%s", bundle_get_val(data, MSG_BUNDLE_KEY_THREAD_ADDRESS)); - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Adress from bundle data=%s", bubble_data->threadAddr); + msg_struct_list_s addrList; + int i = 0; + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + + err = msg_get_address_list(bubble_data->msgHandle, bubble_data->threadId, &addrList); + if (err == MSG_SUCCESS) { + bubble_data->addr_list.addr_cnt = addrList.nCount; + + for (i =0; i<addrList.nCount; i++) { + msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &bubble_data->addr_list.addr_info[i].contact_id); + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, bubble_data->addr_list.addr_info[i].name, DEF_THREAD_NAME_LEN); + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, bubble_data->addr_list.addr_info[i].address, DEF_THREAD_ADDR_LEN); + } + + msg_release_list_struct(&addrList); - snprintf(bubble_data->threadName, DEF_THREAD_NAME_LEN, "%s", bundle_get_val(data, MSG_BUNDLE_KEY_THREAD_NAME)); - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Name from bundle data=%s", bubble_data->threadName); + } else { + D_MSG("[ERROR] msg_get_address_list return error [%d]", err); + } - contact_id = bundle_get_val(data, MSG_BUNDLE_KEY_CONTACT_ID); - bubble_data->contactId = contact_id? atoi(contact_id):0; + threadInfo = msg_create_struct(MSG_STRUCT_THREAD_INFO); + err = msg_get_thread(bubble_data->msgHandle, bubble_data->threadId, threadInfo); + if (err == MSG_SUCCESS) + msg_get_str_value(threadInfo, MSG_THREAD_NAME_STR, bubble_data->threadName, DEF_THREAD_NAME_LEN); + else + D_MSG("[ERROR] msg_get_thread return error [%d]", err); - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "contact ID from bundle data=%d", bubble_data->contactId); + msg_release_struct(&threadInfo); D_LEAVE; return 0; @@ -51,34 +71,55 @@ static int _parse_bundle_with_msg_id(PMSG_BUBBLE_DATA bubble_data, int msgId) { D_ENTER; - MSG_ERROR_T err = MSG_SUCCESS; - msg_message_t msgInfo; - MSG_SENDINGOPT_S sendOpt = { 0, }; - - msgInfo = msg_new_message(); + msg_error_t err = MSG_SUCCESS; + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + msg_struct_list_s addrList; + int i = 0; D_MSG("Message ID from bundle = %d", msgId); - err = msg_get_message(bubble_data->msgHandle, msgId, msgInfo, &sendOpt); - MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS, -1); - - D_MSG("Address count = %d", msg_get_address_count(msgInfo)); + err = msg_get_message(bubble_data->msgHandle, msgId, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + D_EMSG("msg_get_message is failed err = %d", err); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return -1; + } - bubble_data->threadId = msg_get_ith_thread_id(msgInfo, 0); + msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, (int *)(&bubble_data->threadId)); MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread ID from bundle data=%d", bubble_data->threadId); - snprintf(bubble_data->threadAddr, DEF_THREAD_ADDR_LEN, "%s", msg_get_ith_address(msgInfo, 0)); - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Adress from bundle data=%s", bubble_data->threadAddr); + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + msg_get_address_list(bubble_data->msgHandle, bubble_data->threadId, &addrList); - snprintf(bubble_data->threadName, DEF_THREAD_NAME_LEN, "%s", msg_get_ith_name(msgInfo, 0)); - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Name from bundle data=%s", bubble_data->threadName); + bubble_data->addr_list.addr_cnt = addrList.nCount; - if (msg_get_ith_contact_id(msgInfo, 0)) - bubble_data->contactId = msg_get_ith_contact_id(msgInfo, 0); + for (i=0; i<addrList.nCount; i++) { + /** contact ID & display name */ + int contact_id = 0; + msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id); + + if (contact_id > 0) { + bubble_data->addr_list.addr_info[i].contact_id = contact_id; + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, bubble_data->addr_list.addr_info[i].name, DEF_THREAD_NAME_LEN); + } else { + bubble_data->addr_list.addr_info[i].contact_id = 0; + } + + /** addresss */ + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, bubble_data->addr_list.addr_info[i].address, DEF_THREAD_ADDR_LEN); + } + + msg_release_list_struct(&addrList); + + if (bubble_data->addr_list.addr_info[0].contact_id > 0) + snprintf(bubble_data->threadName, DEF_THREAD_NAME_LEN, "%s", bubble_data->addr_list.addr_info[0].name); else - bubble_data->contactId = 0; + snprintf(bubble_data->threadName, DEF_THREAD_NAME_LEN, "%s", bubble_data->addr_list.addr_info[0].address); - msg_release_message(&msgInfo); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); D_LEAVE; @@ -86,7 +127,7 @@ static int _parse_bundle_with_msg_id(PMSG_BUBBLE_DATA bubble_data, int msgId) } -PMSG_BUBBLE_DATA msg_ui_bubble_init_bubble_data(MSG_HANDLE_T msgHandle, void *callback_data) +PMSG_BUBBLE_DATA msg_ui_bubble_init_bubble_data(msg_handle_t msgHandle, void *callback_data) { D_ENTER; @@ -183,11 +224,15 @@ void msg_ui_bubble_deinit_bubble_data(void *data) D_LEAVE; } -void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, bundle *b) +void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, service_h svc_handle) { - if (g_strcmp0(bundle_get_val(b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_MSG_ID) == 0) { /* From logs */ + char *key_type = NULL; + + service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, &key_type); + if (key_type && g_strcmp0(key_type, MSG_BUNDLE_VALUE_MSG_ID) == 0) { /* From logs */ int msg_id = 0; - const char *msg_id_str = bundle_get_val(b, MSG_BUNDLE_KEY_MSG_ID); + char *msg_id_str = NULL; + service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msg_id_str); if (!msg_id_str) return; @@ -195,8 +240,9 @@ void msg_ui_bubble_parse_bubble_data(PMSG_BUBBLE_DATA bubble_data, bundle *b) msg_id = atoi(msg_id_str); _parse_bundle_with_msg_id(bubble_data, msg_id); - } else - _parse_bundle_data(bubble_data, b); + } else { + _parse_bundle_data(bubble_data, svc_handle); + } } void msg_ui_bubble_start_bubble_list(PMSG_BUBBLE_DATA bubble_data) @@ -247,9 +293,10 @@ void msg_ui_bubble_init_bubble_list(PMSG_BUBBLE_DATA bubble_data) bubble_data->add_animator = NULL; } - if (bubble_data->box) { + if (bubble_data->box && bubble_data->scrl) { elm_object_content_unset(bubble_data->scrl); evas_object_del(bubble_data->box); + bubble_data->box = NULL; } EINA_LIST_FREE(bubble_data->bubble_list, item_data) { @@ -271,19 +318,25 @@ void msg_ui_bubble_init_bubble_list(PMSG_BUBBLE_DATA bubble_data) D_LEAVE; } -Evas_Object *msg_ui_bubble_create_controlbar(Evas_Object *parent, void *user_data) +Evas_Object *msg_ui_bubble_create_toolbar(void *user_data) { - if (!parent || !user_data) + if (!user_data) { + D_EMSG("[ERROR] user_data is NULL"); return NULL; + } - PMSG_BUBBLE_DATA bubble_data = user_data; + PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)user_data; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S*)bubble_data->callback_data; + + Evas_Object *toolbar = elm_toolbar_add(cd->navi_bar); - Evas_Object *toolbar = NULL; + if (!toolbar) { + D_EMSG("toolbar is NULL"); + return NULL; + } - toolbar = elm_toolbar_add(parent); elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); - elm_object_style_set(toolbar, "toolbar"); - bubble_data->toolbar = toolbar; + elm_object_style_set(toolbar, "naviframe"); return toolbar; } @@ -349,38 +402,99 @@ void msg_ui_bubble_start_view(PMSG_BUBBLE_DATA bubble_data) MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_attach_handler() is success."); } } + +#ifdef _BUBBLE_FLICK_EVENT + evas_object_event_callback_add(bubble_data->bubble_layout, EVAS_CALLBACK_MOUSE_DOWN, msg_ui_bubble_layout_mouse_down_cb, (const void*)bubble_data); +#endif msg_ui_bubble_list_load(bubble_data); } -void msg_ui_bubble_add_normal_control_item(void *user_data) +Evas_Object *msg_ui_bubble_toolbar_btn_create(Evas_Object *parent, char *icon_path, char *button_text) { D_ENTER; + D_MSG_RETVM_IF(parent == NULL, NULL, "parent == NULL"); - if (!user_data) - return; + Evas_Object *button = elm_button_add(parent); - int i; + evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); - PMSG_BUBBLE_DATA bubble_data = user_data; + elm_object_style_set(button, "naviframe_control/default"); - for (i = 0; i < MSG_BUBBLE_CONTROLBAR_ITEM_NUM; i++) { - if (bubble_data->toolbar_item[i]) - elm_object_item_del(bubble_data->toolbar_item[i]); + if (icon_path) { + Evas_Object *icon = elm_icon_add(button); + elm_icon_file_set(icon, icon_path, NULL); + elm_object_content_set(button,icon); + evas_object_size_hint_min_set(icon, 50, 50); + evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL); + } else if (button_text) { + elm_object_text_set(button, button_text); } + evas_object_show(button); - bubble_data->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(bubble_data->toolbar, MSG_CONTROLBAR_ICON_EDIT, NULL, \ - msg_ui_bubble_ctlbar_edit_cb, bubble_data->callback_data); + D_LEAVE; + return button; +} - bubble_data->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(bubble_data->toolbar, MSG_CONTROLBAR_ICON_VOICE_CALL, NULL, \ - msg_ui_bubble_ctlbar_call_cb, bubble_data->callback_data); - if (bubble_data->contactId <= 0) { - bubble_data->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(bubble_data->toolbar, MSG_CONTROLBAR_ICON_ADD_TO_CONTACT, NULL, \ - msg_ui_bubble_ctlbar_add_to_contact_cb, bubble_data->callback_data); +void msg_ui_bubble_add_normal_toolbar_item(Evas_Object *toolbar, void *user_data) +{ + D_ENTER; + + if (!user_data) { + D_EMSG("[ERROR] user data is NULL"); + return; + } + + int i; + unsigned char num_type; + PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)user_data; + + /* create add/view contact button */ + Evas_Object *addcontact_button = NULL; + if (bubble_data->addr_list.addr_info[0].contact_id <= 0) { + addcontact_button = msg_ui_bubble_toolbar_btn_create(toolbar, MSG_TITLE_ICON_ADD_TO_CONTACT, NULL); + evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_bubble_ctlbar_add_to_contact_cb, bubble_data->callback_data); } else { - bubble_data->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(bubble_data->toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT_DETAIL, NULL, \ - msg_ui_bubble_ctlbar_view_ct_detail_cb, bubble_data->callback_data); + addcontact_button = msg_ui_bubble_toolbar_btn_create(toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT, NULL); + evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_bubble_ctlbar_view_ct_detail_cb, bubble_data->callback_data); } + num_type = msg_ui_bubble_check_word_type(bubble_data->addr_list.addr_info[0].address); + if (num_type == WORD_TYPE_NUM) { + /* create voicecall button */ + Evas_Object *voicecall_button = msg_ui_bubble_toolbar_btn_create(toolbar, MSG_TITLE_ICON_VOICECALL, NULL); + evas_object_smart_callback_add(voicecall_button, "clicked", msg_ui_bubble_ctlbar_call_cb, bubble_data->callback_data); + bubble_data->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data); + elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_1], "object", voicecall_button); + + /* create videocall button */ + Evas_Object *videocall_button = msg_ui_bubble_toolbar_btn_create(toolbar, MSG_TITLE_ICON_VIDEOCALL, NULL); + evas_object_smart_callback_add(videocall_button, "clicked", msg_ui_bubble_ctlbar_vcall_cb, bubble_data->callback_data); + bubble_data->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data); + elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_2], "object", videocall_button); + + bubble_data->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data); + elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_3], "object", addcontact_button); + } else if (num_type == WORD_TYPE_EMAIL) { + Evas_Object *email_button = msg_ui_bubble_toolbar_btn_create(toolbar, NULL, dgettext("sys_string","IDS_COM_BODY_EMAIL")); + evas_object_smart_callback_add(email_button, "clicked", msg_ui_bubble_ctlbar_email_cb, bubble_data->callback_data); + bubble_data->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data); + elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_1], "object", email_button); + + bubble_data->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data); + elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_2], "object", addcontact_button); + } else { + bubble_data->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, bubble_data->callback_data); + elm_object_item_part_content_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_1], "object", addcontact_button); + + if (num_type == WORD_TYPE_NONE) { // invalid address + elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); + elm_object_disabled_set(addcontact_button, EINA_TRUE); + } + } + + if (bubble_data->threadId <= 0) { for (i = 0; i < MSG_BUBBLE_CONTROLBAR_ITEM_NUM; i++) { if (bubble_data->toolbar_item[i]) @@ -390,8 +504,9 @@ void msg_ui_bubble_add_normal_control_item(void *user_data) if (bubble_data->msg_type == MSG_TYPE_SMS_WAPPUSH || bubble_data->msg_type == MSG_TYPE_SMS_CB || bubble_data->msg_type == MSG_TYPE_SMS_SYNCML) { - elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); /** voice call */ - elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE); /** add/update contact */ + elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); // voice call + elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); // video call + elm_object_item_disabled_set(bubble_data->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE); // add/update contact } } diff --git a/composer/src/bubble/msg-ui-composer-bubble-util.c b/composer/src/bubble/msg-ui-composer-bubble-util.c index 54c9669..b61db41 100755 --- a/composer/src/bubble/msg-ui-composer-bubble-util.c +++ b/composer/src/bubble/msg-ui-composer-bubble-util.c @@ -16,8 +16,10 @@ #include "msg-ui-composer-bubble.h" #include "msg-ui-composer-main.h" +#include "msg-ui-composer-common.h" #include <regex.h> #include "appsvc.h" +#include <status.h> void msg_ui_bubble_launch_voice_call(const char *call_num) { @@ -25,21 +27,53 @@ void msg_ui_bubble_launch_voice_call(const char *call_num) MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !call_num); char *num_str = msg_ui_bubble_get_trimmed_number(call_num); - - bundle *b = bundle_create(); - + service_h svc_handle; char telnum[255] = {0,}; - appsvc_set_operation(b, APPSVC_OPERATION_CALL); - snprintf(telnum, sizeof(telnum), "tel:%s", num_str); /* Number to make a call */ - appsvc_set_uri(b, telnum); - appsvc_run_service(b, 0, NULL, NULL); + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + service_set_operation(svc_handle, SERVICE_OPERATION_CALL); + if (num_str) { + snprintf(telnum, sizeof(telnum), "tel:%s", num_str); /* Number to make a call */ + service_set_uri(svc_handle, telnum); + } + service_send_launch_request(svc_handle, NULL, NULL); + service_destroy(svc_handle); + } if (num_str) free(num_str); + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_bubble_launch_video_call(const char *call_num) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !call_num); + + char *num_str = NULL; + + num_str = msg_ui_bubble_get_trimmed_number(call_num); + + bundle *b = bundle_create(); + + if (!b) + return; + + bundle_add(b, MSG_BUNDLE_KEY_VCALL_TYPE, MSG_BUNDLE_VALUE_VCALL_MO); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_HANDLE, MSG_BUNDLE_VALUE_VCALL_HANDLE); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_PARTY_NUM, num_str); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_CLI_CAUSE, MSG_BUNDLE_VALUE_VCALL_FALSE); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_FORWARDED, MSG_BUNDLE_VALUE_VCALL_FALSE); + + aul_launch_app(VIDEO_CALL_PKG_NAME, b); bundle_free(b); + if (num_str) + free(num_str); + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } @@ -81,18 +115,9 @@ static void __popup_response_cb(void *data, Evas_Object *obj, void *event_info) bubbleData->select_info = NULL; } - if (bubbleData->bubble_count == 0) { - bundle *b = bundle_create(); - if (b) { - char buf[DEF_BUF_LEN_S] = {0,}; - bundle_add(b, MSG_BUNDLE_KEY_RESULT, MSG_BUNDLE_VALUE_DEL_ALL); - snprintf(buf, sizeof(buf), "%d", bubbleData->threadId); - bundle_add(b, MSG_BUNDLE_KEY_THREAD_ID, buf); - - msg_ui_composer_bubble_del_all(bubbleData->callback_data, b); - - bundle_free(b); - } + if (bubbleData->deleted_info) { + evas_object_del(bubbleData->select_info); + bubbleData->select_info = NULL; } MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } @@ -101,6 +126,7 @@ void msg_ui_bubble_show_notify(PMSG_BUBBLE_DATA bubbleData, char *msg) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !bubbleData, "PMSG_BUBBLE_DATA is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)bubbleData->callback_data; Evas_Object *popup = NULL; @@ -109,13 +135,14 @@ void msg_ui_bubble_show_notify(PMSG_BUBBLE_DATA bubbleData, char *msg) bubbleData->popup = NULL; } - popup = elm_popup_add(bubbleData->bubble_layout); + popup = elm_popup_add(cd->navi_bar); bubbleData->popup = popup; evas_object_size_hint_weight_set(bubbleData->popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_object_text_set(bubbleData->popup, msg); evas_object_smart_callback_add(bubbleData->popup, "timeout", __popup_response_cb, bubbleData); + evas_object_smart_callback_add(bubbleData->popup, "block,clicked", __popup_response_cb, bubbleData); elm_popup_timeout_set(bubbleData->popup, 1.0); evas_object_show(bubbleData->popup); @@ -123,30 +150,12 @@ void msg_ui_bubble_show_notify(PMSG_BUBBLE_DATA bubbleData, char *msg) MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } -void msg_ui_bubble_show_notify_with_timeout(PMSG_BUBBLE_DATA bubbleData, char *msg, double timeout) +static void __msg_delete_progress_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info) { - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !bubbleData, "PMSG_BUBBLE_DATA is NULL"); - - Evas_Object *popup = NULL; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); + PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)data; - if (bubbleData->popup) { - evas_object_del(bubbleData->popup); - bubbleData->popup = NULL; - } - - popup = elm_popup_add(bubbleData->bubble_layout); - bubbleData->popup = popup; - - evas_object_size_hint_weight_set(bubbleData->popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_object_text_set(bubbleData->popup, msg); - - evas_object_smart_callback_add(bubbleData->popup, "timeout", __popup_response_cb, bubbleData); - - elm_popup_timeout_set(bubbleData->popup, timeout); - evas_object_show(bubbleData->popup); - - MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + bubble_data->del_cancel = true; } Evas_Object* msg_ui_bubble_show_notify_with_progressbar(PMSG_BUBBLE_DATA pData, int count) @@ -155,10 +164,15 @@ Evas_Object* msg_ui_bubble_show_notify_with_progressbar(PMSG_BUBBLE_DATA pData, MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !pData, NULL); - Evas_Object *popup, *progressbar, *box, *label; + Evas_Object *popup; + Evas_Object *progressbar; + Evas_Object *box; + Evas_Object *label; + Evas_Object *cancel_btn; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)pData->callback_data; char buf[DEF_BUF_LEN_S] = { 0, }; - popup = elm_popup_add(pData->bubble_layout); + popup = elm_popup_add(cd->navi_bar); label = elm_label_add(popup); snprintf(buf, sizeof(buf), "0/%d %s", count, dgettext("sys_string", "IDS_COM_POP_DELETED")); @@ -177,8 +191,12 @@ Evas_Object* msg_ui_bubble_show_notify_with_progressbar(PMSG_BUBBLE_DATA pData, elm_box_pack_end(box, progressbar); evas_object_show(box); - elm_object_content_set(popup, box); + cancel_btn = elm_button_add(popup); + elm_object_text_set(cancel_btn, dgettext("sys_string", "IDS_COM_SK_CANCEL")); + elm_object_part_content_set(popup, "button1", cancel_btn); + evas_object_smart_callback_add(cancel_btn, "clicked", __msg_delete_progress_cancel_clicked_cb, pData); + elm_object_content_set(popup, box); evas_object_show(popup); pData->progressbar = progressbar; @@ -202,7 +220,10 @@ void msg_ui_bubble_show_select_info(PMSG_BUBBLE_DATA pData) elm_object_content_set(pData->select_info, pData->selectioninfo_layout); } - elm_layout_theme_set(pData->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_64"); + if (pData->isRotate) + elm_layout_theme_set(pData->selectioninfo_layout, "standard", "selectioninfo", "horizontal/bottom_64"); + else + elm_layout_theme_set(pData->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_64"); if (pData->check_cnt <= 0) { evas_object_hide(pData->select_info); @@ -221,81 +242,204 @@ void msg_ui_bubble_show_select_info(PMSG_BUBBLE_DATA pData) } } -void msg_ui_bubble_contact_info_update(PMSG_BUBBLE_DATA pData) +void msg_ui_bubble_show_deleted_info(PMSG_BUBBLE_DATA pData) { - D_ENTER; + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - PMSG_APP_CONV_DATA_S conv_data = NULL; - MSG_ERROR_T err = MSG_SUCCESS;; - int index; + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pData); - if (!pData->bubble_list) - return; + if (pData->select_info) { + evas_object_del(pData->select_info); + pData->select_info = NULL; + } - conv_data = (PMSG_APP_CONV_DATA_S)eina_list_nth(pData->bubble_list, 0); - if (!conv_data) - return; + status_message_post(dgettext("sys_string", "IDS_COM_POP_DELETED")); - msg_message_t msg = msg_new_message(); - MSG_SENDINGOPT_S sendOpt = {0}; + bool isDraft = msg_ui_composer_common_is_send_possible((MSG_COMPOSER_VIEW_DATA_S *)pData->callback_data); - err = msg_get_message(pData->msgHandle, conv_data->msgId, msg, &sendOpt); + if (pData->bubble_count == 0 && isDraft == false) { + service_h svc_handle; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + char buf[DEF_BUF_LEN_S] = {0,}; - if (err != MSG_SUCCESS) - goto CONTACT_UPDATE_LEAVE; + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESULT, MSG_BUNDLE_VALUE_DEL_ALL); + snprintf(buf, sizeof(buf), "%d", pData->threadId); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf); - index = msg_get_ith_contact_id(msg, 0); + msg_ui_composer_bubble_del_all(pData->callback_data, svc_handle); - if (index > 0) { - const char *display_name = NULL; - display_name = msg_get_ith_name(msg, 0); - bzero(pData->threadName, sizeof(pData->threadName)); - if (display_name) - snprintf(pData->threadName, DEF_THREAD_NAME_LEN, "%s", display_name); + service_destroy(svc_handle); + } + } +} - pData->contactId = index; - if (pData->toolbar_item[CONTROLBAR_ITEM_4] && pData->viewmode != BUBBLE_EDIT_VIEW) { - elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_4]); - pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT_DETAIL, NULL, \ - msg_ui_bubble_ctlbar_view_ct_detail_cb, pData->callback_data); +void msg_ui_bubble_contact_info_update(PMSG_BUBBLE_DATA pData) +{ + D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pData); + + msg_error_t err = MSG_SUCCESS;; + int thread_id = pData->threadId;; + msg_struct_list_s addrList; + char display_name[DEF_THREAD_NAME_LEN+1] = {0,}; + msg_struct_list_s peerList = {0, }; + int i = 0; + + msg_struct_t sortRule = msg_create_struct(MSG_STRUCT_SORT_RULE); + msg_set_int_value(sortRule, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE); + msg_set_bool_value(sortRule, MSG_SORT_RULE_ACSCEND_BOOL, false); + + err = msg_get_thread_view_list(pData->msgHandle, sortRule, &peerList); + msg_release_struct(&sortRule); + + for (i = 0; i < peerList.nCount; i++) { + int tid = 0; + msg_get_int_value(peerList.msg_struct_info[i], MSG_THREAD_ID_INT, &tid); + if (thread_id == tid) { + msg_get_str_value(peerList.msg_struct_info[i], MSG_THREAD_NAME_STR, display_name, DEF_THREAD_NAME_LEN); + break; } + } + + /* update thread Name */ + bzero(pData->threadName, sizeof(pData->threadName)); + if (display_name[0] != '\0') + snprintf(pData->threadName, DEF_THREAD_NAME_LEN, "%s", display_name); + + /* update address list */ + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + + err = msg_get_address_list(pData->msgHandle, thread_id, &addrList); + if (err == MSG_SUCCESS) { + pData->addr_list.addr_cnt = addrList.nCount; + + for (i=0; i<addrList.nCount; i++) { + msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &pData->addr_list.addr_info[i].contact_id); + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, pData->addr_list.addr_info[i].name, DEF_THREAD_NAME_LEN); + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, pData->addr_list.addr_info[i].address, DEF_THREAD_ADDR_LEN); + } + + msg_release_list_struct(&addrList); } else { - if (pData->contactId) { - if (pData->threadAddr[0] != '\0') { - if (pData->toolbar_item[CONTROLBAR_ITEM_4] && pData->viewmode != BUBBLE_EDIT_VIEW) { - elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_4]); - pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_ADD_TO_CONTACT, NULL, \ - msg_ui_bubble_ctlbar_add_to_contact_cb, pData->callback_data); - } - } + D_MSG("[ERROR] msg_get_address_list return error [%d]", err); + goto CONTACT_UPDATE_LEAVE; + } - bzero(pData->threadName, sizeof(pData->threadName)); - pData->contactId = 0; + /** change control bar button */ + if (pData->title_optionheader_opened) { + unsigned char num_type = msg_ui_bubble_check_word_type(pData->addr_list.addr_info[0].address); + + if (pData->addr_list.addr_info[0].contact_id > 0) { + Evas_Object *addcontact_button = msg_ui_bubble_toolbar_btn_create(pData->toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT, NULL); + evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_bubble_ctlbar_view_ct_detail_cb, pData->callback_data); + + if (num_type == WORD_TYPE_NUM) { + elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_3]); + pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, pData->callback_data); + elm_object_item_part_content_set(pData->toolbar_item[CONTROLBAR_ITEM_3], "object", addcontact_button); + } else if (num_type == WORD_TYPE_EMAIL) { + elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_2]); + pData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, pData->callback_data); + elm_object_item_part_content_set(pData->toolbar_item[CONTROLBAR_ITEM_2], "object", addcontact_button); + } + } else { + Evas_Object *addcontact_button = msg_ui_bubble_toolbar_btn_create(pData->toolbar, MSG_TITLE_ICON_ADD_TO_CONTACT, NULL); + evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_bubble_ctlbar_add_to_contact_cb, pData->callback_data); + + if (num_type == WORD_TYPE_NUM) { + elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_3]); + pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, pData->callback_data); + elm_object_item_part_content_set(pData->toolbar_item[CONTROLBAR_ITEM_3], "object", addcontact_button); + } else if (num_type == WORD_TYPE_EMAIL) { + elm_object_item_del(pData->toolbar_item[CONTROLBAR_ITEM_2]); + pData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, pData->callback_data); + elm_object_item_part_content_set(pData->toolbar_item[CONTROLBAR_ITEM_2], "object", addcontact_button); + } } } - msg_ui_bubble_composer_navi_title_set(pData->callback_data); + /*change title button */ + if (pData->addr_list.addr_cnt == 1) { + if (pData->addr_list.addr_info[0].name[0] != '\0') + elm_object_text_set(pData->title_button, pData->addr_list.addr_info[0].name); + else + elm_object_text_set(pData->title_button, pData->addr_list.addr_info[0].address); + } else if (pData->addr_list.addr_cnt > 1) { + char title_text[DEF_BUF_LEN+1] = {0,}; + + if (pData->addr_list.addr_info[0].name[0] != '\0') + snprintf(title_text, sizeof(title_text), "%s +%d", pData->addr_list.addr_info[0].name, pData->addr_list.addr_cnt-1); + else + snprintf(title_text, sizeof(title_text), "%s +%d", pData->addr_list.addr_info[0].address, pData->addr_list.addr_cnt-1); + + elm_object_text_set(pData->title_button, title_text); + } else { + elm_object_text_set(pData->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + } + CONTACT_UPDATE_LEAVE : - msg_release_message(&msg); + msg_release_list_struct(&peerList); D_LEAVE; return; } -void msg_ui_bubble_get_time_format(PMSG_BUBBLE_DATA pData) +unsigned char msg_ui_bubble_check_word_type(char *txt) { - int r; - enum appcore_time_format timeformat; + MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, !txt, WORD_TYPE_NONE, "Message text is NULL!"); - r = appcore_get_timeformat(&timeformat); - if (r == MSG_UI_RET_ERR) - timeformat = APPCORE_TIME_FORMAT_UNKNOWN; + int index = 0, numCnt = 0; - if (timeformat == APPCORE_TIME_FORMAT_24) - pData->time_fmt = MSG_TIME_FORMAT_24H; - else + if (!g_ascii_strncasecmp(txt, "www.", 4)) + return WORD_TYPE_URL; + + if (!g_ascii_strncasecmp(txt, "http://", 7)) + return WORD_TYPE_URL_WITH_PROTC; + + if (txt[0] == '+') + index++; + + while (g_ascii_isdigit(txt[index]) || txt[index] == '-') { + index++; + numCnt++; + + if (numCnt > 2) { + if (strlen(txt) <= 20) + return WORD_TYPE_NUM; + else + return WORD_TYPE_NONE; + } + } + + regex_t reg_email; + int ret; + + ret = regcomp(®_email, "^([0-9a-z_-][0-9a-z._-]*)@([0-9a-z_-]+)(.[0-9a-z_-]+){1,2}$", REG_EXTENDED | REG_ICASE); + if (ret) { + D_MSG("regcomp error = %d", ret); + return WORD_TYPE_NONE; + } + + ret = regexec(®_email, (const char *)txt, 0, NULL, 0); + regfree(®_email); + + if(ret == 0) + return WORD_TYPE_EMAIL; + + return WORD_TYPE_NONE; +} + +void msg_ui_bubble_get_time_format(PMSG_BUBBLE_DATA pData) +{ + int timeformat = msg_common_get_timeformat(); + + if (timeformat == MSG_TIME_FORMAT_UNKNOWN) pData->time_fmt = MSG_TIME_FORMAT_12H; + else + pData->time_fmt = timeformat; D_MSG("%s", pData->time_fmt == MSG_TIME_FORMAT_24H ? "TIME FORMAT = 24h" : "TIME FORMAT = 12h"); } @@ -313,3 +457,40 @@ void msg_ui_bubble_get_locale(PMSG_BUBBLE_DATA pData) D_MSG("Locale = %s", pData->locale); } +bool msg_is_sms(int msg_type) +{ + int result = false; + switch(msg_type) + { + case MSG_TYPE_SMS_CB: + case MSG_TYPE_SMS_JAVACB: + case MSG_TYPE_SMS_WAPPUSH: + case MSG_TYPE_SMS_MWI: + case MSG_TYPE_SMS_SYNCML: + case MSG_TYPE_SMS_REJECT: + case MSG_TYPE_SMS: + result = true; + break; + default: + break; + } + return result; +} + + +bool msg_is_mms(int msg_type) +{ + int result = false; + switch(msg_type) + { + case MSG_TYPE_MMS_NOTI: + case MSG_TYPE_MMS_JAVA: + case MSG_TYPE_MMS: + result = true; + break; + default: + break; + } + return result; +} + diff --git a/composer/src/core/msg-ui-composer-core.c b/composer/src/core/msg-ui-composer-core.c deleted file mode 100755 index 2f5dc05..0000000 --- a/composer/src/core/msg-ui-composer-core.c +++ /dev/null @@ -1,310 +0,0 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.tizenopensource.org/license - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/* includes*/ -#include "msg-ui-composer-data.h" -#include "msg-ui-composer-message.h" - -#include <MsgTypes.h> -#include <MsgMmsTypes.h> -#include <MapiStorage.h> -#include <MapiTransport.h> -#include <MapiControl.h> -#include <MapiMessage.h> -#include <MapiSetting.h> -#include <MsgStorageTypes.h> -#include <MsgSettingTypes.h> - -/* defines*/ - -/* function definitions*/ -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_open_msg_handle(MSG_HANDLE_T *msgHandle) -{ - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - if (msgHandle == NULL) - return COMPOSER_RETURN_FAIL; - - if (msg_open_msg_handle(msgHandle) != 0) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] open msg handle error"); - return COMPOSER_RETURN_FAIL; - } - - return COMPOSER_RETURN_SUCCESS; -} - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_close_msg_handle(MSG_HANDLE_T *msgHandle) -{ - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - if (msgHandle == NULL) - return COMPOSER_RETURN_FAIL; - - if (msg_close_msg_handle(msgHandle)) { -
MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] close msg handle error"); - return COMPOSER_RETURN_FAIL; - } - - return COMPOSER_RETURN_SUCCESS; -} - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_create_new_message(msg_message_t *msgInfo) -{ - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - if (msgInfo == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL"); - return COMPOSER_RETURN_FAIL; - } - - *msgInfo = msg_new_message(); - - if (*msgInfo == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_new_message error !!!"); - return COMPOSER_RETURN_FAIL; - } - - return COMPOSER_RETURN_SUCCESS; -} - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_release_message(msg_message_t msgInfo) -{ - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - if (msgInfo == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL"); - return COMPOSER_RETURN_FAIL; - } - - if (msg_release_message(&msgInfo) != MSG_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_release_message error !!!"); - return COMPOSER_RETURN_SUCCESS; - } - - return COMPOSER_RETURN_SUCCESS; -} - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_get_message(MSG_HANDLE_T msgHandle, msg_message_t msgInfo, int msgID, MSG_SENDINGOPT_S *sendOpt) -{ - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - if (!msgHandle || !msgInfo) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] Message handle or Message info is NOT exist.."); - return COMPOSER_RETURN_NULL_POINTER; - } - - MSG_ERROR_T err = MSG_SUCCESS; - - err = msg_get_message(msgHandle, (MSG_MESSAGE_ID_T) msgID, msgInfo, sendOpt); - - if (err != MSG_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] msg_get_message error [%d]", err); - return COMPOSER_RETURN_FAIL; - } - - MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); - return COMPOSER_RETURN_SUCCESS; -} - -COMPOSER_MSG_TYPE_E msg_ui_comp_core_get_msg_type(msg_message_t msgInfo) -{ - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - if (!msgInfo) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg data is NULL"); - return COMPOSER_MSG_TYPE_INVALID; - } - - int msg_type = msg_get_message_type(msgInfo); - COMPOSER_MSG_TYPE_E composer_msg_type = COMPOSER_MSG_TYPE_INVALID; - - switch (msg_type) { - case MSG_TYPE_SMS: - composer_msg_type = COMPOSER_MSG_TYPE_SMS; - break; - default: - composer_msg_type = COMPOSER_MSG_TYPE_INVALID; - break; - } - - MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); - return composer_msg_type; -} - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_get_sms_body(msg_message_t msgInfo, char **sms_text) -{ - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - if (!msgInfo) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] Message info is NULL"); - return COMPOSER_RETURN_NULL_POINTER; - } - - *sms_text = (char *)msg_sms_get_message_body(msgInfo); - - if (*sms_text == NULL || strlen(*sms_text) == 0) { - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No SMS body text"); - return COMPOSER_RETURN_FAIL; - } - - MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); - return COMPOSER_RETURN_SUCCESS; -} - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_add_recipient(msg_message_t msgInfo, char *number, COMPOSER_RECP_TYPE_E recp_type) -{ - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - MSG_RECIPIENT_TYPE_T recipient_type = MSG_RECIPIENTS_TYPE_UNKNOWN; - - if (number == NULL || msgInfo == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] number or msgInfo is NULL"); - return COMPOSER_RETURN_FAIL; - } - - switch (recp_type) { - case COMPOSER_RECP_TYPE_TO: - - recipient_type = MSG_RECIPIENTS_TYPE_TO; - break; - case COMPOSER_RECP_TYPE_CC: - - recipient_type = MSG_RECIPIENTS_TYPE_CC; - break; - case COMPOSER_RECP_TYPE_BCC: - recipient_type = MSG_RECIPIENTS_TYPE_CC; - break; - default: - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid recipient type"); - return COMPOSER_RETURN_FAIL; - - } - - if (msg_add_address(msgInfo, number, recipient_type) != MSG_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_add_address error !!!"); - return COMPOSER_RETURN_FAIL; - } - - return COMPOSER_RETURN_SUCCESS; -} - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_set_message_type(msg_message_t msgInfo, COMPOSER_MSG_TYPE_E comp_msg_type) -{ - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - if (msgInfo == NULL) - return COMPOSER_RETURN_FAIL; - - MSG_MESSAGE_TYPE_T msgType = MSG_TYPE_INVALID; - - switch (comp_msg_type) { - case COMPOSER_MSG_TYPE_SMS: - msgType = MSG_TYPE_SMS; - break; - default: - msgType = MSG_TYPE_INVALID; - break; - } - - if (msg_set_message_type(msgInfo, msgType) != MSG_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_set_message_type error !!!"); - return COMPOSER_RETURN_FAIL; - } - - return COMPOSER_RETURN_SUCCESS; -} - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_set_sms_body(msg_message_t msgInfo, char *body_text) -{ - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - if (msgInfo == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo or body_text is NULL !!!"); - return COMPOSER_RETURN_FAIL; - } - - if (body_text == NULL) { - msg_sms_set_message_body(msgInfo, NULL, 0); - } else { - if (msg_sms_set_message_body(msgInfo, body_text, strlen(body_text)) != MSG_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_sms_set_message_body error "); - return COMPOSER_RETURN_FAIL; -
} - } - - return COMPOSER_RETURN_SUCCESS; -} - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_msg_get_config(MSG_HANDLE_T msg_handle, MSG_SETTING_S *opt) -{ - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - if (msg_handle == NULL || opt == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_handle or opt is NULL"); - return COMPOSER_RETURN_HANDLE_NOT_EXIST; - } - - if (msg_get_config(msg_handle, opt) != MSG_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_get_config failed !!!"); - return COMPOSER_RETURN_FAIL; - } - - return COMPOSER_RETURN_SUCCESS; -} - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_reg_sent_status_cb(MSG_HANDLE_T msg_handle, void *cbfunc, void *cbdata) -{ - if (msg_handle == NULL || cbfunc == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid arguments"); - return COMPOSER_RETURN_FAIL; - } - - if (msg_reg_sent_status_callback(msg_handle, cbfunc, cbdata) != MSG_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_reg_sent_status_callback error !!"); - return COMPOSER_RETURN_FAIL; - } - - return COMPOSER_RETURN_SUCCESS; -} - -COMPOSER_RETURN_TYPE_E msg_ui_comp_core_send_sms(MSG_HANDLE_T msg_handle, MSG_REQUEST_S *req) -{ - if (msg_handle == NULL || req == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid arguments"); - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "msg_handle : [%x], req [%x]", msg_handle, req); - return COMPOSER_RETURN_NULL_POINTER; - } - - MSG_ERROR_T err = MSG_SUCCESS; - - err = msg_sms_send_message(msg_handle, req); - - if (err == MSG_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending success"); - return COMPOSER_RETURN_SUCCESS; - } else if (err == MSG_ERR_INVALID_PARAMETER) { - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d] : INVALID_PARAM ", err); - return COMPOSER_RETURN_NULL_POINTER; - } else if (err == MSG_ERR_NO_SIM) { - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d] : NO SIM", err); - return COMPOSER_RETURN_NO_SIM; - } else { - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d]", err); - return COMPOSER_RETURN_FAIL; - } -} - - diff --git a/composer/src/external/msg-ui-composer-external.c b/composer/src/external/msg-ui-composer-external.c index bfecead..440bdbd 100755 --- a/composer/src/external/msg-ui-composer-external.c +++ b/composer/src/external/msg-ui-composer-external.c @@ -14,6 +14,7 @@ * limitations under the License. */ + /* include*/ #include "msg-ui-composer-data.h" #include "msg-ui-composer-external.h" @@ -22,32 +23,156 @@ #include "msg-ui-composer-popup.h" #include "msg-ui-composer-body.h" #include "msg-ui-composer-recipient.h" +#include "msg-ui-composer-bubble.h" + #include <appsvc.h> +#include <app_service.h> #include <ui-gadget.h> +#include <aul.h> +#include <aul_service.h> #include <Ecore_X.h> #include <contacts-svc.h> #include <contacts-ug.h> +static void __msg_ui_composer_external_closed(MSG_COMPOSER_VIEW_DATA_S *cd); -static void __msg_ui_composer_external_closed(MSG_COMPOSER_VIEW_DATA_S *cd) +static void __ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) { D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd; + Evas_Object *base; - if (cd->loaded_aul || cd->state == COMPOSER_STATE_TYPE_RUNNING) { - if(!msg_ui_composer_popup_exist(cd)) { - msg_ui_composer_last_focus_load(cd); - } + if (!ug || !priv) { + D_MSG(""); + return; + } + + cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; + base = ug_get_layout(ug); + + if (!base) { + ug_destroy(ug); + D_MSG(""); + return; + } + + msg_common_reset_font_size("entry"); + + switch (mode) { + case UG_MODE_FULLVIEW: + + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(ug_get_window(), base); + evas_object_show(base); + break; + case UG_MODE_FRAMEVIEW: + break; + default: + break; } D_LEAVE; } -static void __ug_calllog_return_cb(struct ui_gadget *ug, bundle *result, void *priv) +static void __ug_contacts_checklist_result_cb(ui_gadget_h ug, service_h result, void *priv) { D_ENTER; + D_MSG_RETM_IF(!ug,"ug data is NULL"); + D_MSG_RETM_IF(!result,"bundle result data is NULL"); + D_MSG_RETM_IF(!priv,"priv data is NULL"); - MSG_COMPOSER_VIEW_DATA_S *cd; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; + D_MSG_RETM_IF(cd->recipient == NULL,"Recipient data is NULL"); + + int contact_index; + int *num_id_list = NULL; + int len = 0; + int i = 0; + + const char *number_str = NULL; + char *service_val = NULL; + const char *current_number = NULL; + char *entry_text = NULL; + + bool bMaxCount = false; + bool bInvalidNum = false; + bool bDup = false; + + service_get_extra_data(result, CT_UG_BUNDLE_RESULT_NUMBER_ID_LIST, &service_val); + D_MSG_RETM_IF(!service_val, "bundle_val data is NULL"); + + num_id_list = (int *)g_base64_decode(service_val, (gsize *)&len); + D_MSG_RETM_IF(!num_id_list,"number_id list is NULL"); + + /* get entry text */ + if (len > 0) { + current_number = msg_ui_composer_recipient_entry_text_get(cd->recipient); + if (current_number) + entry_text = strdup(current_number); + } + + for (i = 0; i < len / sizeof(int); i++) { + + if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) { + bMaxCount = true; + break; + } + + CTSvalue *value = NULL; + contact_index = contacts_svc_get_contact_value(CTS_GET_NUMBER_VALUE, num_id_list[i], &value); + if (contact_index <= 0 ) { + D_EMSG("Fail to get contact value"); + continue; + } + + number_str = contacts_svc_value_get_str(value, CTS_NUM_VAL_NUMBER_STR); + D_MSG("selected number_id = %d, contact_id = %d, number = %s", num_id_list[i], contact_index, number_str); + + if (number_str) { + if (msg_ui_composer_recipient_duplicate_check(cd->recipient, number_str) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) { + bDup = true; + contacts_svc_value_free(value); + continue; + } + + if (msg_ui_composer_recipient_vaild_check(number_str) == EINA_FALSE) { + bInvalidNum = true; + } else { + msg_ui_composer_recipient_append(cd->recipient, number_str, contact_index); + } + + } else { + D_EMSG("contact index[%d] is unuseable !!", contact_index); + } + + contacts_svc_value_free(value); + } + + /* set entry text */ + if (entry_text) { + msg_ui_composer_recipient_entry_text_set(cd->recipient, entry_text); + g_free(entry_text); + } + + D_MSG("bMaxCount = %d, bInvalidNum = %d, bDup = %d", bMaxCount, bInvalidNum, bDup); + if (bMaxCount) { + msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX); + } else if (bInvalidNum) { + msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK); + } else if (bDup) { + msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP); + } + + g_free(num_id_list); + + D_LEAVE; +} + +static void __ug_calllog_return_cb(ui_gadget_h ug, service_h result, void *priv) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = NULL; bool bMaxCount = false; bool bInvalidNum = false; @@ -61,13 +186,14 @@ static void __ug_calllog_return_cb(struct ui_gadget *ug, bundle *result, void *p cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; D_MSG_RETM_IF(cd->recipient == NULL, "Recipient Data is NULL"); - int *list; - int len; - int i; - char *encoded_str; + int *list = NULL; + int len = 0; + int i = 0; + char *encoded_str = NULL; - encoded_str = (char *)bundle_get_val(result, MSG_BUNDLE_KEY_GET_SEL_LIST); - list = (int *)g_base64_decode(encoded_str, (gsize *)&len); + service_get_extra_data(result, MSG_BUNDLE_KEY_GET_SEL_LIST, &encoded_str); + if (encoded_str) + list = (int *)g_base64_decode(encoded_str, (gsize *)&len); for (i = 0; i < len / sizeof(int); i++) { @@ -104,7 +230,7 @@ static void __ug_calllog_return_cb(struct ui_gadget *ug, bundle *result, void *p if (bMaxCount) { msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX); } else if (bInvalidNum) { - msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP); + msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK); } else if (bDup) { msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP); } @@ -113,43 +239,248 @@ static void __ug_calllog_return_cb(struct ui_gadget *ug, bundle *result, void *p D_LEAVE; } -static void __ug_layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv) +static void __ug_myfile_return_cb(ui_gadget_h ug, service_h result, void *priv) { D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd; - Evas_Object *base; - if (!ug || !priv) { - D_MSG(""); + char *file_path = NULL; + + if (!ug || !priv || !result) { + D_EMSG("parameter error ug = %p, priv = %p, result = %p", ug, priv, result); return; } cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; - base = ug_get_layout(ug); - if (!base) { - ug_destroy(ug); - D_MSG(""); + service_get_extra_data(result, MSG_BUNDLE_KEY_RESULT, &file_path); + cd->attachlist = make_tokenize_list(file_path, MYFILE_TOKEN); + + D_LEAVE; +} + +static void __ug_namecard_list_return_cb(ui_gadget_h ug, service_h result, void *priv) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd; + char *str_id = NULL; + int index = 0; + + if (!ug || !priv || !result) { + D_EMSG("parameter error ug = %p, priv = %p, result = %p", ug, priv, result); return; } - switch (mode) { - case UG_MODE_FULLVIEW: + cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; - evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(ug_get_window(), base); - evas_object_show(base); - break; - case UG_MODE_FRAMEVIEW: - break; - default: - break; + service_get_extra_data(result, MSG_BUNDLE_KEY_NAMECARD_INDEX, &str_id); + + if (!str_id) { + D_EMSG("bundle_get_val Fail"); + return; + } + + D_MSG("Index of Selected namecard = %s", str_id); + + index = atoi(str_id); + + if (index > 0) { + char file_path[COMPOSER_FILEPATH_LEN_MAX] = { 0,}; + if (msg_composer_get_vcf_file_by_index(index, file_path, COMPOSER_FILEPATH_LEN_MAX - 1 ) == true) { + D_MSG("file_path= %s", file_path); + cd->attachlist = eina_list_append(cd->attachlist, g_strdup(file_path)); + } } D_LEAVE; + return; } -static void __ug_closed_cb(struct ui_gadget *ug, void *priv) +static void __ug_calendar_result_cb(ui_gadget_h ug, service_h result, void *priv) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd = priv; + + int count = 0; + int i = 0; + char *path = NULL; + char *count_str = NULL; + char tmp[DEF_BUF_LEN_S]; + + if (!ug || !priv || !result) { + D_EMSG("parameter error ug = %p, priv = %p, result = %p", ug, priv, result); + return; + } + + service_get_extra_data(result, MSG_BUNDLE_KEY_COUNT, &count_str); + if (count_str) + count = atoi(count_str); + + if (count > 0) { + for (i = 0; i < count; i++) { + snprintf(tmp, sizeof(tmp)-1, "vfile%d", i + 1); + D_MSG("tmp:%s", tmp); + + service_get_extra_data(result, tmp, &path); + + D_MSG("path:%s", path); + + if (path && ecore_file_exists(path)) { + cd->attachlist = eina_list_append(cd->attachlist, g_strdup(path)); + } + } + } + D_LEAVE; +} + +static void __ug_memo_result_cb(ui_gadget_h ug, service_h result, void *priv) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd = priv; + Evas_Object *entry; + char *str = NULL; + char *tmp_memo = NULL; + char *memo_image = NULL; + char buf[DEF_BUF_LEN_S] = { 0, }; + int img_count = 0; + int txt_count = 0; + int i; + + if (!ug || !priv || !result) { + D_EMSG("parameter error ug = %p, priv = %p, result = %p", ug, priv, result); + return; + } + + if (service_get_extra_data(result, MSG_BUNDLE_KEY_IMAGE, &str) == SERVICE_ERROR_NONE) { + if (str) + img_count = atoi(str); + } + + D_MSG("[MEMO] attach image count : %d", img_count); + + /*if image memo then attach image */ + if (img_count > 0) { + for (i = 1; i <= img_count; i++) { + snprintf(buf, sizeof(buf)-1, "image%d", i); + if (service_get_extra_data(result, buf, &memo_image) == SERVICE_ERROR_NONE) { + if (memo_image) + cd->attachlist = eina_list_append(cd->attachlist, g_strdup(memo_image)); + } + } + } + + if (service_get_extra_data(result, MSG_BUNDLE_KEY_TEXT, &str) == SERVICE_ERROR_NONE) { + if (str) + txt_count = atoi(str); + } + + D_MSG("[MEMO]attach text count : %d", txt_count); + + /*if only text memo then add to body area */ + if (txt_count > 0) { + COMPOSER_RECP_ADDR_E recp_type = msg_ui_composer_recipient_addr_type_get(cd->recipient); + + for (i = 1; i <= txt_count; i++) { + char* memo_str = NULL; + snprintf(buf, sizeof(buf)-1, "text%d", i); + + service_get_extra_data(result, buf, &tmp_memo); + D_MSG("text content : %s", tmp_memo); + + entry = msg_ui_composer_last_body_entry_get(cd); + if (entry && tmp_memo) { + memo_str = elm_entry_utf8_to_markup(tmp_memo); + D_PRINT("### memo text = %s", tmp_memo); + if (memo_str) { + D_PRINT("### memo text markup= %s", memo_str); + elm_entry_entry_insert(entry, memo_str); + g_free(memo_str); + } + + if (recp_type != COMPOSER_RECP_ADDR_INVALID) { + /* change focus to entry*/ + msg_ui_composer_last_focused_entry_set(cd, entry); + msg_ui_composer_last_focus_load(cd); + } + } + } + + if (recp_type == COMPOSER_RECP_ADDR_INVALID && img_count == 0) { + msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK); + } + } +} + +static void __ug_viewer_result_cb(ui_gadget_h ug, service_h result, void *priv) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd; + char *msgid_str = NULL; + int msg_id = 0; + + if (!ug || !priv || !result) { + D_EMSG("parameter error ug = %p, priv = %p, result = %p", ug, priv, result); + return; + } + + cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; + + if (service_get_extra_data(result, MSG_BUNDLE_KEY_DELETE_MSG, &msgid_str) == SERVICE_ERROR_NONE) { + if (msgid_str) + msg_id = atoi(msgid_str); + + D_MSG("Delete request msg id(%d) from viewer", msg_id); + msg_ui_bubble_delete_msg(cd->bubble_data, msg_id); + return; + } + + if (service_get_extra_data(result, MSG_BUNDLE_KEY_RESEND, &msgid_str) == SERVICE_ERROR_NONE) { + if (msgid_str) + msg_id = atoi(msgid_str); + + D_MSG("Resend request msg id(%d) from viewer", msg_id); + msg_ui_bubble_resend_msg(cd->bubble_data, msg_id); + return; + } + + D_LEAVE; +} + +static void __ug_gallery_return_cb(ui_gadget_h ug, service_h result, void *priv) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd; + char *file_path = NULL; + char *count_str = NULL; + int count = 0; + + if (!ug || !priv || !result) { + D_EMSG("parameter error ug = %p, priv = %p, result = %p", ug, priv, result); + return; + } + + cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; + + service_get_extra_data(result, MSG_BUNDLE_KEY_COUNT, &count_str); + if (count_str) + count = atoi(count_str); + D_MSG("gallery selected item count = %d", count); + + service_get_extra_data(result, MSG_BUNDLE_KEY_PATH, &file_path); + D_MSG("gallery selected item file_path = %s", file_path); + + cd->attachlist = make_tokenize_list(file_path, GALLERY_TOKEN); + + D_LEAVE; +} + +static void __ug_closed_cb(ui_gadget_h ug, void *priv) { D_ENTER; @@ -160,6 +491,9 @@ static void __ug_closed_cb(struct ui_gadget *ug, void *priv) cd->loaded_ug = NULL; } + msg_common_apply_font_size("entry", cd->content_layout); + msg_ui_composer_apply_font_size(cd); + __msg_ui_composer_external_closed(cd); D_LEAVE; @@ -168,18 +502,20 @@ static void __ug_closed_cb(struct ui_gadget *ug, void *priv) /* * Create External UG */ -struct ui_gadget * msg_ui_composer_launch_contact_detail_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int ct_id) +ui_gadget_h msg_ui_composer_launch_contact_detail_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int ct_id) { D_ENTER; D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL"); - struct ui_gadget *ug; + ui_gadget_h ug; struct ug_cbs cbs = { 0, }; - bundle *kb = bundle_create(); + service_h svc_handle = NULL; - if (!kb) + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); return NULL; + } char contactId[DEF_BUF_LEN_S] = { 0, }; char buf[DEF_BUF_LEN_D] = { 0, }; @@ -187,47 +523,49 @@ struct ui_gadget * msg_ui_composer_launch_contact_detail_ug(MSG_COMPOSER_VIEW_DA snprintf(contactId, sizeof(contactId), "%d", ct_id); snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_DETAIL); - bundle_add(kb, CT_UG_BUNDLE_TYPE, buf); - bundle_add(kb, CT_UG_BUNDLE_ID, contactId); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_ID, contactId); cbs.layout_cb = __ug_layout_cb; cbs.result_cb = NULL; cbs.destroy_cb = __ug_closed_cb; cbs.priv = cd; - ug = ug_create(cd->ug, UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, kb, &cbs); + ug = ug_create(cd->ug, UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, svc_handle, &cbs); cd->loaded_ug = ug; - bundle_free(kb); + service_destroy(svc_handle); D_LEAVE; return ug; } -struct ui_gadget * msg_ui_composer_launch_contact_list_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int type, const char *str) +ui_gadget_h msg_ui_composer_launch_contact_list_ug(MSG_COMPOSER_VIEW_DATA_S *cd, int type, const char *str) { D_ENTER; D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL"); - struct ui_gadget *ug; + + ui_gadget_h ug; struct ug_cbs cbs = { 0, }; - bundle *kb = bundle_create(); + service_h svc_handle = NULL; - if (!kb) + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); return NULL; + } char buf[DEF_BUF_LEN_D] = { 0, }; - + D_MSG("type = %d", type); if (type == CT_UG_REQUEST_UPDATE_WITH_EMAIL) { - snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_EMAIL); - bundle_add(kb, CT_UG_BUNDLE_TYPE, buf); - bundle_add(kb, CT_UG_BUNDLE_EMAIL, str); + snprintf(buf, sizeof(buf), "%d", type); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_EMAIL, str); } else if (type == CT_UG_REQUEST_UPDATE_WITH_NUM) { - snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_NUM); - bundle_add(kb, CT_UG_BUNDLE_TYPE, buf); - bundle_add(kb, CT_UG_BUNDLE_NUM, str); - } - else { - bundle_free(kb); + snprintf(buf, sizeof(buf), "%d", type); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_NUM, str); + } else { + service_destroy(svc_handle); return NULL; } @@ -236,175 +574,510 @@ struct ui_gadget * msg_ui_composer_launch_contact_list_ug(MSG_COMPOSER_VIEW_DATA cbs.destroy_cb = __ug_closed_cb; cbs.priv = cd; - ug = ug_create(cd->ug, UG_CONTACTS_LIST, UG_MODE_FULLVIEW, kb, &cbs); - bundle_free(kb); + ug = ug_create(cd->ug, UG_CONTACTS_LIST, UG_MODE_FULLVIEW, svc_handle, &cbs); + service_destroy(svc_handle); cd->loaded_ug = ug; D_LEAVE; return ug; } -struct ui_gadget *ug_calllog_create(void *data) +ui_gadget_h msg_ui_composer_launch_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle) { D_ENTER; + D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL"); - struct ui_gadget *ug; - struct ug_cbs cbs = { 0, }; + ui_gadget_h ug; + struct ug_cbs cbs; - MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + cbs.layout_cb = __ug_layout_cb; + cbs.result_cb = NULL; + cbs.destroy_cb = __ug_closed_cb; + cbs.priv = cd; + + ug = ug_create(cd->ug, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &cbs); + cd->loaded_ug = ug; + + D_LEAVE; + return ug; +} + +ui_gadget_h msg_ui_composer_launch_email_create(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL"); - bundle *kb = bundle_create(); + ui_gadget_h ug; + struct ug_cbs cbs; cbs.layout_cb = __ug_layout_cb; - cbs.result_cb = __ug_calllog_return_cb; + cbs.result_cb = NULL; cbs.destroy_cb = __ug_closed_cb; - cbs.priv = data; - ug = ug_create(cd->ug, TXT_UG_NAME_LOG, UG_MODE_FULLVIEW, kb, &cbs); + cbs.priv = cd; - bundle_free(kb); + ug = ug_create(cd->ug, EMAIL_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &cbs); + cd->loaded_ug = ug; + D_LEAVE; return ug; } -static void __ug_contacts_checklist_result_cb(struct ui_gadget *ug, bundle *result, void *priv) +ui_gadget_h msg_ui_composer_launch_viewer_create(void *data, service_h svc_handle) { D_ENTER; - D_MSG_RETM_IF(!ug,"ug data is NULL"); - D_MSG_RETM_IF(!result,"bundle result data is NULL"); - D_MSG_RETM_IF(!priv,"priv data is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL"); - MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; - D_MSG_RETM_IF(cd->recipient == NULL,"Recipient data is NULL"); + ui_gadget_h ug; + struct ug_cbs cbs; - int contact_index; - int *num_id_list = NULL; - int len, i; + cbs.layout_cb = __ug_layout_cb; + cbs.result_cb = __ug_viewer_result_cb; + cbs.destroy_cb = __ug_closed_cb; + cbs.priv = cd; - const char *number_str; - const char *bundle_val; + ug = ug_create(cd->ug, TXT_UG_NAME_MSG_VIEWER, UG_MODE_FULLVIEW, svc_handle, &cbs); + cd->loaded_ug = ug; - bool bMaxCount = false; - bool bInvalidNum = false; - bool bDup = false; + D_LEAVE; + return ug; +} - bundle_val = bundle_get_val(result, CT_UG_BUNDLE_RESULT_NUMBER_ID_LIST); - D_MSG_RETM_IF(!bundle_val,"bundle_val data is NULL"); +ui_gadget_h ug_contact_checklist_create(void *data) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; - num_id_list = (int *)g_base64_decode(bundle_val, (gsize *)&len); - D_MSG_RETM_IF(!num_id_list,"number_id list is NULL"); + ui_gadget_h ug; + struct ug_cbs cbs = {0,}; + service_h svc_handle = NULL; - for (i = 0; i < len / sizeof(int); i++) { + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return NULL; + } - if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) { - bMaxCount = true; - break; - } + char contact_ug[DEF_BUF_LEN] = { 0, }; - CTSvalue *value = NULL; - contact_index = contacts_svc_get_contact_value(CTS_GET_NUMBER_VALUE, num_id_list[i], &value); - if (contact_index <= 0 ) { - D_EMSG("Fail to get contact value"); - continue; - } + snprintf(contact_ug, sizeof(contact_ug)-1, "%d", CT_UG_REQUEST_CHECK_FOR_NUMBER); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, contact_ug); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_REQUEST_TYPE, MSG_BUNDLE_VALUE_CONTACT_CHECK_LIST); - number_str = contacts_svc_value_get_str(value, CTS_NUM_VAL_NUMBER_STR); - D_MSG("selected number_id = %d, contact_id = %d, number = %s", num_id_list[i], contact_index, number_str); + cbs.layout_cb = __ug_layout_cb; + cbs.result_cb = __ug_contacts_checklist_result_cb; + cbs.destroy_cb = __ug_closed_cb; + cbs.priv = data; - if (number_str) { - if (msg_ui_composer_recipient_duplicate_check(cd->recipient, number_str) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) { - bDup = true; - contacts_svc_value_free(value); - continue; - } + ug = ug_create(cd->ug, TXT_UG_NAME_CONTACT, UG_MODE_FULLVIEW, svc_handle, &cbs); - if (msg_ui_composer_recipient_vaild_check(number_str) == EINA_FALSE) { - bInvalidNum = true; - } + service_destroy(svc_handle); - msg_ui_composer_recipient_append(cd->recipient, number_str, contact_index); + D_LEAVE; + return ug; +} - } else { - D_EMSG("contact index[%d] is unuseable !!", contact_index); - } +ui_gadget_h ug_calllog_create(void *data) +{ + D_ENTER; - contacts_svc_value_free(value); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + ui_gadget_h ug; + struct ug_cbs cbs = { 0, }; + + service_h svc_handle = NULL; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return NULL; } - D_MSG("bMaxCount = %d, bInvalidNum = %d, bDup = %d", bMaxCount, bInvalidNum, bDup); - if (bMaxCount) { - msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX); - } else if (bInvalidNum) { - msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP); - } else if (bDup) { - msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP); + cbs.layout_cb = __ug_layout_cb; + cbs.result_cb = __ug_calllog_return_cb; + cbs.destroy_cb = __ug_closed_cb; + cbs.priv = data; + ug = ug_create(cd->ug, TXT_UG_NAME_LOG, UG_MODE_FULLVIEW, svc_handle, &cbs); + + service_destroy(svc_handle); + + return ug; +} + +ui_gadget_h ug_myfile_create(void *data) +{ + D_ENTER; + ui_gadget_h ug; + struct ug_cbs cbs = { 0, }; + + service_h svc_handle = NULL; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return NULL; } - g_free(num_id_list); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FILE_TYPE, MSG_BUNDLE_VALUE_ALL); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_SELECT_TYPE, MSG_BUNDLE_VALUE_MULTI_FILE); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_DRMTYPE, MSG_BUNDLE_VALUE_DRM_WITHOUT_FL); + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + + cbs.layout_cb = __ug_layout_cb; + cbs.result_cb = __ug_myfile_return_cb; + cbs.destroy_cb = __ug_closed_cb; + cbs.priv = data; + + ug = ug_create(cd->ug, TXT_UG_NAME_MYFILE, UG_MODE_FULLVIEW, svc_handle, &cbs); + + service_destroy(svc_handle); D_LEAVE; + return ug; } -struct ui_gadget *ug_contact_checklist_create(void *data) +ui_gadget_h ug_namecard_create(void *data) { D_ENTER; - struct ui_gadget *ug; - struct ug_cbs cbs = {0,}; + ui_gadget_h ug; + struct ug_cbs cbs = { 0, }; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; - bundle *b; + service_h svc_handle = NULL; - b = bundle_create(); - if (!b) + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); return NULL; + } char contact_ug[DEF_BUF_LEN] = { 0, }; + snprintf(contact_ug, sizeof(contact_ug)-1, "%d", CT_UG_REQUEST_SELECT_CONTACT); - snprintf(contact_ug, sizeof(contact_ug)-1, "%d", CT_UG_REQUEST_CHECK_FOR_NUMBER); - bundle_add(b, MSG_BUNDLE_KEY_TYPE, contact_ug); - bundle_add(b, MSG_BUNDLE_KEY_REQUEST_TYPE, MSG_BUNDLE_VALUE_CONTACT_CHECK_LIST); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, contact_ug); cbs.layout_cb = __ug_layout_cb; - cbs.result_cb = __ug_contacts_checklist_result_cb; + cbs.result_cb = __ug_namecard_list_return_cb; cbs.destroy_cb = __ug_closed_cb; cbs.priv = data; + ug = ug_create(cd->ug, TXT_UG_NAME_CONTACT, UG_MODE_FULLVIEW, svc_handle, &cbs); + + service_destroy(svc_handle); + + D_LEAVE; + return ug; +} + +ui_gadget_h ug_msgviewer_create(void *data, msg_struct_t msg_data) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; - ug = ug_create(cd->ug, TXT_UG_NAME_CONTACT, UG_MODE_FULLVIEW, b, &cbs); + ui_gadget_h ug; + struct ug_cbs cbs; + service_h svc_handle = NULL; + + cbs.layout_cb = __ug_layout_cb; + cbs.result_cb = NULL; + cbs.destroy_cb = __ug_closed_cb; + cbs.priv = (void *)cd; - bundle_free(b); + char preview_data[DEF_BUF_LEN_S] = { 0, }; + D_MSG("[DEBUG] hex address [%x]", (unsigned int)msg_data); + snprintf(preview_data, sizeof(preview_data)-1, "%x", (unsigned int)msg_data); + D_MSG("[DEBUG] hex address [%s]", preview_data); + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return NULL; + } + + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_PREVIEW_MODE); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_PREVIEW_DATA, preview_data); + + ug = ug_create(cd->ug, TXT_UG_NAME_MSG_VIEWER, UG_MODE_FULLVIEW, svc_handle, &cbs); + + service_destroy(svc_handle); D_LEAVE; return ug; } -struct ui_gadget *msg_ui_composer_launch_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *b) +ui_gadget_h ug_calendar_create(void *data) { D_ENTER; - D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL"); - struct ui_gadget *ug; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + + ui_gadget_h ug; struct ug_cbs cbs; + service_h svc_handle = NULL; cbs.layout_cb = __ug_layout_cb; - cbs.result_cb = NULL; + cbs.result_cb = __ug_calendar_result_cb; cbs.destroy_cb = __ug_closed_cb; - cbs.priv = cd; + cbs.priv = (void *)cd; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return NULL; + } + + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, MSG_BUNDLE_VALUE_FILE); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MAX, MSG_BUNDLE_VALUE_CALENDAR_MAX); + + ug = ug_create(cd->ug, TXT_UG_NAME_CALENDAR, UG_MODE_FULLVIEW, svc_handle, &cbs); + + service_destroy(svc_handle); - ug = ug_create(cd->ug, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, b, &cbs); - cd->loaded_ug = ug; D_LEAVE; return ug; } +ui_gadget_h ug_memo_create(void *data) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + + ui_gadget_h ug; + struct ug_cbs cbs = { 0, }; + service_h svc_handle = NULL; + + cbs.layout_cb = __ug_layout_cb; + cbs.result_cb = __ug_memo_result_cb; + cbs.destroy_cb = __ug_closed_cb; + cbs.priv = (void *)cd; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return NULL; + } + + ug = ug_create(cd->ug, TXT_UG_NAME_MEMO, UG_MODE_FULLVIEW, svc_handle, &cbs); + + service_destroy(svc_handle); + + return ug; +} + +ui_gadget_h ug_gallery_create(void *data) +{ + D_ENTER; + + ui_gadget_h ug; + struct ug_cbs cbs = { 0, }; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + service_h svc_handle = NULL; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return NULL; + } + + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_LAUNCH_TYPE, MSG_BUNDLE_VALUE_SELECT_MULTIPLE); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FILE_TYPE, MSG_BUNDLE_VALUE_GALLERY_ALL); + + cbs.layout_cb = __ug_layout_cb; + cbs.result_cb = __ug_gallery_return_cb; + cbs.destroy_cb = __ug_closed_cb; + cbs.priv = data; + + ug = ug_create(cd->ug, TXT_UG_NAME_GALLERY, UG_MODE_FULLVIEW, svc_handle, &cbs); + + service_destroy(svc_handle); + + D_LEAVE; + return ug; +} + +static void __appsvc_camera_result_cb(service_h request, service_h reply, service_result_e result, void *data) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + int ret = 0; + D_MSG("result : %d", result); + + if (result == SERVICE_RESULT_SUCCEEDED) { + char *result_filename; + ret = service_get_extra_data(reply, SERVICE_DATA_SELECTED, &result_filename); + if (ret != SERVICE_ERROR_NONE) { + D_EMSG("service_get_extra_data() is failed : %d", ret); + return; + } + + if (result_filename) { + cd->attachlist = eina_list_append(cd->attachlist, g_strdup(result_filename)); + } else { + D_EMSG("No result"); + } + } + + __msg_ui_composer_external_closed(cd); + + D_LEAVE; +} + +int appsvc_take_picture(void *data) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + int ret; + service_h svc_handle = NULL; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return COMPOSER_RETURN_FAIL; + } + + service_set_operation(svc_handle, SERVICE_OPERATION_CREATE_CONTENT); + service_set_mime(svc_handle, "image/jpg"); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_CALLER, MESSAGE_PKGNAME); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESOLUTION, MSG_BUNDLE_VALUE_VGA); + + ret = service_send_launch_request(svc_handle, __appsvc_camera_result_cb, cd); + if (ret != SERVICE_ERROR_NONE) { + D_EMSG("service_send_launch_request is failed ret = %d", ret); + service_destroy(svc_handle); + return COMPOSER_RETURN_FAIL; + } + + service_destroy(svc_handle); + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +int appsvc_take_camcorder(void *data) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + int ret; + service_h svc_handle = NULL; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return COMPOSER_RETURN_FAIL; + } + + service_set_operation(svc_handle, SERVICE_OPERATION_CREATE_CONTENT); + service_set_mime(svc_handle, "video/3gp"); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_CALLER, MESSAGE_PKGNAME); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESOLUTION, MSG_BUNDLE_VALUE_QCIF); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_LIMIT, MSG_BUNDLE_VALUE_CAM_LIMIT_SIZE); + + ret = service_send_launch_request(svc_handle, __appsvc_camera_result_cb, cd); + if (ret != SERVICE_ERROR_NONE) { + D_EMSG("service_send_launch_request is failed ret = %d", ret); + service_destroy(svc_handle); + return COMPOSER_RETURN_FAIL; + } + + service_destroy(svc_handle); + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +static void __appsvc_record_voice_result_cb(bundle *b, int reserved, appsvc_result_val result, void *data) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + + if (result == APPSVC_RES_OK) { + const char *result_filename = appsvc_get_data(b, APPSVC_DATA_SELECTED); + if (result_filename) { + D_MSG("result file name : %s", result_filename); + cd->attachlist = eina_list_append(cd->attachlist, g_strdup(result_filename)); + } else { + D_MSG("No result"); + } + } + __msg_ui_composer_external_closed(cd); + D_LEAVE; +} + +int appsvc_record_voice(void *data) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + int ret; + bundle *b; + + b = bundle_create(); + appsvc_set_operation(b, APPSVC_OPERATION_CREATE_CONTENT); + appsvc_set_mime(b, "audio/amr"); /*"audio/mp4" for high quality*/ + appsvc_add_data(b, "SIZE", MSG_BUNDLE_VALUE_VR_LIMIT_SIZE); /* unit:KB (if max size is not set, no limit.)*/ + ret = appsvc_run_service(b, 0, __appsvc_record_voice_result_cb, cd); + bundle_free(b); + + if (ret < APPSVC_RET_OK) { + D_EMSG("appsvc_run_service is failed ret = %d", ret); + return COMPOSER_RETURN_FAIL; + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +int appsvc_launch_app(const char *uri) +{ + D_ENTER; + D_MSG_RETVM_IF(uri == NULL, COMPOSER_RETURN_FAIL, "uri is NULL"); + int ret; + + bundle *b = bundle_create(); + appsvc_set_operation(b, APPSVC_OPERATION_VIEW); + appsvc_set_uri(b, uri); + ret = appsvc_run_service(b, 0, NULL, NULL); + bundle_free(b); + + if (ret < APPSVC_RET_OK) { + D_EMSG("appsvc_run_service is failed ret = %d", ret); + return COMPOSER_RETURN_FAIL; + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +static void __msg_ui_composer_external_closed(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + if (cd->attachlist) { + msg_ui_composer_body_items_add(cd); + } + + if (cd->loaded_aul || cd->state == COMPOSER_STATE_TYPE_RUNNING) { + if (!msg_ui_composer_popup_exist(cd)) { + D_MSG("set last focus via external"); + msg_ui_composer_last_focus_load(cd); + } + } + + D_LEAVE; +} + COMPOSER_RETURN_TYPE_E msg_ui_composer_external_ug_call(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_EXT_TYPE_E ext_type, void *reserved) { D_ENTER; COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS; - struct ui_gadget *external_ug = NULL; + ui_gadget_h external_ug = NULL; switch (ext_type) { + case COMPOSER_EXT_TYPE_GALLERY: + external_ug = ug_gallery_create(cd); + break; + + case COMPOSER_EXT_TYPE_MYFILE: + external_ug = ug_myfile_create(cd); + break; + case COMPOSER_EXT_TYPE_LOG: external_ug = ug_calllog_create(cd); break; @@ -412,6 +1085,22 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_external_ug_call(MSG_COMPOSER_VIEW_DATA_S case COMPOSER_EXT_TYPE_CONTACTLIST: external_ug = ug_contact_checklist_create(cd); break; + + case COMPOSER_EXT_TYPE_NAMECARD: + external_ug = ug_namecard_create(cd); + break; + + case COMPOSER_EXT_TYPE_CALENDAR: + external_ug = ug_calendar_create(cd); + break; + + case COMPOSER_EXT_TYPE_MEMO: + external_ug = ug_memo_create(cd); + break; + case COMPOSER_EXT_TYPE_MSGVIEWER: + external_ug = ug_msgviewer_create(cd, reserved); + break; + default: D_MSG("ERROR ext type = %d!!!!!!!!!!!!", ext_type); ret = COMPOSER_RETURN_FAIL; @@ -427,18 +1116,66 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_external_ug_call(MSG_COMPOSER_VIEW_DATA_S return ret; } +COMPOSER_RETURN_TYPE_E msg_ui_composer_external_aul_call(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_EXT_TYPE_E ext_type, void *reserved) +{ + D_ENTER; + + COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS; + + switch (ext_type) { + case COMPOSER_EXT_TYPE_CAMERA: + ret = appsvc_take_picture(cd); + break; + case COMPOSER_EXT_TYPE_CAMCORDER: + ret = appsvc_take_camcorder(cd); + break; + case COMPOSER_EXT_TYPE_VOICEREC: + ret = appsvc_record_voice(cd); + break; + case COMPOSER_EXT_TYPE_COMMON: + ret = appsvc_launch_app(reserved); + break; + + default: + D_MSG("ERROR ext type = %d!!!!!!!!!!!!", ext_type); + ret = COMPOSER_RETURN_FAIL; + break; + } + + if (ret != COMPOSER_RETURN_FAIL) + cd->loaded_aul = TRUE; + + D_MSG("%d", cd->loaded_aul); + D_LEAVE; + return ret; +} + COMPOSER_RETURN_TYPE_E msg_ui_composer_external_call(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_EXT_TYPE_E ext_type, void *reserved) { D_ENTER; COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS; - D_MSG("Launch external call type[%d]",ext_type); + D_MSG("Launch external call type[%d]", ext_type); switch (ext_type) { + case COMPOSER_EXT_TYPE_GALLERY: + case COMPOSER_EXT_TYPE_MYFILE: case COMPOSER_EXT_TYPE_LOG: case COMPOSER_EXT_TYPE_CONTACTLIST: + case COMPOSER_EXT_TYPE_NAMECARD: + case COMPOSER_EXT_TYPE_CALENDAR: + case COMPOSER_EXT_TYPE_MEMO: + case COMPOSER_EXT_TYPE_MSGVIEWER: ret = msg_ui_composer_external_ug_call(cd, ext_type, reserved); break; + + case COMPOSER_EXT_TYPE_VOICEREC: + case COMPOSER_EXT_TYPE_CAMERA: + case COMPOSER_EXT_TYPE_CAMCORDER: + case COMPOSER_EXT_TYPE_COMMON: + ret = msg_ui_composer_external_aul_call(cd, ext_type, reserved); + break; + default: D_MSG("ERROR ext type = %d!!!!!!!!!!!!", ext_type); ret = COMPOSER_RETURN_FAIL; @@ -448,4 +1185,3 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_external_call(MSG_COMPOSER_VIEW_DATA_S *c D_LEAVE; return ret; } - diff --git a/composer/src/gadget/msg-ui-composer-gadget.c b/composer/src/gadget/msg-ui-composer-gadget.c index 1e840c5..9a269e6 100755 --- a/composer/src/gadget/msg-ui-composer-gadget.c +++ b/composer/src/gadget/msg-ui-composer-gadget.c @@ -14,9 +14,9 @@ * limitations under the License. */ + #include "msg-ui-composer-data.h" #include "msg-ui-composer-main.h" -#include "msg-ui-composer-core.h" #include "msg-ui-composer-util.h" #include "msg-ui-composer-common.h" #include "msg-ui-composer-recipient.h" @@ -26,24 +26,26 @@ #define UG_MODULE_API __attribute__ ((visibility("default"))) #endif -static void __base_layout_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info) +static void __base_layout_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { D_ENTER; - MSG_COMPOSER_VIEW_DATA_S *pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)data; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; - if (!pcomp_data) + if (!cd) return; - msg_ui_composer_destroy(pcomp_data); + msg_ui_composer_destroy(cd); D_LEAVE; } -static void *__msg_ui_composer_on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, void *priv) +static void *__msg_ui_composer_on_create(ui_gadget_h ug, enum ug_mode mode, service_h data, void *priv) { D_ENTER; - MSG_COMPOSER_VIEW_DATA_S *pcomp_data; + MSG_COMPOSER_VIEW_DATA_S *cd; + int win_w = 0; + int win_h = 0; if (ug == NULL || priv == NULL) { D_EMSG("[ASSERT] ug = %p, priv = %p", ug, priv); @@ -52,72 +54,87 @@ static void *__msg_ui_composer_on_create(struct ui_gadget *ug, enum ug_mode mode bindtextdomain("message", LOCALEDIR); - pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)priv; - pcomp_data->ug = ug; + cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; + cd->ug = ug; - pcomp_data->main_window = ug_get_window(); + cd->main_window = ug_get_window(); - if (pcomp_data->main_window == NULL) { + if (cd->main_window == NULL) { D_EMSG("[ASSERT] main window is NULL"); return NULL; } - pcomp_data->base = msg_ui_composer_layout_create(pcomp_data->main_window, true); - if (pcomp_data->base == NULL) { + ecore_x_window_size_get(ecore_x_window_root_first_get(), &win_w, &win_h); + cd->window_w = win_w; + cd->window_h = win_h; + D_MSG("screen width = %d, screen_height = %d", win_w, win_h); + + cd->base = msg_ui_composer_layout_create(cd->main_window, true); + if (cd->base == NULL) { return NULL; } - pcomp_data->bg = msg_ui_composer_bg_create(pcomp_data->base); - elm_object_part_content_set(pcomp_data->base, "elm.swallow.bg", pcomp_data->bg); - elm_object_style_set(pcomp_data->bg, "edit_mode"); + char *from = NULL; + char *thread_id = NULL; + char *msg_id = NULL; - if (g_strcmp0(bundle_get_val(data, MSG_BUNDLE_KEY_FROM), MSG_BUNDLE_VALUE_INTERNAL) == 0) { - pcomp_data->isMsgInternal = true; - } else { - pcomp_data->isMsgInternal = false; - } + cd->bg = msg_ui_composer_bg_create(cd->base); + elm_object_part_content_set(cd->base, "elm.swallow.bg", cd->bg); + elm_object_style_set(cd->bg, "edit_mode"); + + service_get_extra_data(data, MSG_BUNDLE_KEY_FROM, &from); - if (bundle_get_val(data, MSG_BUNDLE_KEY_THREAD_ID) || bundle_get_val(data, MSG_BUNDLE_KEY_MSG_ID)) { - pcomp_data->msg_ug_mode = MSG_UG_MODE_BUBBLE_COMPOSER; + if (from && g_strcmp0(from, MSG_BUNDLE_VALUE_INTERNAL) == 0) + cd->isMsgInternal = true; + else + cd->isMsgInternal = false; + + service_get_extra_data(data, MSG_BUNDLE_KEY_THREAD_ID, &thread_id); + service_get_extra_data(data, MSG_BUNDLE_KEY_MSG_ID, &msg_id); + if (thread_id || msg_id) { + cd->msg_ug_mode = MSG_UG_MODE_BUBBLE_COMPOSER; } else { - if (pcomp_data->isMsgInternal == true) { - pcomp_data->msg_ug_mode = MSG_UG_MODE_FULL_COMPOSER; + if (cd->isMsgInternal == true) { + cd->msg_ug_mode = MSG_UG_MODE_FULL_COMPOSER; } else { - pcomp_data->msg_ug_mode = MSG_UG_MODE_ONLY_COMPOSER; + cd->msg_ug_mode = MSG_UG_MODE_ONLY_COMPOSER; } } - D_MSG("UG MODE %d[Internal = %d]", pcomp_data->msg_ug_mode, pcomp_data->isMsgInternal); + D_MSG("UG MODE %d[Internal = %d]", cd->msg_ug_mode, cd->isMsgInternal); - pcomp_data->isFullview = true; + cd->isFullview = true; - evas_object_event_callback_add(pcomp_data->base, EVAS_CALLBACK_DEL, __base_layout_delete_cb, pcomp_data); + evas_object_event_callback_add(cd->base, EVAS_CALLBACK_DEL, __base_layout_delete_cb, cd); - if (msg_ui_composer_init(pcomp_data) != COMPOSER_RETURN_SUCCESS) { + if (msg_ui_composer_init(cd) != COMPOSER_RETURN_SUCCESS) { D_EMSG("msg_ui_composer_init error"); return NULL; } - if (msg_ui_composer_create(pcomp_data) != COMPOSER_RETURN_SUCCESS) { + if (msg_ui_composer_create(cd) != COMPOSER_RETURN_SUCCESS) { D_EMSG("creating main layout failed"); return NULL; } - return pcomp_data->base; + return cd->base; } -static void __msg_ui_composer_on_start(struct ui_gadget *ug, bundle *data, void *priv) +static void __msg_ui_composer_on_start(ui_gadget_h ug, service_h data, void *priv) { D_ENTER; - MSG_COMPOSER_VIEW_DATA_S *pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)priv; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; + + msg_ui_composer_start(cd, data); - msg_ui_composer_start(pcomp_data, data); + msg_common_apply_font_size("entry", cd->content_layout); + msg_ui_composer_apply_font_size(cd); D_LEAVE; } -static void __msg_ui_composer_on_pause(struct ui_gadget *ug, bundle *data, void *priv) +static void __msg_ui_composer_on_pause(ui_gadget_h ug, service_h data, void *priv) { D_ENTER; MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; @@ -132,13 +149,18 @@ static void __msg_ui_composer_on_pause(struct ui_gadget *ug, bundle *data, void D_LEAVE; } -static void __msg_ui_composer_on_resume(struct ui_gadget *ug, bundle *data, void *priv) +static void __msg_ui_composer_on_resume(ui_gadget_h ug, service_h data, void *priv) { D_ENTER; MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; D_MSG_RETM_IF(cd == NULL, "Composer data is NULL"); D_MSG_RETM_IF(cd->state == COMPOSER_STATE_TYPE_DESTROY, "Composer state is already Destroy"); + if (!cd->loaded_ug) + msg_common_apply_font_size("entry", cd->content_layout); + + msg_ui_composer_apply_font_size(cd); + cd->state = COMPOSER_STATE_TYPE_RUNNING; cd->loaded_aul = FALSE; @@ -151,7 +173,7 @@ static void __msg_ui_composer_on_resume(struct ui_gadget *ug, bundle *data, void D_LEAVE; } -static void __msg_ui_composer_on_destroy(struct ui_gadget *ug, bundle *data, void *priv) +static void __msg_ui_composer_on_destroy(ui_gadget_h ug, service_h data, void *priv) { D_ENTER; @@ -174,30 +196,19 @@ static void __msg_ui_composer_on_destroy(struct ui_gadget *ug, bundle *data, voi D_LEAVE; } -static void __msg_ui_composer_on_message(struct ui_gadget *ug, bundle *msg, bundle *data, void *priv) +static void __msg_ui_composer_on_message(ui_gadget_h ug, service_h msg, service_h data, void *priv) { D_ENTER; - MSG_COMPOSER_VIEW_DATA_S *pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)priv; - if (msg) { - if (bundle_get_val(msg, MSG_BUNDLE_KEY_THREAD_ID) || bundle_get_val(msg, MSG_BUNDLE_KEY_MSG_ID)) { - if (pcomp_data->msg_bundle) { - bundle_free(pcomp_data->msg_bundle); - } - - pcomp_data->msg_bundle = bundle_dup(msg); - msg_ui_composer_reset_request(pcomp_data); - - } else { - msg_ui_composer_reset(pcomp_data, msg); - } - } + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)priv; + if (msg) + msg_ui_composer_reset_request(cd, msg); D_LEAVE; } -static void __msg_ui_composer_on_event(struct ui_gadget *ug, enum ug_event event, bundle *data, void *priv) +static void __msg_ui_composer_on_event(ui_gadget_h ug, enum ug_event event, service_h data, void *priv) { D_ENTER; switch (event) { @@ -207,6 +218,18 @@ static void __msg_ui_composer_on_event(struct ui_gadget *ug, enum ug_event event break; case UG_EVENT_LANG_CHANGE: break; + case UG_EVENT_ROTATE_PORTRAIT: + msg_ui_composer_rotate(priv, COMPOSER_ROTATE_PORTRAIT); + break; + case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN: + msg_ui_composer_rotate(priv, COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN); + break; + case UG_EVENT_ROTATE_LANDSCAPE: + msg_ui_composer_rotate(priv, COMPOSER_ROTATE_LANDSCAPE); + break; + case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN: + msg_ui_composer_rotate(priv, COMPOSER_ROTATE_LANDSCAPE_UPSIDEDOWN); + break; default: break; } @@ -219,11 +242,11 @@ UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops) return COMPOSER_RETURN_FAIL; } - MSG_COMPOSER_VIEW_DATA_S *pcomp_data = NULL; - pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)calloc(1, sizeof(MSG_COMPOSER_VIEW_DATA_S)); + MSG_COMPOSER_VIEW_DATA_S *cd = NULL; + cd = (MSG_COMPOSER_VIEW_DATA_S *)calloc(1, sizeof(MSG_COMPOSER_VIEW_DATA_S)); - if (!pcomp_data) { - D_EMSG("[ERROR] pcomp_data calloc failed"); + if (!cd) { + D_EMSG("[ERROR] cd calloc failed"); return COMPOSER_RETURN_FAIL; } @@ -235,7 +258,7 @@ UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops) ops->message = __msg_ui_composer_on_message; ops->event = __msg_ui_composer_on_event; ops->key_event = NULL; - ops->priv = (void *)pcomp_data; + ops->priv = (void *)cd; ops->opt = UG_OPT_INDICATOR_PORTRAIT_ONLY; return MSG_UI_RET_SUCCESS; @@ -248,10 +271,10 @@ UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops) return; } - MSG_COMPOSER_VIEW_DATA_S *pcomp_data = (MSG_COMPOSER_VIEW_DATA_S *)ops->priv; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)ops->priv; - if (pcomp_data) { - free(pcomp_data); + if (cd) { + free(cd); ops->priv = NULL; } diff --git a/composer/src/message/msg-ui-composer-message.c b/composer/src/message/msg-ui-composer-message.c index c58160d..45f2ab1 100755 --- a/composer/src/message/msg-ui-composer-message.c +++ b/composer/src/message/msg-ui-composer-message.c @@ -14,18 +14,40 @@ * limitations under the License. */ + /* includes*/ -#include "msg-ui-composer-core.h" +#include "msg-ui-composer-subject.h" +#include "msg-ui-composer-util.h" #include "msg-ui-composer-body.h" #include "msg-ui-composer-message.h" #include "msg-ui-composer-message-data.h" +#include "msg-ui-composer-attachment.h" #include "msg-ui-composer-common.h" +#include "msg-ui-composer-recipient.h" -#include <MapiMessage.h> -#include <MapiTransport.h> #include <glib-object.h> #include <glib.h> -#include <MsgSettingTypes.h> + +/* defines */ +#define MSG_DATA_TEMPPATH DATADIR "/" + +#define MSG_COMPOSER_SMIL_SCREEN_WIDTH 480 +#define MSG_COMPOSER_SMIL_SCREEN_HEIGHT 800 + +#define MSG_COMPOSER_SMIL_POS_TOP 1 +#define MSG_COMPOSER_SMIL_POS_BOTTOM 50 +#define MSG_COMPOSER_SMIL_POS_LEFT 0 + +#define MSG_COMPOSER_SMIL_REGION_WIDTH 100 +#define MSG_COMPOSER_SMIL_REGION_HEIGHT 50 + +#define MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR 0xFFFFFF +#define MSG_COMPOSER_PAGE_DEFAULT_DURATION 5000 //(msec) +#define MSG_COMPOSER_SMIL_DEFAULT_FONT_COLOR 0x000000 +#define MSG_COMPOSER_SMIL_DEFAULT_FONT_SIZE 30 +#define MSG_COMPOSER_SMIL_DEFAULT_BOLD false +#define MSG_COMPOSER_SMIL_DEFAULT_UNDERLINE false + /* globals */ @@ -46,7 +68,7 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_init() if (msg_data != NULL) free(msg_data); - msg_data = (MSG_COMP_MSG_DATA_S *) calloc(1, sizeof(MSG_COMP_MSG_DATA_S)); + msg_data = (MSG_COMP_MSG_DATA_S *)calloc(1, sizeof(MSG_COMP_MSG_DATA_S)); if (msg_data == NULL) { MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data calloc error"); @@ -84,7 +106,7 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_destroy() return COMPOSER_RETURN_SUCCESS; } -COMPOSER_RETURN_TYPE_E msg_ui_composer_add_address(char *number) +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_add_address(char *number) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); @@ -99,10 +121,18 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_add_address(char *number) return COMPOSER_RETURN_SUCCESS; } +GSList *msg_ui_composer_message_get_address(void) +{ + D_ENTER; + D_MSG_RETVM_IF(msg_data == NULL, NULL, "msg_data is NULL. need to init"); + + return msg_data->recp_list; +} + COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_msg_type(COMPOSER_MSG_TYPE_E msg_type) { if (!msg_data) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL // need to init"); + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL. need to init"); return COMPOSER_RETURN_NULL_POINTER; } @@ -124,6 +154,173 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_sms_body(char *body_text) return COMPOSER_RETURN_SUCCESS; } +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_subject(char *subject, int length) +{ + D_ENTER; + if (msg_data == NULL || subject == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is NULL or no subject"); + return COMPOSER_RETURN_FAIL; + } + + if (subject && length > 0) + msg_data->mms_data.isSubject = true; + + if (length <= sizeof(msg_data->mms_data.subject)) + strncpy(msg_data->mms_data.subject, subject, length); + else + strncpy(msg_data->mms_data.subject, subject, sizeof(msg_data->mms_data.subject)-1); + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_attach_count(int attach_count) +{ + D_ENTER; + + if (!msg_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL"); + return COMPOSER_RETURN_NULL_POINTER; + } + + MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data; + + mms_data->attach_count = attach_count; + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_add_attachments(const char *filepath, int filetype) +{ + D_ENTER; + D_MSG_RETVM_IF(ecore_file_exists(filepath) == EINA_FALSE, COMPOSER_RETURN_FAIL,"File is NOT exist"); + + if (!msg_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL"); + return COMPOSER_RETURN_NULL_POINTER; + } + + MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data; + int attach_count = mms_data->attach_count; + + int i = 0; + for (i = 0; i < attach_count; i++) { + if (strlen(mms_data->attachlist[i].filepath) <= 0) { + mms_data->attachlist[i].filetype = filetype; + + strncpy(mms_data->attachlist[i].filepath, filepath, strlen(filepath)); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] attachment file path : [%s]", mms_data->attachlist[i].filepath); + break; + } + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_page_count(int page_count) +{ + D_ENTER; + + if (!msg_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is not exist"); + return COMPOSER_RETURN_NULL_POINTER; + } + + msg_data->mms_data.page_count = page_count; + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_is_text_top(bool isTextTop) +{ + D_ENTER; + + if (!msg_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is not exist"); + return COMPOSER_RETURN_NULL_POINTER; + } + + msg_data->mms_data.isTextTop = isTextTop; + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_text(const char *text, int nPage) +{ + D_ENTER; + + if (!msg_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is not exist !!"); + return COMPOSER_RETURN_NULL_POINTER; + } + + MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data; + int text_len = 0; + + if (text) + text_len = strlen(text); + + if (text && text_len > 0) { + mms_data->pagelist[nPage].isText = true; + + if (text_len <= COMPOSER_MMS_TEXT_MAX_BYTE) + strncpy(mms_data->pagelist[nPage].body_text, text, text_len); + else + strncpy(mms_data->pagelist[nPage].body_text, text, COMPOSER_MMS_TEXT_MAX_BYTE); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] no text"); + mms_data->pagelist[nPage].isText = false; + return COMPOSER_RETURN_FAIL; + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_media(const char *file_path, COMPOSER_MEDIA_TYPE_E media_type, int nPage, int duration) +{ + D_ENTER; + D_MSG_RETVM_IF(ecore_file_exists(file_path) == EINA_FALSE, COMPOSER_RETURN_FAIL,"File is NOT exist"); + + if (!msg_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data is NOT exist"); + return COMPOSER_RETURN_NULL_POINTER; + } + + MSG_COMP_MMS_DATA_S *mms_data = &msg_data->mms_data; + + if (!file_path) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No file path"); + return COMPOSER_RETURN_FAIL; + } + + switch (media_type) { + + case COMPOSER_MEDIA_TYPE_IMAGE: + mms_data->pagelist[nPage].isImage = true; + strncpy(mms_data->pagelist[nPage].image_file_path, file_path, strlen(file_path)); + break; + case COMPOSER_MEDIA_TYPE_VIDEO: + mms_data->pagelist[nPage].isVideo = true; + strncpy(mms_data->pagelist[nPage].image_file_path, file_path, strlen(file_path)); + break; + case COMPOSER_MEDIA_TYPE_AUDIO: + mms_data->pagelist[nPage].isSound = true; + strncpy(mms_data->pagelist[nPage].sound_file_path, file_path, strlen(file_path)); + mms_data->pagelist[nPage].page_duration = duration; + break; + default: + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid media type"); + return COMPOSER_RETURN_INVALID_MEDIA_TYPE; + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} /***************************************************** * @@ -142,13 +339,25 @@ static COMPOSER_RETURN_TYPE_E __msg_ui_composer_set_recipient() int count = g_slist_length(msg_data->recp_list); int i = 0; + msg_struct_list_s *addr_list = NULL; + + msg_get_list_handle(msg_data->msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void**)&addr_list); + addr_list->nCount = count; for (i = 0; i < count; i++) { char *address = (char *)g_slist_nth_data(msg_data->recp_list, i); - if (msg_ui_comp_core_add_recipient(msg_data->msgInfo, address, COMPOSER_RECP_TYPE_TO) != COMPOSER_RETURN_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] ADD RECIPIENT error"); - return COMPOSER_RETURN_FAIL; + if (address == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] address is value NULL, skip"); + continue; } + + int addr_type = get_address_type((const char*)address); + if (addr_type == COMPOSER_UTIL_ADDRTYPE_NUMBER) + msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, MSG_ADDRESS_TYPE_PLMN); + else if (addr_type == COMPOSER_UTIL_ADDRTYPE_EMAIL) + msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, MSG_ADDRESS_TYPE_EMAIL); + msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_RECIPIENT_TYPE_INT, MSG_RECIPIENTS_TYPE_TO); + msg_set_str_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, address, strlen(address)); } return COMPOSER_RETURN_SUCCESS; @@ -159,13 +368,14 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_create_new_message() MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); if (msg_data->msgInfo != NULL) { - msg_ui_comp_core_release_message(msg_data->msgInfo); + msg_release_struct(&msg_data->msgInfo); msg_data->msgInfo = NULL; } - if (msg_ui_comp_core_create_new_message(&msg_data->msgInfo) - != COMPOSER_RETURN_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_ui_comp_core_create_new_message is NULL !!"); + msg_data->msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + + if (msg_data->msgInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_create_struct failed"); return COMPOSER_RETURN_FAIL; } @@ -181,8 +391,7 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_release_message() return COMPOSER_RETURN_FAIL; } - if (msg_ui_comp_core_release_message(msg_data->msgInfo) - != COMPOSER_RETURN_SUCCESS) { + if (msg_release_struct(&msg_data->msgInfo) != MSG_SUCCESS) { MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is already destroyed !!"); return COMPOSER_RETURN_FAIL; } @@ -190,73 +399,267 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_release_message() return COMPOSER_RETURN_SUCCESS; } -COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_config(MSG_HANDLE_T msg_handle, MSG_SETTING_S *opt, int type) +static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_sms_message(msg_handle_t msg_handle) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - if (msg_handle == NULL || opt == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message handle or option data is NULL"); - return COMPOSER_RETURN_NULL_POINTER; + if (msg_data == NULL || msg_data->msgInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL !!"); + return COMPOSER_RETURN_FAIL; } - COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS; + int err = MSG_SUCCESS; + /* set message type to SMS */ + if (msg_set_int_value(msg_data->msgInfo, MSG_MESSAGE_TYPE_INT, MSG_TYPE_SMS) != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]msg_ui_comp_core_set_message_type error !!"); + return COMPOSER_RETURN_FAIL; + } + /* set message body text */ + if (msg_data->sms_data.body_text) + 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)); + else + err = msg_set_str_value(msg_data->msgInfo, MSG_MESSAGE_SMS_DATA_STR, NULL, 0); - switch (type) { - case COMPOSER_CONFIG_TYPE_GENERAL: - memset(opt, 0x00, sizeof(MSG_OPTION_TYPE_T) + sizeof(MSG_GENERAL_OPT_S)); - opt->type = MSG_GENERAL_OPT; - break; - case COMPOSER_CONFIG_TYPE_SMS_SEND: - memset(opt, 0x00, sizeof(MSG_OPTION_TYPE_T) + sizeof(MSG_SMS_SENDOPT_S)); - opt->type = MSG_SMS_SENDOPT; - break; - case COMPOSER_CONFIG_TYPE_SMSC_LIST: - memset(opt, 0x00, sizeof(MSG_OPTION_TYPE_T) + sizeof(MSG_SMSC_LIST_S)); - opt->type = MSG_SMSC_LIST; - break; - case COMPOSER_CONFIG_TYPE_PUSHMSG: - memset(opt, 0x00, sizeof(MSG_OPTION_TYPE_T) + sizeof(MSG_PUSHMSG_OPT_S)); - opt->type = MSG_PUSHMSG_OPT; - break; - case COMPOSER_CONFIG_TYPE_CBMSG: - memset(opt, 0x00, sizeof(MSG_OPTION_TYPE_T) + sizeof(MSG_CBMSG_OPT_S)); - opt->type = MSG_CBMSG_OPT; - break; - default: - ret = COMPOSER_RETURN_FAIL; - break; + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]msg_ui_comp_core_set_sms_body error !!"); + return COMPOSER_RETURN_FAIL; + } + /* set recipient */ + if (__msg_ui_composer_set_recipient(msg_data) != COMPOSER_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]__msg_ui_composer_set_recipient error !!"); + return COMPOSER_RETURN_FAIL; } - if (msg_ui_comp_core_msg_get_config(msg_handle, opt) - != COMPOSER_RETURN_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] getting message option failed."); - ret = COMPOSER_RETURN_FAIL; + return COMPOSER_RETURN_SUCCESS; +} + +static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_smil_header(msg_handle_t msg_handle, msg_struct_t mms_data, bool isTextTop) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + if (!mms_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL"); + return COMPOSER_RETURN_FAIL; } + msg_struct_t text_region = NULL; + msg_struct_t image_region = NULL; + + /************ make rootlayout ***************/ + msg_set_int_value(mms_data, MSG_MMS_ROOTLAYOUT_WIDTH_INT, MSG_COMPOSER_SMIL_SCREEN_WIDTH); + msg_set_int_value(mms_data, MSG_MMS_ROOTLAYOUT_HEIGHT_INT, MSG_COMPOSER_SMIL_SCREEN_HEIGHT); + msg_set_int_value(mms_data, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR); + + /************ make region ********************/ + /* 1. add text region */ + msg_mms_add_item(mms_data, MSG_STRUCT_MMS_REGION, &text_region); + msg_set_str_value(text_region, MSG_MMS_REGION_ID_STR, "Text", strlen("Text")); + msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_LEFT_INT, MSG_COMPOSER_SMIL_POS_LEFT); + + if (isTextTop) + msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_TOP); + else + msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_BOTTOM); + + msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_WIDTH_INT, MSG_COMPOSER_SMIL_REGION_WIDTH); + msg_set_int_value(text_region, MSG_MMS_REGION_LENGTH_HEIGHT_INT, MSG_COMPOSER_SMIL_REGION_HEIGHT); + msg_set_int_value(text_region, MSG_MMS_REGION_BGCOLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR); + + /* 2. image(video) region */ + msg_mms_add_item(mms_data, MSG_STRUCT_MMS_REGION, &image_region); + msg_set_str_value(image_region, MSG_MMS_REGION_ID_STR, "Image", strlen("Image")); + msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_LEFT_INT, MSG_COMPOSER_SMIL_POS_LEFT); + + if (isTextTop) + msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_BOTTOM); + else + msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_TOP_INT, MSG_COMPOSER_SMIL_POS_TOP); + + msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_WIDTH_INT, MSG_COMPOSER_SMIL_REGION_WIDTH); + msg_set_int_value(image_region, MSG_MMS_REGION_LENGTH_HEIGHT_INT, MSG_COMPOSER_SMIL_REGION_HEIGHT); + msg_set_int_value(image_region, MSG_MMS_REGION_BGCOLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_BGCOLOR); + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); - return ret; + return COMPOSER_RETURN_SUCCESS; +} + +static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_mms_body(msg_handle_t msg_handle, msg_struct_t fw_mms_data) +{ + D_ENTER; + + if (!msg_data || !fw_mms_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] message data or FW mms data pointer is NULL"); + return COMPOSER_RETURN_NULL_POINTER; + } + + MSG_COMP_MMS_DATA_S *ui_mms_data = &msg_data->mms_data; + int page_count = ui_mms_data->page_count; + int i = 0; + + for (i = 0; i < page_count; i++) { + msg_struct_t page_info = NULL; + int page_duration = 0; + + /* verify page duration */ + if (MSG_COMPOSER_PAGE_DEFAULT_DURATION < ui_mms_data->pagelist[i].page_duration) + page_duration = ui_mms_data->pagelist[i].page_duration; + else + page_duration = MSG_COMPOSER_PAGE_DEFAULT_DURATION; + + /* 1. make page */ + if (msg_mms_add_item(fw_mms_data, MSG_STRUCT_MMS_PAGE, &page_info) != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] create mms page error"); + return COMPOSER_RETURN_FAIL; + } + msg_set_int_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT, page_duration); + + /* 2. add media */ + /* 1) text */ + if (ui_mms_data->pagelist[i].isText) { + FILE *fp; + char szFilePath[DEF_BUF_LEN_L] = { 0x00, }; + char szFileName[DEF_BUF_LEN_L] = { 0x00, }; + char strMsg[COMPOSER_MMS_TEXT_MAX_BYTE + 1] = { 0x00, }; + + msg_struct_t added_media = NULL; + msg_struct_t text_style = NULL; + + /* create txt file */ + snprintf(szFilePath, sizeof(szFilePath), "%sMMS_Temp_%d.txt", MSG_DATA_TEMPPATH, i + 1); + snprintf(szFileName, sizeof(szFileName), "MMS_Temp_%d.txt", i + 1); + + fp = fopen(szFilePath, "wb"); + if (!fp) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "fopen error"); + return COMPOSER_RETURN_FAIL; + } + + strncpy(strMsg, ui_mms_data->pagelist[i].body_text, sizeof(strMsg) - 1); + fwrite(strMsg, strlen(strMsg), 1, fp); + fclose(fp); + + msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media); + msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_TEXT); + msg_set_str_value(added_media, MSG_MMS_MEDIA_REGION_ID_STR, "Text", strlen("Text")); + msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, szFilePath, strlen(szFilePath)); + + /** set font style */ + text_style = msg_create_struct(MSG_STRUCT_MMS_SMIL_TEXT); + msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_COLOR_INT, MSG_COMPOSER_SMIL_DEFAULT_FONT_COLOR); + msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_SIZE_INT, MSG_COMPOSER_SMIL_DEFAULT_FONT_SIZE); + msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_BOLD_BOOL, MSG_COMPOSER_SMIL_DEFAULT_BOLD); + msg_set_int_value(text_style, MSG_MMS_SMIL_TEXT_BOLD_BOOL, MSG_COMPOSER_SMIL_DEFAULT_UNDERLINE); + + msg_set_struct_handle(added_media, MSG_MMS_MEDIA_SMIL_TEXT_HND, text_style); + msg_release_struct(&text_style); + } + + /* 2) image / video */ + if (ui_mms_data->pagelist[i].isImage) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] image file added"); + msg_struct_t added_media = NULL; + char *filepath = ui_mms_data->pagelist[i].image_file_path; + + msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media); + msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_IMG); + msg_set_str_value(added_media, MSG_MMS_MEDIA_REGION_ID_STR, "Image", strlen("Image")); + msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, filepath, strlen(filepath)); + } else if (ui_mms_data->pagelist[i].isVideo) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] video file added"); + msg_struct_t added_media = NULL; + char *filepath = ui_mms_data->pagelist[i].image_file_path; + + msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media); + msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_VIDEO); + msg_set_str_value(added_media, MSG_MMS_MEDIA_REGION_ID_STR, "Image", strlen("Image")); + msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, filepath, strlen(filepath)); + } + /* 3) sound */ + if (ui_mms_data->pagelist[i].isSound) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sound file added"); + msg_struct_t added_media = NULL; + char *filepath = ui_mms_data->pagelist[i].image_file_path; + + msg_mms_add_item(page_info, MSG_STRUCT_MMS_MEDIA, &added_media); + msg_set_int_value(added_media, MSG_MMS_MEDIA_TYPE_INT, MMS_SMIL_MEDIA_AUDIO); + msg_set_str_value(added_media, MSG_MMS_MEDIA_FILEPATH_STR, filepath, strlen(filepath)); + } + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; } -static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_sms_message(MSG_HANDLE_T msg_handle) +static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_mms_message(msg_handle_t msg_handle) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + msg_struct_t fw_mms_data = NULL; + MSG_COMP_MMS_DATA_S ui_mms_data = { 0, }; + if (msg_data == NULL || msg_data->msgInfo == NULL) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msgInfo is NULL !!"); + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] msg_data is NULL !! "); return COMPOSER_RETURN_FAIL; } - /* set message type to SMS */ - if (msg_ui_comp_core_set_message_type(msg_data->msgInfo, COMPOSER_MSG_TYPE_SMS)) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]msg_ui_comp_core_set_message_type error !!"); + + ui_mms_data = msg_data->mms_data; + + /* set msg type to MMS */ + if (msg_set_int_value(msg_data->msgInfo, MSG_MESSAGE_TYPE_INT, MSG_TYPE_MMS) != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] set message type[MMS] error"); return COMPOSER_RETURN_FAIL; } - /* set message body text */ - if (msg_ui_comp_core_set_sms_body(msg_data->msgInfo, msg_data->sms_data.body_text)) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]msg_ui_comp_core_set_sms_body error !!"); + /* create mms data */ + fw_mms_data = msg_create_struct(MSG_STRUCT_MMS); + if (fw_mms_data == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] create mms message error!!"); return COMPOSER_RETURN_FAIL; } + + /* create smil header <rootlayout> <region> */ + if (__msg_ui_composer_make_smil_header(msg_handle, fw_mms_data, ui_mms_data.isTextTop) != COMPOSER_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] smil header create error"); + msg_release_struct(&fw_mms_data); + return COMPOSER_RETURN_FAIL; + } + /* set subject */ + int subject_len = strlen(ui_mms_data.subject); + if (ui_mms_data.isSubject == true || subject_len > 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] Set subject "); + if (msg_set_str_value(msg_data->msgInfo, MSG_MESSAGE_SUBJECT_STR, ui_mms_data.subject, subject_len) != MSG_SUCCESS) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] mms set subject error "); + } + /* set attachment */ + if (ui_mms_data.attach_count > 0) { + int i = 0; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ui_mms_data.attach_count = %d", ui_mms_data.attach_count); + + if (ui_mms_data.attach_count > COMPOSER_MMS_MAX_ATTACH_COUNT) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] attachment count error, max count change"); + ui_mms_data.attach_count = COMPOSER_MMS_MAX_ATTACH_COUNT; + } + + for (i = 0; i < ui_mms_data.attach_count; i++) { + MSG_COMP_ATTACH_DATA_S *attach_data = &ui_mms_data.attachlist[i]; + if (attach_data == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] attachment data is NULL"); + break; + } + msg_struct_t attachment = NULL; + msg_mms_add_item(fw_mms_data, MSG_STRUCT_MMS_ATTACH, &attachment); + msg_set_str_value(attachment, MSG_MMS_ATTACH_FILEPATH_STR, attach_data->filepath, strlen(attach_data->filepath)); + } + } + /* make body */ + /* 1) make page */ + __msg_ui_composer_make_mms_body(msg_handle, fw_mms_data); + + /* 2) set MMS body */ + msg_set_mms_struct(msg_data->msgInfo, fw_mms_data); + msg_release_struct(&fw_mms_data); + /* set recipient */ - if (__msg_ui_composer_set_recipient(msg_data) != COMPOSER_RETURN_SUCCESS) { + if (__msg_ui_composer_set_recipient() != COMPOSER_RETURN_SUCCESS) { MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT]__msg_ui_composer_set_recipient error !!"); return COMPOSER_RETURN_FAIL; } @@ -264,7 +667,7 @@ static COMPOSER_RETURN_TYPE_E __msg_ui_composer_make_sms_message(MSG_HANDLE_T ms return COMPOSER_RETURN_SUCCESS; } -static COMPOSER_RETURN_TYPE_E __msg_ui_composer_send(MSG_HANDLE_T msg_handle) +static COMPOSER_RETURN_TYPE_E __msg_ui_composer_send(msg_handle_t msg_handle) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); @@ -273,25 +676,71 @@ static COMPOSER_RETURN_TYPE_E __msg_ui_composer_send(MSG_HANDLE_T msg_handle) return COMPOSER_RETURN_FAIL; } - COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS; - MSG_REQUEST_S req = { 0 }; + msg_struct_t req = msg_create_struct(MSG_STRUCT_REQUEST_INFO); + int msg_type = MSG_TYPE_INVALID; + int err; + + msg_struct_t sendOpt = NULL; + msg_get_struct_handle(req, MSG_REQUEST_SENDOPT_HND, &sendOpt); + msg_set_bool_value(sendOpt, MSG_SEND_OPT_SETTING_BOOL, false); - req.msg = msg_data->msgInfo; - req.sendOpt.bSetting = false; + msg_set_struct_handle(req, MSG_REQUEST_MESSAGE_HND, msg_data->msgInfo); + msg_get_int_value(msg_data->msgInfo, MSG_MESSAGE_TYPE_INT, &msg_type); - if (msg_is_sms(req.msg)) { + if (msg_is_sms(msg_type)) { MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] try to send sms"); - ret = msg_ui_comp_core_send_sms(msg_handle, &req); + err = msg_sms_send_message(msg_handle, req); + } else if (msg_is_mms(msg_type)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] try to send mms"); + err = msg_mms_send_message(msg_handle, req); } else { MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] error message type"); - msg_ui_comp_core_release_message(msg_data->msgInfo); + msg_release_struct(&req); return COMPOSER_RETURN_FAIL; } - return ret; + msg_release_struct(&req); + + if (err == MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending success"); + return COMPOSER_RETURN_SUCCESS; + } else if (err == MSG_ERR_INVALID_PARAMETER) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d] : INVALID_PARAM ", err); + return COMPOSER_RETURN_NULL_POINTER; + } else if (err == MSG_ERR_NO_SIM) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d] : NO SIM", err); + return COMPOSER_RETURN_NO_SIM; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] sending failed error code [%d]", err); + return COMPOSER_RETURN_FAIL; + } +} + +msg_struct_t msg_ui_composer_message_make_preview(msg_handle_t msg_handle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + if (msg_data == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] can not send message,,, msg_data is NULL"); + return NULL; + } + + if (msg_ui_composer_create_new_message() != COMPOSER_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] create new message error !!!"); + return NULL; + } + + if (__msg_ui_composer_make_mms_message(msg_handle) + != COMPOSER_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] make mms message error !!!"); + return NULL; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return msg_data->msgInfo; } -COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(MSG_HANDLE_T msg_handle) +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(msg_handle_t msg_handle, msg_thread_id_t *tid) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); @@ -302,8 +751,8 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(MSG_HANDLE_T msg_ha COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS; - /* 1. create a new message (create msg_message_t) */ - if(msg_ui_composer_create_new_message() != COMPOSER_RETURN_SUCCESS){ + /* 1. create a new message (create msg_struct_t) */ + if (msg_ui_composer_create_new_message() != COMPOSER_RETURN_SUCCESS) { return COMPOSER_RETURN_FAIL; } @@ -311,23 +760,105 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(MSG_HANDLE_T msg_ha if (msg_data->msg_type == COMPOSER_MSG_TYPE_SMS) { if (__msg_ui_composer_make_sms_message(msg_handle) != COMPOSER_RETURN_SUCCESS) ret = COMPOSER_RETURN_FAIL; + } else if (msg_data->msg_type == COMPOSER_MSG_TYPE_MMS) { + if (__msg_ui_composer_make_mms_message(msg_handle) != COMPOSER_RETURN_SUCCESS) + ret = COMPOSER_RETURN_FAIL; } else { MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type"); ret = COMPOSER_RETURN_FAIL; } /*3. send message */ - if(ret != COMPOSER_RETURN_FAIL) { + if (ret != COMPOSER_RETURN_FAIL) { ret = __msg_ui_composer_send(msg_handle); + + if (ret == COMPOSER_RETURN_SUCCESS) { + msg_struct_list_s *addr_list = NULL; + + msg_get_list_handle(msg_data->msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list); + msg_get_thread_id_by_address(msg_handle, addr_list, tid); + } + } + + /*4. release message */ + msg_release_struct(&msg_data->msgInfo); + msg_data->msgInfo = NULL; + + return ret; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_save_message(msg_handle_t msg_handle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + if (msg_data == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] can not save message,,, msg_data is NULL"); + return COMPOSER_RETURN_FAIL; } + + COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS; + + /* 1. create a new message (create msg_struct_t) */ + if (msg_ui_composer_create_new_message() != COMPOSER_RETURN_SUCCESS) { + return COMPOSER_RETURN_FAIL; + } + + /* 2. make message */ + if (msg_data->msg_type == COMPOSER_MSG_TYPE_SMS) { + if (__msg_ui_composer_make_sms_message(msg_handle) != COMPOSER_RETURN_SUCCESS) + ret = COMPOSER_RETURN_FAIL; + } else if (msg_data->msg_type == COMPOSER_MSG_TYPE_MMS) { + if (__msg_ui_composer_make_mms_message(msg_handle) != COMPOSER_RETURN_SUCCESS) + ret = COMPOSER_RETURN_FAIL; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type"); + ret = COMPOSER_RETURN_FAIL; + } + + /*3. save message */ + if (ret != COMPOSER_RETURN_FAIL) { + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + msg_set_bool_value(sendOpt, MSG_SEND_OPT_SETTING_BOOL, false); + + ret = msg_add_message(msg_handle, msg_data->msgInfo, sendOpt); + + msg_release_struct(&sendOpt); + } + /*4. release message */ - msg_ui_comp_core_release_message(msg_data->msgInfo); + msg_release_struct(&msg_data->msgInfo); msg_data->msgInfo = NULL; return ret; } -COMPOSER_RETURN_TYPE_E msg_ui_composer_message_load_message(MSG_HANDLE_T msg_handle, int msgID) +COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_data(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + if (msg_data == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] can not save message,,, msg_data is NULL"); + return COMPOSER_RETURN_FAIL; + } + + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, cd == NULL, COMPOSER_RETURN_FAIL); + + if (msg_ui_composer_recipient_read_data(cd) != COMPOSER_RETURN_SUCCESS) { + D_EMSG("Make recipient data Error"); + return COMPOSER_RETURN_FAIL; + } + + if (__msg_ui_composer_body_read_data(cd) != COMPOSER_RETURN_SUCCESS) { + D_EMSG("Make body data Error"); + return COMPOSER_RETURN_FAIL; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_message_load_message(msg_handle_t msg_handle, int msgID) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); @@ -336,45 +867,208 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_load_message(MSG_HANDLE_T msg_han return COMPOSER_RETURN_NULL_POINTER; } - msg_message_t load_msg = NULL; - - MSG_SENDINGOPT_S sendOpt = { 0, }; + msg_struct_t load_msg = NULL; + msg_struct_t sendOpt = NULL; + msg_struct_t mmsBody = NULL; /* create new message */ - if (msg_ui_comp_core_create_new_message(&load_msg) - != COMPOSER_RETURN_SUCCESS) { + load_msg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + if (load_msg == NULL) { MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] message create message failed."); return COMPOSER_RETURN_FAIL; } + sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + if (sendOpt == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] message create sendopt failed."); + msg_release_struct(&load_msg); + return COMPOSER_RETURN_FAIL; + } /* load message */ - if (msg_ui_comp_core_get_message(msg_handle, load_msg, msgID, &sendOpt) - != COMPOSER_RETURN_SUCCESS) { + if (msg_get_message(msg_handle,(msg_message_id_t)msgID, load_msg, sendOpt) != MSG_SUCCESS) { MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] msg_get_message failed"); + msg_release_struct(&load_msg); + msg_release_struct(&sendOpt); return COMPOSER_RETURN_FAIL; } /* load "FROM" address */ /* load message type */ - COMPOSER_MSG_TYPE_E msg_type = msg_ui_comp_core_get_msg_type(load_msg); + int msgType; + msg_get_int_value(load_msg, MSG_MESSAGE_TYPE_INT, &msgType); - msg_data->msg_type = msg_type; + if (msgType == MSG_TYPE_SMS) { + char *body_text = NULL; + int body_size = 0; - if (msg_type == COMPOSER_MSG_TYPE_SMS) { + msg_data->msg_type = COMPOSER_MSG_TYPE_SMS; - char *body_text = NULL; - msg_ui_comp_core_get_sms_body(load_msg, &body_text); + msg_get_int_value(load_msg, MSG_MESSAGE_DATA_SIZE_INT, &body_size); + + if (body_size > 0) + body_text = (char *)calloc(1, body_size+1); + + if (body_text) + msg_get_str_value(load_msg, MSG_MESSAGE_SMS_DATA_STR, body_text, body_size); if (body_text && strlen(body_text) > 0) { msg_data->sms_data.body_text = strdup(body_text); msg_data->sms_data.body_length = strlen(body_text); } + + if (body_text) + free(body_text); + + } else if (msgType == MSG_TYPE_MMS) { + char subject[MAX_SUBJECT_LEN+1] = {0,}; + msg_data->msg_type = COMPOSER_MSG_TYPE_MMS; + + /* load mms body */ + mmsBody = msg_create_struct(MSG_STRUCT_MMS); + if (mmsBody == NULL) { + msg_release_struct(&load_msg); + msg_release_struct(&sendOpt); + return COMPOSER_RETURN_FAIL; + } + msg_get_mms_struct(load_msg, mmsBody); + + if (msg_get_str_value(load_msg, MSG_MESSAGE_SUBJECT_STR, subject, MAX_SUBJECT_LEN) != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No subject data"); + msg_data->mms_data.isSubject = false; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] loaded subject : [%s]", subject); + msg_data->mms_data.isSubject = true; + strncpy(msg_data->mms_data.subject, subject, COMPOSER_SUBJECT_MAX_BYTE); + } + + /* load attachment */ + msg_list_handle_t attach_list = NULL; + msg_get_list_handle(mmsBody, MSG_MMS_ATTACH_LIST_HND, (void **)&attach_list); + msg_data->mms_data.attach_count = msg_list_length(attach_list); + + if (msg_data->mms_data.attach_count > 0) { + int i = 0; + + for (i = 0; i < msg_data->mms_data.attach_count ; i++) { + msg_struct_t attach_info = (msg_struct_t)msg_list_nth_data(attach_list, i); + + if (attach_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] attachment [%d]th item loading error ", i); + continue; + } + + msg_get_int_value(attach_info, MSG_MMS_ATTACH_MIME_TYPE_INT, &msg_data->mms_data.attachlist[i].filetype); + 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)); + 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)); + } + } + + /* load body (page and text, media) */ + msg_list_handle_t page_list = NULL; + msg_get_list_handle(mmsBody, MSG_MMS_PAGE_LIST_HND, (void **)&page_list); + + msg_data->mms_data.page_count = msg_list_length(page_list); + + if (msg_data->mms_data.page_count > 0) { + int i = 0; + + for (i = 0; i < msg_data->mms_data.page_count; i++) { + msg_struct_t pageInfo = msg_list_nth_data(page_list, i); + msg_list_handle_t media_list = NULL; + int media_count = 0; + + if (pageInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] MMS PAGE [%d]th page loading error ", i); + continue; + } + + msg_get_list_handle(pageInfo, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&media_list); + media_count = msg_list_length(media_list); + + if (media_count > 0) { + int j = 0; + + for (j = 0; j < media_count; j++) { + msg_struct_t mediaInfo = (msg_struct_t)msg_list_nth_data(media_list, j); + int mediatype; + + if (mediaInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] MMS PAGE [%d]th page loading error ", j); + continue; + } + + msg_get_int_value(mediaInfo, MSG_MMS_MEDIA_TYPE_INT, &mediatype); + /* if media type image or video */ + if (mediatype == MMS_SMIL_MEDIA_IMG) { + msg_data->mms_data.pagelist[i].isImage = true; + 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)); + } else if (mediatype == MMS_SMIL_MEDIA_VIDEO || mediatype == MMS_SMIL_MEDIA_IMG_OR_VIDEO) { + msg_data->mms_data.pagelist[i].isVideo = true; + 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)); + } else if (mediatype == MMS_SMIL_MEDIA_AUDIO) { + msg_data->mms_data.pagelist[i].isSound = true; + 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)); + } else if (mediatype == MMS_SMIL_MEDIA_TEXT) { + FILE *fp = NULL; + char filepath[DEF_BUF_LEN_L] = {0,}; + msg_get_str_value(mediaInfo, MSG_MMS_MEDIA_FILEPATH_STR, filepath, sizeof(filepath)); + + if (access(filepath, R_OK) == 0) { + if (!(fp = fopen(filepath, "r"))) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR]File Open Error"); + msg_data->mms_data.pagelist[i].isText = false; + continue; + } + + struct stat stat_buf; + if (stat(filepath, &stat_buf) != 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR]Getting file information Error"); + msg_data->mms_data.pagelist[i].isText = false; + fclose(fp); + continue; + } + + if (stat_buf.st_size <= 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR]Getting file size is ZERO"); + msg_data->mms_data.pagelist[i].isText = false; + fclose(fp); + continue; + } + + msg_data->mms_data.pagelist[i].isText = true; + + int result = fread(msg_data->mms_data.pagelist[i].body_text, sizeof(char), stat_buf.st_size, fp); + if (result != stat_buf.st_size) + D_EMSG("fread result is different!! result = %d, stat_buf.st_size = %d", result, stat_buf.st_size); + + fclose(fp); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] file access failed"); + msg_data->mms_data.pagelist[i].isText = false; + } + + } else { + msg_release_struct(&mmsBody); + msg_release_struct(&load_msg); + msg_release_struct(&sendOpt); + return COMPOSER_RETURN_INVALID_MEDIA_TYPE; + } + } + } + } + } } else { + msg_data->msg_type = COMPOSER_MSG_TYPE_INVALID; MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid message type"); - msg_ui_comp_core_release_message(load_msg); + msg_release_struct(&load_msg); + msg_release_struct(&sendOpt); return COMPOSER_RETURN_INVALID_MSG_TYPE; } - msg_ui_comp_core_release_message(load_msg); + if (msgType == MSG_TYPE_MMS) + msg_release_struct(&mmsBody); + + msg_release_struct(&load_msg); + msg_release_struct(&sendOpt); MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); return COMPOSER_RETURN_SUCCESS; } @@ -383,11 +1077,43 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_set_loaded_data(void *composer_da { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + int i = 0; + if (msg_data->msg_type == COMPOSER_MSG_TYPE_SMS) { msg_ui_composer_body_set_loaded_text(composer_data, msg_data->sms_data.body_text, 0); return COMPOSER_RETURN_SUCCESS; } + /* subject */ + if (msg_data->mms_data.isSubject) { + msg_ui_composer_subject_set_loaded_data(composer_data, msg_data->mms_data.subject); + } + + /* attachment */ + for (i = 0; i < msg_data->mms_data.attach_count; i++) { + char *filepath = msg_data->mms_data.attachlist[i].filepath; + int filetype = msg_data->mms_data.attachlist[i].filetype; + + msg_ui_composer_attachment_set_loaded_data(composer_data, filepath, filetype); + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] MMS PAGE COUNT [%d]", msg_data->mms_data.page_count); + for (i = 0; i < msg_data->mms_data.page_count; i++) { + if (msg_data->mms_data.pagelist[i].isImage) { + msg_ui_composer_body_set_loaded_media(composer_data, msg_data->mms_data.pagelist[i].image_file_path, COMPOSER_MEDIA_TYPE_IMAGE, i); + } else if (msg_data->mms_data.pagelist[i].isVideo) { + msg_ui_composer_body_set_loaded_media(composer_data, msg_data->mms_data.pagelist[i].image_file_path, COMPOSER_MEDIA_TYPE_VIDEO, i); + } + + if (msg_data->mms_data.pagelist[i].isSound) { + msg_ui_composer_body_set_loaded_media(composer_data, msg_data->mms_data.pagelist[i].sound_file_path, COMPOSER_MEDIA_TYPE_AUDIO, i); + } + + if (msg_data->mms_data.pagelist[i].isText) { + msg_ui_composer_body_set_loaded_text(composer_data, msg_data->mms_data.pagelist[i].body_text, i); + } + } + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); return COMPOSER_RETURN_SUCCESS; } diff --git a/composer/src/ui-composer/msg-ui-composer-attachment.c b/composer/src/ui-composer/msg-ui-composer-attachment.c new file mode 100755 index 0000000..3cb1ce6 --- /dev/null +++ b/composer/src/ui-composer/msg-ui-composer-attachment.c @@ -0,0 +1,551 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "msg-ui-composer-attachment.h" +#include "msg-ui-composer-recipient.h" +#include "msg-ui-composer-external.h" +#include "msg-ui-composer-data.h" +#include "msg-ui-composer-body.h" +#include "msg-ui-composer-subject.h" +#include "msg-ui-composer-message.h" +#include "msg-ui-composer-common.h" +#include "msg-ui-composer-popup.h" +#include "msg-ui-composer-util.h" +#include <msg-ui-common-utility.h> + +int64 msg_ui_composer_get_attached_item_size(void *data) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + MSG_COMPOSER_ATTACH_S *attach_data = &cd->attach_data; + + int64 temp_file_size = 0; + Eina_List *list = NULL; + + MSG_COMPOSER_ATTACH_ITEM_S *cai; + EINA_LIST_FOREACH(attach_data->attachitem_list, list, cai) { + temp_file_size += msg_composer_get_file_size(cai->file_path); + } + + D_LEAVE; + return temp_file_size; +} + +static void __msgc_update_attach_main_layout(MSG_COMPOSER_VIEW_DATA_S *cd, int attach_count) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "cd is NULL"); + D_MSG_RETM_IF(cd->ly_attach_main == NULL, "ly_attach_main is NULL"); + + char buf[DEF_BUF_LEN_S + 1] = {0,}; + snprintf(buf, sizeof(buf), _MSGSTR("IDS_MSGC_BODY_PD_ATTACHMENTS"), attach_count); + + edje_object_part_text_set(_EDJ(cd->ly_attach_main), "text.filename", buf); + + D_LEAVE; +} + +static void __msgc_remove_attachment_item(void *data, MSG_COMPOSER_ATTACH_ITEM_S *remove_item) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETM_IF(cd == NULL, "composer data is NULL"); + MSG_COMPOSER_ATTACH_S *attach_data = &cd->attach_data; + + attach_data->attachitem_list = eina_list_remove(attach_data->attachitem_list, remove_item); + attach_data->attachment_Cnt--; + + __msgc_update_attach_main_layout(cd, attach_data->attachment_Cnt); + + /* remove temp file */ + ecore_file_remove(remove_item->file_path); + + evas_object_del(remove_item->layout); + g_free(remove_item); + + msg_ui_composer_body_info_area_update(cd); + + if (attach_data->attachment_Cnt == 0) { + msg_ui_composer_message_type_check_and_change(cd); + + if (!msg_ui_composer_common_is_send_possible(cd)) { + elm_object_disabled_set(cd->send_button, EINA_TRUE); + edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", "");/* remove character count */ + if(cd->ly_body) { + Evas_Object* entry = msg_ui_composer_last_focused_entry_get(cd); + if (entry) { + if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { + RECIPIENT_S *r = cd->recipient; + if (r && r->mbe) { + if(entry == r->mbe) { + entry = elm_multibuttonentry_entry_get(r->mbe); + } + } + } + } + } + } else { + elm_object_disabled_set(cd->send_button, EINA_FALSE); + } + /* remove attach main layout */ + MSGC_EVAS_OBJECT_DEL(cd->ly_attach_main); + } + + D_LEAVE; +} + +void msg_ui_composer_attachment_clear(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "composer data is NULL"); + MSG_COMPOSER_ATTACH_S *attach_data = &cd->attach_data; + + if (attach_data->attachment_Cnt > 0) { + MSG_COMPOSER_ATTACH_ITEM_S *attach_item = NULL; + int attach_count = attach_data->attachment_Cnt; + int i = 0; + + for (i = 0; i < attach_count; i++) { + attach_item = (MSG_COMPOSER_ATTACH_ITEM_S *) + eina_list_nth(attach_data->attachitem_list, 0); + + if (attach_item) { + if (evas_object_visible_get(cd->ly_attach_main) == EINA_FALSE) + elm_box_unpack(cd->body_box, attach_item->layout); + + evas_object_del(attach_item->layout); + + attach_data->attachitem_list = eina_list_remove(attach_data->attachitem_list, attach_item); + free(attach_item); + } + } + /* remove attach main layout */ + if (evas_object_visible_get(cd->ly_attach_main) == EINA_TRUE) + elm_box_unpack(cd->body_box, cd->ly_attach_main); + + evas_object_del(cd->ly_attach_main); + cd->ly_attach_main = NULL; + } + + attach_data->attachment_Cnt = 0; + attach_data->attachitem_list = NULL; + + D_LEAVE; +} + +static void __msgc_attachment_del_icon_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + D_MSG_RETM_IF(data == NULL, "composer data is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + Evas_Object *layout = evas_object_data_get(obj, "layout"); + MSG_COMPOSER_ATTACH_ITEM_S *remove_item = NULL; + + remove_item = evas_object_data_get(layout, "attach_item"); + __msgc_remove_attachment_item(data, remove_item); + + msg_ui_composer_message_type_check_and_change(cd); + + D_LEAVE; +} + +static void __msgc_attachment_thumb_icon_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + Evas_Object *layout = evas_object_data_get(obj, "layout"); + MSG_COMPOSER_ATTACH_ITEM_S *attach_item = evas_object_data_get(layout, "attach_item"); + + D_MSG("File path %s", attach_item->file_path); + + msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_COMMON, attach_item->file_path); + + D_LEAVE; +} + +static Evas_Object *__msgc_attachment_create_attach_layout(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent, const char *filepath) +{ + D_ENTER; + + if (!cd || !filepath || strlen(filepath) == 0) { + D_EMSG("compsoer data or file information is not exist !!!"); + return NULL; + } + + Evas_Object *layout = NULL; + Evas_Object *thumb_icon = NULL; + Evas_Object *del_icon = NULL; + const char *filename = NULL; + const char *icon_path = NULL; + + layout = elm_layout_add(parent); + + if (!layout) { + D_EMSG("layout create error"); + return NULL; + } + + elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_ATTACHMENT_ITEM); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + evas_object_show(layout); + + thumb_icon = elm_icon_add(layout); + + icon_path = msg_common_get_file_icon(filepath); + + if (icon_path) { + elm_icon_file_set(thumb_icon, icon_path, NULL); + } else { + D_EMSG("icon_path is NULL"); + elm_icon_file_set(thumb_icon, MSGC_IMG_ATTACHMENT_ICON, NULL); + } + + evas_object_data_set(thumb_icon, "layout", layout); + + evas_object_show(thumb_icon); + + elm_object_part_content_set(layout, "swl.image", thumb_icon); + + filename = ecore_file_file_get(filepath); + if (filename) { + edje_object_part_text_set(_EDJ(layout), "text.filename", filename); + } else { + D_EMSG("Error of filename"); + } + + del_icon = elm_icon_add(layout); + elm_icon_file_set(del_icon, MSGC_IMG_ATTACHMENT_DEL_ICON, NULL); + evas_object_size_hint_weight_set(del_icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(del_icon, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_focus_allow_set(del_icon, EINA_TRUE); + + evas_object_show(del_icon); + evas_object_data_set(del_icon, "layout", layout); + + elm_object_part_content_set(layout, "swl.delete_btn", del_icon); + + evas_object_smart_callback_add(del_icon, "clicked", __msgc_attachment_del_icon_clicked_cb, cd); + + if (!cd->isAppControl) + evas_object_smart_callback_add(thumb_icon, "clicked", __msgc_attachment_thumb_icon_clicked_cb, cd); + + D_LEAVE; + return layout; +} + +int msg_ui_composer_get_attach_count(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, 0, "cd is NULL"); + Eina_List *attach_list = cd->attach_data.attachitem_list; + D_MSG_RETVM_IF(attach_list == NULL, 0, "attach_list is NULL"); + + int attach_count = eina_list_count(attach_list); + + return attach_count; +} + +void msg_ui_composer_expand_attach_list(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "cd is NULL"); + + if (evas_object_visible_get(cd->ly_attach_main) == EINA_TRUE) { + /*hide attach main layout */ + elm_box_unpack(cd->body_box, cd->ly_attach_main); + evas_object_hide(cd->ly_attach_main); + + /* show attach list */ + MSG_COMPOSER_ATTACH_ITEM_S *attach_item = NULL; + Eina_List *attach_list = cd->attach_data.attachitem_list; + int attach_count = eina_list_count(attach_list); + int i = 0; + + D_MSG("attach_count = %d", attach_count); + + Eina_List *page_list = cd->body_data.page_list; + MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, 0); + + for (i = 0; i < attach_count; i++) { + attach_item = (MSG_COMPOSER_ATTACH_ITEM_S *)eina_list_nth(attach_list, i); + if (attach_item) { + elm_box_pack_before(cd->body_box, attach_item->layout, page_data->layout); + evas_object_show(attach_item->layout); + } else { + D_EMSG("attach_item is NULL!! i = %d", i); + } + } + } else { + D_MSG("attach main layout is Already hidden"); + } +} + +void msg_ui_composer_contract_attach_list(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "cd is NULL"); + + if (evas_object_visible_get(cd->ly_attach_main) == EINA_FALSE) { + /* hide attachment list */ + MSG_COMPOSER_ATTACH_ITEM_S *attach_item = NULL; + Eina_List *attach_list = cd->attach_data.attachitem_list; + int attach_count = eina_list_count(attach_list); + int i = 0; + + D_MSG("attach_count = %d", attach_count); + + for (i = 0; i < attach_count; i++) { + attach_item = (MSG_COMPOSER_ATTACH_ITEM_S *)eina_list_nth(attach_list, i); + if (attach_item) { + elm_box_unpack(cd->body_box, attach_item->layout); + evas_object_hide(attach_item->layout); + } else { + D_EMSG("attach_item is NULL !! i = %d", i); + } + } + + Eina_List *page_list = cd->body_data.page_list; + MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, 0); + /* show attach main layout */ + elm_box_pack_before(cd->body_box, cd->ly_attach_main, page_data->layout); + evas_object_show(cd->ly_attach_main); + } else { + D_MSG("attach main layout is Already shown"); + } +} + +static void __msgc_attachment_main_layout_clicked_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + D_ENTER; + D_MSG_RETM_IF(data == NULL, "data is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + + msg_ui_composer_expand_attach_list(cd); + D_LEAVE; +} + +static Evas_Object *__msgc_attachment_create_attach_main_layout(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent, int attach_count) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL"); + Evas_Object *layout = NULL; + Evas_Object *thumb_icon = NULL; + + layout = elm_layout_add(parent); + + if (!layout) { + D_EMSG("layout create error"); + return NULL; + } + + elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_ATTACHMENT_MAIN); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(layout); + + thumb_icon = elm_icon_add(layout); + elm_icon_file_set(thumb_icon, MSGC_IMG_ATTACHMENT_ICON, NULL); + evas_object_show(thumb_icon); + + elm_object_part_content_set(layout, "swl.image", thumb_icon); + + char buf[DEF_BUF_LEN_S + 1] = {0,}; + + snprintf(buf, sizeof(buf), _MSGSTR("IDS_MSGC_BODY_PD_ATTACHMENTS"), attach_count); + edje_object_part_text_set(_EDJ(layout), "text.filename", buf); + evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP, __msgc_attachment_main_layout_clicked_cb, cd); + + D_LEAVE; + return layout; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_add_attach_media(MSG_COMPOSER_VIEW_DATA_S + *cd, const char *filepath, COMPOSER_MEDIA_TYPE_E media_type) +{ + D_ENTER; + + if (!cd || !filepath || strlen(filepath) == 0) { + D_EMSG("composer data or file path is not exist"); + return COMPOSER_RETURN_FAIL; + } + + Evas_Object *body_box = cd->body_box; + MSG_COMPOSER_ATTACH_S *attach_data = &cd->attach_data; + MSG_COMPOSER_ATTACH_ITEM_S *attach_item = NULL; + + int attach_count = eina_list_count(attach_data->attachitem_list); + + if (attach_count >= COMPOSER_MMS_MAX_ATTACH_COUNT) { + char popup_msg[DEF_BUF_LEN_L + 1] = { 0, }; + snprintf(popup_msg, sizeof(popup_msg) - 1, MSGC_STR_POP_ATTACHMENT_COUNT_MAX, COMPOSER_MMS_MAX_ATTACH_COUNT, COMPOSER_MMS_MAX_ATTACH_COUNT); + Evas_Object *popup = msg_ui_composer_status_popup_show(cd, popup_msg, COMPOSER_STATUS_POPUP_DEFAULT_TIME); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup); + return COMPOSER_RETURN_FAIL; + } + + if (attach_count > 0) { + Eina_List *list = attach_data->attachitem_list; + MSG_COMPOSER_ATTACH_ITEM_S *attached_item = NULL; + int i = 0; + + for (i = 0; i < attach_count; i++) { + attached_item = (MSG_COMPOSER_ATTACH_ITEM_S *)eina_list_nth(list, i); + + if (strncmp(attached_item->file_path, filepath, strlen(attached_item->file_path)) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] already exist"); + Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_FILE_EXIST, COMPOSER_STATUS_POPUP_DEFAULT_TIME); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup); + return COMPOSER_RETURN_ATTACHMENT_ALREADY_EXIST; + } + } + } + + attach_item = (MSG_COMPOSER_ATTACH_ITEM_S *)calloc(1, sizeof(MSG_COMPOSER_ATTACH_ITEM_S)); + if (!attach_item) { + D_EMSG("calloc is failed"); + return COMPOSER_RETURN_NULL_POINTER; + } + + char *file_name = ecore_file_app_exe_get(ecore_file_file_get(filepath)); + if (!file_name) { + D_EMSG("file_name is NULL"); + return COMPOSER_RETURN_FAIL; + } + + strncpy(attach_item->file_path, filepath, strlen(filepath)); + strncpy(attach_item->file_name, file_name, strlen(file_name)); + g_free(file_name); + + /* create attach main layout */ + if (!cd->ly_attach_main) { + cd->ly_attach_main = __msgc_attachment_create_attach_main_layout(cd, cd->ly_body, attach_count); + evas_object_hide(cd->ly_attach_main); + } + + msg_ui_composer_expand_attach_list(cd); + + attach_item->type = media_type; + + attach_item->layout = __msgc_attachment_create_attach_layout(cd, cd->ly_body, attach_item->file_path); + if (!attach_item->layout) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] attachment item create error"); + g_free(attach_item); + + if (!attach_count) + MSGC_EVAS_OBJECT_DEL(cd->ly_attach_main); + + return COMPOSER_RETURN_FAIL; + } + + evas_object_data_set(attach_item->layout, "attach_item", attach_item); + + attach_data->attachitem_list = eina_list_append(attach_data->attachitem_list, attach_item); + attach_data->attachment_Cnt++; + + Eina_List *page_list = cd->body_data.page_list; + MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, 0); + + elm_box_pack_before(body_box, attach_item->layout, page_data->layout); + + elm_object_disabled_set(cd->send_button, EINA_FALSE); + + msg_ui_composer_message_type_check_and_change(cd); + + msg_ui_composer_body_info_area_update(cd); + + __msgc_update_attach_main_layout(cd, attach_data->attachment_Cnt); + + D_MSG("cd->attach_index = %d", cd->attach_index); + + if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) { + int media_count = eina_list_count(cd->attachlist); + + /* show invalid popup when last content is added*/ + if (media_count == cd->attach_index) { + msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK); + } + } else { + /* change last focused entry to a page that is added media recently*/ + page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, cd->current_edit_entry); + if (page_data) { + msg_ui_composer_last_focused_entry_set(cd, page_data->entry); + msg_ui_composer_last_focus_load(cd); + } + } + D_LEAVE; + + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_read_attachments(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_NULL_POINTER, "composer data is NULL"); + MSG_COMPOSER_ATTACH_S *attach_data = &cd->attach_data; + int attach_count = attach_data->attachment_Cnt; + Eina_List *attach_list = attach_data->attachitem_list; + MSG_COMPOSER_ATTACH_ITEM_S *attach_item = NULL; + int i = 0; + + msg_ui_composer_message_set_attach_count(attach_count); + + for (i = 0; i < attach_data->attachment_Cnt; i++) { + attach_item = (MSG_COMPOSER_ATTACH_ITEM_S *)eina_list_nth(attach_list, i); + if (attach_item) { + if (msg_ui_composer_message_add_attachments(attach_item->file_path, attach_item->type) != COMPOSER_RETURN_SUCCESS) { + attach_count--; + } + } else { + attach_count--; + } + } + + if (attach_count < 0) + attach_count = 0; + + msg_ui_composer_message_set_attach_count(attach_count); + + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_attachment_set_loaded_data(void *data, const char + *filepath, int filetype) +{ + D_MSG_RETVM_IF(data == NULL, COMPOSER_RETURN_NULL_POINTER, "data is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + + char local_item_path[COMPOSER_FILEPATH_LEN_MAX + 1] = {0,}; + /* copy temp file */ + if (msg_ui_composer_common_get_file(cd, filepath, local_item_path, COMPOSER_FILEPATH_LEN_MAX) != COMPOSER_RETURN_SUCCESS) { + D_EMSG("get file error"); + return COMPOSER_RETURN_FAIL; + } + + return msg_ui_composer_add_attach_media(cd, local_item_path, filetype); +} diff --git a/composer/src/ui-composer/msg-ui-composer-body-callback.c b/composer/src/ui-composer/msg-ui-composer-body-callback.c index d1d030b..63cd6fa 100755 --- a/composer/src/ui-composer/msg-ui-composer-body-callback.c +++ b/composer/src/ui-composer/msg-ui-composer-body-callback.c @@ -14,6 +14,7 @@ * limitations under the License.
*/
+
/* includes */
#include "msg-ui-composer-body.h"
#include "msg-ui-composer-recipient.h"
@@ -21,17 +22,143 @@ #include "msg-ui-composer-body-page.h"
#include "msg-ui-composer-body-callback.h"
#include "msg-ui-composer-common.h"
-
+#include "msg-ui-composer-attachment.h"
+#include "msg-ui-composer-subject.h"
#include "msg-ui-composer-message.h"
#include "msg-ui-composer-popup.h"
#include "msg-ui-composer-util.h"
#include "msg-ui-composer-external.h"
-
+#include "syspopup_caller.h"
/*==================================================================================================
* FUNCTION IMPLEMENTATIONS
*==================================================================================================*/
-static void __nosim_popup_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info)
+static void __add_list_popup_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ if (!data || !event_info) {
+ D_EMSG("invalid argument, argument data is NULL");
+ return;
+ }
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ if (cd->add_menu_clicked)
+ return;
+
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ elm_list_item_selected_set(item, EINA_FALSE);
+
+ const char *label = elm_object_item_text_get(item);
+ if (!label) {
+ D_EMSG("label is NULL !!");
+ return;
+ }
+
+ cd->add_menu_clicked = true;
+
+ MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "label = %s", label);
+ if (cd->isAppControl) {
+ if (!g_strcmp0(label, MSGC_STR_SUBJECT)) {
+ msg_ui_composer_add_subject(cd);
+ } else {
+ D_EMSG("Unknown Menu List Item");
+ }
+ } else {
+ if (!g_strcmp0(label, MSGC_STR_SUBJECT)) {
+ msg_ui_composer_add_subject(cd);
+ } else if (!g_strcmp0(label, MSGC_STR_GALLERY)) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_GALLERY, NULL);
+ } else if (!g_strcmp0(label, MSGC_STR_MYFILE)) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_MYFILE, NULL);
+ } else if (!g_strcmp0(label, _MSGSTR("IDS_MSGC_BODY_TAKE_PICTURE"))) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_CAMERA, NULL);
+ } else if (!g_strcmp0(label, _MSGSTR("IDS_MSGC_BODY_RECORD_AUDIO"))) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_VOICEREC, NULL);
+ } else if (!g_strcmp0(label, _MSGSTR("IDS_MSGC_BODY_CAPTURE_VIDEO"))) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_CAMCORDER, NULL);
+ } else if (!g_strcmp0(label, MSGC_STR_CONTACT)) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_NAMECARD, NULL);
+ } else if (!g_strcmp0(label, MSGC_STR_CALENDAR)) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_CALENDAR, NULL);
+ } else if (!g_strcmp0(label, MSGC_STR_MEMO)) {
+ msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_MEMO, NULL);
+ } else {
+ D_EMSG("Unknown Menu List Item");
+ }
+ }
+
+ MSGC_EVAS_OBJECT_DEL(cd->add_popup);
+ cd->add_button_clicked = false;
+ cd->add_menu_clicked = false;
+ D_LEAVE;
+}
+
+static void __add_list_popup_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETM_IF(cd == NULL, "composer data is NULL");
+ MSGC_EVAS_OBJECT_DEL(cd->add_popup);
+ cd->add_button_clicked = false;
+ cd->add_menu_clicked = false;
+
+ D_LEAVE;
+}
+
+static void __add_list_popup_show(void *data)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ Evas_Object *popup = NULL;
+ Evas_Object *list = NULL;
+ Elm_Object_Item *item = NULL;
+
+ list = elm_list_add(cd->main_window);
+ D_MSG_RETM_IF(list == NULL, "list is NULL");
+
+ if (!cd->isAppControl) {
+ if (!cd->isSubject)
+ item = elm_list_item_append(list, MSGC_STR_SUBJECT, NULL, NULL, __add_list_popup_clicked_cb, data);
+
+ elm_list_item_append(list, MSGC_STR_GALLERY, NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, _MSGSTR("IDS_MSGC_BODY_TAKE_PICTURE"), NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, _MSGSTR("IDS_MSGC_BODY_CAPTURE_VIDEO"), NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, _MSGSTR("IDS_MSGC_BODY_RECORD_AUDIO"), NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, MSGC_STR_MYFILE, NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, MSGC_STR_CONTACT, NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, MSGC_STR_CALENDAR, NULL, NULL, __add_list_popup_clicked_cb, data);
+ elm_list_item_append(list, MSGC_STR_MEMO, NULL, NULL, __add_list_popup_clicked_cb, data);
+ } else {
+ item = elm_list_item_append(list, MSGC_STR_SUBJECT, NULL, NULL, __add_list_popup_clicked_cb, data);
+ if (cd->isSubject)
+ elm_object_item_disabled_set(item, EINA_TRUE);
+ }
+
+ elm_list_go(list);
+
+ if (!cd->isAppControl) {
+ popup = msg_ui_composer_list_popup_create(cd, _SYSSTR("IDS_COM_POP_ATTACH"), list, NULL);
+ } else {
+ elm_list_mode_set(list, ELM_LIST_EXPAND);
+ popup = msg_ui_composer_list_popup_create(cd, _SYSSTR("IDS_COM_POP_ATTACH"), list, "min_menustyle");
+ }
+
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked", __add_list_popup_btn_clicked_cb, cd);
+
+ cd->add_popup = popup;
+
+ D_LEAVE;
+}
+
+static void __nosim_popup_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
D_ENTER;
@@ -55,6 +182,7 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void D_MSG_RETM_IF(data == NULL, "Composer Data is NULL");
MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ msg_thread_id_t tid = 0;
if (cd->send_button)
elm_object_disabled_set(cd->send_button, EINA_TRUE);
@@ -78,11 +206,11 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void /*check recipient count is zero*/
if (msg_ui_composer_recipient_count_get(rd) == 0) {
D_EMSG("there is no recipient");
- msg_ui_composer_status_popup_show(cd, "there is no recipient", COMPOSER_STATUS_POPUP_DEFAULT_TIME); // FIXME :: should change msg from STMS
+ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_NO_RECIPIENT);
}
/*check invalid recipient*/
- Eina_List * invalid_list = msg_ui_composer_recipient_invalid_recipient_list_get(rd);
+ Eina_List *invalid_list = msg_ui_composer_recipient_invalid_recipient_list_get(rd);
if (invalid_list) {
RECIPIENT_ITEM_S *r_item;
char *ret = NULL;
@@ -113,7 +241,8 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void if (err_msg != NULL) {
Evas_Object *popup = msg_ui_composer_status_popup_show(cd, err_msg, COMPOSER_STATUS_POPUP_DEFAULT_TIME);
- Evas_Object * btn1 = elm_button_add(popup);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
elm_object_part_content_set(popup, "button1", btn1);
evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);
@@ -127,7 +256,6 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void }
}
-
/*Make message*/
msg_ui_composer_message_init();
@@ -142,7 +270,7 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void }
/*Send message*/
- COMPOSER_RETURN_TYPE_E ret = msg_ui_composer_message_make_and_send(cd->msg_handle);
+ COMPOSER_RETURN_TYPE_E ret = msg_ui_composer_message_make_and_send(cd->msg_handle, &tid);
if (ret == COMPOSER_RETURN_SUCCESS) {
D_MSG("Send Success");
@@ -151,41 +279,23 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void ug_destroy_me(cd->ug);
} else if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER) {
- RECIPIENT_ITEM_S r_item = {0,};
-
- if (cd->recipient) {
- Elm_Object_Item *mbe_item = elm_multibuttonentry_first_item_get(cd->recipient->mbe);
- if (mbe_item) {
- RECIPIENT_ITEM_S *recipient_item = elm_object_item_data_get(mbe_item);
- if (recipient_item) {
- memcpy(&r_item, recipient_item, sizeof(RECIPIENT_ITEM_S));
- }
- }
- }
-
msg_ui_composer_change_bubble_view(cd);
- int tid = msg_ui_composer_thread_id_get(cd->msg_handle, r_item.recipient);
+
if (tid <= 0) {
D_EMSG("Can not find thread id!!");
+ msg_ui_composer_message_destroy();
ug_destroy_me(cd->ug);
- return;
- }
- char *recipient = msg_ui_composer_thread_recipient_get(cd->msg_handle, tid);
- if (recipient == NULL) {
- D_EMSG("Can not find thread address!!");
- ug_destroy_me(cd->ug);
return;
}
- msg_ui_composer_recipient_set_recipient(cd, recipient);
- msg_ui_composer_bubble_data_set(cd, recipient, r_item.display_name, r_item.index, tid);
+ msg_ui_composer_bubble_data_set(cd, tid);
msg_ui_bubble_start_view(cd->bubble_data);
+ msg_ui_composer_navi_title_set((void *)cd);
- msg_ui_bubble_composer_navi_title_set((void *)cd);
- msg_ui_bubble_add_normal_control_item(cd->bubble_data);
+ /* set recipient list for bubble composer */
+ msg_ui_composer_recipient_set_recipient_list(cd, tid);
- g_free(recipient);
msg_ui_composer_clear(cd);
} else {
msg_ui_composer_clear(cd);
@@ -196,7 +306,8 @@ void msg_ui_composer_body_send_btn_clicked_cb(void *data, Evas_Object *obj, void if (ret == COMPOSER_RETURN_NO_SIM) {
D_MSG("Send Fail : NO SIM");
Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_NOSIM, COMPOSER_STATUS_POPUP_DEFAULT_TIME);
- Evas_Object * btn1 = elm_button_add(popup);
+ Evas_Object *btn1 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE);
elm_object_part_content_set(popup, "button1", btn1);
evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup);
@@ -222,6 +333,37 @@ error_return: D_LEAVE;
}
+void msg_ui_composer_body_add_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ if (!data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] error data is NULL");
+ return;
+ }
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+
+ if (cd->add_button_clicked)
+ return;
+
+ cd->add_button_clicked = true;
+ __add_list_popup_show(cd);
+
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_entry_maxlength_reached_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_MAXLENGHT_CHAR);
+
+ D_LEAVE;
+}
+
void msg_ui_composer_body_entry_changed_cb(void *data, Evas_Object *obj, void *event_info)
{
D_ENTER;
@@ -250,11 +392,12 @@ void msg_ui_composer_body_entry_changed_cb(void *data, Evas_Object *obj, void *e }
g_free(body_text);
+ msg_ui_composer_message_type_check_and_change(cd);
+
msg_ui_composer_body_info_area_update(cd);
if (msg_ui_composer_common_is_send_possible(cd)) {
elm_object_disabled_set(cd->send_button, EINA_FALSE);
- edje_object_signal_emit(_EDJ(cd->ly_body), "body_contract","*"); // FIXME :: check status for signal emit
} else {
elm_object_disabled_set(cd->send_button, EINA_TRUE);
}
@@ -262,25 +405,234 @@ void msg_ui_composer_body_entry_changed_cb(void *data, Evas_Object *obj, void *e D_LEAVE;
}
+void msg_ui_composer_body_entry_press_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+ if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) {
+ elm_entry_context_menu_disabled_set(obj, EINA_TRUE);
+ elm_entry_magnifier_disabled_set(obj, EINA_TRUE);
+ } else {
+ elm_entry_context_menu_disabled_set(obj, EINA_FALSE);
+ elm_entry_magnifier_disabled_set(obj, EINA_FALSE);
+ }
+
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_entry_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+ int attach_count = msg_ui_composer_get_attach_count(cd);
+
+ if (attach_count > 1)
+ msg_ui_composer_contract_attach_list(cd);
+
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+ if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+
+ int page_count = body_data->page_count;
+
+ if (page_count == 1) {
+ D_MSG("There is 1 page !!!");
+ } else {
+ MSG_COMPOSER_BODY_PAGE_S *page_data = evas_object_data_get(obj, "page_data");
+ if (page_data == NULL) {
+ D_EMSG("page_data is NULL");
+ } else {
+ /* hide delete button */
+ D_MSG("hide delete button");
+ edje_object_signal_emit(_EDJ(page_data->upper_layout), "hide.delete", "*");
+ }
+ }
+ }
+
+ D_LEAVE;
+}
+
void msg_ui_composer_body_entry_focused_cb(void *data, Evas_Object *obj, void *event_info)
{
D_ENTER;
- if (!data) {
- MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT} data is NULL");
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+
+ if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) {
+ /* if focused_cb is called twice becuase of double click, move focus to popup */
+ if (msg_ui_composer_popup_exist(cd))
+ msg_ui_composer_popup_focus(cd);
+
return;
}
- MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ /* change body scroller size */
+ int keypad_h = msg_ui_composer_get_keypad_height(obj);
+ msg_ui_composer_change_body_scroll_size(cd, keypad_h);
+
+ if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) {
+ MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
- if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) {
+ Eina_List *page_list = body_data->page_list;
+ int page_count = body_data->page_count;
+ if (page_count == 1) {
+ D_MSG("page NO.1 focused !!!");
+ cd->current_edit_entry = 0;
+ } else {
+ MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;
+ int i = 0;
+
+ for (i = 0; i < page_count; i++) {
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i);
+ if (page_data->entry == obj) {
+ D_MSG("page NO.[%d]/[%d] focused !!!", i + 1, page_count);
+ cd->current_edit_entry = i;
+ break;
+ }
+ }
+ page_data = evas_object_data_get(obj, "page_data");
+ if (page_data == NULL) {
+ D_EMSG("page_data is NULL");
+ } else {
+ /* show delete button */
+ D_MSG("show delete button");
+ edje_object_signal_emit(_EDJ(page_data->upper_layout), "show.delete", "*");
+ }
+ }
+ } else if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) {
cd->current_edit_entry = 0;
} else {
- MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] message composer invalid message type");
+ D_MSG("message composer invalid message type");
}
msg_ui_composer_last_focused_entry_set(data, obj);
D_LEAVE;
}
+void msg_ui_composer_body_page_del_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ if (!data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] Callback data is NULL");
+ return;
+ }
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ Evas_Object *layout = evas_object_data_get(obj, "layout");
+
+ msg_ui_composer_mms_body_remove_page(cd, layout);
+
+ msg_ui_composer_message_type_check_and_change(cd);
+
+ msg_ui_composer_body_info_area_update(cd);
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_media_del_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ D_ENTER;
+
+ if (!data || !obj) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] NULL pointer error");
+ return;
+ }
+
+ MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ MSG_COMPOSER_BODY_S *body_data = &cd->body_data;
+ MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;
+ Eina_List *page_list = body_data->page_list;
+ int page_count = body_data->page_count;
+ int body_length = 0;
+
+ Evas_Object *delete_layout = (Evas_Object *)evas_object_data_get(obj, "layout");
+
+ int i = 0;
+
+ for (i = 0; i < page_count; i++) {
+ page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i);
+
+ if (!page_data) {
+ MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] page data is NULL !!!");
+ return;
+ }
+
+ if (page_data->sound_item == delete_layout) {
+ msg_ui_composer_mms_insert_item_remove(cd, delete_layout, COMPOSER_MEDIA_TYPE_AUDIO);
+
+ char *body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(page_data->entry));
+ if (!body_text)
+ return;
+
+ body_length = strlen(body_text);
+
+ if (body_length == 0 && !page_data->is_image_item)
+ msg_ui_composer_mms_body_remove_page(cd, page_data->layout);
+
+ g_free(body_text);
+
+ break;
+ } else if (page_data->image_item == delete_layout) {
+
+ char *body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(page_data->entry));
+ if (!body_text)
+ return;
+
+ body_length = strlen(body_text);
+
+ if (page_data->isVideo) {
+ msg_ui_composer_mms_insert_item_remove(cd, delete_layout, COMPOSER_MEDIA_TYPE_VIDEO);
+ } else {
+ msg_ui_composer_mms_insert_item_remove(cd, delete_layout, COMPOSER_MEDIA_TYPE_IMAGE);
+ }
+
+ if (body_length == 0 && !page_data->is_sound_item)
+ msg_ui_composer_mms_body_remove_page(cd, page_data->layout);
+
+ g_free(body_text);
+ break;
+ }
+ }
+
+ msg_ui_composer_message_type_check_and_change(cd);
+ D_LEAVE;
+}
+
+void msg_ui_composer_body_body_layout_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data;
+ D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL");
+ Evas_Coord x = 0;
+ Evas_Coord y = 0; + Evas_Coord w = 0; + Evas_Coord h = 0; + + evas_object_geometry_get(obj, &x, &y, &w, &h);
+ D_MSG("body layout height = %d", h);
+ + cd->ly_body_h = h; + + if (h >= COMPOSER_ENOUGH_TEXT_RENDERING_BODY_HEIGHT)
+ msg_ui_composer_body_info_area_update(cd); + else + edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", ""); +
+ D_LEAVE; +}
diff --git a/composer/src/ui-composer/msg-ui-composer-body-page.c b/composer/src/ui-composer/msg-ui-composer-body-page.c index 156e87a..4005d14 100755 --- a/composer/src/ui-composer/msg-ui-composer-body-page.c +++ b/composer/src/ui-composer/msg-ui-composer-body-page.c @@ -14,6 +14,7 @@ * limitations under the License. */ + #include "msg-ui-composer-body.h" #include "msg-ui-composer-body-page.h" #include "msg-ui-composer-body-callback.h" @@ -66,6 +67,7 @@ static const unsigned short g_GSM7BitExtToUCS2[] = 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020, 0x0020 }; + COMPOSER_RETURN_TYPE_E msg_ui_composer_body_read_sms_body(MSG_COMPOSER_VIEW_DATA_S *cd) { D_ENTER; @@ -120,6 +122,117 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_read_sms_body(MSG_COMPOSER_VIEW_DATA return COMPOSER_RETURN_SUCCESS; } +COMPOSER_RETURN_TYPE_E msg_ui_composer_body_read_mms_body(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + if (!cd) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL"); + return COMPOSER_RETURN_NULL_POINTER; + } + + MSG_COMPOSER_BODY_S *body_data = &cd->body_data; + MSG_COMPOSER_BODY_PAGE_S *page_data = NULL; + Eina_List *page_list = body_data->page_list; + int page_count = body_data->page_count; + + msg_ui_composer_message_set_page_count(page_count); + + if (body_data->region_order == COMPOSER_REGION_ORDER_IMAGE_TOP) + msg_ui_composer_message_set_is_text_top(false); + else + msg_ui_composer_message_set_is_text_top(true); + + int i = 0; + for (i = 0; i < page_count; i++) { + page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i); + char *body_text; + + if (page_data->entry) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] read TEXT region data"); + char *entry_text = g_strdup(elm_entry_entry_get(page_data->entry)); + convert_ps_to_br(entry_text); + + body_text = elm_entry_markup_to_utf8(entry_text); + + if (body_text && strlen(body_text) > 0) { + msg_ui_composer_message_mms_set_text(body_text, i); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] no text [%d]", i + 1); + } + + if (body_text) + g_free(body_text); + + g_free(entry_text); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] no page entry @ page [%d]", i + 1); + } + + if (page_data->is_image_item) { + + if (page_data->isVideo) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] read video region data"); + msg_ui_composer_message_mms_set_media(page_data->image_file_path, COMPOSER_MEDIA_TYPE_VIDEO, i, 0); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] read image region data"); + msg_ui_composer_message_mms_set_media(page_data->image_file_path, COMPOSER_MEDIA_TYPE_IMAGE, i, 0); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No [Image] region data"); + } + + if (page_data->is_sound_item) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] read SOUND region data"); + + msg_ui_composer_message_mms_set_media(page_data->sound_file_path, COMPOSER_MEDIA_TYPE_AUDIO, i, page_data->sound_duration); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] No [Sound] region data"); + } + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +static int __msg_ui_composer_body_verify_region_order(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + if (!cd) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL"); + return COMPOSER_REGION_ORDER_UNDETERMINDED; + } + + MSG_COMPOSER_BODY_S *body_data = &cd->body_data; + Eina_List *page_list = body_data->page_list; + int page_count = body_data->page_count; + int region_order = COMPOSER_REGION_ORDER_UNDETERMINDED; + + if (page_count < 1) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] no page"); + return COMPOSER_REGION_ORDER_UNDETERMINDED; + } else { + int i = 0; + + for (i = 0; i < page_count; i++) { + MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i); + const char *entry_text = elm_entry_entry_get(page_data->entry); + + if (entry_text && strlen(entry_text)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] Region order TEXT TOP"); + region_order = COMPOSER_REGION_ORDER_TEXT_TOP; + break; + } + } + if (region_order == COMPOSER_REGION_ORDER_UNDETERMINDED) + region_order = COMPOSER_REGION_ORDER_IMAGE_TOP; + } + + D_LEAVE; + return region_order; +} + int msg_ui_composer_body_entry_char_count(void *data, const unsigned char *body_ucs2_text, int ucs2_len, int *char_count) { D_ENTER; @@ -203,7 +316,7 @@ int msg_ui_composer_body_entry_char_count(void *data, const unsigned char *body_ return dst_char_encode; } -void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd) +void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S *cd) { D_ENTER; D_MSG_RETM_IF(cd == NULL, "composer data is NULL"); @@ -219,6 +332,7 @@ void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd) int cms_page = 0; int cms_max_count = 0; int max_count = 0; + int remaining_count = 0; if (char_count == 0) { edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", ""); @@ -228,6 +342,10 @@ void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd) if (char_encode == COMPOSER_CHAR_ENCODE_UNICODE) { if (char_count > COMPOSER_SMS_UNICODE_MAX_LEN) { cms_page = char_count / COMPOSER_CMS_UNICODE_MAX_LEN; + + if (!(char_count % COMPOSER_CMS_UNICODE_MAX_LEN)) + --cms_page; + if (cms_page >= COMPOSER_CMS_MAX_PAGE) max_count = COMPOSER_CMS_UNICODE_MAX_LEN * COMPOSER_CMS_MAX_PAGE; else @@ -240,6 +358,10 @@ void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd) } else if (char_encode == COMPOSER_CHAR_ENCODE_GSM7) { if (char_count > COMPOSER_SMS_GSM7_MAX_LEN){ cms_page = char_count / COMPOSER_CMS_GSM7_MAX_LEN; + + if (!(char_count % COMPOSER_CMS_GSM7_MAX_LEN)) + --cms_page; + if (cms_page >= COMPOSER_CMS_MAX_PAGE) max_count = COMPOSER_CMS_GSM7_MAX_LEN * COMPOSER_CMS_MAX_PAGE; else @@ -253,41 +375,55 @@ void msg_ui_composer_body_info_area_update(MSG_COMPOSER_VIEW_DATA_S* cd) return; } - snprintf(count_str, sizeof(count_str), "%d/%d", char_count, max_count); - edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", count_str); + remaining_count = max_count - char_count; + snprintf(count_str, sizeof(count_str), "%d/%d", remaining_count, cms_page+1); + + if (cd->ly_body_h >= COMPOSER_ENOUGH_TEXT_RENDERING_BODY_HEIGHT) + edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", count_str); + + } else if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) { + int64 msg_size = 0; + int64 sizeKB = 0; + int64 sizeB = 0; + + msg_ui_composer_get_message_size(cd, &msg_size); + + if (msg_size < MSGC_1KB) { + snprintf(count_str, sizeof(count_str), "1 %s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB")); + } else { + sizeKB = (int64)msg_size/MSGC_1KB; + sizeB = (int64)msg_size%MSGC_1KB; + + if (sizeB >= (MSGC_1KB/2)) + sizeKB++; + snprintf(count_str, sizeof(count_str), "%lld %s", sizeKB, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB")); + } + + if (cd->ly_body_h >= COMPOSER_ENOUGH_TEXT_RENDERING_BODY_HEIGHT) + edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", count_str); } D_LEAVE; } -static Evas_Object *__msg_ui_composer_body_page_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent) +static Evas_Object *__msg_ui_composer_body_page_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent, MSG_COMPOSER_BODY_PAGE_S *page_data) { D_ENTER; - if (!cd || !parent) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid paremeter "); + if (!cd || !parent || !page_data) { + D_EMSG("invalid paremeter"); return NULL; } - MSG_COMPOSER_BODY_S *body_data = &cd->body_data; - MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;; - Evas_Object *layout = NULL; Evas_Object *page_box = NULL; Evas_Object *entry = NULL; Elm_Entry_Filter_Limit_Size limit_filter; - page_data = (MSG_COMPOSER_BODY_PAGE_S *)calloc(1, sizeof(MSG_COMPOSER_BODY_PAGE_S)); - if (!page_data) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT calloc error]"); - return NULL; - } - layout = elm_layout_add(parent); if (!layout) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] elm_layout_add error !!"); - g_free(page_data); + D_EMSG("elm_layout_add error !!"); return NULL; } @@ -298,8 +434,7 @@ static Evas_Object *__msg_ui_composer_body_page_create(MSG_COMPOSER_VIEW_DATA_S page_box = elm_box_add(layout); if (!page_box) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] elm_box_add error !!"); - g_free(page_data); + D_EMSG("elm_box_add error !!"); return NULL; } @@ -310,39 +445,124 @@ static Evas_Object *__msg_ui_composer_body_page_create(MSG_COMPOSER_VIEW_DATA_S entry = elm_entry_add(page_box); if (!entry) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] elm_box_add error !!"); - g_free(page_data); + D_EMSG("elm_box_add error !!"); return NULL; } + + /* fix font size */ + elm_entry_text_style_user_push(entry, "DEFAULT='font_size=36'"); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_NO_IMAGE); - + elm_entry_markup_filter_append(entry, msg_composer_entry_filter_addimage, cd); /* add filter for removing markups*/ elm_entry_markup_filter_append(entry, msg_composer_entry_filter_remove_markup, cd); /* set entry max character count*/ - limit_filter.max_char_count = COMPOSER_TEXT_MAX_CHAR; + limit_filter.max_char_count = COMPOSER_MMS_TEXT_MAX_CHAR; elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter); Ecore_IMF_Context *entry_ctx = elm_entry_imf_context_get(entry); ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)entry_ctx, ECORE_IMF_INPUT_PANEL_STATE_EVENT, msg_ui_composer_entry_imf_state_cb, cd); + ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)entry_ctx, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, msg_ui_composer_entry_imf_resize_cb, cd); evas_object_show(entry); - evas_object_data_set(entry,"page_data", page_data); + evas_object_data_set(entry, "page_data", page_data); evas_object_smart_callback_add(entry, "focused", msg_ui_composer_body_entry_focused_cb, cd); + evas_object_smart_callback_add(entry, "unfocused", msg_ui_composer_body_entry_unfocused_cb, cd); evas_object_smart_callback_add(entry, "changed", msg_ui_composer_body_entry_changed_cb, cd); evas_object_smart_callback_add(entry, "preedit,changed", msg_ui_composer_body_entry_changed_cb, cd); + evas_object_smart_callback_add(entry, "press", msg_ui_composer_body_entry_press_cb, cd); + evas_object_smart_callback_add(entry, "clicked", msg_ui_composer_body_entry_clicked_cb, cd); + evas_object_smart_callback_add(entry, "maxlength,reached", msg_ui_composer_body_entry_maxlength_reached_cb, cd); + + Evas_Object *del_icon = elm_icon_add(parent); + elm_icon_file_set(del_icon, MSGC_IMG_PAGE_DEL_ICON, NULL); + evas_object_size_hint_weight_set(del_icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(del_icon, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_focus_allow_set(del_icon, EINA_TRUE); + + evas_object_data_set(del_icon, "layout", page_data->layout); + elm_object_part_content_set(layout, "swl.del_button", del_icon); + + evas_object_smart_callback_add(del_icon, "clicked", msg_ui_composer_body_page_del_btn_clicked_cb, cd); elm_box_pack_end(page_box, entry); elm_object_part_content_set(layout, "swl.page", page_box); + page_data->upper_layout = layout; page_data->entry = entry; page_data->page_box = page_box; + page_data->del_icon = del_icon; + + D_LEAVE; + return layout; +} + +static Evas_Object *__msg_ui_composer_body_page_main_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent) +{ + D_ENTER; + + if (!cd || !parent) { + D_EMSG("invalid paremeter "); + return NULL; + } + + MSG_COMPOSER_BODY_S *body_data = &cd->body_data; + MSG_COMPOSER_BODY_PAGE_S *page_data = NULL;; + + Evas_Object *layout = NULL; + Evas_Object *new_page = NULL; + Evas_Object *page_main_box = NULL; + + page_data = (MSG_COMPOSER_BODY_PAGE_S *)calloc(1, sizeof(MSG_COMPOSER_BODY_PAGE_S)); + if (!page_data) { + D_EMSG("page_data is NULL!! calloc error"); + return NULL; + } + + layout = elm_layout_add(parent); + if (!layout) { + D_EMSG(" elm_layout_add error !!"); + g_free(page_data); + return NULL; + } + + elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_BODY_PAGE_MAIN); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(layout); + + page_main_box = elm_box_add(layout); + if (!page_main_box) { + D_EMSG("elm_box_add error !!"); + g_free(page_data); + return NULL; + } + + evas_object_size_hint_weight_set(page_main_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(page_main_box, EVAS_HINT_FILL, EVAS_HINT_FILL); + + evas_object_show(page_main_box); + + page_data->page_main_box = page_main_box; page_data->layout = layout; + + new_page = __msg_ui_composer_body_page_create(cd, page_main_box, page_data); + if (!new_page) { + D_EMSG(" new_page error !!"); + g_free(page_data); + return NULL; + } + + elm_box_pack_end(page_main_box, new_page); + + elm_object_part_content_set(layout, "swl.page.main", page_main_box); + + body_data->page_list = eina_list_append(body_data->page_list, (void *)page_data); D_LEAVE; @@ -359,11 +579,10 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_add_page(MSG_COMPOSER_VIEW_DATA_S *c } MSG_COMPOSER_BODY_S *body_data = &cd->body_data; - Evas_Object *main_box = cd->body_box; Evas_Object *new_page = NULL; - if (body_data->page_count >= COMPOSER_MAX_PAGE) { + if (body_data->page_count >= COMPOSER_MMS_MAX_PAGE) { MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] COMPOSER_MAX_PAGE_REACHED"); msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_PAGE_MAX, COMPOSER_STATUS_POPUP_DEFAULT_TIME); return COMPOSER_RETURN_FAIL; @@ -374,7 +593,7 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_add_page(MSG_COMPOSER_VIEW_DATA_S *c return COMPOSER_RETURN_FAIL; } - new_page = __msg_ui_composer_body_page_create(cd, main_box); + new_page = __msg_ui_composer_body_page_main_create(cd, main_box); if (!new_page) { MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] page create error"); return COMPOSER_RETURN_FAIL; @@ -387,7 +606,60 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_add_page(MSG_COMPOSER_VIEW_DATA_S *c return COMPOSER_RETURN_SUCCESS; } -COMPOSER_RETURN_TYPE_E msg_ui_composer_body_remove_page(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_page) +COMPOSER_RETURN_TYPE_E msg_ui_composer_mms_insert_item_remove(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_item, COMPOSER_MEDIA_TYPE_E media_type) +{ + D_ENTER; + + if (!cd || !remove_item) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data or remove item is NOT exist"); + return COMPOSER_RETURN_NULL_POINTER; + } + + MSG_COMPOSER_BODY_S *body_data = &cd->body_data; + MSG_COMPOSER_BODY_PAGE_S *page_data = NULL; + Eina_List *page_list = body_data->page_list; + int page_count = body_data->page_count; + int i = 0; + + for (i = 0; i < page_count; i++) { + page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i); + + if (media_type == COMPOSER_MEDIA_TYPE_IMAGE || media_type == COMPOSER_MEDIA_TYPE_VIDEO) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] remove image region media item !!"); + if (page_data->image_item == remove_item) { + page_data->is_image_item = false; + page_data->image_item = NULL; + page_data->isVideo = false; + /* remove temp file */ + ecore_file_remove(page_data->image_file_path); + memset(page_data->image_file_path, 0x00, sizeof(page_data->image_file_path)); + evas_object_del(remove_item); + break; + } + } else if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] remove sound media item !!"); + if (page_data->sound_item == remove_item) { + page_data->is_sound_item = false; + page_data->sound_item = NULL; + /* remove temp file */ + ecore_file_remove(page_data->sound_file_path); + memset(page_data->sound_file_path, 0x00, sizeof(page_data->sound_file_path)); + evas_object_del(remove_item); + break; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid media type"); + continue; + } + } + + msg_ui_composer_body_info_area_update(cd); + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_mms_body_remove_page(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *remove_page) { D_ENTER; @@ -400,14 +672,24 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_remove_page(MSG_COMPOSER_VIEW_DATA_S MSG_COMPOSER_BODY_PAGE_S *page_data = NULL; Eina_List *page_list = body_data->page_list; int page_count = body_data->page_count; + int i = 0; if (page_count == 1) { // in case of only one page exist page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, 0); + + if (page_data->is_image_item) + msg_ui_composer_mms_insert_item_remove(cd, page_data->image_item, COMPOSER_MEDIA_TYPE_IMAGE); + + if (page_data->is_sound_item) + msg_ui_composer_mms_insert_item_remove(cd, page_data->sound_item, COMPOSER_MEDIA_TYPE_AUDIO); + elm_entry_entry_set(page_data->entry, ""); - if (cd->ly_body) - { - Evas_Object* entry = msg_ui_composer_last_focused_entry_get(cd); + /* hide delete button */ + edje_object_signal_emit(_EDJ(page_data->upper_layout), "hide.delete", "*"); + + if (cd->ly_body) { + Evas_Object *entry = msg_ui_composer_last_focused_entry_get(cd); if (entry) { if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { RECIPIENT_S *r = cd->recipient; @@ -417,20 +699,368 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_remove_page(MSG_COMPOSER_VIEW_DATA_S } } } + } + } + + Evas_Object *body_entry = msg_ui_composer_last_body_entry_get(cd); + Evas_Object *last_focused_entry = msg_ui_composer_last_focused_entry_get(cd); + /* last focus is body entry*/ + if (body_entry && (body_entry == last_focused_entry)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "focus change to the first page"); + /* focus change to the first page */ + cd->current_edit_entry = 0; + msg_ui_composer_last_focused_entry_set(cd, page_data->entry); + msg_ui_composer_last_focus_load(cd); + } + } else { + for (i = 0; i < page_count; i++) { + page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, i); + + if (page_data->layout == remove_page) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEUBG] Remove MMS (%d)th page", i + 1); + elm_box_unpack(cd->body_box, remove_page); + + Evas_Object *body_entry = msg_ui_composer_last_body_entry_get(cd); + Evas_Object *last_focused_entry = msg_ui_composer_last_focused_entry_get(cd); + + /* page count should be decresed before delete page layout */ + body_data->page_list = eina_list_remove(body_data->page_list, page_data); + body_data->page_count--; + + if (page_data->page_main_box) { + if (page_data->page_box) { + if (page_data->image_item) { + elm_box_unpack(page_data->page_box, page_data->image_item); + evas_object_del(page_data->image_item); + } + + if (page_data->entry) { + elm_box_unpack(page_data->page_box, page_data->entry); + evas_object_del(page_data->entry); + } + + evas_object_del(page_data->page_box); + } + + if (page_data->del_icon) + evas_object_del(page_data->del_icon); + + evas_object_del(page_data->upper_layout); - Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(entry); - Ecore_IMF_Input_Panel_State state = ecore_imf_context_input_panel_state_get(imf_context); - if (state == ECORE_IMF_INPUT_PANEL_STATE_HIDE && (msg_ui_composer_common_is_send_possible(cd) == false)) - edje_object_signal_emit(_EDJ(cd->ly_body), "body_expand", "*"); + if (page_data->sound_item) { + elm_box_unpack(page_data->page_main_box, page_data->sound_item); + evas_object_del(page_data->sound_item); + } + + evas_object_del(page_data->page_main_box); + } + + evas_object_del(page_data->layout); + + free(page_data); + + D_MSG("before update current entry"); + /* deleted page is current edit page */ + if (cd->current_edit_entry == i) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "update focus index"); + /* update body focus index*/ + if (i == 0) { /* if it is first page, update focus index to next page */ + cd->current_edit_entry = 0; + } else { /* if it is not first page, update focus index to previous page */ + cd->current_edit_entry = i - 1; + } + + /* change focus when last focused entry is a body entry */ + if (body_entry && (body_entry == last_focused_entry)) { + page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, cd->current_edit_entry); + if (page_data) { + msg_ui_composer_last_focused_entry_set(cd, page_data->entry); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] page_data is NULL"); + } + } + } else if (cd->current_edit_entry > i) { + /* update body focus index*/ + cd->current_edit_entry--; + + if (cd->current_edit_entry <= 0) + cd->current_edit_entry = 0; + } + break; } } - /* focus change to the first page */ - cd->current_edit_entry = 0; - msg_ui_composer_last_focused_entry_set(cd, page_data->entry); + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +static Evas_Object *__msg_ui_composer_body_media_layout_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char *file_path, Evas_Object *parent, int isSound) +{ + D_ENTER; + + if (!cd) { + D_EMSG("composer data is NULL"); + return NULL; + } + + Evas_Object *layout = NULL; + Evas_Object *thumb_icon = NULL; + Evas_Object *del_button = NULL; + const char *filename = NULL; + char thumbnail_path[COMPOSER_FILEPATH_LEN_MAX + 1] = { 0, }; + + layout = elm_layout_add(parent); + if (!layout) { + D_EMSG("layout create error !!!!"); + return NULL; + } + if (isSound == 1 ) + elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_BODY_SOUND); + else + elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_BODY_MEDIA); + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + evas_object_show(layout); + + thumb_icon = elm_icon_add(layout); + + COMPOSER_MEDIA_TYPE_E media_type = msg_composer_get_media_type(file_path); + + if (media_type == COMPOSER_MEDIA_TYPE_IMAGE) { + elm_icon_file_set(thumb_icon, file_path, NULL); + evas_object_size_hint_min_set(thumb_icon, MSGC_IMAGE_THUMB_WIDTH, MSGC_IMAGE_THUMB_HEIGHT); + } else if (media_type == COMPOSER_MEDIA_TYPE_VIDEO) { + if (msg_composer_common_get_thumbnail(cd, file_path, thumbnail_path, COMPOSER_FILEPATH_LEN_MAX) == COMPOSER_RETURN_SUCCESS) { + elm_icon_file_set(thumb_icon, thumbnail_path, NULL); + } else { + elm_icon_file_set(thumb_icon, MSGC_IMG_INSERT_ETC_ICON, NULL); + } + evas_object_size_hint_min_set(thumb_icon, MSGC_IMAGE_THUMB_WIDTH, MSGC_IMAGE_THUMB_HEIGHT); + } else if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) { + const char *icon_path = NULL; + + icon_path = msg_common_get_file_icon(file_path); + if (icon_path) { + elm_icon_file_set(thumb_icon, icon_path, NULL); + } else { + D_EMSG("icon_path is NULL"); + elm_icon_file_set(thumb_icon, MSGC_IMG_INSERT_VOICE_ICON, NULL); + } + evas_object_size_hint_min_set(thumb_icon, MSGC_SOUND_THUMB_WIDTH, MSGC_SOUND_THUMB_HEIGHT); } else { - D_EMSG("Invalid page count !!"); + elm_icon_file_set(thumb_icon, MSGC_IMG_INSERT_ETC_ICON, NULL); + evas_object_size_hint_min_set(thumb_icon, MSGC_SOUND_THUMB_WIDTH, MSGC_SOUND_THUMB_HEIGHT); } + + evas_object_show(thumb_icon); + elm_object_part_content_set(layout, "swl.thumbnail", thumb_icon); + + if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) { + filename = ecore_file_file_get(file_path); + if (filename) { + edje_object_part_text_set(_EDJ(layout), "text.filename", filename); + } + } + + del_button = elm_icon_add(layout); + + if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) + elm_icon_file_set(del_button, MSGC_SOUND_INSERT_DEL_ICON, NULL); + else + elm_icon_file_set(del_button, MSGC_IMG_INSERT_DEL_ICON, NULL); + + evas_object_size_hint_align_set(del_button, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_focus_allow_set(del_button, EINA_TRUE); + + evas_object_data_set(del_button, "layout", layout); + evas_object_smart_callback_add(del_button, "clicked", msg_ui_composer_body_media_del_btn_clicked_cb, cd); + + elm_object_part_content_set(layout, "swl.del_button", del_button); + + D_LEAVE; + return layout; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_body_insert_media(MSG_COMPOSER_VIEW_DATA_S *cd, const char *file_path, COMPOSER_MEDIA_TYPE_E media_type) +{ + D_ENTER; + + if (!cd) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL"); + return COMPOSER_RETURN_FAIL; + } + + if (file_path == NULL || strlen(file_path) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] empty file path"); + return COMPOSER_RETURN_FAIL; + } + + MSG_COMPOSER_BODY_S *body_data = &cd->body_data; + MSG_COMPOSER_BODY_PAGE_S *page_data = NULL; + Eina_List *page_list = body_data->page_list; + int page_count = eina_list_count(page_list); + bool is_new_page_needed = false; + int length = 0; + + /* error cases */ + if (page_count < 1) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] mms page count error"); + return COMPOSER_RETURN_FAIL; + } + + if (page_count <= cd->current_edit_entry) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] mms page count error 2"); + return COMPOSER_RETURN_INVALID_PAGE; + } + + page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, cd->current_edit_entry); + + if (media_type == COMPOSER_MEDIA_TYPE_IMAGE) { + if (page_data->is_image_item) + is_new_page_needed = true; + + if (body_data->region_order == COMPOSER_REGION_ORDER_UNDETERMINDED) + body_data->region_order = __msg_ui_composer_body_verify_region_order(cd); + } else if (media_type == COMPOSER_MEDIA_TYPE_VIDEO) { + if (page_data->is_image_item || page_data->is_sound_item) + is_new_page_needed = true; + + if (body_data->region_order == COMPOSER_REGION_ORDER_UNDETERMINDED) + body_data->region_order = __msg_ui_composer_body_verify_region_order(cd); + } else if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) { + if (page_data->is_sound_item || (page_data->is_image_item && page_data->isVideo)) + is_new_page_needed = true; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid media type [%d]", media_type); + return COMPOSER_RETURN_INVALID_MEDIA_TYPE; + } + + if (is_new_page_needed) { + if (msg_ui_composer_body_add_page(cd) != COMPOSER_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] Fail of new page created"); + return COMPOSER_RETURN_FAIL; + } + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] new page created"); + /* if new page added, current edit entry is changed to a new page's entry */ + cd->current_edit_entry = page_count; + } + + page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, cd->current_edit_entry); + + if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) { + page_data->is_sound_item = true; + length = strlen(file_path); + strncpy(page_data->sound_file_path, file_path, length); + page_data->sound_file_path[length] = '\0'; + + msg_composer_common_get_media_duration(file_path, &page_data->sound_duration); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] audio file duration [%d]", page_data->sound_duration); + + page_data->sound_item = __msg_ui_composer_body_media_layout_create(cd, page_data->sound_file_path, page_data->layout, 1); + + if (page_data->sound_item) { + elm_box_pack_end(page_data->page_main_box, page_data->sound_item); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] creating insert item layout error"); + return COMPOSER_RETURN_FAIL; + } + } else { + page_data->is_image_item = true; + page_data->isVideo = media_type == COMPOSER_MEDIA_TYPE_VIDEO ? true : false; + length = strlen(file_path); + strncpy(page_data->image_file_path, file_path, length); + page_data->image_file_path[length] = '\0'; + + page_data->image_item = __msg_ui_composer_body_media_layout_create(cd, page_data->image_file_path, page_data->layout, 0); + + if (page_data->image_item) { + elm_box_pack_start(page_data->page_box, page_data->image_item); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] creating insert item layout error"); + return COMPOSER_RETURN_FAIL; + } + } + + elm_object_disabled_set(cd->send_button, EINA_FALSE); + msg_ui_composer_message_type_check_and_change(cd); + msg_ui_composer_body_info_area_update(cd); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "cd->attach_index = %d", cd->attach_index); + + if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) { + int media_count = eina_list_count(cd->attachlist); + + /* show invalid popup when last content is added */ + if (media_count == cd->attach_index) { + msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK); + } + } else { + /* change last focused entry to a page that is added media recently*/ + msg_ui_composer_last_focused_entry_set(cd, page_data->entry); + msg_ui_composer_last_focus_load(cd); + } + D_LEAVE; return COMPOSER_RETURN_SUCCESS; } +int msg_ui_composer_get_inserted_item_size(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + if (!cd) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL"); + return MSG_UI_RET_ERR; + } + + int page_count = cd->body_data.page_count; + Eina_List *page_list = cd->body_data.page_list; + int total_size = 0; + int i = 0; + + for (i = 0; i < page_count; i++) { + MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i); + int image_file_size = 0; + int sound_file_size = 0; + + if (page_data->is_image_item) { + image_file_size = msg_composer_get_file_size(page_data->image_file_path); + } + if (page_data->is_sound_item) { + sound_file_size = msg_composer_get_file_size(page_data->sound_file_path); + } + + total_size = total_size + image_file_size + sound_file_size; + } + + D_LEAVE; + return total_size; +} + +void msg_ui_composer_body_apply_font_size(MSG_COMPOSER_VIEW_DATA_S *cd, const char *font_sytle) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + D_MSG_RETM_IF(font_sytle == NULL, "font_sytle is NULL"); + + MSG_COMPOSER_BODY_S *body_data = &cd->body_data; + D_MSG_RETM_IF(body_data->page_list == NULL, "page_list is NULL"); + + int page_count = body_data->page_count; + MSG_COMPOSER_BODY_PAGE_S *page_data = NULL; + int i = 0; + + for (i = 0; i < page_count; i++) { + page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, i); + if (page_data && page_data->entry) { + elm_entry_text_style_user_push(page_data->entry, font_sytle); + } + } + + D_LEAVE; +} + diff --git a/composer/src/ui-composer/msg-ui-composer-body.c b/composer/src/ui-composer/msg-ui-composer-body.c index 86cb4ca..3cd0801 100755 --- a/composer/src/ui-composer/msg-ui-composer-body.c +++ b/composer/src/ui-composer/msg-ui-composer-body.c @@ -14,14 +14,17 @@ * limitations under the License. */ + /* includes */ +#include <drm_client.h> #include "msg-ui-composer-body.h" #include "msg-ui-composer-recipient.h" #include "msg-ui-composer-main.h" #include "msg-ui-composer-body-page.h" +#include "msg-ui-composer-subject.h" #include "msg-ui-composer-common.h" - +#include "msg-ui-composer-attachment.h" #include "msg-ui-composer-external.h" #include "msg-ui-composer-message.h" #include "msg-ui-composer-popup.h" @@ -29,7 +32,39 @@ #include "msg-ui-composer-body-callback.h" /* functions*/ -COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_size(MSG_COMPOSER_VIEW_DATA_S* cd, int64 *size) +static void __attach_max_popup_ok_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETM_IF(cd == NULL, "composer data is NULL"); + + MSGC_EVAS_OBJECT_DEL(cd->popup_end); + + D_LEAVE; +} + +static void __attach_max_popup_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETM_IF(cd == NULL, "composer data is NULL"); + + MSGC_EVAS_OBJECT_DEL(cd->popup_end); + ug_destroy_me(cd->ug); + + D_LEAVE; +} + +static void __attach_max_popup_close_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + Evas_Object *popup = (Evas_Object *)data; + + MSGC_EVAS_OBJECT_DEL(popup); + D_LEAVE; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_size(MSG_COMPOSER_VIEW_DATA_S *cd, int64 *size) { D_ENTER; @@ -40,7 +75,13 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_size(MSG_COMPOSER_VIEW_DATA_S D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_NULL_POINTER,"Composer Data is Invalid"); D_MSG_RETVM_IF(size == NULL, COMPOSER_RETURN_NULL_POINTER,"size parameter is Invalid"); - D_MSG("inserted_size(%lld) + attached_size(%lld)", inserted_size, attached_size); + /* This is a temporal approach to get a message size */ + /* currently, Message size is sum of attached files and inserted files */ + /* it will be implemented, message size validate API on MF side */ + inserted_size = msg_ui_composer_get_inserted_item_size(cd); + attached_size = msg_ui_composer_get_attached_item_size(cd); + + D_MSG("inserted_size(%lld) + attached_size(%lld)",inserted_size ,attached_size); total_size = inserted_size + attached_size; *size = total_size; @@ -48,6 +89,627 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_size(MSG_COMPOSER_VIEW_DATA_S return COMPOSER_RETURN_SUCCESS; } +static COMPOSER_RETURN_TYPE_E __msg_ui_composer_jpeg_image_resolution_change(const char *src_path, const char *dst_path) +{ + D_ENTER; + D_MSG_RETVM_IF(src_path == NULL, COMPOSER_RETURN_FAIL, "Parameter Source Path is Invaild"); + D_MSG_RETVM_IF(dst_path == NULL, COMPOSER_RETURN_FAIL, "Parameter Destination Path is Invaild"); + + unsigned int restrict_w = 0; + unsigned int restrict_h = 0; + unsigned int from_w = 0; + unsigned int from_h = 0; + unsigned int to_w = 0; + unsigned int to_h = 0; + + /*Check Jpeg file*/ + const char *file_ext = msg_common_get_file_ext(src_path); + D_MSG_RETVM_IF((strcasecmp(file_ext, "jpeg") != 0 && strcasecmp(file_ext, "jpg") != 0), COMPOSER_RETURN_FAIL, "File Ext Value is NOT Valid"); + + /*Get original image resolution*/ + int util_ret = jpeg_image_get_resolution(src_path, &from_w, &from_h); + D_MSG_RETVM_IF(util_ret != COMPOSER_UTIL_ERR_NONE, COMPOSER_RETURN_FAIL, "Fail to Get Resolution"); + + D_MSG("Input IMAGE resolution %d X %d", from_w, from_h); + if (from_w > from_h) { + restrict_w = MSGC_RESTRICT_MAX_IMG_W; + restrict_h = MSGC_RESTRICT_MAX_IMG_H; + } else { + restrict_w = MSGC_RESTRICT_MAX_IMG_H; + restrict_h = MSGC_RESTRICT_MAX_IMG_W; + } + + D_MSG("Set RESTRICT resolution %d X %d", restrict_w, restrict_h); + + if (from_w > restrict_w && from_h > restrict_h) { + double weight_w = (double)restrict_w/from_w; + double weight_h = (double)restrict_h/from_h; + if (weight_w < weight_h) { + to_w = restrict_w; + to_h = from_h*weight_w; + } else if (weight_w > weight_h) { + to_w = from_w*weight_h; + to_h = restrict_h; + } else { + to_w = restrict_w; + to_h = restrict_h; + } + } else if (from_w > restrict_w) { + double weight_w = (double)restrict_w/from_w; + to_w = restrict_w; + to_h = from_h*weight_w; + } else if (from_h > restrict_h) { + double weight_h = (double)restrict_h/from_h; + to_w = from_w*weight_h; + to_h = restrict_h; + } else { + D_MSG("It does not need to resize image"); + return COMPOSER_RETURN_SUCCESS; + } + + D_MSG("Set input image resolution to %d X %d",to_w, to_h); + + util_ret = jpeg_image_resize(src_path, to_w, to_h, dst_path); + if (util_ret != COMPOSER_UTIL_ERR_NONE) { + D_EMSG("image resize error"); + return COMPOSER_RETURN_FAIL; + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +static COMPOSER_RETURN_TYPE_E __msg_ui_composer_jpeg_image_quality_down(const char *src_path, const char *dst_path, int64 wishsize) +{ + D_ENTER; + D_MSG_RETVM_IF(src_path == NULL, COMPOSER_RETURN_FAIL, "Parameter Source Path is Invaild"); + D_MSG_RETVM_IF(dst_path == NULL, COMPOSER_RETURN_FAIL, "Parameter Destination Path is Invaild"); + D_MSG_RETVM_IF(wishsize <= 0, COMPOSER_RETURN_FAIL, "Parameter remain size (%d) is Invaild", wishsize); + + const int max_resize_loop = COMPOSER_RESIZE_LOOP_MAX; + int quality; + char *file_ext; + int i = 0; + int util_ret; + + file_ext = msg_common_get_file_ext(src_path); + D_MSG_RETVM_IF((strcasecmp(file_ext, "jpeg") != 0 && strcasecmp(file_ext, "jpg") != 0), COMPOSER_RETURN_FAIL, "File Ext Value is NOT Valid"); + + /*Set proper quality for image quality down*/ + int64 file_size = msg_composer_get_file_size(src_path); + + if (file_size > wishsize ) { + int percent; + percent = (int)(wishsize * 100) / file_size; + D_MSG("percent(%d) = wishsize(%lld) / filesize(%lld)", percent, wishsize, file_size); + + /* remain size of msg / Original File Size x 100 = percentage to reduce original file + If percent > 60 then proper quality is 95 + If 40 < percent < 60 then proper quality is 85 + If 20 < percent < 40 then proper quality is 60 + If 15 < percent < 20 then proper quality is 20 + If 15 < percent < 20 then proper quality is 20 + If 10 < percent < 15 then proper quality is 10 + */ + + if (percent > 60) { + quality = 95; + } else if (percent > 40) { + quality = 85; + } else if (percent > 20) { + quality = 60; + } else if (percent > 15) { + quality = 20; + } else if (percent > 10) { + quality = 10; + } else{ + D_EMSG("Available size is too small to resize"); + return COMPOSER_RETURN_FAIL; + } + + D_MSG("quality= %d", quality); + } else { + D_MSG("It does NOT need Quality Set"); + return COMPOSER_RETURN_SUCCESS; + } + + /*Try image qulity down */ + for (i = 0; i < max_resize_loop; i++) { + + if (quality < 10) { + D_EMSG("Quality is Too Low to Resize"); + return COMPOSER_RETURN_FAIL; + } + + util_ret = jpeg_image_quality_set(src_path, quality, dst_path); + if (util_ret == COMPOSER_UTIL_ERR_NONE) { + + file_size = msg_composer_get_file_size(dst_path); + + if (wishsize > file_size) { + return COMPOSER_RETURN_SUCCESS; + } + + quality /= 2; + + } else { + D_EMSG("Fail to Resizing"); + return COMPOSER_RETURN_FAIL; + } + } + + D_EMSG("Resized Result Size Is Not Satisfy to Add"); + return COMPOSER_RETURN_FAIL; +} + +static void __msg_ui_composer_body_resize_end_job(void *data) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd; + COMPOSER_THREAD_DATA_S *th_data; + COMPOSER_RETURN_TYPE_E ret; + char *list_data; + + th_data = data; + D_MSG_RETM_IF(th_data == NULL, "Thread Data is NULL"); + + cd = th_data->cd; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + + cd->job_thread_end = NULL; + cd->attach_thread = NULL; + + if (th_data->status == COMPOSER_THREAD_STATUS_RESIZE_SUCCESS) { + /*attach item exist*/ + if (cd->iter_list) { + ret = msg_ui_composer_body_items_add(cd); + if (ret == COMPOSER_RETURN_RESIZE_IMAGE) { + D_MSG("resize attach item ..."); + if (th_data) + g_free(th_data); + return; + } + } + } else { + char popup_msg[DEF_BUF_LEN_L] = { 0, }; + /* remove temp file */ + ecore_file_remove(th_data->filepath); + + if (cd->isLoad == true && cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { + snprintf(popup_msg, sizeof(popup_msg), MSGC_STR_POP_ATTACHMENT_SIZE_MAX_Q, cd->mms_max_size/ 1024); + Evas_Object *popup = msg_ui_composer_status_popup_show(cd, popup_msg, 0); + + Evas_Object *btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, MSGC_STR_BUTTON_OK); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", __attach_max_popup_ok_btn_clicked_cb, cd); + + Evas_Object *btn2 = elm_button_add(popup); + elm_object_style_set(btn2, "popup_button/default"); + elm_object_text_set(btn2, MSGC_STR_BUTTON_CANCEL); + elm_object_part_content_set(popup, "button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", __attach_max_popup_cancel_btn_clicked_cb, cd); + cd->popup_end = popup; + } else { + snprintf(popup_msg, sizeof(popup_msg), MSGC_STR_POP_ATTACHMENT_SIZE_MAX, cd->mms_max_size/ 1024); + Evas_Object *popup = msg_ui_composer_status_popup_show(cd, popup_msg, COMPOSER_STATUS_POPUP_DEFAULT_TIME); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", __attach_max_popup_close_btn_clicked_cb, popup); + } + } + + if (cd->isLoad == true) + cd->isLoad = false; + + EINA_LIST_FREE(cd->attachlist, list_data) { + if (list_data) + g_free(list_data); + } + + cd->attachlist = NULL; + cd->attach_index = 0; + + /*resizing progress popup*/ + if (cd->progress_popup) { + evas_object_del(cd->progress_popup); + cd->progress_popup = NULL; + } + + cd->iter_list = NULL; + + if (th_data) + g_free(th_data); + + D_LEAVE; +} + +void msg_ui_composer_body_resize_worker_end_cb(void *data, Ecore_Thread *thread) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd; + COMPOSER_THREAD_DATA_S *th_data; + + th_data = data; + D_MSG_RETM_IF(th_data == NULL, "Thread Data is NULL"); + + cd = th_data->cd; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + + if (cd->job_thread_end) + ecore_job_del(cd->job_thread_end); + + cd->job_thread_end = ecore_job_add(__msg_ui_composer_body_resize_end_job, th_data); + + D_LEAVE; +} + + +void msg_ui_composer_body_resize_worker_feedback_cb(void *data, Ecore_Thread *thread, void *msg_data) +{ + D_ENTER; + COMPOSER_THREAD_DATA_S *th_data = data; + + D_MSG_RETM_IF(th_data == NULL, "Thread Data is Invalid"); + D_MSG_RETM_IF(msg_data == NULL, "Thread Message Data is Invalid"); + + D_MSG("Received Resized Image path = %s", msg_data); + msg_ui_composer_body_insert_media(th_data->cd, msg_data, COMPOSER_MEDIA_TYPE_IMAGE); + + D_LEAVE; +} + +void msg_ui_composer_body_resize_worker_thread(void *data, Ecore_Thread *thread) +{ + D_ENTER; + COMPOSER_RETURN_TYPE_E resize_result; + COMPOSER_RETURN_TYPE_E ret; + MSG_COMPOSER_VIEW_DATA_S *cd; + COMPOSER_THREAD_DATA_S *th_data = data; + + if (!th_data) { + D_EMSG("No th_data"); + ecore_thread_feedback(thread, "No th_data"); + return; + } + + cd = th_data->cd; + if (!cd) { + D_EMSG("No cd"); + ecore_thread_feedback(thread, "No cd"); + return; + } + + if (th_data->need_ChangeResolution == true) { + ret = __msg_ui_composer_jpeg_image_resolution_change(th_data->filepath, th_data->filepath); + if (ret != COMPOSER_RETURN_SUCCESS) { + th_data->status = COMPOSER_THREAD_STATUS_RESIZE_FAIL; + return; + } + } + + resize_result = __msg_ui_composer_jpeg_image_quality_down(th_data->filepath, th_data->filepath, th_data->wishsize); + if (resize_result == COMPOSER_RETURN_SUCCESS) { + th_data->status = COMPOSER_THREAD_STATUS_RESIZE_SUCCESS; + ecore_thread_feedback(thread, th_data->filepath); + } else { + th_data->status = COMPOSER_THREAD_STATUS_RESIZE_FAIL; + } + + D_LEAVE; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_body_items_add(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer Data is Invalid"); + D_MSG_RETVM_IF(cd->attachlist == NULL, COMPOSER_RETURN_FAIL, "Composer attach List is Invalid"); + + char *list_data = NULL; + COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS; + Eina_List *l = NULL; + Eina_List *o = NULL; + char popup_msg[DEF_BUF_LEN_L] = { 0, }; + + if (cd->iter_list) + o = cd->iter_list; + else + o = cd->attachlist; + + EINA_LIST_FOREACH(o, l, list_data) { + cd->attach_index++; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "cd->attach_index = %d", cd->attach_index); + if (list_data) { + ret = msg_ui_composer_body_item_add(cd, list_data); + if (ret == COMPOSER_RETURN_RESIZE_IMAGE) { + break; + } else if (ret == COMPOSER_RETURN_DRM_FORWARDLOCK) { + Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_FILE_IS_FORWARD_LOCK, COMPOSER_STATUS_POPUP_DEFAULT_TIME); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup); + break; + } else if (ret == COMPOSER_RETURN_OVERSIZE_FILE) { + + if (cd->isLoad == true && cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { + snprintf(popup_msg, sizeof(popup_msg), MSGC_STR_POP_ATTACHMENT_SIZE_MAX_Q, cd->mms_max_size/ 1024); + Evas_Object *popup = msg_ui_composer_status_popup_show(cd, popup_msg, 0); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, MSGC_STR_BUTTON_OK); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", __attach_max_popup_ok_btn_clicked_cb, cd); + Evas_Object *btn2 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn2, MSGC_STR_BUTTON_CANCEL); + elm_object_part_content_set(popup, "button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", __attach_max_popup_cancel_btn_clicked_cb, cd); + cd->popup_end = popup; + } else { + snprintf(popup_msg, sizeof(popup_msg), MSGC_STR_POP_ATTACHMENT_SIZE_MAX, cd->mms_max_size/ 1024); + Evas_Object *popup = msg_ui_composer_status_popup_show(cd, popup_msg, 0); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, MSGC_STR_BUTTON_CLOSE); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", __attach_max_popup_close_btn_clicked_cb, popup); + } + + break; + } else if (ret != COMPOSER_RETURN_SUCCESS) { + msg_ui_composer_status_popup_show(cd, _MSGSTR("IDS_MSGC_POP_MMSCANTADD"), COMPOSER_STATUS_POPUP_DEFAULT_TIME); + D_MSG("Fail to add item"); + break; + } + } + } + + if (ret == COMPOSER_RETURN_RESIZE_IMAGE) { + cd->iter_list = eina_list_next(l); + } else { + if (cd->isLoad == true) + cd->isLoad = false; + + EINA_LIST_FREE(cd->attachlist,list_data) { + if (list_data) + free(list_data); + } + cd->iter_list = NULL; + cd->attach_index = 0; + } + + D_LEAVE; + return ret; +} + +bool msg_ui_composer_body_weburi_append(MSG_COMPOSER_VIEW_DATA_S *cd, const char *uri) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, false, "Composer Data is Invalid"); + D_MSG_RETVM_IF(uri == NULL, false, "uri is NULL"); + D_MSG_RETVM_IF(is_web_uri(uri) == false, false, "url is NOT weburi"); + + Evas_Object *entry = msg_ui_composer_last_body_entry_get(cd); + D_MSG_RETVM_IF(entry == NULL, false, "entry is NULL"); + + char *str = elm_entry_utf8_to_markup(uri); + D_MSG_RETVM_IF(str == NULL, false, "markup string is NULL"); + + char *prev_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry)); + if (prev_str) { + if (strlen(prev_str) > 0) { + char *enter = elm_entry_utf8_to_markup("\n"); + if (enter) { + elm_entry_entry_append(entry, enter); + g_free(enter); + } + elm_entry_entry_append(entry, str); + } else { + elm_entry_entry_set(entry, str); + } + + g_free(prev_str); + } else { + D_MSG("prev_str is NULL !!"); + elm_entry_entry_set(entry, str); + } + + g_free(str); + D_LEAVE; + return true; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_body_item_add(MSG_COMPOSER_VIEW_DATA_S *cd, const char *item_path) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_NULL_POINTER, "Composer Data is Invalid"); + D_MSG_RETVM_IF(item_path == NULL, COMPOSER_RETURN_NULL_POINTER, "item_path is NULL"); + + COMPOSER_RETURN_TYPE_E ret; + COMPOSER_MEDIA_TYPE_E media_type; + bool is_drm = false; + + /*if path is web uri then set path as body text*/ + if (is_web_uri(item_path) == true) { + if (msg_ui_composer_body_weburi_append(cd, item_path) == false) + return COMPOSER_RETURN_FAIL; + + return COMPOSER_RETURN_SUCCESS; + } + + /*check file path*/ + D_MSG_RETVM_IF(ecore_file_exists(item_path) == EINA_FALSE, COMPOSER_RETURN_FAIL, "item_path(%s) is NOT Exist", item_path); + D_MSG_RETVM_IF(ecore_file_is_dir(item_path) == EINA_TRUE, COMPOSER_RETURN_FAIL, "item_path(%s) is dir", item_path); + + /*Check drm file && forward lock*/ + drm_bool_type_e is_drm_file = DRM_FALSE; + if (drm_is_drm_file(item_path, &is_drm_file) == DRM_RETURN_SUCCESS && + is_drm_file == DRM_TRUE) { + int ret = DRM_RETURN_SUCCESS; + drm_file_info_s drmInfo; + + memset(&drmInfo, 0x0, sizeof(drm_file_info_s)); + + ret = drm_get_file_info(item_path, &drmInfo); + if (ret != DRM_RETURN_SUCCESS) { + D_EMSG("Error drm_get_file_info"); + return COMPOSER_RETURN_FAIL; + } + + if (drmInfo.oma_info.method == DRM_METHOD_TYPE_FORWARD_LOCK || + drmInfo.oma_info.method == DRM_METHOD_TYPE_COMBINED_DELIVERY) { + D_MSG("drm file type %d is not allowed add", drmInfo.oma_info.method); + return COMPOSER_RETURN_DRM_FORWARDLOCK; + } + + is_drm = true; + } + + /*Check Media Type*/ + media_type = msg_composer_get_media_type(item_path); + D_MSG("media_type = %d", media_type); + + /*Check Creation Mode*/ + bool bIsSuitable = true; + int creationMode; + msg_struct_t setting = NULL; + setting = msg_create_struct(MSG_STRUCT_SETTING_MMS_SEND_OPT); + + if (setting) { + msg_get_mms_send_opt(cd->msg_handle, setting); + if (msg_get_int_value(setting, MSG_MMS_SENDOPT_CREATION_MODE_INT, &creationMode) == MSG_SUCCESS) { + if (creationMode == MSG_CREATION_MODE_RESTRICTED || creationMode == MSG_CREATION_MODE_WARNING) { + D_MSG("restricted"); + bIsSuitable = msg_composer_util_is_allow_creation_mode(item_path, media_type); + } + } + + msg_release_struct(&setting); + } else { + D_EMSG("msg_create_struct is failed"); + } + + /*Check file size && resize able (if Image)*/ + int64 msg_size, file_size, remain_size; + ret = msg_ui_composer_get_message_size(cd, &msg_size); + D_MSG_RETVM_IF(ret != COMPOSER_RETURN_SUCCESS, COMPOSER_RETURN_FAIL, "Fail to Get Message Size"); + remain_size = cd->mms_max_size - msg_size; + + file_size = msg_composer_get_file_size(item_path); + if (file_size > remain_size) { + + char *file_ext = msg_common_get_file_ext(item_path); + /*If image type resize*/ + if (media_type == COMPOSER_MEDIA_TYPE_IMAGE + && is_drm == false + && (strcasecmp(file_ext, "jpeg") == 0 || strcasecmp(file_ext, "jpg") == 0)) { + + COMPOSER_THREAD_DATA_S *th_data; + th_data = calloc(1, sizeof(COMPOSER_THREAD_DATA_S)); + if (th_data == NULL) + return COMPOSER_RETURN_FAIL; + + th_data->cd = cd; + + if (bIsSuitable) { + th_data->need_ChangeResolution = false; + D_MSG("Suitable"); + } else { + th_data->need_ChangeResolution = true; + D_MSG("Not Suitable"); + } + + th_data->wishsize = remain_size; + + ret = msg_ui_composer_common_get_file(cd, item_path, th_data->filepath, sizeof(th_data->filepath)-1); + if (ret != COMPOSER_RETURN_SUCCESS) { + D_EMSG("get file error"); + g_free(th_data); + return COMPOSER_RETURN_FAIL; + } + + if (!cd->progress_popup) + cd->progress_popup = msg_ui_composer_progress_popup_show(th_data->cd, _MSGSTR("IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING")); + + cd->attach_thread = ecore_thread_feedback_run(msg_ui_composer_body_resize_worker_thread, + msg_ui_composer_body_resize_worker_feedback_cb, + msg_ui_composer_body_resize_worker_end_cb, + msg_ui_composer_body_resize_worker_end_cb, + th_data, EINA_TRUE); + + if (!cd->attach_thread) { + D_EMSG("thread run is failed"); + /*resizing progress popup*/ + if (cd->progress_popup) { + evas_object_del(cd->progress_popup); + cd->progress_popup = NULL; + } + return COMPOSER_RETURN_FAIL; + } + + return COMPOSER_RETURN_RESIZE_IMAGE; + } else { + D_MSG("Adding Item Size is too big to add or remain msg size is too small"); + return COMPOSER_RETURN_OVERSIZE_FILE; + } + + } else { + char local_item_path[COMPOSER_FILEPATH_LEN_MAX + 1] = {0,}; + /* copy temp file */ + ret = msg_ui_composer_common_get_file(cd, item_path, local_item_path, COMPOSER_FILEPATH_LEN_MAX); + + if (ret != COMPOSER_RETURN_SUCCESS) { + D_EMSG("get file error"); + return COMPOSER_RETURN_FAIL; + } + + if (bIsSuitable) { + if (media_type == COMPOSER_MEDIA_TYPE_IMAGE || media_type == COMPOSER_MEDIA_TYPE_VIDEO || media_type == COMPOSER_MEDIA_TYPE_AUDIO) { + msg_ui_composer_body_insert_media(cd, local_item_path, media_type); + } else { + msg_ui_composer_add_attach_media(cd, local_item_path, media_type); + } + } else { + D_MSG("Adding Item is not Suitable to add"); + return COMPOSER_RETURN_FAIL; + } + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +static Evas_Object *__msg_ui_composer_body_create_add_button(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent) +{ + D_ENTER; + + if (!cd) + return NULL; + + Evas_Object *button = NULL; + + button = elm_button_add(parent); + + elm_object_theme_set(button, cd->th); + elm_object_style_set(button, "circle/add_plus"); + + evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(button); + + evas_object_smart_callback_add(button, "clicked", msg_ui_composer_body_add_btn_clicked_cb, cd); + + cd->add_button = button; + + D_LEAVE; + return button; +} + static Evas_Object *__msg_ui_composer_body_create_main_field(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object *parent) { D_ENTER; @@ -67,12 +729,6 @@ static Evas_Object *__msg_ui_composer_body_create_main_field(MSG_COMPOSER_VIEW_D elm_object_focus_allow_set(scroller, EINA_FALSE); elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_FALSE); elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); - - if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { - elm_scroller_content_min_limit(scroller, 0, 1); - evas_object_size_hint_max_set(scroller, 9999, 250); - } - evas_object_show(scroller); box = elm_box_add(parent); @@ -97,6 +753,34 @@ static Evas_Object *__msg_ui_composer_body_create_main_field(MSG_COMPOSER_VIEW_D return scroller; } +static COMPOSER_RETURN_TYPE_E __msg_ui_composer_body_read_mms_data(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + if (!cd) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL"); + return COMPOSER_RETURN_NULL_POINTER; + } + + if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) { + msg_ui_composer_message_set_msg_type(COMPOSER_MSG_TYPE_MMS); + + if (cd->isSubject) + msg_ui_composer_read_subject(cd); + + if (cd->attach_data.attachment_Cnt > 0) + msg_ui_composer_read_attachments(cd); + + msg_ui_composer_body_read_mms_body(cd); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid message type"); + return COMPOSER_RETURN_INVALID_MSG_TYPE; + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + COMPOSER_RETURN_TYPE_E __msg_ui_composer_body_read_data(MSG_COMPOSER_VIEW_DATA_S *cd) { D_ENTER; @@ -108,8 +792,11 @@ COMPOSER_RETURN_TYPE_E __msg_ui_composer_body_read_data(MSG_COMPOSER_VIEW_DATA_S if (msg_ui_composer_body_read_sms_body(cd) != COMPOSER_RETURN_SUCCESS) MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ERROR] error read sms body text!!"); - } else { + } else if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] message type MMS!!"); + __msg_ui_composer_body_read_mms_data(cd); + } else { MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type!!"); msg_ui_composer_message_destroy(); return COMPOSER_RETURN_FAIL; @@ -127,6 +814,7 @@ static Evas_Object *__msg_ui_composer_body_create_send_button(MSG_COMPOSER_VIEW_ return NULL; Evas_Object *button = NULL; + Evas_Object *icon = NULL; button = elm_button_add(parent); if (!button) { @@ -134,18 +822,22 @@ static Evas_Object *__msg_ui_composer_body_create_send_button(MSG_COMPOSER_VIEW_ return NULL; } - elm_object_style_set(button, "style2"); + elm_object_theme_set(button, cd->th); + elm_object_style_set(button, "sendbutton"); + elm_object_focus_allow_set(button, EINA_FALSE); evas_object_size_hint_weight_set(button, 0.0, 0.0); evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); - elm_object_text_set(button, MSGC_STR_BUTTON_SEND); + icon = elm_icon_add(parent); + elm_icon_file_set(icon, MSGC_IMG_SEND_ICON, NULL); + + elm_object_part_content_set(button, "icon", icon); evas_object_show(button); evas_object_smart_callback_add(button, "clicked", msg_ui_composer_body_send_btn_clicked_cb, cd); D_LEAVE; - return button; } @@ -178,6 +870,7 @@ Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Obje } Evas_Object *layout = NULL; + Evas_Object *add_button = NULL; Evas_Object *main_field = NULL; layout = __msg_ui_compsoer_body_layout_create(cd, parent); @@ -186,6 +879,12 @@ Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Obje return NULL; } + add_button = __msg_ui_composer_body_create_add_button(cd, parent); + if (!add_button) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] add_button_field create error !!"); + return NULL; + } + main_field = __msg_ui_composer_body_create_main_field(cd, parent); if (!main_field) { MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] main_field create error !!"); @@ -195,8 +894,9 @@ Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Obje if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) { elm_box_clear(cd->body_box); msg_ui_composer_body_add_page(cd); - } else { + } else if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) { + } else { MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] invalid message type"); return NULL; } @@ -208,13 +908,22 @@ Evas_Object *msg_ui_composer_body_create(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Obje } elm_object_disabled_set(cd->send_button, EINA_TRUE); + + elm_object_part_content_set(layout, "body.swl.add_button", add_button); elm_object_part_content_set(layout, "body.swl.main", main_field); elm_object_part_content_set(layout, "body.swl.send_button", cd->send_button); + evas_object_event_callback_add(layout, EVAS_CALLBACK_RESIZE, msg_ui_composer_body_body_layout_resize_cb, cd); + D_LEAVE; return layout; } +void msg_ui_composer_body_delete(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + +} + void msg_ui_composer_body_clear(MSG_COMPOSER_VIEW_DATA_S *cd) { D_ENTER; @@ -228,15 +937,65 @@ void msg_ui_composer_body_clear(MSG_COMPOSER_VIEW_DATA_S *cd) for (i = page_count - 1; i >= 0; i--) { page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, i); - msg_ui_composer_body_remove_page(cd, page_data->layout); + msg_ui_composer_mms_body_remove_page(cd, page_data->layout); } cd->current_edit_entry = 0; + cd->msg_type = COMPOSER_MSG_TYPE_SMS; D_LEAVE; } +COMPOSER_RETURN_TYPE_E msg_ui_composer_read_preview_message(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + if (!cd) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL"); + return COMPOSER_RETURN_NULL_POINTER; + } + + if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) { + __msg_ui_composer_body_read_mms_data(cd); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invlaid message type!!"); + return COMPOSER_RETURN_INVALID_MSG_TYPE; + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_body_set_loaded_media(MSG_COMPOSER_VIEW_DATA_S *pcomp_data, char *filepath, int filetype, int nPage) +{ + D_ENTER; + + if (!pcomp_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL"); + return COMPOSER_RETURN_NULL_POINTER; + } + + if (pcomp_data->body_data.page_count < nPage + 1) + msg_ui_composer_body_add_page(pcomp_data); + + pcomp_data->current_edit_entry = nPage; + + char local_item_path[COMPOSER_FILEPATH_LEN_MAX + 1] = {0, }; + /* copy temp file */ + if (msg_ui_composer_common_get_file(pcomp_data, filepath, local_item_path, COMPOSER_FILEPATH_LEN_MAX) != COMPOSER_RETURN_SUCCESS) { + D_EMSG("get file error"); + return COMPOSER_RETURN_FAIL; + } + + if (msg_ui_composer_body_insert_media(pcomp_data, local_item_path, filetype) != COMPOSER_RETURN_SUCCESS) { + D_EMSG("insert media error"); + return COMPOSER_RETURN_FAIL; + } + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + COMPOSER_RETURN_TYPE_E msg_ui_composer_body_set_loaded_text(MSG_COMPOSER_VIEW_DATA_S *pcomp_data, const char *body_text, int nPage) { D_ENTER; @@ -253,11 +1012,13 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_set_loaded_text(MSG_COMPOSER_VIEW_DA MSG_COMPOSER_BODY_PAGE_S *page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(pagelist, nPage); Evas_Object *entry = page_data->entry; - char * markup_text = elm_entry_utf8_to_markup(body_text); + char *markup_text = elm_entry_utf8_to_markup(body_text); elm_entry_entry_set(entry, markup_text); - g_free(markup_text); + if (markup_text) + g_free(markup_text); + D_LEAVE; return COMPOSER_RETURN_SUCCESS; } @@ -291,11 +1052,100 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_body_data_init(MSG_COMPOSER_VIEW_DATA_S * return COMPOSER_RETURN_SUCCESS; } +static bool __msg_ui_composer_is_mms_text(MSG_COMPOSER_VIEW_DATA_S *cd, Evas_Object* entry) +{ + D_ENTER; + + if (!cd || !entry) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] NULL parameter passed."); + return false; + } + + int ucs2_len = 0; + int char_count = 0; + int cms_page = 0; + int cms_max_count = 0; + int char_encode = COMPOSER_CHAR_ENCODE_MAX; + char* body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(entry)); + unsigned char ucs2_text[4000] = {0,}; + + if (body_text == NULL){ + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] no text on there") + return false; + } + + ucs2_len = msg_ui_composer_convert_UTF8ToUCS2(ucs2_text, 4000, body_text, strlen(body_text)); + free(body_text); + + char_encode = msg_ui_composer_body_entry_char_count(cd, ucs2_text, ucs2_len, &char_count); + + if (char_encode == COMPOSER_CHAR_ENCODE_UNICODE) { + cms_max_count = COMPOSER_CMS_UNICODE_MAX_LEN * COMPOSER_CMS_MAX_PAGE; + } else if (char_encode == COMPOSER_CHAR_ENCODE_GSM7) { + cms_max_count = COMPOSER_CMS_GSM7_MAX_LEN * COMPOSER_CMS_MAX_PAGE; + } else { + return false; + } + + D_LEAVE; + if (cms_page > COMPOSER_CMS_MAX_PAGE || cms_max_count < char_count) { + return true; + } else { + return false; + } +} + +Eina_Bool msg_ui_composer_body_is_mms(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + if (!cd) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL"); + return EINA_FALSE; + } + + MSG_COMPOSER_BODY_S *body_data = &cd->body_data; + Eina_List *page_list = body_data->page_list; + MSG_COMPOSER_BODY_PAGE_S *page_data = NULL; + + if (body_data->page_count > 1) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] composer message type MMS (multi-page)"); + return EINA_TRUE; + } else if (body_data->page_count == 1) { + page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(page_list, 0); + if (!page_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] page data is NULL"); + return EINA_FALSE; + } + + if (page_data->is_image_item && (strlen(page_data->image_file_path) > 0)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] composer message type MMS (image/video data exist)"); + return EINA_TRUE; + } + + if (page_data->is_sound_item && (strlen(page_data->sound_file_path) > 0)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] composer message type MMS (image/video data exist)"); + return EINA_TRUE; + } + + if (__msg_ui_composer_is_mms_text(cd, page_data->entry) == true) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] number of body character is over CMS max count)"); + return EINA_TRUE; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] page_count value is not valid"); + return EINA_FALSE; + } + + return EINA_FALSE; +} + void msg_ui_composer_body_focus_set(MSG_COMPOSER_VIEW_DATA_S *cd, int nPage) { D_ENTER; if (!cd) return; + if (nPage < 0) return; diff --git a/composer/src/ui-composer/msg-ui-composer-common.c b/composer/src/ui-composer/msg-ui-composer-common.c index 4603077..d0eb248 100755 --- a/composer/src/ui-composer/msg-ui-composer-common.c +++ b/composer/src/ui-composer/msg-ui-composer-common.c @@ -14,29 +14,169 @@ * limitations under the License. */ + #include <Elementary.h> #include <utilX.h> #include <Ecore_X.h> - +#include <aul.h> +#include <mmf/mm_error.h> +#include <mm_file.h> +#include <mm_util_jpeg.h> #include <devman_haptic.h> + #include "msg-ui-composer-common.h" +#include "msg-ui-composer-subject.h" #include "msg-ui-composer-body.h" +#include "msg-ui-composer-attachment.h" #include "msg-ui-composer-recipient.h" #include "msg-ui-composer-popup.h" #include "msg-ui-composer-data.h" #include "msg-ui-composer-bubble.h" #include "msg-ui-composer-main.h" +/* MIME type table*/ + +const composer_mime_type_t composer_mime_table[] = { +/*audio*/ + {"aac", "audio/aac", COMPOSER_MEDIA_TYPE_AUDIO}, + {"amr", "audio/amr", COMPOSER_MEDIA_TYPE_AUDIO}, + {"amr", "audio/x-amr", COMPOSER_MEDIA_TYPE_AUDIO}, + {"amr", "audio/amr-wb", COMPOSER_MEDIA_TYPE_AUDIO}, + {"imy", "audio/imelody", COMPOSER_MEDIA_TYPE_AUDIO}, + {"imy", "audio/imy", COMPOSER_MEDIA_TYPE_AUDIO}, + {"imy", "audio/iMelody", COMPOSER_MEDIA_TYPE_AUDIO}, + {"imy", "audio/melody", COMPOSER_MEDIA_TYPE_AUDIO}, + {"imy", "audio/x-iMelody", COMPOSER_MEDIA_TYPE_AUDIO}, + {"imy", "text/iMelody", COMPOSER_MEDIA_TYPE_AUDIO}, + {"imy", "text/x-iMelody", COMPOSER_MEDIA_TYPE_AUDIO}, + {"imy", "text/x-imelody", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mid", "audio/mid", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mid", "audio/midi", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mid", "audio/x-mid", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mid", "audio/x-midi", COMPOSER_MEDIA_TYPE_AUDIO}, + {"midi", "audio/mid", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mmf", "application/vnd.smaf", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mmf", "application/x-smaf", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mmf", "audio/mmf", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mmf", "audio/smaf", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mmf", "audio/x-mmf", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mmf", "audio/x-smaf", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mp3", "audio/mpeg", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mp3", "audio/mp3", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mp3", "audio/mpg3", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mp3", "audio/mpeg3", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mp3", "audio/mpg", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mp3", "audio/x-mp3", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mp3", "audio/x-mpeg", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mp3", "audio/x-mpeg3", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mp3", "audio/x-mpegaudio", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mp3", "audio/x-mpg", COMPOSER_MEDIA_TYPE_AUDIO}, + {"mpg", "audio/x-mpeg", COMPOSER_MEDIA_TYPE_AUDIO}, + {"m4a", "audio/m4a", COMPOSER_MEDIA_TYPE_AUDIO}, + {"ra", "audio/x-pn-realaudio", COMPOSER_MEDIA_TYPE_AUDIO}, + {"rm", "audio/vnd.rn-realaudio", COMPOSER_MEDIA_TYPE_AUDIO}, + {"rm", "audio/x-pn-multirate-realaudio", COMPOSER_MEDIA_TYPE_AUDIO}, + {"rm", "audio/x-pn-multirate-realaudio-live", COMPOSER_MEDIA_TYPE_AUDIO}, + {"spm", "audio/sp-midi", COMPOSER_MEDIA_TYPE_AUDIO}, + {"wav", "audio/wav", COMPOSER_MEDIA_TYPE_AUDIO}, + {"wav", "audio/wave", COMPOSER_MEDIA_TYPE_AUDIO}, + {"wav", "audio/x-wav", COMPOSER_MEDIA_TYPE_AUDIO}, + {"wav", "audio/x-wave", COMPOSER_MEDIA_TYPE_AUDIO}, + {"wma", "audio/wma", COMPOSER_MEDIA_TYPE_AUDIO}, + {"wma", "audio/x-ms-wma", COMPOSER_MEDIA_TYPE_AUDIO}, + {"xmf", "audio/mobile-xmf", COMPOSER_MEDIA_TYPE_AUDIO}, + {"xmf", "audio/xmf", COMPOSER_MEDIA_TYPE_AUDIO}, + {"xmf", "audio/x-xmf", COMPOSER_MEDIA_TYPE_AUDIO}, +/*image*/ + {"bmp", "image/bmp", COMPOSER_MEDIA_TYPE_IMAGE}, + {"bmp", "image/x-bmp", COMPOSER_MEDIA_TYPE_IMAGE}, + {"gif", "image/gif", COMPOSER_MEDIA_TYPE_IMAGE}, + {"GIF", "image/gif", COMPOSER_MEDIA_TYPE_IMAGE}, + {"gif", "image/vnd.tmo.my5-gif", COMPOSER_MEDIA_TYPE_IMAGE}, + {"jpg", "image/jpg", COMPOSER_MEDIA_TYPE_IMAGE}, + {"jpg", "image/jpeg", COMPOSER_MEDIA_TYPE_IMAGE}, + {"jpg", "image/vnd.tmo.my5-jpg", COMPOSER_MEDIA_TYPE_IMAGE}, + {"jpeg", "image/jpeg", COMPOSER_MEDIA_TYPE_IMAGE}, + {"JPG", "image/jpeg", COMPOSER_MEDIA_TYPE_IMAGE}, + {"jpg", "image/pjpeg", COMPOSER_MEDIA_TYPE_IMAGE}, + {"jpe", "image/jpeg", COMPOSER_MEDIA_TYPE_IMAGE}, + {"png", "image/png", COMPOSER_MEDIA_TYPE_IMAGE}, + {"wbmp", "image/vnd.wap.wbmp", COMPOSER_MEDIA_TYPE_IMAGE}, + {"wbmp", "image/wbmp", COMPOSER_MEDIA_TYPE_IMAGE}, + {"swf", "application/x-shockwave-flash", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"tif", "image/tiff", COMPOSER_MEDIA_TYPE_IMAGE}, + {"tif", "image/tif", COMPOSER_MEDIA_TYPE_IMAGE}, + {"pmd", "audio/pmd", COMPOSER_MEDIA_TYPE_IMAGE}, +/*video*/ + {"3gp", "audio/3gpp", COMPOSER_MEDIA_TYPE_VIDEO}, + {"3gp", "video/3gpp", COMPOSER_MEDIA_TYPE_VIDEO}, + {"3gp", "video/3gp", COMPOSER_MEDIA_TYPE_VIDEO}, + {"3gp", "video/h263", COMPOSER_MEDIA_TYPE_VIDEO}, + {"3gp", "video/mp4v-es", COMPOSER_MEDIA_TYPE_VIDEO}, + {"asf", "audio/x-ms-asf", COMPOSER_MEDIA_TYPE_VIDEO}, + {"asf", "video/x-ms-asf", COMPOSER_MEDIA_TYPE_VIDEO}, + {"asx", "video/x-ms-asf", COMPOSER_MEDIA_TYPE_VIDEO}, + {"avi", "video/avi", COMPOSER_MEDIA_TYPE_VIDEO}, + {"mp2", "video/mpeg", COMPOSER_MEDIA_TYPE_VIDEO}, + {"mp4", "audio/mp4", COMPOSER_MEDIA_TYPE_VIDEO}, + {"mp4", "audio/MP4A-LATM", COMPOSER_MEDIA_TYPE_VIDEO}, + {"mp4", "audio/mpeg4", COMPOSER_MEDIA_TYPE_VIDEO}, + {"mp4", "video/mp4", COMPOSER_MEDIA_TYPE_VIDEO}, + {"mp4", "video/mpeg4", COMPOSER_MEDIA_TYPE_VIDEO}, + {"mp4", "video/x-mp4", COMPOSER_MEDIA_TYPE_VIDEO}, + {"mp4", "video/x-pv-mp4", COMPOSER_MEDIA_TYPE_VIDEO}, + {"mpg", "video/mpeg", COMPOSER_MEDIA_TYPE_VIDEO}, + {"mpeg", "video/mpeg", COMPOSER_MEDIA_TYPE_VIDEO}, + {"rm", "video/x-pn-multirate-realvideo", COMPOSER_MEDIA_TYPE_VIDEO}, + {"rm", "video/vnd.rn-realmedia", COMPOSER_MEDIA_TYPE_VIDEO}, + {"rm", "video/vnd.rn-realvideo", COMPOSER_MEDIA_TYPE_VIDEO}, + {"rv", "video/x-pn-realvideo", COMPOSER_MEDIA_TYPE_VIDEO}, + {"sdp", "application/sdp", COMPOSER_MEDIA_TYPE_VIDEO}, + {"sdp", "video/sdp", COMPOSER_MEDIA_TYPE_VIDEO}, + {"wmv", "video/x-ms-wmv", COMPOSER_MEDIA_TYPE_VIDEO}, +/*text*/ + {"txt", "text/plain", COMPOSER_MEDIA_TYPE_TEXT}, + {"text", "text/plain", COMPOSER_MEDIA_TYPE_TEXT}, + {"html", "text/html", COMPOSER_MEDIA_TYPE_TEXT}, + {"htm", "text/html", COMPOSER_MEDIA_TYPE_TEXT}, + {"wml", "text/vnd.wap.wml", COMPOSER_MEDIA_TYPE_TEXT}, + {"xml", "text/xml", COMPOSER_MEDIA_TYPE_TEXT}, +/*vObject*/ + {"vbm", "text/x-vbookmark", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"vcf", "text/x-vcard", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"vcs", "text/x-vCalendar", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"vnt", "text/x-vnote", COMPOSER_MEDIA_TYPE_UNKNOWN}, +/*drm*/ + {"dcf", "application/vnd.oma.drm.content", COMPOSER_MEDIA_TYPE_DRM}, + {"dm", "application/vnd.oma.drm.message", COMPOSER_MEDIA_TYPE_DRM}, + {"odf", "application/vnd.oma.drm.dcf", COMPOSER_MEDIA_TYPE_DRM}, + {"oro", "application/vnd.oma.drm.ro+xml", COMPOSER_MEDIA_TYPE_DRM}, + {"ro", "application/vnd.oma.drm.rights+xml", COMPOSER_MEDIA_TYPE_DRM}, + {"ro", "application/vnd.oma.drm.rights+wbxml", COMPOSER_MEDIA_TYPE_DRM}, +/*doc*/ + {"doc", "application/msword", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"doc", "applcation/vnd.ms-word", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"xls", "application/vnd.ms-excel", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"xls", "application/x-msexcel", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"ppt", "application/vnd.ms-powerpoint", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"ppt", "application/x-mspowerpoint", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"pdf", "application/pdf", COMPOSER_MEDIA_TYPE_UNKNOWN}, +/*etc*/ + {"rm ", "application/vnd.rn-realmedia", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"smi", "application/smil", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"smil", "application/smil", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"xml", "application/vnd.oma.drm.roap-pdu+xml", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"xml", "application/vnd.oma.drm.roap-trigger+xml", COMPOSER_MEDIA_TYPE_UNKNOWN}, + {"xxx", "application/octet-stream", COMPOSER_MEDIA_TYPE_UNKNOWN}, +}; + /* vib feedback apply when message type change*/ static bool bVibrating; static int dev_handle; char *msg_ui_composer_edj_get(MSG_COMPOSER_VIEW_DATA_S *cd) { - if (cd->current_theme == MSG_UI_THEME_WHITE) - return MSGC_UI_WHITE_EDJ; - - return MSGC_UI_DEFAULT_EDJ; /*black*/ + return MSGC_UI_DEFAULT_EDJ; } Evas_Object *msg_ui_composer_load_edj(Evas_Object *parent, const char *edj_file, const char *group) @@ -103,6 +243,18 @@ Evas_Object *msg_ui_composer_bg_create(Evas_Object *parent) return bg; } +Evas_Object *msg_ui_composer_toolbar_create(Evas_Object *parent) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *toolbar = NULL; + + toolbar = elm_toolbar_add(parent); + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + + return toolbar; +} + int64 msg_composer_get_file_size(const char *path) { return ecore_file_size(path); @@ -127,6 +279,123 @@ char *msg_common_get_file_ext(const char *a_pszfile_name) return NULL; } +COMPOSER_MEDIA_TYPE_E msg_composer_get_media_type(const char *a_pszfile_path) +{ + char *pext = NULL; + unsigned int nmimeidx = 0; + unsigned int nmime_max = 0; + + if (a_pszfile_path == NULL) + return COMPOSER_MEDIA_TYPE_UNKNOWN; + + pext = msg_common_get_file_ext(a_pszfile_path); + nmime_max = (sizeof(composer_mime_table) / sizeof(composer_mime_type_t)); + + for (; nmimeidx < nmime_max; nmimeidx++) { + int nlen = strlen(composer_mime_table[nmimeidx].m_szextend); + + if (strncasecmp(composer_mime_table[nmimeidx].m_szextend, pext, nlen) == 0) { + return composer_mime_table[nmimeidx].m_ncontent_type; + } + } + + return COMPOSER_MEDIA_TYPE_UNKNOWN; +} + +COMPOSER_RETURN_TYPE_E msg_composer_common_get_media_duration(const char *file_path, int *duration) +{ + MMHandleType content_attrs = 0; + int ret = 0; + + if (!file_path || !duration) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] file_path or duration is not exist"); + return COMPOSER_RETURN_FAIL; + } + + ret = mm_file_create_content_attrs(&content_attrs, file_path); + if (ret == MM_ERROR_NONE) { + char *error = NULL; + + ret = mm_file_get_attrs(content_attrs, &error, MM_FILE_CONTENT_DURATION, duration, NULL); + + if (ret != MM_ERROR_NONE) { + if (error) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG]fail to mm_file_get_attrs() - ret(%x), error(%s)", ret, error); + free(error); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG]fail to mm_file_get_attrs() - ret(%x)", ret); + } + + if (content_attrs) + mm_file_destroy_content_attrs(content_attrs); + + return COMPOSER_RETURN_FAIL; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG]file : %s, duration : %d", file_path, *duration); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG]fail to mm_file_create_content_attrs() - ret(%x)", ret); + + if (content_attrs) + mm_file_destroy_content_attrs(content_attrs); + + return COMPOSER_RETURN_FAIL; + } + + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_composer_common_get_thumbnail(MSG_COMPOSER_VIEW_DATA_S *cd, const char *src_file_path, char *thumb_file_path, int size_thumb_file_path) +{ + D_ENTER; + COMPOSER_MEDIA_TYPE_E media_type; + int ret; + char temp_img_file[COMPOSER_FILEPATH_LEN_MAX] = {0,}; + char *filename_without_ext = NULL; + const char *filename = NULL; + + if (!src_file_path || !thumb_file_path) { + D_EMSG("file path or thumbnail path is NULL"); + return COMPOSER_RETURN_NULL_POINTER; + } + + if (!ecore_file_exists(src_file_path)) { + D_EMSG("file path is not exist"); + return COMPOSER_RETURN_NULL_POINTER; + } + + media_type = msg_composer_get_media_type(src_file_path); + if (media_type == COMPOSER_MEDIA_TYPE_VIDEO) { + + filename = ecore_file_file_get(src_file_path); + if (filename) { + filename_without_ext = ecore_file_strip_ext(filename); + + if (filename_without_ext) { + snprintf(temp_img_file, sizeof(temp_img_file)-1, "%s/temp_image_%s.jpg", cd->working_path, filename_without_ext); + g_free(filename_without_ext); + } else { + return COMPOSER_RETURN_FAIL; + } + + } else { + return COMPOSER_RETURN_FAIL; + } + + /* get image of video*/ + ret = msg_composer_common_get_image_in_video(src_file_path, temp_img_file); + if (ret == COMPOSER_RETURN_SUCCESS) { + strncpy(thumb_file_path, temp_img_file, size_thumb_file_path); + } + } else { + D_EMSG("media type is not video type media_type = %d !!", media_type); + return COMPOSER_RETURN_FAIL; + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + void msg_ui_composer_clear(MSG_COMPOSER_VIEW_DATA_S *cd) { D_ENTER; @@ -136,11 +405,145 @@ void msg_ui_composer_clear(MSG_COMPOSER_VIEW_DATA_S *cd) if (cd->recipient) msg_ui_composer_recipient_clear(cd->recipient); + /*Clear Body*/ + if (cd->isSubject) { + msg_ui_composer_subject_clear(cd); + cd->isSubject = false; + } + + if (cd->attach_data.attachment_Cnt > 0) { + msg_ui_composer_attachment_clear(cd); + } + msg_ui_composer_body_clear(cd); D_LEAVE; } +static void __msg_ui_composer_change_to_sms(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + if (!cd) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL"); + return; + } + + MSG_COMPOSER_BODY_PAGE_S *page_data = NULL; + MSG_COMPOSER_BODY_S *body_data = &cd->body_data; + + /* reset region info */ + body_data->region_order = COMPOSER_REGION_ORDER_UNDETERMINDED; + + page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(cd->body_data.page_list, 0); + + char *body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(page_data->entry)); + if (body_text) { + msg_ui_composer_body_info_area_update(cd); + free(body_text); + } + + D_LEAVE; +} + +static void __msg_ui_composer_change_to_mms(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + if (!cd) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL"); + return; + } + + msg_ui_composer_body_info_area_update(cd); + D_LEAVE; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_change_message_type(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_MSG_TYPE_E msg_type) +{ + D_ENTER; + if (!cd) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] composer data is NULL"); + return COMPOSER_RETURN_FAIL; + } + + if (cd->msg_type == msg_type) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] it doesn't need to change message type"); + return COMPOSER_RETURN_SUCCESS; + } + + switch (msg_type) { + case COMPOSER_MSG_TYPE_SMS: + msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_CHANGED_SMS); + + cd->msg_type = COMPOSER_MSG_TYPE_SMS; + __msg_ui_composer_change_to_sms(cd); + msg_ui_composer_toolbar_top_item_change(cd, true); + break; + case COMPOSER_MSG_TYPE_MMS: + if (cd->loading_draft == false) + msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_CHANGED_MMS); + else + cd->loading_draft = false; + + cd->msg_type = COMPOSER_MSG_TYPE_MMS; + __msg_ui_composer_change_to_mms(cd); + msg_ui_composer_toolbar_top_item_change(cd, false); + break; + default: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[DEBUG] invalid message type"); + return COMPOSER_RETURN_FAIL; + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_MSG_TYPE_E msg_ui_composer_check_message_type(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + if (!cd) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSSERT] composer data in NULL"); + return COMPOSER_MSG_TYPE_INVALID; + } + + if (cd->isSubject) + return COMPOSER_MSG_TYPE_MMS; + + if (cd->attach_data.attachment_Cnt > 0) + return COMPOSER_MSG_TYPE_MMS; + + if (msg_ui_composer_body_is_mms(cd) == EINA_TRUE) + return COMPOSER_MSG_TYPE_MMS; + + if (msg_ui_composer_recipient_is_mms(cd) == EINA_TRUE) + return COMPOSER_MSG_TYPE_MMS; + + return COMPOSER_MSG_TYPE_SMS; +} + +void msg_ui_composer_message_type_check_and_change(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + COMPOSER_MSG_TYPE_E checked_type; + + checked_type = msg_ui_composer_check_message_type(cd); + + if (cd->msg_type == COMPOSER_MSG_TYPE_SMS && checked_type == COMPOSER_MSG_TYPE_MMS) { + D_MSG("### Message Type Change from [SMS] to [MMS] ###"); + msg_ui_composer_change_message_type(cd, COMPOSER_MSG_TYPE_MMS); + } else if (cd->msg_type == COMPOSER_MSG_TYPE_MMS && checked_type == COMPOSER_MSG_TYPE_SMS) { + D_MSG("### Message Type Change from [MMS] to [SMS] ###"); + msg_ui_composer_change_message_type(cd, COMPOSER_MSG_TYPE_SMS); + } else { + D_MSG("Now msg type is [%d] & checked msg type is [%d](0: INVAILD, 1: SMS, 2: MMS)", cd->msg_type, checked_type); + } + + D_LEAVE; +} + Eina_Bool msg_ui_composer_last_focus_load(void *data) { D_ENTER; @@ -200,77 +603,15 @@ void bundle_send_to_result(void *data, char *key, char *val) D_MSG("key = %s, val = %s", key, val); MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; - - bundle *b; - b = bundle_create(); - bundle_add(b, key, val); - - ug_send_result(cd->ug, b); - - bundle_free(b); - - D_LEAVE; -} - -int msg_ui_composer_thread_id_get(MSG_HANDLE_T msg_handle, const char *recipient) -{ - char tmp_recipient[DEF_BUF_LEN] = {0,}; - MSG_ERROR_T err = MSG_SUCCESS; - MSG_SORT_RULE_S sortRule = {0, }; - MSG_THREAD_VIEW_LIST_S peerList = {0,}; - int row; - char thread_addr_r[DEF_THREAD_ADDR_LEN] = {0}; - - sortRule.sortType = MSG_SORT_BY_THREAD_DATE; - sortRule.bAscending = false; - - strncpy(tmp_recipient, recipient, sizeof(tmp_recipient)-1); - D_MSG("recipient = %s:%s, tmp recipient = %s", recipient, strdup(recipient), tmp_recipient); - g_strreverse(tmp_recipient); - D_MSG("tmp_recipient = %s", tmp_recipient); - err = msg_get_thread_view_list(msg_handle, &sortRule, &peerList); - for (row = 0; row < peerList.nCount; row++) { - if (strlen(msg_thread_view_get_address(peerList.msgThreadInfo[row]))) { - strncpy(thread_addr_r, msg_thread_view_get_address(peerList.msgThreadInfo[row]), strlen(msg_thread_view_get_address(peerList.msgThreadInfo[row]))); - g_strreverse(thread_addr_r); - if (g_ascii_strncasecmp(thread_addr_r, tmp_recipient, COMPARE_STRING_NUM) == 0) { - D_MSG("FIND THREAD ADDRESS = %s", msg_thread_view_get_address(peerList.msgThreadInfo[row])); - break; - } - } - } - - if (row >= peerList.nCount) { - msg_release_thread_view_list(&peerList); - D_MSG("CANNOT FIND THREAD"); - return 0; - } - - int retid = msg_thread_view_get_thread_id(peerList.msgThreadInfo[row]); - msg_release_thread_view_list(&peerList); - return retid; -} - -char *msg_ui_composer_thread_recipient_get(MSG_HANDLE_T msg_handle, int inp_tid) -{ - MSG_ERROR_T err = MSG_SUCCESS; - MSG_SORT_RULE_S sortRule = {0, }; - MSG_THREAD_VIEW_LIST_S peerList = {0,}; - int row; - char *ret_recipient = NULL; - sortRule.sortType = MSG_SORT_BY_THREAD_DATE; - sortRule.bAscending = false; - - err = msg_get_thread_view_list(msg_handle, &sortRule, &peerList); - for (row = 0; row < peerList.nCount; row++) { - if (inp_tid == msg_thread_view_get_thread_id(peerList.msgThreadInfo[row])) { - ret_recipient = strdup(msg_thread_view_get_address(peerList.msgThreadInfo[row])); - break; - } + service_h svc_handle; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + service_add_extra_data(svc_handle, key, val); + ug_send_result(cd->ug, svc_handle); + service_destroy(svc_handle); } - - msg_release_thread_view_list(&peerList); - return ret_recipient; + D_LEAVE; } bool msg_ui_composer_common_is_send_possible(MSG_COMPOSER_VIEW_DATA_S *cd) @@ -285,7 +626,41 @@ bool msg_ui_composer_common_is_send_possible(MSG_COMPOSER_VIEW_DATA_S *cd) MSG_COMPOSER_BODY_S *body_data = &cd->body_data; MSG_COMPOSER_BODY_PAGE_S *page_data = NULL; - if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) { + if (cd->msg_type == COMPOSER_MSG_TYPE_MMS) { + if (cd->isSubject) { + char *subject = elm_entry_markup_to_utf8(elm_entry_entry_get(cd->sub_data.entry)); + if (subject && strlen(subject) > 0) { + g_free(subject); + return true; + } else { + g_free(subject); + } + } + + if (cd->attach_data.attachment_Cnt > 0) { + return true; + } + + int i = 0; + for (i = 0; i < cd->body_data.page_count; i++) { + page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, i); + + if (page_data->is_image_item) + return true; + + if (page_data->is_sound_item) + return true; + + char *body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(page_data->entry)); + if (body_text) { + if (strlen(body_text) > 0) { + g_free(body_text); + return true; + } + g_free(body_text); + } + } + } else if (cd->msg_type == COMPOSER_MSG_TYPE_SMS) { page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(body_data->page_list, 0); if(page_data) { char *body_text = elm_entry_markup_to_utf8(elm_entry_entry_get(page_data->entry)); @@ -354,7 +729,297 @@ void msg_ui_composer_common_play_vibration() D_LEAVE; } -void msg_composer_entry_filter_remove_markup(void *data, Evas_Object *entry, char **text) +COMPOSER_RETURN_TYPE_E msg_composer_common_get_image_in_video(const char *video_file_path, char *image_file_path) +{ + COMPOSER_MEDIA_TYPE_E media_type; + MMHandleType content_attrs = 0; + int ret; + int video_track_num = 0; + int video_w = 0, video_h = 0, thumbsize = 0; + void *thumbnail = NULL; + + media_type = msg_composer_get_media_type(video_file_path); + if (media_type != COMPOSER_MEDIA_TYPE_VIDEO) { + D_EMSG("It is not video file %s", video_file_path); + return COMPOSER_RETURN_FAIL; + } + + ret = mm_file_create_content_attrs(&content_attrs, video_file_path); + if (ret != MM_ERROR_NONE){ + D_EMSG("Fail to get content of %s", video_file_path); + return COMPOSER_RETURN_FAIL; + } + + + mm_file_get_attrs(content_attrs, NULL, MM_FILE_CONTENT_VIDEO_TRACK_COUNT, &video_track_num, NULL); + if (video_track_num) { + mm_file_get_attrs(content_attrs, NULL, MM_FILE_CONTENT_VIDEO_WIDTH, &video_w, + MM_FILE_CONTENT_VIDEO_HEIGHT, &video_h, + MM_FILE_CONTENT_VIDEO_THUMBNAIL, &thumbnail, &thumbsize, NULL); + + if (thumbnail) { + ret = mm_util_jpeg_encode_to_file(image_file_path, thumbnail, video_w, video_h, MM_UTIL_JPEG_FMT_RGB888, 100); + if (ret) { + D_EMSG("Fail of save image file %s", image_file_path); + mm_file_destroy_content_attrs(content_attrs); + return COMPOSER_RETURN_FAIL; + } + } + } + + mm_file_destroy_content_attrs(content_attrs); + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_common_get_file(MSG_COMPOSER_VIEW_DATA_S *cd, const char * src_file_path, char *dst_file_path, int size_dst_file_path) +{ + D_ENTER; + const char *filename = NULL; + int i = 0; + char temp_file_path[COMPOSER_FILEPATH_LEN_MAX] = {0,}; + + if (ecore_file_exists(src_file_path) == EINA_FALSE) { + return COMPOSER_RETURN_FAIL; + } + + filename = ecore_file_file_get(src_file_path); + if (filename) { + snprintf(temp_file_path, sizeof(temp_file_path)-1, "%s%s", cd->working_path, filename); + + while(ecore_file_exists(temp_file_path)){ + bzero(temp_file_path, sizeof(temp_file_path)); + snprintf(temp_file_path, sizeof(temp_file_path)-1, "%s%d_%s", cd->working_path, i, filename); + i++; + + if (i < 0) return COMPOSER_RETURN_FAIL; + } + + + if (ecore_file_cp(src_file_path, temp_file_path) == EINA_FALSE) { + D_MSG("temp_file_path = %s", temp_file_path); + return COMPOSER_RETURN_FAIL; + } + + strncpy(dst_file_path, temp_file_path, size_dst_file_path); + D_MSG("copy file from %s to %s", src_file_path, dst_file_path); + + } else { + return COMPOSER_RETURN_FAIL; + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +static char *__get_item_tag(char *text) +{ + char *fulltext; + char *tagStart; + char *tagEnd; + int tagStrLength = 0; + + if (text == NULL) + return NULL; + + fulltext = text; + D_MSG("text(%p)[%d] = %s", text, strlen(text),text); + + tagStart = strstr(fulltext, "<item"); + if (tagStart) { + tagEnd = strchr(tagStart, '>'); + if (tagEnd) { + tagStrLength = tagEnd - tagStart + 1; + return strndup(tagStart, tagStrLength); + } + } + + return NULL; +} + +static char *__remove_item_tag(char *text) +{ + char *fulltext = NULL; + char *tagStart = NULL; + char *tagEnd = NULL; + char *braceStart = NULL; + char *braceEnd = NULL; + char *postStr = NULL; + + int strLength = 0; + int postStrLength = 0; + bool isitemTag = false; + + if (text == NULL) + return NULL; + + char *textBuf = strdup(text); + + if (!textBuf) { + D_EMSG("strdup is failed"); + return NULL; + } + + fulltext = textBuf; + strLength = strlen(textBuf); + D_MSG("text length = %d, text = [%s]", strLength, textBuf); + + while ((tagStart = strstr(fulltext, "<item"))) { + braceEnd = strchr(tagStart, '>'); + if (braceEnd) { + braceStart = strstr(braceEnd, "</item>"); + if (braceStart) { + tagEnd = (braceStart + strlen("</item>") - 1); + } else { + D_EMSG("There is no close item tag"); + tagEnd = braceEnd; + } + } else { + D_EMSG("There is no close tag"); + g_free(textBuf); + return NULL; + } + + postStrLength = strLength - (tagEnd - fulltext + 1); + postStr = strndup(tagEnd + 1, postStrLength); + if (!postStr) { + D_EMSG("strndup is failed"); + g_free(textBuf); + return NULL; + } + + strncpy(tagStart, postStr, postStrLength); + *(tagStart + postStrLength) = '\0'; + D_MSG("after textBuf = [%s]", textBuf); + + g_free(postStr); + postStr = NULL; + + isitemTag = true; + } + + if (isitemTag) + return textBuf; + + g_free(textBuf); + + return NULL; +} + +static char *__get_tag_value(const char *tag_str, const char *tag_name) +{ + char *tag; + + if (!tag_name || !tag_str) + return NULL; + + if ((tag = strstr(tag_str, tag_name))) { + if (tag[strlen(tag_name)] == '_') + return NULL; + char *value = strchr(tag, '='); + if (value) { + + do { + value++; + } while (!isalnum(*value) && *value != '#'); + + int spCnt = 5; + char *spArray[spCnt]; + spArray[0] = strchr(value, '>'); + spArray[1] = strchr(value, '\"'); + spArray[2] = strchr(value, '\''); + spArray[3] = strchr(value, '\t'); + spArray[4] = strchr(value, '\n'); + char *valueEnd = strchr(value, '\0'); + + int i; + int start = 0; + if (!strcmp(tag_str, "item") && !strcmp(tag_name, "href")) + start = 1; + + for (i = start; i < spCnt; i++) { + if (spArray[i] && spArray[i] < valueEnd) { + valueEnd = spArray[i]; + } + } + + int valueLength = valueEnd - value; + return strndup(value, valueLength); + } + } + + return NULL; +} + +void msg_composer_entry_filter_addimage(void *data, Evas_Object *entry, char **text) +{ + D_ENTER; + + char *item_val = NULL; + char *item_tag = NULL; + char *filepath = NULL; + char *realpath = NULL; + + MSG_COMPOSER_VIEW_DATA_S *cd = data; + + D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); + D_MSG_RETM_IF(entry == NULL,"Parameter Entry is Invalid"); + D_MSG_RETM_IF((!text || !(*text)),"Parameter Text is Invalid"); + + /*get <item xxx> tag at insert text*/ + item_tag = __get_item_tag(*text); + + if (item_tag) { + + D_MSG("item_tag = %s", item_tag); + + /*get value of href in the item tag*/ + item_val = __get_tag_value(item_tag, "href"); + if (item_val) { + D_MSG("item_href_val = %s", item_val); + filepath = strstr(item_val, "file:"); + if (filepath) { + realpath = filepath + 5; + } else { + realpath = filepath; + } + + if (realpath) { + if (ecore_file_exists(realpath) == EINA_TRUE) { + char * list_item_data = g_strdup(realpath); + if (list_item_data) { + cd->attachlist= eina_list_append(cd->attachlist, list_item_data); + msg_ui_composer_body_items_add(data); + } else { + D_EMSG("Fail to g_strdup"); + } + } else { + D_EMSG("File is NOT exist %s", realpath); + } + } else { + D_EMSG("File Path is NULL"); + } + + g_free(item_val); + } + + g_free(item_tag); + + /* remove item tag */ + char *removed_text = __remove_item_tag(*text); + g_free(*text); + + if (removed_text) + *text = removed_text; + else + *text = NULL; + + } + D_LEAVE; +} + + +void +msg_composer_entry_filter_remove_markup(void *data, Evas_Object *entry, char **text) { D_ENTER; D_MSG_RETM_IF(text == NULL || *text == NULL, "New Text is NULL"); @@ -362,7 +1027,7 @@ void msg_composer_entry_filter_remove_markup(void *data, Evas_Object *entry, cha char *preedit_str = NULL; char *utf8_text = NULL; char *convert_text = NULL; - D_MSG("text %s", *text); + D_MSG("text [%s]", *text); /* Check preeditting text and return if it exist*/ preedit_str = strstr(*text, "<preedit_sel>"); if (preedit_str) return; @@ -370,7 +1035,6 @@ void msg_composer_entry_filter_remove_markup(void *data, Evas_Object *entry, cha /* convert from markup text to utf8 text from entry */ utf8_text = elm_entry_markup_to_utf8(*text); if (utf8_text) { - /* If the string contains "Carrage return ('\n'), it should be changed "<br>" to show properly*/ convert_text = elm_entry_utf8_to_markup(utf8_text); if(convert_text) { @@ -428,70 +1092,237 @@ int msg_ui_composer_convert_UTF8ToUCS2(unsigned char *pDestText, int maxLength, void msg_ui_composer_common_tickernoti(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_TICKERNOTI_TYPE_E tickertype) { char popup_msg[DEF_BUF_LEN_L] = {0,}; - MSGC_NOTIFY_ORIENT orient; - Evas_Object *parent_notify; D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); if (tickertype == COMPOSER_TICKERNOTI_COUNT_MAX) { snprintf(popup_msg, sizeof(popup_msg)-1, MSGC_STR_NOTI_RECIPIENT_MAX, COMPOSER_RECIPIENT_COUNT_MAX); - parent_notify = cd->recipient->bx_main; - orient = MSGC_NOTIFY_ORIENT_BOTTOM; } else if (tickertype == COMPOSER_TICKERNOTI_DUP_RECP) { snprintf(popup_msg, sizeof(popup_msg)-1, MSGC_STR_NOTI_RECIPIENT_DUP); - parent_notify = cd->recipient->bx_main; - orient = MSGC_NOTIFY_ORIENT_BOTTOM; } else if (tickertype == COMPOSER_TICKERNOTI_INVALID_RECP) { snprintf(popup_msg, sizeof(popup_msg)-1, MSGC_STR_NOTI_RECIPIENT_INVALID); - parent_notify = cd->recipient->bx_main; - orient = MSGC_NOTIFY_ORIENT_BOTTOM; } else if (tickertype == COMPOSER_TICKERNOTI_CHANGED_SMS) { snprintf(popup_msg, sizeof(popup_msg)-1, MSGC_STR_NOTI_CHANGE_SMS); - parent_notify = cd->ly_body; - orient = MSGC_NOTIFY_ORIENT_BOTTOM; + } else if (tickertype == COMPOSER_TICKERNOTI_CHANGED_MMS) { + snprintf(popup_msg, sizeof(popup_msg)-1, MSGC_STR_NOTI_CHANGE_MMS); + } else if (tickertype == COMPOSER_TICKERNOTI_AUTO_SAVED) { + snprintf(popup_msg, sizeof(popup_msg)-1, _MSGSTR("IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT")); + } else if (tickertype == COMPOSER_TICKERNOTI_NO_RECIPIENT) { + snprintf(popup_msg, sizeof(popup_msg)-1, _MSGSTR("IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS")); + } else if (tickertype == COMPOSER_TICKERNOTI_MAXLENGHT_CHAR) { + snprintf(popup_msg, sizeof(popup_msg)-1, _MSGSTR("Maximum number of characters reached")); } else { return; } - if (cd->noti) { - evas_object_del(cd->noti); + msg_ui_composer_status_noti_show(popup_msg); +} + +int msg_ui_composer_get_keypad_height(Evas_Object *entry) +{ + D_MSG_RETVM_IF(entry == NULL, 0, "param is NULL"); + int keypad_x = 0; + int keypad_y = 0; + int keypad_w = 0; + int keypad_h = 0; + + Ecore_IMF_Context *entry_ctx = elm_entry_imf_context_get(entry); + ecore_imf_context_input_panel_geometry_get(entry_ctx, &keypad_x, &keypad_y, &keypad_w, &keypad_h); + + return keypad_h; +} + +void msg_ui_composer_change_body_scroll_size(MSG_COMPOSER_VIEW_DATA_S *cd, int keypad_height) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); + + int total_height = 0; + int scroll_height = 0; + int scroll_x = 0; + int scroll_y = 0; + int scroll_w = 0; + int scroll_h = 0; + + elm_scroller_region_get(cd->body_scroll, &scroll_x, &scroll_y, &scroll_w, &scroll_h); + D_MSG("scroll region x=%d, y=%d, w=%d, h=%d", scroll_x, scroll_y, scroll_w, scroll_h); + + if (cd->rotate == COMPOSER_ROTATE_PORTRAIT || cd->rotate == COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN) + total_height = (cd->window_h > cd->window_w) ? cd->window_h : cd->window_w; + else + total_height = (cd->window_h > cd->window_w) ? cd->window_w : cd->window_h; + + if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { + RECIPIENT_S *rd = cd->recipient; + int recipient_h = rd->recipient_h; + + D_MSG("recipient_h = %d", recipient_h); + if (cd->rotate == COMPOSER_ROTATE_PORTRAIT || cd->rotate == COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN) + scroll_height = (total_height - keypad_height - recipient_h - MSGC_NAVIBAR_TITLE_H - MSGC_BODY_PADDING - MSGC_INDICATOR_H); + else + scroll_height = (total_height - keypad_height - recipient_h - MSGC_NAVIBAR_TITLE_H - MSGC_BODY_PADDING); + + D_MSG("scroll_height = %d", scroll_height); + + if (scroll_height <= COMPOSER_FRAME_BODY_LANDSCAPE_HEIGHT_MIN) + scroll_height = COMPOSER_FRAME_BODY_LANDSCAPE_HEIGHT_MIN; + + if (scroll_h != scroll_height) { + evas_object_size_hint_max_set(cd->body_scroll, 9999, scroll_height); + elm_scroller_content_min_limit(cd->body_scroll, EINA_FALSE, EINA_TRUE); + D_MSG("scroll size updated w = %d, h = %d", scroll_w, scroll_height); + } + } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + scroll_height = (total_height - keypad_height - MSGC_NAVIBAR_TITLE_H - MSGC_INDICATOR_H - MSGC_BODY_PADDING); + D_MSG("scroll_height = %d", scroll_height); + + if (scroll_height <= COMPOSER_FRAME_BODY_LANDSCAPE_HEIGHT_MIN) + scroll_height = COMPOSER_FRAME_BODY_LANDSCAPE_HEIGHT_MIN; + + if (scroll_h != scroll_height) { + evas_object_size_hint_max_set(cd->body_scroll, 9999, scroll_height); + elm_scroller_content_min_limit(cd->body_scroll, EINA_FALSE, EINA_TRUE); + D_MSG("scroll size updated w = %d, h = %d", scroll_w, scroll_height); + } + } else { + D_EMSG("Unknown Composer Mode"); } - cd->noti = msg_ui_composer_notify_show(parent_notify, popup_msg, COMPOSER_STATUS_POPUP_DEFAULT_TIME, orient, false); + D_LEAVE; } -void msg_ui_composer_entry_imf_state_cb(void * data, Ecore_IMF_Context *ctx, int value) +void msg_ui_composer_entry_imf_resize_cb(void * data, Ecore_IMF_Context *ctx, int value) { D_ENTER; MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); + D_MSG_RETM_IF(ctx == NULL, "Ecore_IMF_Context is Invalid"); + int keypad_x = 0; + int keypad_y = 0; + int keypad_w = 0; + int keypad_h = 0; + ecore_imf_context_input_panel_geometry_get(ctx, &keypad_x, &keypad_y, &keypad_w, &keypad_h); + D_MSG("keypad x = %d, y = %d, w = %d, h = %d", keypad_x, keypad_y, keypad_w, keypad_h); + if (keypad_w != 0 && keypad_h != 0) + msg_ui_composer_change_body_scroll_size(cd, keypad_h); + + D_LEAVE; +} + +void msg_ui_composer_entry_imf_state_cb(void * data, Ecore_IMF_Context *ctx, int value) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); D_MSG_RETM_IF(ctx == NULL, "Ecore_IMF_Context is Invalid"); if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) { D_MSG("Imf status SHOW"); - edje_object_signal_emit(_EDJ(cd->ly_body), "body_contract","*"); + int keypad_x = 0; + int keypad_y = 0; + int keypad_w = 0; + int keypad_h = 0; + + ecore_imf_context_input_panel_geometry_get(ctx, &keypad_x, &keypad_y, &keypad_w, &keypad_h); + D_MSG("keypad x = %d, y = %d, w = %d, h = %d", keypad_x, keypad_y, keypad_w, keypad_h); + msg_ui_composer_change_body_scroll_size(cd, keypad_h); } else if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) { D_MSG("Imf status HIDE"); + msg_ui_composer_change_body_scroll_size(cd, 0); + } else { + D_EMSG("imf status INVALID"); + } + + D_LEAVE; +} + +int msg_ui_composer_get_font_size(int index, int type) +{ + D_ENTER; + D_MSG("index = %d, type = %d", index, type); + + int font_size = MSG_APP_FONT_SIZE_NORMAL; - if (msg_ui_composer_common_is_send_possible(cd) == false) { - D_MSG("body_EXPAND and send button HIDE "); - edje_object_signal_emit(_EDJ(cd->ly_body), "body_expand","*"); + if (type == COMPOSER_MSG_FONT_SIZE) { + switch (index) { + case MSG_APP_FONT_SIZE_INDEX_HUGE: + font_size = MSG_APP_FONT_SIZE_HUGE; + break; + case MSG_APP_FONT_SIZE_INDEX_LARGE: + font_size = MSG_APP_FONT_SIZE_LARGE; + break; + case MSG_APP_FONT_SIZE_INDEX_NORMAL: + font_size = MSG_APP_FONT_SIZE_NORMAL; + break; + case MSG_APP_FONT_SIZE_INDEX_SMALL: + font_size = MSG_APP_FONT_SIZE_SMALL; + break; + case MSG_APP_FONT_SIZE_INDEX_TINY: + font_size = MSG_APP_FONT_SIZE_TINY; + break; + case MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT: + default: + D_MSG("get defulat size index = %d", index); + font_size = MSG_APP_FONT_SIZE_NORMAL; + break; + } + } else if (type == COMPOSER_SYSTEM_FONT_SIZE) { + switch (index) { + case MSG_SYS_FONT_SIZE_INDEX_GIANT: + font_size = MSG_APP_FONT_SIZE_HUGE + 4; + break; + case MSG_SYS_FONT_SIZE_INDEX_HUGE: + font_size = MSG_APP_FONT_SIZE_HUGE; + break; + case MSG_SYS_FONT_SIZE_INDEX_LARGE: + font_size = MSG_APP_FONT_SIZE_LARGE; + break; + case MSG_SYS_FONT_SIZE_INDEX_NORMAL: + font_size = MSG_APP_FONT_SIZE_NORMAL; + break; + case MSG_SYS_FONT_SIZE_INDEX_SMALL: + font_size = MSG_APP_FONT_SIZE_SMALL; + break; + default: + D_MSG("get defulat size index = %d", index); + font_size = MSG_APP_FONT_SIZE_NORMAL; + break; } } else { - D_EMSG("imf status INVALID"); + D_EMSG("Invalid font type"); } D_LEAVE; + + return font_size; } -void msg_ui_composer_evas_object_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info) +void msg_ui_composer_apply_font_size(MSG_COMPOSER_VIEW_DATA_S *cd) { D_ENTER; - if (!data || !obj) + D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); + + int converted_size = 0; + + if (cd->font_size.last_updated_setting == COMPOSER_SYSTEM_FONT_SIZE) { + converted_size = cd->font_size.sys_font_size; + } else if (cd->font_size.last_updated_setting == COMPOSER_MSG_FONT_SIZE) { + converted_size = cd->font_size.msg_font_size; + } else { + D_EMSG("Invalid type"); return; + } + + /* apply font size */ + char font_style_str[DEF_BUF_LEN_S + 1] = {0,}; + snprintf(font_style_str, sizeof(font_style_str), "DEFAULT='font_size=%d'", converted_size); + D_MSG("font_style_str = (%s)", font_style_str); + + msg_ui_composer_body_apply_font_size(cd, font_style_str); - D_PRINT("delete = %s[%p]", (char *)data, obj); D_LEAVE; } + diff --git a/composer/src/ui-composer/msg-ui-composer-main.c b/composer/src/ui-composer/msg-ui-composer-main.c index 30ee459..ce535d7 100755 --- a/composer/src/ui-composer/msg-ui-composer-main.c +++ b/composer/src/ui-composer/msg-ui-composer-main.c @@ -16,187 +16,502 @@ /* includes*/ #include <Ecore_X.h> -#include <MapiTransport.h> #include "msg-ui-composer-main.h" #include "msg-ui-composer-recipient.h" #include "msg-ui-composer-popup.h" #include "msg-ui-composer-predictsearch.h" +#include "msg-ui-composer-subject.h" #include "msg-ui-composer-body.h" - +#include "msg-ui-composer-pageduration.h" #include "msg-ui-composer-message.h" -#include "msg-ui-composer-core.h" #include "msg-ui-composer-common.h" #include "msg-ui-composer-external.h" #include "msg-ui-composer-bubble.h" +#include "msg-ui-common-utility.h" + #define COMPOSER_BUNDLE_ATTACH_TOKEN "\n" #define COMPOSER_BUNDLE_RECP_TOKEN "," /*================================================================================================== * FUNCTION IMPLEMENTATIONS *==================================================================================================*/ -static Eina_Bool __msg_ui_composer_edit_check(MSG_COMPOSER_VIEW_DATA_S *cd) +static COMPOSER_EDIT_STATE_E __msg_ui_composer_edit_check(MSG_COMPOSER_VIEW_DATA_S *cd) { D_ENTER; - D_MSG_RETVM_IF(cd == NULL, EINA_FALSE, "Composer Data == NULL"); + D_MSG_RETVM_IF(cd == NULL, COMPOSER_EDIT_NONE, "Composer Data == NULL"); + + bool isvalid_address = false; + bool iscontent_edited = false; if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { int recipient_count = msg_ui_composer_recipient_count_get(cd->recipient); if (recipient_count > 0) { - return EINA_TRUE; + isvalid_address = true; } const char *entry_str = msg_ui_composer_recipient_entry_text_get(cd->recipient); if (entry_str && strlen(entry_str)) { - return EINA_TRUE; + if (msg_ui_composer_recipient_vaild_check(entry_str) == EINA_TRUE) + isvalid_address = true; } + } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + isvalid_address = true; } - if (msg_ui_composer_common_is_send_possible(cd) == true) { - return EINA_TRUE; + /* valid address & there is body content */ + if (msg_ui_composer_common_is_send_possible(cd) == true) + iscontent_edited = true; + + if (isvalid_address && iscontent_edited) + return COMPOSER_EDIT_RECIPIENT_AND_BODY; + else if (isvalid_address) + return COMPOSER_EDIT_RECIPIENT; + else if (iscontent_edited) + return COMPOSER_EDIT_BODY; + else + return COMPOSER_EDIT_NONE; +} + +static void __msgc_vconf_changed_cb(keynode_t *key, void *data) +{ + D_ENTER; + + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + D_MSG_RETM_IF(key == NULL, "key is NULL"); + + int index = 0; + int font_size = 0; + int converted_size = 0; + char *key_name = NULL; + + key_name = vconf_keynode_get_name(key); + + if (!key_name) { + D_EMSG("key_name is NULL"); + return; } - return EINA_FALSE; + if (!strcmp(key_name, VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE)) { +/* + * 0 : giant : 106 + * 1 : huge : 81 + * 2 : large : 64 + * 3 : normal (default) : 44 + * 4 : small : 36 +*/ + index = vconf_keynode_get_int(key); + font_size = msg_ui_composer_get_font_size(index, (int)COMPOSER_SYSTEM_FONT_SIZE); + converted_size = (MSGC_BODY_FONT_SIZE * font_size) / MSG_APP_FONT_SIZE_NORMAL; + + cd->font_size.last_updated_setting = COMPOSER_SYSTEM_FONT_SIZE; + cd->font_size.sys_font_size = converted_size; + } else if (!strcmp(key_name, VCONFKEY_MSG_APP_FONT_SIZE)) { + index = vconf_keynode_get_int(key); + font_size = msg_ui_composer_get_font_size(index, (int)COMPOSER_MSG_FONT_SIZE); + converted_size = (MSGC_BODY_FONT_SIZE * font_size) / MSG_APP_FONT_SIZE_NORMAL; + + cd->font_size.last_updated_setting = COMPOSER_MSG_FONT_SIZE; + cd->font_size.msg_font_size = converted_size; + } else { + D_EMSG("key did not match."); + } + + D_MSG("font size = %d", font_size); + D_MSG("converted font size = %d", converted_size); + + D_LEAVE; } -/* function definitions*/ -static void __msg_ui_composer_bundle_data_process(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *b_data) +static void __msgc_init_font_size(MSG_COMPOSER_VIEW_DATA_S *cd) { D_ENTER; D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); - D_MSG_RETM_IF(b_data == NULL, "Bundle Data is NULL"); - const char *bundle_txt = NULL; + int index = 0; + int font_size = 0; + int converted_size = 0; - if ((bundle_txt = bundle_get_val(b_data, MSG_BUNDLE_KEY_FORWARD))) { - int msg_id = atoi(bundle_txt); - msg_ui_composer_message_init(); - msg_ui_composer_message_load_message(cd->msg_handle, msg_id); - msg_ui_composer_message_set_loaded_data(cd); - msg_ui_composer_message_destroy(); + if (msg_common_get_font_size(&index, &font_size) != TRUE) { + D_EMSG("msg_common_get_font_size() is failed !!"); } else { - if ((bundle_txt = bundle_get_val(b_data, MSG_BUNDLE_KEY_TO))) { - bool bMaxCount = false; - bool bInvalidNum = false; - bool bDup = false; - Eina_List *recipient_list = make_tokenize_list(bundle_txt, ","); - if (recipient_list) { - Eina_List *l = NULL; - char *recipient; - EINA_LIST_FOREACH(recipient_list, l, recipient) { - if (recipient) { - D_MSG("TO = %s", recipient); - if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) { - bMaxCount = true; - g_free(recipient); - break; - } + D_MSG("selected index = %d", index); + } - if (msg_ui_composer_recipient_duplicate_check(cd->recipient, recipient) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) { - bDup = true; - g_free(recipient); - continue; - } + if (index == MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT) { + if (vconf_get_int(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, &index) < 0) { + D_EMSG("vconf_get_int(system font_size) is failed !!"); + index = MSG_SYS_FONT_SIZE_INDEX_NORMAL; + } - if (msg_ui_composer_recipient_vaild_check(recipient) == EINA_FALSE) { - bInvalidNum = true; - } + font_size = msg_ui_composer_get_font_size(index, (int)COMPOSER_SYSTEM_FONT_SIZE); + converted_size = (MSGC_BODY_FONT_SIZE * font_size) / MSG_APP_FONT_SIZE_NORMAL; - msg_ui_composer_recipient_append(cd->recipient, recipient, 0); - g_free(recipient); - } + cd->font_size.last_updated_setting = COMPOSER_SYSTEM_FONT_SIZE; + cd->font_size.sys_font_size = converted_size; + + } else { + converted_size = (MSGC_BODY_FONT_SIZE * font_size) / MSG_APP_FONT_SIZE_NORMAL; + + cd->font_size.last_updated_setting = COMPOSER_MSG_FONT_SIZE; + cd->font_size.msg_font_size = converted_size; + } + D_MSG("font size = %d", converted_size); + + D_LEAVE; +} + +static void __msgc_parse_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd, const char *address) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + D_MSG_RETM_IF(address == NULL, "address is NULL"); + + bool bMaxCount = false; + bool bInvalidNum = false; + bool bDup = false; + + Eina_List *recipient_list = make_tokenize_list(address, ","); + + if (recipient_list) { + Eina_List *l = NULL; + char *recipient; + EINA_LIST_FOREACH(recipient_list, l, recipient) { + if (recipient) { + D_MSG("TO = %s", recipient); + if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) { + bMaxCount = true; + g_free(recipient); + break; } - D_MSG("bMaxCount = %d, bInvalidNum = %d, bDup = %d", bMaxCount, bInvalidNum, bDup); - if (bMaxCount) { - msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX); - } else if (bInvalidNum) { - msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP); - } else if (bDup) { - msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP); + if (msg_ui_composer_recipient_duplicate_check(cd->recipient, recipient) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) { + bDup = true; + g_free(recipient); + continue; } - } - } else if ((bundle_txt = bundle_get_val(b_data, MSG_BUNDLE_KEY_NUMBER_INDEX))) { - char *recipient, *index; - char *save_p; - int idx; + if (msg_ui_composer_recipient_vaild_check(recipient) == EINA_FALSE) { + bInvalidNum = true; + } else { + msg_ui_composer_recipient_append(cd->recipient, recipient, 0); + } - char *copy_string = MSG_STRDUP(bundle_txt); - if (copy_string) { + g_free(recipient); + } + } - recipient = strtok_r(copy_string, "/", &save_p); - if (recipient) { - index = strtok_r(NULL, "/", &save_p); - if (index) { - D_MSG("NUMBER_INDEX = %s[%s]", recipient, index); - idx = atoi(index); - } else { - idx = 0; - } + D_MSG("bMaxCount = %d, bInvalidNum = %d, bDup = %d", bMaxCount, bInvalidNum, bDup); + if (bMaxCount) { + msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX); + } else if (bInvalidNum) { + msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK); + } else if (bDup) { + msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP); + } + } - if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) { - msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX); - } else { - if (msg_ui_composer_recipient_duplicate_check(cd->recipient, recipient) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) { - msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP); - } else { - if (msg_ui_composer_recipient_vaild_check(recipient) == EINA_FALSE) { - msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP); - } - msg_ui_composer_recipient_append(cd->recipient, recipient, idx); - } - } - } + D_LEAVE; +} - g_free(copy_string); +static void __msgc_ui_parse_mmsto_uri(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle, const char *uri) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + D_MSG_RETM_IF(svc_handle == NULL, "svc_handle is NULL"); + + char *content = NULL; + char *recipient = NULL; + char *body_text = NULL; + char *subject = NULL; + char *attachment = NULL; + char *cc = NULL; + char *scheme = g_strdup(uri); + + if (scheme) { + strtok_r(scheme, ":", &content); + + if (content) { + if (g_ascii_isdigit(content[0]) || (content[0] == '+' && g_ascii_isdigit(content[1]))) { + recipient = strtok_r(NULL, "?", &content); + cc = strtok_r(NULL, "&", &content); + if (cc) + strtok_r(NULL, "=", &cc); + + D_MSG("RECIPIENT = [%s]", recipient); + if (recipient) + __msgc_parse_recipient_list(cd, (const char *)recipient); } } + g_free(scheme); + } else { + if ((service_get_extra_data(svc_handle, SERVICE_DATA_TO, &recipient) == SERVICE_ERROR_NONE) && recipient) { + __msgc_parse_recipient_list(cd, (const char *)recipient); + } + } - if ((bundle_txt = bundle_get_val(b_data, MSG_BUNDLE_KEY_BODY))) { - msg_ui_composer_body_set_loaded_text(cd, bundle_txt, 0); + if ((service_get_extra_data(svc_handle, SERVICE_DATA_TEXT, &body_text) == SERVICE_ERROR_NONE) && body_text) { + msg_ui_composer_body_set_loaded_text(cd, (const char *)body_text, 0); + } + + if ((service_get_extra_data(svc_handle, SERVICE_DATA_SUBJECT, &subject) == SERVICE_ERROR_NONE) && subject) { + msg_ui_composer_subject_set_loaded_data(cd, (const char *)subject); + } + + if ((service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, &attachment) == SERVICE_ERROR_NONE) && attachment) { + cd->attachlist = make_tokenize_list((const char *)attachment, COMPOSER_BUNDLE_ATTACH_TOKEN); + if (cd->attachlist) + msg_ui_composer_body_items_add(cd); + } + + D_LEAVE; +} + +static void __msgc_ui_parse_file_uri(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle, const char *uri) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + + char *content = NULL; + char attachment[DEF_IMG_PATH_LEN + 1] = {0, }; + int i = 0; + int len = 0; + char *scheme = g_strdup(uri); + + if (scheme) { + strtok_r(scheme, ":", &content); + D_MSG("content = [%s]", content); + + if (content) { + len = strlen(content) - 2; + if (len <= 0) { + D_EMSG("len is less than 0 !!"); + g_free(scheme); + return; + } + + /* Remove '//' from content string */ + for (i = 0; i < len; i++) { + attachment[i] = content[i+2]; + } + + if (attachment[0] != '\0') { + D_MSG("APPSVC ATTACHMENT = [%s]", attachment); + cd->attachlist = make_tokenize_list((const char *)attachment, COMPOSER_BUNDLE_ATTACH_TOKEN); + if (cd->attachlist) + msg_ui_composer_body_items_add(cd); + } } + g_free(scheme); + } else { + D_EMSG("scheme is NULL!!"); } D_LEAVE; } -static void __msg_ui_composer_sent_status_cb(MSG_HANDLE_T Handle, MSG_SENT_STATUS_S *pStatus, void *pUserParam) +static void __msg_ui_parse_sms_uri(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle, const char *uri) { D_ENTER; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); - return; + char *content = NULL; + char *recipient = NULL; + char *body_text = NULL; + char *scheme = g_strdup(uri); + + if (scheme) { + strtok_r(scheme, ":", &content); + + if (content) { + if (g_ascii_isdigit(content[0]) || (content[0] == '+' && g_ascii_isdigit(content[1]))) { + recipient = strtok_r(NULL, "?", &content); + D_MSG("RECIPIENT = [%s]", recipient); + + if (recipient) + __msgc_parse_recipient_list(cd, (const char *)recipient); + } + } + g_free(scheme); + } else { + if ((service_get_extra_data(svc_handle, SERVICE_DATA_TO, &recipient) == SERVICE_ERROR_NONE) && recipient) { + __msgc_parse_recipient_list(cd, (const char *)recipient); + } + } + + if ((service_get_extra_data(svc_handle, SERVICE_DATA_TEXT, &body_text) == SERVICE_ERROR_NONE) && body_text) { + msg_ui_composer_body_set_loaded_text(cd, (const char *)body_text, 0); + } + + D_LEAVE; } -static void __reset_popup_ok_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +static void __msgc_get_service_app_svc_op(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle, char *operation) { D_ENTER; - MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; - D_MSG_RETM_IF(cd == NULL, "composer data is NULL"); + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + D_MSG_RETM_IF(svc_handle == NULL, "svc_handle is NULL"); + D_MSG_RETM_IF(operation == NULL, "operation is NULL"); + + char *uri = NULL; + char *recipient = NULL; + char *body_text = NULL; + char *attachment = NULL; + char *subject = NULL; + + if (g_strcmp0(operation, SERVICE_OPERATION_SEND) == 0) { + if (service_get_uri(svc_handle, &uri) == SERVICE_ERROR_NONE) + D_MSG("URI = [%s]", uri); + + if (uri) { + if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_MMSTO_URI)) { /* MMS URI : mmsto */ + __msgc_ui_parse_mmsto_uri(cd, svc_handle, (const char *)uri); + } else if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_FILE_URI)) { /* URI : file */ + __msgc_ui_parse_file_uri(cd, svc_handle, (const char *)uri); + } else { + D_MSG("Not supported mime type"); + return; + } + } else { + if ((service_get_extra_data(svc_handle, SERVICE_DATA_TO, &recipient) == SERVICE_ERROR_NONE) && recipient) { + __msgc_parse_recipient_list(cd, (const char *)recipient); + } - MSGC_EVAS_OBJECT_DEL(cd->popup_end); + if ((service_get_extra_data(svc_handle, SERVICE_DATA_TEXT, &body_text) == SERVICE_ERROR_NONE) && body_text) { + msg_ui_composer_body_set_loaded_text(cd, (const char *)body_text, 0); + } - msg_ui_composer_reset(cd, cd->msg_bundle); + if ((service_get_extra_data(svc_handle, SERVICE_DATA_SUBJECT, &subject) == SERVICE_ERROR_NONE) && subject) { + msg_ui_composer_subject_set_loaded_data(cd, (const char *)subject); + } - if (cd->msg_bundle) { - bundle_free(cd->msg_bundle); - cd->msg_bundle = NULL; + if ((service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, &attachment) == SERVICE_ERROR_NONE) && attachment) { + cd->attachlist = make_tokenize_list((const char *)attachment, COMPOSER_BUNDLE_ATTACH_TOKEN); + if (cd->attachlist) + msg_ui_composer_body_items_add(cd); + } + } + } else if (g_strcmp0(operation, SERVICE_OPERATION_SEND_TEXT) == 0) { + if (service_get_uri(svc_handle, &uri) == SERVICE_ERROR_NONE) + D_MSG("URI = [%s]", uri); + + if (uri) { + if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_SMS_URI)) { /* SMS URI : sms */ + __msg_ui_parse_sms_uri(cd, svc_handle, (const char *)uri); + } else { + D_MSG("Not supported mime type"); + return; + } + } else { + if ((service_get_extra_data(svc_handle, SERVICE_DATA_TO, &recipient) == SERVICE_ERROR_NONE) && recipient) { + __msgc_parse_recipient_list(cd, (const char *)recipient); + } + + if ((service_get_extra_data(svc_handle, SERVICE_DATA_TEXT, &body_text) == SERVICE_ERROR_NONE) && body_text) { + msg_ui_composer_body_set_loaded_text(cd, (const char *)body_text, 0); + } + } + } else { + D_EMSG("Invalid operation type !!"); } + + D_LEAVE; } -static void __reset_popup_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +/* function definitions*/ +static void __msg_ui_composer_bundle_data_process(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle) { D_ENTER; - MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; - D_MSG_RETM_IF(cd == NULL, "composer data is NULL"); + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + D_MSG_RETM_IF(svc_handle == NULL, "Bundle Data is NULL"); - MSGC_EVAS_OBJECT_DEL(cd->popup_end); + char *bundle_txt = NULL; + + service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_FORWARD, &bundle_txt); + + if (bundle_txt) { + int msg_id = atoi(bundle_txt); + msg_ui_composer_message_init(); + msg_ui_composer_message_load_message(cd->msg_handle, msg_id); + msg_ui_composer_message_set_loaded_data(cd); + msg_ui_composer_message_destroy(); + } else { + char *operation = NULL; + if (service_get_operation(svc_handle, &operation) == SERVICE_ERROR_NONE && operation) { /* composer launching via service */ + cd->isAppControl = true; + + __msgc_get_service_app_svc_op(cd, svc_handle, operation); + + } else { /* internal ug mode */ + cd->isAppControl = false; + + if ((service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, &bundle_txt) == SERVICE_ERROR_NONE) && bundle_txt) { + __msgc_parse_recipient_list(cd, bundle_txt); + } else { + if ((service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_NUMBER_INDEX, &bundle_txt)== SERVICE_ERROR_NONE) && bundle_txt) { + char *recipient; + char *index; + char *save_p; + int idx; + + char *copy_string = MSG_STRDUP(bundle_txt); + if (copy_string) { + + recipient = strtok_r(copy_string, "/", &save_p); + if (recipient) { + index = strtok_r(NULL, "/", &save_p); + if (index) { + D_MSG("NUMBER_INDEX = %s[%s]", recipient, index); + idx = atoi(index); + } else { + idx = 0; + } + + if (msg_ui_composer_recipient_count_get(cd->recipient) >= COMPOSER_RECIPIENT_COUNT_MAX) { + msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_COUNT_MAX); + } else { + if (msg_ui_composer_recipient_duplicate_check(cd->recipient, recipient) == COMPOSER_RETURN_RECIPIENT_DUPLICATE) { + msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP); + } else { + if (msg_ui_composer_recipient_vaild_check(recipient) == EINA_FALSE) { + msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK); + } else { + msg_ui_composer_recipient_append(cd->recipient, recipient, idx); + } + } + } + } - if (cd->msg_bundle) { - bundle_free(cd->msg_bundle); - cd->msg_bundle = NULL; + g_free(copy_string); + } + } + } + + if (SERVICE_ERROR_NONE == service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_SUBJECT, &bundle_txt)) + msg_ui_composer_subject_set_loaded_data(cd, bundle_txt); + + if (SERVICE_ERROR_NONE == service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_BODY, &bundle_txt)) + msg_ui_composer_body_set_loaded_text(cd, bundle_txt, 0); + + if (SERVICE_ERROR_NONE == service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, &bundle_txt)) { + cd->attachlist = make_tokenize_list(bundle_txt, COMPOSER_BUNDLE_ATTACH_TOKEN); + if (cd->attachlist) + msg_ui_composer_body_items_add(cd); + } + } } + + D_LEAVE; +} + +static void __msg_ui_composer_sent_status_cb(msg_handle_t Handle, msg_struct_t pStatus, void *pUserParam) +{ + D_ENTER; + D_LEAVE; + + return; } static void __end_popup_ok_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) @@ -207,11 +522,6 @@ static void __end_popup_ok_btn_clicked_cb(void *data, Evas_Object *obj, void *ev MSGC_EVAS_OBJECT_DEL(cd->popup_end); - if (cd->destroy_req) { - bundle_send_to_result(cd, MSG_BUNDLE_KEY_COMPOSER_RESPONSE, MSG_BUNDLE_VALUE_RET_YES); - cd->destroy_req = false; - } - ug_destroy_me(cd->ug); } @@ -223,10 +533,7 @@ static void __end_popup_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void MSGC_EVAS_OBJECT_DEL(cd->popup_end); - if (cd->destroy_req) { - bundle_send_to_result(cd, MSG_BUNDLE_KEY_COMPOSER_RESPONSE, MSG_BUNDLE_VALUE_RET_NO); - cd->destroy_req = false; - } + cd->isclosed = false; msg_ui_composer_last_focus_load(cd); D_LEAVE; @@ -236,15 +543,21 @@ static void __msg_ui_composer_end_popup(MSG_COMPOSER_VIEW_DATA_S *cd) { D_ENTER; + MSGC_EVAS_OBJECT_DEL(cd->popup_end); + Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_DISCARD_Q, 0); - Evas_Object * btn1 = elm_button_add(popup); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); elm_object_text_set(btn1, MSGC_STR_BUTTON_OK); elm_object_part_content_set(popup, "button1", btn1); evas_object_smart_callback_add(btn1, "clicked", __end_popup_ok_btn_clicked_cb, cd); - Evas_Object * btn2 = elm_button_add(popup); + Evas_Object *btn2 = elm_button_add(popup); + elm_object_style_set(btn2, "popup_button/default"); elm_object_text_set(btn2, MSGC_STR_BUTTON_CANCEL); elm_object_part_content_set(popup, "button2", btn2); evas_object_smart_callback_add(btn2, "clicked", __end_popup_cancel_btn_clicked_cb, cd); + elm_object_focus_set(popup, EINA_TRUE); + evas_object_show(popup); cd->popup_end = popup; @@ -258,11 +571,94 @@ static void __naviframe_back_btn_clicked_cb(void *data, Evas_Object *obj, void * D_MSG_RETM_IF(data == NULL, "Data == NULL"); MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + COMPOSER_EDIT_STATE_E edit_state = __msg_ui_composer_edit_check(cd); + D_MSG("edit_state = %d", edit_state); + if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { - if (__msg_ui_composer_edit_check(cd) == EINA_TRUE) { + if (cd->isclosed) { + D_EMSG("back btn is already called"); + return; + } + + /* isclosed is set to prevent showing invalid popup*/ + cd->isclosed = true; + + if (edit_state == COMPOSER_EDIT_RECIPIENT || edit_state == COMPOSER_EDIT_BODY) { __msg_ui_composer_end_popup(cd); return; + } else if (edit_state == COMPOSER_EDIT_RECIPIENT_AND_BODY) { + /* auto saving */ + msg_ui_composer_message_init(); + + if (msg_ui_composer_get_message_data(cd) == COMPOSER_RETURN_SUCCESS) { + msg_ui_composer_save_message(cd->msg_handle); + + /* show saved ticker popup */ + msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_AUTO_SAVED); + } + + msg_ui_composer_message_destroy(); } + } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + if (edit_state == COMPOSER_EDIT_RECIPIENT) { + + PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; + + if (bubble_data->bubble_count == 0) { + int err = MSG_SUCCESS; + + if (bubble_data->isDraft == true) + err = msg_delete_thread_message_list(bubble_data->msgHandle, bubble_data->threadId); + + if (err == MSG_SUCCESS) { + service_h svc_handle; + char buf[DEF_BUF_LEN_S] = {0,}; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESULT, MSG_BUNDLE_VALUE_DEL_ALL); + snprintf(buf, sizeof(buf), "%d", bubble_data->threadId); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf); + ug_send_result(cd->ug, svc_handle); + + service_destroy(svc_handle); + } + } else { + D_MSG("msg_delete_thread_message_list failed"); + } + } else { + /* delete draft message */ + msg_struct_list_s msg_list; + + if (msg_get_message_list(cd->msg_handle, MSG_DRAFT_ID, bubble_data->threadId, 0, 0, &msg_list) == MSG_SUCCESS) { + int i = 0; + int msgid = 0; + + for (i= 0; i < msg_list.nCount; i++) { + msg_get_int_value(msg_list.msg_struct_info[i], MSG_MESSAGE_ID_INT, &msgid); + D_MSG("draft msg_id is %d", msgid); + if (msg_delete_message(cd->msg_handle, msgid) != COMPOSER_RETURN_SUCCESS) + D_EMSG("msg_ui_comp_core_delete_message is failed = %d", msgid); + } + } + msg_release_list_struct(&msg_list); + } + } else if (edit_state == COMPOSER_EDIT_RECIPIENT_AND_BODY) { + /* auto saving */ + msg_ui_composer_message_init(); + + if (msg_ui_composer_get_message_data(cd) == COMPOSER_RETURN_SUCCESS) { + msg_ui_composer_save_message(cd->msg_handle); + /* show saved ticker popup */ + msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_AUTO_SAVED); + } + + msg_ui_composer_message_destroy(); + } + /* clear recipient_list of bubble composer */ + msg_ui_composer_recipient_clear_recipient_list(cd); + } ug_destroy_me(cd->ug); @@ -270,6 +666,211 @@ static void __naviframe_back_btn_clicked_cb(void *data, Evas_Object *obj, void * D_LEAVE; } +static void __preview_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + D_MSG_RETM_IF(cd->navi_it == NULL, "Naviitem is NULL"); + + msg_struct_t msgInfo = NULL; + msg_ui_composer_message_init(); + msg_ui_composer_read_preview_message(cd); + + /* make preview message data */ + msgInfo = msg_ui_composer_message_make_preview(cd->msg_handle); + + if (msgInfo) + msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_MSGVIEWER, msgInfo); + + msg_release_struct(&msgInfo); + msg_ui_composer_message_destroy(); + + elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,close", ""); + elm_object_signal_emit(cd->navi_title_layout, "elm,state,more,hide", ""); + cd->navi_optionheader_opened = EINA_FALSE; + D_LEAVE; +} + +static void __pageduration_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + D_MSG_RETM_IF(cd->navi_it == NULL, "Naviitem is NULL"); + + msg_ui_composer_pageduration_popup_create(cd); + + D_LEAVE; +} + +static Evas_Object *__toolbar_btn_create(Evas_Object *parent, char *text, char *style) +{ + D_ENTER; + D_MSG_RETVM_IF(parent == NULL, NULL, "parent == NULL"); + + Evas_Object *button = elm_button_add(parent); + + if (style) + elm_object_style_set(button, style); + else + elm_object_style_set(button, "naviframe_control/default"); + + evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); + + if (text) { + char *popup_msg = elm_entry_utf8_to_markup(text); + if (popup_msg) { + elm_object_text_set(button, popup_msg); + g_free(popup_msg); + } else { + elm_object_text_set(button, text); + } + } + + evas_object_show(button); + + D_LEAVE; + return button; +} + +static Evas_Object *__toolbar_top_create(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + Evas_Object *toolbar = NULL; + int isBubble = 0; + toolbar = elm_toolbar_add(cd->navi_bar); + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + + if (!toolbar) { + D_EMSG("toolbar is NULL"); + return NULL; + } + + elm_object_style_set(toolbar, "naviframe"); + + if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + /* create delete button */ + Evas_Object *delete_button = __toolbar_btn_create(toolbar, dgettext("sys_string", "IDS_COM_SK_DELETE"), NULL); + evas_object_smart_callback_add(delete_button, "clicked", msg_ui_bubble_option_header_delete_clicked_cb, cd); + + cd->toolbar_btn[CONTROLBAR_ITEM_1] = delete_button; + cd->toolbar_item_top[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, cd); + elm_object_item_part_content_set(cd->toolbar_item_top[CONTROLBAR_ITEM_1], "object", delete_button); + + isBubble = 1; + } + + /* create preview button */ + Evas_Object *preview_button = __toolbar_btn_create(toolbar, MSGC_STR_PREVIEW, NULL); + evas_object_smart_callback_add(preview_button, "clicked", __preview_btn_clicked_cb, cd); + cd->toolbar_btn[CONTROLBAR_ITEM_1+isBubble] = preview_button; + cd->toolbar_item_top[CONTROLBAR_ITEM_1+isBubble] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, cd); + elm_object_item_part_content_set(cd->toolbar_item_top[CONTROLBAR_ITEM_1+isBubble], "object", preview_button); + + /* create page duration button */ + char buf[DEF_BUF_LEN_S + 1] = {0,}; + int pageduration = msg_ui_composer_pageduration_value_get(cd); + snprintf(buf, sizeof(buf), _MSGSTR("IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"), pageduration); + + Evas_Object *duration_button = __toolbar_btn_create(toolbar, buf, "naviframe_control/multiline"); + evas_object_smart_callback_add(duration_button, "clicked", __pageduration_btn_clicked_cb, cd); + cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble] = duration_button; + cd->toolbar_item_top[CONTROLBAR_ITEM_2+isBubble] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, cd); + elm_object_item_part_content_set(cd->toolbar_item_top[CONTROLBAR_ITEM_2+isBubble], "object", duration_button); + + COMPOSER_MSG_TYPE_E checked_type = msg_ui_composer_check_message_type(cd); + if (checked_type == COMPOSER_MSG_TYPE_MMS) { + msg_ui_composer_toolbar_top_item_change(cd, false); + } else { + msg_ui_composer_toolbar_top_item_change(cd, true); + } + + D_LEAVE; + + return toolbar; +} + +void msg_ui_composer_toolbar_top_update(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + + /* update pageduration */ + char buf[DEF_BUF_LEN_S + 1] = {0,}; + int pageduration = 0; + int isBubble = 0; + char *markup_str = NULL; + + if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) + isBubble = 1; + + pageduration = msg_ui_composer_pageduration_value_get(cd); + snprintf(buf, sizeof(buf), _MSGSTR("IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS"), pageduration); + + markup_str = elm_entry_utf8_to_markup(buf); + if (markup_str) { + elm_object_text_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], markup_str); + g_free(markup_str); + } else { + elm_object_text_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], buf); + } +} + +static void __naviframe_more_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + D_MSG_RETM_IF(cd->navi_it == NULL, "Navi item is NULL"); + + if (cd->navi_optionheader_opened) { + elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,close", ""); + elm_object_signal_emit(cd->navi_title_layout, "elm,state,more,hide", ""); + } else { + Evas_Object *content = NULL; + + if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; + + if (bubble_data && bubble_data->title_optionheader_opened) { + elm_object_signal_emit(cd->navi_title_layout, "elm,state,title,hide", ""); + if (bubble_data->title_genlist) + msg_ui_bubble_close_title_menu_genlist(bubble_data); + bubble_data->title_optionheader_opened = false; + } + } + + content = elm_object_item_part_content_unset(cd->navi_it, "optionheader"); + + if (content) { + if (content != cd->toolbar_top) { + PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; + int i = 0; + for (i = 0; i < MSG_BUBBLE_CONTROLBAR_ITEM_NUM; i++) { + if (bubble_data->toolbar_item[i]) { + elm_object_item_del(bubble_data->toolbar_item[i]); + bubble_data->toolbar_item[i] = NULL; + } + } + } + evas_object_del(content); + } + + cd->toolbar_top = __toolbar_top_create(cd); + elm_object_item_part_content_set(cd->navi_it, "optionheader", cd->toolbar_top); + + elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,open", ""); + elm_object_signal_emit(cd->navi_title_layout, "elm,state,more,show", ""); + } + + cd->navi_optionheader_opened = !cd->navi_optionheader_opened; + + D_LEAVE; +} + static Evas_Object *__naviframe_back_btn_create(Evas_Object *parent, void *data, bool title) { D_ENTER; @@ -294,6 +895,25 @@ static Evas_Object *__naviframe_back_btn_create(Evas_Object *parent, void *data, return btn; } +static Evas_Object *__naviframe_more_btn_create(Evas_Object *parent, void *data) +{ + D_ENTER; + D_MSG_RETVM_IF(parent == NULL, NULL, "parent == NULL"); + D_MSG_RETVM_IF(data == NULL, NULL, "data == NULL"); + + Evas_Object *btn = elm_button_add(parent); + if (!btn) + return NULL; + + elm_object_style_set(btn, "naviframe/more/default"); + elm_object_focus_allow_set(btn, EINA_FALSE); + + evas_object_smart_callback_add(btn, "clicked", __naviframe_more_btn_clicked_cb, data); + evas_object_show(btn); + D_LEAVE; + return btn; +} + static char *__working_dir_create(void) { D_ENTER; @@ -328,47 +948,98 @@ static char *__working_dir_create(void) return NULL; } -static void __msg_ui_composer_reset_select_popup(MSG_COMPOSER_VIEW_DATA_S *cd) +void msg_ui_composer_reset_request(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle) { D_ENTER; - Evas_Object *popup = msg_ui_composer_status_popup_show(cd, MSGC_STR_POP_DISCARD_Q, 0); - Evas_Object * btn1 = elm_button_add(popup); - elm_object_text_set(btn1, MSGC_STR_BUTTON_OK); - elm_object_part_content_set(popup, "button1", btn1); - evas_object_smart_callback_add(btn1, "clicked", __reset_popup_ok_btn_clicked_cb, cd); - Evas_Object * btn2 = elm_button_add(popup); - elm_object_text_set(btn2, MSGC_STR_BUTTON_CANCEL); - elm_object_part_content_set(popup, "button2", btn2); - evas_object_smart_callback_add(btn2, "clicked", __reset_popup_cancel_btn_clicked_cb, cd); - cd->popup_end = popup; + if (!cd) + return; - D_LEAVE; - return; -} + COMPOSER_EDIT_STATE_E edit_state = __msg_ui_composer_edit_check(cd); + D_MSG("edit_state = %d", edit_state); -void msg_ui_composer_reset_request(MSG_COMPOSER_VIEW_DATA_S *cd) -{ - D_ENTER; + if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { + if (edit_state == COMPOSER_EDIT_RECIPIENT_AND_BODY) { + /* auto saving */ + msg_ui_composer_message_init(); - if (!cd) return; + if (msg_ui_composer_get_message_data(cd) == COMPOSER_RETURN_SUCCESS) { + msg_ui_composer_save_message(cd->msg_handle); + } - if (__msg_ui_composer_edit_check(cd)) { - /*select reset popup show*/ - __msg_ui_composer_reset_select_popup(cd); - } else { - /*process reset*/ - msg_ui_composer_reset(cd, cd->msg_bundle); - if (cd->msg_bundle) { - bundle_free(cd->msg_bundle); - cd->msg_bundle = NULL; + msg_ui_composer_message_destroy(); } + } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + if (edit_state == COMPOSER_EDIT_RECIPIENT) { + PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; + + if (bubble_data->bubble_count == 0) { + int err = MSG_SUCCESS; + + if (bubble_data->isDraft == true) + err = msg_delete_thread_message_list(bubble_data->msgHandle, bubble_data->threadId); + + if (err == MSG_SUCCESS) { + service_h svc_handle; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + char buf[DEF_BUF_LEN_S] = {0,}; + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESULT, MSG_BUNDLE_VALUE_DEL_ALL); + snprintf(buf, sizeof(buf), "%d", bubble_data->threadId); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf); + + ug_send_result(cd->ug, svc_handle); + + service_destroy(svc_handle); + } + } else { + D_MSG("msg_delete_thread_message_list failed"); + } + } else { + /* delete draft message */ + msg_struct_list_s msg_list; + + if (msg_get_message_list(cd->msg_handle, MSG_DRAFT_ID, bubble_data->threadId, 0, 0, &msg_list) == COMPOSER_RETURN_SUCCESS) { + int i = 0; + int msgid = 0; + + for (i= 0; i < msg_list.nCount; i++) { + msg_get_int_value(msg_list.msg_struct_info[i], MSG_MESSAGE_ID_INT, &msgid); + D_MSG("draft msg_id is %d", msgid); + if (msg_delete_message(cd->msg_handle, msgid) != COMPOSER_RETURN_SUCCESS) + D_EMSG("msg_ui_comp_core_delete_message is failed = %d", msgid); + } + } + + msg_release_list_struct(&msg_list); + } + } else if (edit_state == COMPOSER_EDIT_RECIPIENT_AND_BODY) { + /* auto saving */ + msg_ui_composer_message_init(); + + if (msg_ui_composer_get_message_data(cd) == COMPOSER_RETURN_SUCCESS) { + msg_ui_composer_save_message(cd->msg_handle); + } + + msg_ui_composer_message_destroy(); + } + + /* clear recipient_list of bubble composer */ + msg_ui_composer_recipient_clear_recipient_list(cd); } + /*process reset*/ + msg_ui_composer_reset(cd, svc_handle); + D_LEAVE; } -COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *bundle) +/* + * 1. clear all composer editing obj + * 2. make composer using bundle val +*/ +COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle) { D_ENTER; if (!cd) @@ -378,32 +1049,40 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, bundl ecore_file_recursive_rm(cd->working_path); g_free(cd->working_path); } + cd->working_path = __working_dir_create(); + if (cd->working_path == NULL) { D_EMSG("[ASSERT] Fail of make working dir!!!"); return COMPOSER_RETURN_FAIL; } - if (bundle) { + if (svc_handle) { msg_ui_composer_clear(cd); /*Change to Bubble view*/ - if (bundle_get_val(bundle, MSG_BUNDLE_KEY_THREAD_ID) || bundle_get_val(bundle, MSG_BUNDLE_KEY_MSG_ID)) { + char *thread_id = NULL; + char *msg_id = NULL; + service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, &thread_id); + service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msg_id); + if (thread_id || msg_id) { if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER) { D_MSG("chagne bubble view"); msg_ui_composer_change_bubble_view(cd); - msg_ui_bubble_parse_bubble_data(cd->bubble_data, bundle); + msg_ui_bubble_parse_bubble_data(cd->bubble_data, svc_handle); msg_ui_bubble_start_view(cd->bubble_data); - msg_ui_bubble_composer_navi_title_set((void *)cd); - msg_ui_bubble_add_normal_control_item(cd->bubble_data); - msg_ui_composer_recipient_set_recipient(cd, cd->bubble_data->threadAddr); + msg_ui_composer_navi_title_set((void *)cd); + + /* set recipient list for bubble composer */ + msg_ui_composer_recipient_set_recipient_list(cd, cd->bubble_data->threadId); } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { D_MSG("reload bubble view"); - msg_ui_bubble_parse_bubble_data(cd->bubble_data, bundle); + msg_ui_bubble_parse_bubble_data(cd->bubble_data, svc_handle); msg_ui_bubble_list_load(cd->bubble_data); - msg_ui_bubble_composer_navi_title_set((void *)cd); - msg_ui_bubble_add_normal_control_item(cd->bubble_data); - msg_ui_composer_recipient_set_recipient(cd, cd->bubble_data->threadAddr); + msg_ui_composer_navi_title_set((void *)cd); + + /* set recipient list for bubble composer */ + msg_ui_composer_recipient_set_recipient_list(cd, cd->bubble_data->threadId); } } else { if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { @@ -415,14 +1094,14 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_reset(MSG_COMPOSER_VIEW_DATA_S *cd, bundl } msg_ui_composer_change_composer_view(cd); } - __msg_ui_composer_bundle_data_process(cd, bundle); + __msg_ui_composer_bundle_data_process(cd, svc_handle); } } D_LEAVE; return COMPOSER_RETURN_SUCCESS; } -COMPOSER_RETURN_TYPE_E msg_ui_composer_start(MSG_COMPOSER_VIEW_DATA_S *cd, bundle *bundle) +COMPOSER_RETURN_TYPE_E msg_ui_composer_start(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_handle) { D_ENTER; D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer Data is NULL"); @@ -431,21 +1110,23 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_start(MSG_COMPOSER_VIEW_DATA_S *cd, bundl cd->state = COMPOSER_STATE_TYPE_RUNNING; /*bundle data parsing */ - if (bundle) { + if (svc_handle) { if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { cd->isLoad = true; - __msg_ui_composer_bundle_data_process(cd, bundle); + __msg_ui_composer_bundle_data_process(cd, svc_handle); + + if (cd->attachlist == NULL) + cd->isLoad = false; - cd->isLoad = false; } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { D_MSG("START BUBBLE COMPOSER"); PMSG_BUBBLE_DATA bubble_data = (PMSG_BUBBLE_DATA)cd->bubble_data; - msg_ui_bubble_parse_bubble_data(bubble_data, bundle); + msg_ui_bubble_parse_bubble_data(bubble_data, svc_handle); msg_ui_bubble_start_view(bubble_data); + msg_ui_composer_navi_title_set((void *)cd); - msg_ui_bubble_composer_navi_title_set((void *)cd); - msg_ui_bubble_add_normal_control_item(cd->bubble_data); - msg_ui_composer_recipient_set_recipient(cd, bubble_data->threadAddr); + /* set recipient list for bubble composer */ + msg_ui_composer_recipient_set_recipient_list(cd, cd->bubble_data->threadId); } } @@ -471,20 +1152,36 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_destroy(MSG_COMPOSER_VIEW_DATA_S *cd) D_ENTER; COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS; - if (!cd) return COMPOSER_RETURN_FAIL; + if (!cd) + return COMPOSER_RETURN_FAIL; D_PRINT("===== Composer UG Destroy Start ====="); contacts_svc_disconnect(); - if (cd->msg_bundle) { - bundle_free(cd->msg_bundle); - cd->msg_bundle = NULL; + D_PRINT("----- Unregister vconf callback -----"); + if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msgc_vconf_changed_cb) < 0) { + D_EMSG("Fail to unregister vconf CB with [%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE); + } + if (vconf_ignore_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msgc_vconf_changed_cb) < 0) { + D_EMSG("Fail to unregister vconf CB with [%s]", VCONFKEY_MSG_APP_FONT_SIZE); + } + + if(cd->job_thread_end) { + D_PRINT("----- Job Delete -----"); + ecore_job_del(cd->job_thread_end); + cd->job_thread_end = NULL; + } + + if(cd->attach_thread) { + D_PRINT("----- Thread Delete -----"); + ecore_thread_cancel(cd->attach_thread); + cd->attach_thread = NULL; } - if (cd->noti) { - D_PRINT("----- Notify Delete -----"); - evas_object_del(cd->noti); - cd->noti = NULL; + if (cd->last_focus_idler) { + D_PRINT("----- idler Delete -----"); + ecore_idler_del(cd->last_focus_idler); + cd->last_focus_idler = NULL; } if (cd->popup_conform) { @@ -498,11 +1195,17 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_destroy(MSG_COMPOSER_VIEW_DATA_S *cd) cd->recipient = NULL; } + D_PRINT("----- Recipient list Clear -----"); + msg_ui_composer_recipient_clear_recipient_list(cd); + D_PRINT("----- Predict Search Delete -----"); msg_ui_composer_predictsearch_list_delete(cd); + D_PRINT("----- Body Delete -----"); + msg_ui_composer_body_delete(cd); + D_PRINT("----- Close Msg Handle -----"); - msg_ui_comp_core_close_msg_handle(&cd->msg_handle); + msg_close_msg_handle(&cd->msg_handle); D_PRINT("----- Delete Popup -----"); msg_ui_composer_popup_delete_all(cd); @@ -513,26 +1216,68 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_destroy(MSG_COMPOSER_VIEW_DATA_S *cd) cd->working_path = NULL; } + if (cd->th) { + elm_theme_extension_del(cd->th, MSG_CUSTOM_WINSET_EDJ); + elm_theme_free(cd->th); + cd->th = NULL; + } + msg_common_reset_font_size("entry"); + D_PRINT("===== Composer UG Destroy End ====="); D_LEAVE; return ret; } -void msg_ui_composer_destroy_request(MSG_COMPOSER_VIEW_DATA_S *cd) +COMPOSER_RETURN_TYPE_E msg_ui_composer_rotate(MSG_COMPOSER_VIEW_DATA_S *cd, COMPOSER_ROTATE_TYPE_E rotate) { D_ENTER; - D_MSG_RETM_IF(cd == NULL, "Composer Data == NULL"); + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer Data == NULL"); + + cd->rotate = rotate; + D_MSG("rotate val [%d]", rotate); + + if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { + + RECIPIENT_S *r = cd->recipient; + if (!r) return COMPOSER_RETURN_FAIL; + + if (rotate == COMPOSER_ROTATE_PORTRAIT || rotate == COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN) { + elm_layout_theme_set(cd->base, "layout", "application", "default"); + + elm_box_horizontal_set(r->bx_main, EINA_FALSE); + elm_scroller_content_min_limit(r->sc, EINA_FALSE, EINA_TRUE); + evas_object_size_hint_max_set(r->sc, 9999, COMPOSER_RECIPIENT_PORTRAIT_HEIGHT_MAX); + } else { + elm_layout_theme_set(cd->base, "layout", "application", "noindicator");/*hide indicator in Landscape*/ + + elm_box_horizontal_set(r->bx_main, EINA_TRUE); + elm_scroller_content_min_limit(r->sc, EINA_FALSE, EINA_FALSE); + evas_object_size_hint_max_set(r->sc, 9999, -1); + } + + /* change body scroller size */ + msg_ui_composer_change_body_scroll_size(cd, 0); + + } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + if (rotate == COMPOSER_ROTATE_PORTRAIT || rotate == COMPOSER_ROTATE_PORTRAIT_UPSIDEDOWN) { + if (cd->bubble_data) + cd->bubble_data->isRotate = false; + } else { + if (cd->bubble_data) + cd->bubble_data->isRotate = true; + } + + /* change body scroller size */ + msg_ui_composer_change_body_scroll_size(cd, 0); - if (__msg_ui_composer_edit_check(cd) == EINA_TRUE) { - cd->destroy_req = true; - __msg_ui_composer_end_popup(cd); } else { - bundle_send_to_result(cd, MSG_BUNDLE_KEY_COMPOSER_RESPONSE, MSG_BUNDLE_VALUE_RET_YES); - ug_destroy_me(cd->ug); + D_EMSG("Unknown Composer Mode"); + return COMPOSER_RETURN_FAIL; } D_LEAVE; + return COMPOSER_RETURN_SUCCESS; } COMPOSER_RETURN_TYPE_E msg_ui_composer_init(MSG_COMPOSER_VIEW_DATA_S *cd) @@ -545,13 +1290,13 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_init(MSG_COMPOSER_VIEW_DATA_S *cd) } /* create message handle */ - if (msg_ui_comp_core_open_msg_handle(&cd->msg_handle) != COMPOSER_RETURN_SUCCESS) { + if (msg_open_msg_handle(&cd->msg_handle) != MSG_SUCCESS) { D_EMSG("[ASSERT] msg-server doesn't response !!!"); return COMPOSER_RETURN_FAIL; } /* set message sent status callback */ - if (msg_ui_comp_core_reg_sent_status_cb(cd->msg_handle, __msg_ui_composer_sent_status_cb, cd) != COMPOSER_RETURN_SUCCESS) { + if (msg_reg_sent_status_callback(cd->msg_handle, &__msg_ui_composer_sent_status_cb, cd) != MSG_SUCCESS) { D_EMSG("[ASSERT] sent status callback register error!!!"); return COMPOSER_RETURN_FAIL; } @@ -568,21 +1313,39 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_init(MSG_COMPOSER_VIEW_DATA_S *cd) return COMPOSER_RETURN_FAIL; } - /* set default message type is SMS */ cd->msg_type = COMPOSER_MSG_TYPE_SMS; - /*set currnet_theme */ + if(cd->mms_max_size == 0) { + msg_struct_t setting = msg_create_struct(MSG_STRUCT_SETTING_MSGSIZE_OPT); - char *current_theme = msg_common_get_current_theme_name(); - if (g_strcmp0(current_theme, MSG_THEME_WHITE_HD) == 0) - cd->current_theme = MSG_UI_THEME_WHITE; - else - cd->current_theme = MSG_UI_THEME_BLUE_HD; + if (msg_get_msgsize_opt(cd->msg_handle, setting) != MSG_SUCCESS) { + D_EMSG("Getting MMS MAX SIZE ERROR"); + } else { + if (setting) + msg_get_int_value(setting, MSG_MESSAGE_SIZE_INT, &cd->mms_max_size); + + D_MSG("[DEBUG] msg max size = [%d KB] !!!", cd->mms_max_size); - if (current_theme) - free(current_theme); + cd->mms_max_size = cd->mms_max_size * 1024; + } + msg_release_struct(&setting); + } + /* set default font size*/ + __msgc_init_font_size(cd); + + /* register vconf callback function */ + if (vconf_notify_key_changed(VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE, __msgc_vconf_changed_cb, cd) < 0) { + D_EMSG("Fail to register vconf CB with [%s]", VCONFKEY_SETAPPL_ACCESSIBILITY_FONT_SIZE); + } + if (vconf_notify_key_changed(VCONFKEY_MSG_APP_FONT_SIZE, __msgc_vconf_changed_cb, cd) < 0) { + D_EMSG("Fail to register vconf CB with [%s]", VCONFKEY_MSG_APP_FONT_SIZE); + } + + cd->th = elm_theme_new(); + elm_theme_ref_set(cd->th, NULL); + elm_theme_extension_add(cd->th, MSG_CUSTOM_WINSET_EDJ); return COMPOSER_RETURN_SUCCESS; } @@ -598,15 +1361,14 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd) D_MSG_RETVM_IF(cd->base == NULL, COMPOSER_RETURN_FAIL, "base layout is NULL"); Evas_Object *navi_frame = NULL; - - /* State Set */ - cd->state = COMPOSER_STATE_TYPE_CREATE; + Evas_Object *more_button = NULL; Evas_Object *content_layout = NULL; Elm_Object_Item *navi_it = NULL; - Evas_Object *conform = NULL; Evas_Object *back_btn = NULL; - Evas_Object *tool_bar = NULL; + + /* State Set */ + cd->state = COMPOSER_STATE_TYPE_CREATE; /* Create naviframe */ navi_frame = elm_naviframe_add(cd->base); @@ -688,26 +1450,35 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_create(MSG_COMPOSER_VIEW_DATA_S *cd) /*Push content to navi frame*/ if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { - back_btn = __naviframe_back_btn_create(navi_frame, (void *)cd, true); - navi_it = elm_naviframe_item_push(navi_frame, MSGC_STR_NEW_MESSAGE, NULL, NULL, conform, NULL); - elm_object_item_part_content_set(navi_it, "title_right_btn", back_btn); + if (cd->isMsgInternal) + back_btn = __naviframe_back_btn_create(navi_frame, (void *)cd, false); + else + back_btn = __naviframe_back_btn_create(navi_frame, (void *)cd, true); } else { back_btn = __naviframe_back_btn_create(navi_frame, (void *)cd, false); - navi_it = elm_naviframe_item_push(navi_frame, NULL, back_btn, NULL, conform, NULL); - tool_bar = msg_ui_bubble_create_controlbar(navi_frame, cd->bubble_data); - elm_object_item_part_content_set(navi_it, "controlbar", tool_bar); } + navi_it = elm_naviframe_item_push(navi_frame, NULL, NULL, NULL, conform, "empty"); + cd->navi_it = navi_it; cd->back_btn = back_btn; + /* create navi title layout */ + cd->navi_title_layout = msg_ui_composer_create_navi_title_bar(cd); + msg_ui_composer_navi_title_set(cd); + elm_object_item_part_content_set(cd->navi_it, "title", cd->navi_title_layout); + + /*Create more button*/ + more_button = __naviframe_more_btn_create(navi_frame, cd); + + elm_object_part_content_set(cd->navi_title_layout, "more_btn", more_button); + elm_object_part_content_set(cd->navi_title_layout, "prev_btn", back_btn); + + cd->more_btn = more_button; + /* set navibar to main layout (base) */ elm_object_part_content_set(cd->base, "elm.swallow.content", navi_frame); - evas_object_event_callback_add(navi_frame, EVAS_CALLBACK_DEL, msg_ui_composer_evas_object_delete_cb, "navibar"); - evas_object_event_callback_add(content_layout, EVAS_CALLBACK_DEL, msg_ui_composer_evas_object_delete_cb, "content_layout"); - evas_object_event_callback_add(conform, EVAS_CALLBACK_DEL, msg_ui_composer_evas_object_delete_cb, "conform"); - D_LEAVE; return COMPOSER_RETURN_SUCCESS; @@ -715,34 +1486,61 @@ error_return: return COMPOSER_RETURN_FAIL; } -COMPOSER_RETURN_TYPE_E msg_ui_composer_bubble_data_set(MSG_COMPOSER_VIEW_DATA_S *cd, const char *address, const char *name, int contact_id, int thread_id) +COMPOSER_RETURN_TYPE_E msg_ui_composer_bubble_data_set(MSG_COMPOSER_VIEW_DATA_S *cd, int thread_id) { D_ENTER; D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer data is NULL"); D_MSG_RETVM_IF(cd->msg_ug_mode != MSG_UG_MODE_BUBBLE_COMPOSER, COMPOSER_RETURN_FAIL, "msg_ug_mode is NOT BUBBLE TYPE"); D_MSG_RETVM_IF(thread_id <= 0, COMPOSER_RETURN_FAIL, "Composer mode is Not Full"); - D_MSG_RETVM_IF(address == NULL, COMPOSER_RETURN_FAIL, "address is NULL"); D_MSG_RETVM_IF(cd->bubble_data == NULL, COMPOSER_RETURN_FAIL, "bubble data is NULL"); PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; + msg_struct_t threadInfo = NULL; + int err; /*Create bubble list*/ bubble_data->threadId = thread_id; MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread ID = %d", bubble_data->threadId); - snprintf(bubble_data->threadAddr, DEF_THREAD_ADDR_LEN, "%s", address); - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Adress =%s", bubble_data->threadAddr); + msg_struct_list_s addrList; + int i = 0; + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + + err = msg_get_address_list(bubble_data->msgHandle, bubble_data->threadId, &addrList); - if (name) { - snprintf(bubble_data->threadName, DEF_THREAD_NAME_LEN, "%s", name); - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Thread Name =%s", bubble_data->threadName); - } + if (err == MSG_SUCCESS) { + bubble_data->addr_list.addr_cnt = addrList.nCount; + + for (i = 0; i<addrList.nCount; i++) { + int contact_id = 0; + msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id); + /** addresss */ + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, bubble_data->addr_list.addr_info[i].address, DEF_THREAD_ADDR_LEN); + + /** contact ID & display name */ + if (contact_id > 0) { + bubble_data->addr_list.addr_info[i].contact_id = contact_id; + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, bubble_data->addr_list.addr_info[i].name, DEF_THREAD_NAME_LEN); + } else { + bubble_data->addr_list.addr_info[i].contact_id = 0; + } + } - if (contact_id > 0) { - bubble_data->contactId = contact_id; + msg_release_list_struct(&addrList); } else { - bubble_data->contactId = 0; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ERROR] msg_get_address_list returns error [%d]", err); } + + threadInfo = msg_create_struct(MSG_STRUCT_THREAD_INFO); + err = msg_get_thread(bubble_data->msgHandle, bubble_data->threadId, threadInfo); + + if (err == MSG_SUCCESS) + msg_get_str_value(threadInfo, MSG_THREAD_NAME_STR, bubble_data->threadName, DEF_THREAD_NAME_LEN); + else + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ERROR] msg_get_trhead returns error [%d", err); + + msg_release_struct(&threadInfo); + return COMPOSER_RETURN_SUCCESS; } @@ -801,14 +1599,8 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_change_bubble_view(MSG_COMPOSER_VIEW_DATA cd->bubble_data = (void *)bubble_data; /*Change naviframe layout for bubble*/ - Evas_Object *cancel = elm_object_item_part_content_unset(cd->navi_it, "title_right_btn"); - evas_object_del(cancel); - - Evas_Object *toolbar = msg_ui_bubble_create_controlbar(cd->navi_bar, cd->bubble_data); - elm_object_item_part_content_set(cd->navi_it, "controlbar", toolbar); - Evas_Object *cancel_btn = __naviframe_back_btn_create(cd->navi_bar, (void *)cd, false); - elm_object_item_part_content_set(cd->navi_it, "prev_btn", cancel_btn); + elm_object_part_content_set(cd->navi_title_layout, "prev_btn", cancel_btn); cd->back_btn = cancel_btn; Evas_Object *layout = msg_ui_bubble_create_view(cd->content_layout, cd->bubble_data); // First parameter should be 'content_layout'. @@ -824,53 +1616,166 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_change_bubble_view(MSG_COMPOSER_VIEW_DATA return COMPOSER_RETURN_SUCCESS; } +/* + * msg_ui_composer_editable_set + * editable == FALSE : hide body content & disable more button & close option header + * editable == TRUE : show body content layout + * */ void msg_ui_composer_editable_set(MSG_COMPOSER_VIEW_DATA_S *cd, Eina_Bool editable) { D_ENTER; D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); - if (editable == EINA_FALSE) { + if (editable == EINA_FALSE){ Evas_Object *body_layout = elm_object_part_content_unset(cd->content_layout, "swl.composer.body"); evas_object_hide(body_layout); + + if (cd->more_btn) + elm_object_disabled_set(cd->more_btn, EINA_TRUE); + + if (cd->navi_it) { + elm_object_item_signal_emit(cd->navi_it, "elm,state,optionheader,close", ""); + elm_object_signal_emit(cd->navi_title_layout, "elm,state,more,hide", ""); + elm_object_signal_emit(cd->navi_title_layout, "elm,state,title,hide", ""); + cd->navi_optionheader_opened = EINA_FALSE; + } + } else { elm_object_part_content_set(cd->content_layout, "swl.composer.body", cd->ly_body); evas_object_show(cd->ly_body); + + if (cd->more_btn) + elm_object_disabled_set(cd->more_btn, EINA_FALSE); + } D_LEAVE; } -void msg_ui_composer_bubble_del_all(void *data, bundle *b) +void msg_ui_composer_bubble_del_all(void *data, service_h svc_handle) { D_ENTER; MSG_COMPOSER_VIEW_DATA_S *cd = data; D_MSG_RETM_IF(cd == NULL, "Composer data is NULL"); - ug_send_result(cd->ug, b); + ug_send_result(cd->ug, svc_handle); } -void msg_ui_bubble_composer_navi_title_set(void *data) +void msg_ui_composer_toolbar_top_item_change(MSG_COMPOSER_VIEW_DATA_S *cd, bool smstype) { D_ENTER; + D_MSG_RETM_IF(cd == NULL, "Composer data is NULL"); + + int isBubble = 0; + + if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + isBubble = 1; + + PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; + if (bubble_data->bubble_count <= 0) { + elm_object_item_disabled_set(cd->toolbar_item_top[CONTROLBAR_ITEM_1], EINA_TRUE); + elm_object_focus_allow_set(cd->toolbar_btn[CONTROLBAR_ITEM_1], EINA_FALSE); + elm_object_disabled_set(cd->toolbar_btn[CONTROLBAR_ITEM_1], EINA_TRUE); + } + } + + if (smstype == true) { + if (cd->toolbar_item_top[CONTROLBAR_ITEM_1]) { + elm_object_item_disabled_set(cd->toolbar_item_top[CONTROLBAR_ITEM_1+isBubble], EINA_TRUE); + elm_object_focus_allow_set(cd->toolbar_btn[CONTROLBAR_ITEM_1+isBubble], EINA_FALSE); + elm_object_disabled_set(cd->toolbar_btn[CONTROLBAR_ITEM_1+isBubble], EINA_TRUE); + + elm_object_item_disabled_set(cd->toolbar_item_top[CONTROLBAR_ITEM_2+isBubble], EINA_TRUE); + elm_object_focus_allow_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], EINA_FALSE); + elm_object_disabled_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], EINA_TRUE); + } + } else { + if (cd->toolbar_item_top[CONTROLBAR_ITEM_1]) { + elm_object_item_disabled_set(cd->toolbar_item_top[CONTROLBAR_ITEM_1+isBubble], EINA_FALSE); + elm_object_focus_allow_set(cd->toolbar_btn[CONTROLBAR_ITEM_1+isBubble], EINA_TRUE); + elm_object_disabled_set(cd->toolbar_btn[CONTROLBAR_ITEM_1+isBubble], EINA_FALSE); + + elm_object_item_disabled_set(cd->toolbar_item_top[CONTROLBAR_ITEM_2+isBubble], EINA_FALSE); + elm_object_focus_allow_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], EINA_TRUE); + elm_object_disabled_set(cd->toolbar_btn[CONTROLBAR_ITEM_2+isBubble], EINA_FALSE); + } + } + D_LEAVE; +} + +Evas_Object *msg_ui_composer_create_navi_title_bar(void *data) +{ + D_ENTER; + + if (!data) { + D_EMSG("[ERROR] data is NULL"); + return NULL; + } - if (!data) + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + + Evas_Object *title_layout = elm_layout_add(cd->navi_bar); + elm_layout_file_set(title_layout, MSG_COMMON_EDJ, "title"); + evas_object_size_hint_weight_set(title_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(title_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(title_layout); + + return title_layout; +} + +void msg_ui_composer_navi_title_set(void *data) +{ + D_ENTER; + + if (!data) { + D_EMSG("data is NULL"); return; + } MSG_COMPOSER_VIEW_DATA_S *cd = data; PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; - if (bubble_data->contactId > 0) { - if (bubble_data->threadName[0] != '\0') - elm_object_item_text_set(cd->navi_it, bubble_data->threadName); - else - elm_object_item_text_set(cd->navi_it, dgettext("sys_string", "IDS_COM_BODY_NO_NAME")); + if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { + elm_object_part_text_set(cd->navi_title_layout, "title_text", MSGC_STR_NEW_MESSAGE); + } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER){ + Evas_Object *title_button = NULL; + + elm_object_part_text_set(cd->navi_title_layout, "title_text", ""); // text part clear first + + title_button = elm_button_add(cd->navi_bar); + + elm_object_theme_set(title_button, cd->th); + elm_object_style_set(title_button, "title_button"); + + evas_object_size_hint_weight_set(title_button, 0.0, 0.0); + evas_object_size_hint_align_set(title_button, EVAS_HINT_FILL, EVAS_HINT_FILL); + + if (bubble_data->addr_list.addr_cnt == 1) { + if (bubble_data->addr_list.addr_info[0].contact_id > 0 && bubble_data->addr_list.addr_info[0].name[0] != '\0') + elm_object_text_set(title_button, bubble_data->addr_list.addr_info[0].name); + else + elm_object_text_set(title_button, bubble_data->addr_list.addr_info[0].address); + } else if (bubble_data->addr_list.addr_cnt > 1) { + char title_text[DEF_BUF_LEN+1] = {0,}; + + if (bubble_data->addr_list.addr_info[0].contact_id > 0 && bubble_data->addr_list.addr_info[0].name[0] != '\0') + snprintf(title_text, sizeof(title_text), "%s +%d", bubble_data->addr_list.addr_info[0].name, bubble_data->addr_list.addr_cnt-1); + else + snprintf(title_text, sizeof(title_text), "%s +%d", bubble_data->addr_list.addr_info[0].address, bubble_data->addr_list.addr_cnt-1); + + elm_object_text_set(title_button, title_text); + } else { + elm_object_text_set(title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + } + + evas_object_show(title_button); + elm_object_part_content_set(cd->navi_title_layout, "title_btn", title_button); + evas_object_smart_callback_add(title_button, "clicked", msg_ui_bubble_title_button_clicked_cb, cd); + + bubble_data->title_button = title_button; } else { - if (bubble_data->threadAddr[0] != '\0') - elm_object_item_text_set(cd->navi_it, bubble_data->threadAddr); - else - elm_object_item_text_set(cd->navi_it, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + D_EMSG("Invalid msg_ui_mode [%d]", cd->msg_ug_mode); + return; } - - D_LEAVE; } diff --git a/composer/src/ui-composer/msg-ui-composer-pageduration.c b/composer/src/ui-composer/msg-ui-composer-pageduration.c new file mode 100755 index 0000000..5b56bb2 --- /dev/null +++ b/composer/src/ui-composer/msg-ui-composer-pageduration.c @@ -0,0 +1,180 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/* includes*/ +#include "msg-ui-composer-common.h" +#include "msg-ui-composer-util.h" +#include "msg-ui-composer-message.h" +#include "msg-ui-composer-pageduration.h" +#include "msg-ui-composer-popup.h" +#include "msg-ui-composer-main.h" + +#define MSGC_PAGE_DURATION_MAX 99 +#define MSGC_PAGE_DURATION_MIN 5 +#define CUSTOM_TIME_CHAR_MAX 2 + +static void __msgc_pageduration_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + D_MSG_RETM_IF(data == NULL, "data param is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + int page_duration = 0; + const char *duration = NULL; + + duration = elm_entry_entry_get(cd->page_duration_entry); + if (!duration) { + D_EMSG("duration is NULL"); + return; + } + + page_duration = atoi(duration); + D_MSG("page_duration is %d", page_duration); + + if (page_duration < MSGC_PAGE_DURATION_MIN || page_duration > MSGC_PAGE_DURATION_MAX) { + elm_entry_entry_set(cd->page_duration_entry, "5"); + elm_entry_cursor_end_set(cd->page_duration_entry); + return; + } + + /*save pageduration */ + cd->page_duration = page_duration; + + msg_ui_composer_toolbar_top_update(cd); + + MSGC_EVAS_OBJECT_DEL(cd->popup_conform); + MSGC_EVAS_OBJECT_DEL(cd->custom_popup); + cd->page_duration_entry = NULL; +} + +static void __msgc_pageduration_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + D_MSG_RETM_IF(data == NULL, "data param is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + + MSGC_EVAS_OBJECT_DEL(cd->popup_conform); + MSGC_EVAS_OBJECT_DEL(cd->custom_popup); + cd->page_duration_entry = NULL; +} + +int msg_ui_composer_pageduration_value_get(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, MSGC_PAGE_DURATION_MIN, "Composer Data is NULL"); + int page_duration = MSGC_PAGE_DURATION_MIN; + + if (cd->page_duration != 0) + page_duration = cd->page_duration; + else + page_duration = COMPOSER_PAGE_DEFAULT_DURATION; + + return page_duration; +} + +void msg_ui_composer_pageduration_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + Evas_Object *btn1 = NULL; + Evas_Object *btn2 = NULL; + Evas_Object *layout = NULL; + Evas_Object *content = NULL; + Evas_Object *entry = NULL; + Evas_Object *conform = NULL; + Evas_Object *popup = NULL; + Elm_Entry_Filter_Limit_Size limit_filter; + Elm_Entry_Filter_Accept_Set accept_filter; + int page_duration = MSGC_PAGE_DURATION_MIN; + char duration_str[DEF_BUF_LEN] = {0,}; + char popup_msg[DEF_BUF_LEN] = {0,}; + + content = elm_layout_add(cd->main_window); + conform = msg_ui_composer_conformant_create(cd->main_window, content); + if (!conform) { + D_EMSG("conform is NULL"); + return; + } + + cd->popup_conform = conform; + + page_duration = msg_ui_composer_pageduration_value_get(cd); + D_MSG("Loaded duration is %d", page_duration); + snprintf(duration_str, sizeof(duration_str), "%d", page_duration); + + /* create custom popup inner layout */ + layout = elm_layout_add(content); + elm_layout_file_set(layout, MSGC_UI_DEFAULT_EDJ, "composer/popup/entryview"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + snprintf(popup_msg, sizeof(popup_msg), _MSGSTR("IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS"), MSGC_PAGE_DURATION_MIN); + elm_object_part_text_set(layout, "elm.text", popup_msg); + + entry = elm_entry_add(content); + elm_entry_single_line_set(entry, EINA_TRUE); + limit_filter.max_char_count = CUSTOM_TIME_CHAR_MAX; + elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter); + elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NUMBERONLY); + accept_filter.accepted = "0123456789"; + accept_filter.rejected = NULL; + elm_entry_markup_filter_append(entry, elm_entry_filter_accept_set, &accept_filter); + /* fix font size */ + elm_entry_text_style_user_push(entry, "DEFAULT='font_size=32'"); + elm_object_text_set(entry, duration_str); + elm_entry_cursor_end_set(entry); + elm_object_part_content_set(layout, "swl.entry", entry); + evas_object_show(entry); + evas_object_show(layout); + + cd->page_duration_entry = entry; + + /* create popup */ + popup = msg_ui_composer_custom_popup_create(cd, NULL, content, layout); + if (!popup) { + D_EMSG("popup is NULL"); + goto error_return; + } + + /* create button */ + btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, _SYSSTR("IDS_COM_SK_OK")); + elm_object_focus_allow_set(btn1, EINA_FALSE); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", __msgc_pageduration_ok_clicked_cb, cd); + btn2 = elm_button_add(popup); + elm_object_style_set(btn2, "popup_button/default"); + elm_object_text_set(btn2, _SYSSTR("IDS_COM_SK_CANCEL")); + elm_object_focus_allow_set(btn2, EINA_FALSE); + elm_object_part_content_set(popup, "button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", __msgc_pageduration_cancel_clicked_cb, cd); + evas_object_show(popup); + + cd->custom_popup = popup; + + elm_object_focus_set(entry, EINA_TRUE); + + D_LEAVE; + return; + +error_return: + + MSGC_EVAS_OBJECT_DEL(cd->page_duration_entry); + MSGC_EVAS_OBJECT_DEL(content); + MSGC_EVAS_OBJECT_DEL(cd->popup_conform); + + D_LEAVE; +} diff --git a/composer/src/ui-composer/msg-ui-composer-popup.c b/composer/src/ui-composer/msg-ui-composer-popup.c index 6fa49f7..9daf196 100755 --- a/composer/src/ui-composer/msg-ui-composer-popup.c +++ b/composer/src/ui-composer/msg-ui-composer-popup.c @@ -14,6 +14,7 @@ * limitations under the License. */ + #include "msg-ui-composer-common.h" #include "msg-ui-composer-util.h" #include "msg-ui-composer-popup.h" @@ -29,7 +30,7 @@ void msg_ui_composer_popup_delete_all(void *data) D_ENTER; MSG_COMPOSER_VIEW_DATA_S *cd = data; - Evas_Object * popup; + Evas_Object *popup; EINA_LIST_FREE(cd->popup_list, popup) { if (popup) evas_object_del(popup); @@ -49,7 +50,7 @@ void msg_ui_composer_status_popup_response_cb(void *data, Evas_Object *obj, void D_LEAVE; } -static void __popup_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info) +static void __popup_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { D_ENTER; MSG_COMPOSER_VIEW_DATA_S *cd; @@ -62,8 +63,7 @@ static void __popup_delete_cb(void *data, Evas * e, Evas_Object *obj, void *even cd = (MSG_COMPOSER_VIEW_DATA_S *)data; - D_PRINT("delete = %s[%p]", (char *)data, obj); - + D_PRINT("delete = [%p]", obj); if (cd->popup_list) { D_MSG("popup list count = %d", eina_list_count(cd->popup_list)); @@ -72,41 +72,20 @@ static void __popup_delete_cb(void *data, Evas * e, Evas_Object *obj, void *even msg_ui_composer_last_focus_load(cd); } } else { - D_EMSG("popup_list is not exist"); } D_LEAVE; } -Evas_Object *msg_ui_composer_notify_show(Evas_Object *parent, const char *msg, int time, MSGC_NOTIFY_ORIENT orient, bool is_horizon_mode) +void msg_ui_composer_status_noti_show(const char *msg) { D_ENTER; + D_MSG_RETM_IF(msg == NULL, "msg is NULL"); - Evas_Object *notify; - Evas_Object *content_layout; - - notify = elm_notify_add(parent); - elm_notify_orient_set(notify, orient); - - content_layout = elm_layout_add(notify); - elm_object_content_set(notify, content_layout); - - if (is_horizon_mode == true) - elm_layout_theme_set(content_layout, "standard", "selectioninfo", "horizontal/bottom_12"); - else - elm_layout_theme_set(content_layout, "standard", "selectioninfo", "vertical/bottom_12"); - - if (msg) - elm_object_text_set(content_layout, msg); - - if (time) - elm_notify_timeout_set(notify, time); - - evas_object_show(notify); + status_message_post(msg); D_LEAVE; - return notify; } /* @@ -145,6 +124,39 @@ Evas_Object *msg_ui_composer_status_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, con return popup; } +/* + TEXT && BUTTON +*/ +Evas_Object *msg_ui_composer_status_btn_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, const char *msg, int time, const char *btn_text) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL"); + D_MSG_RETVM_IF(cd->main_window == NULL, NULL, "main window is NULL"); + + Evas_Object *popup = NULL; + + popup = msg_ui_composer_status_popup_show(cd, msg, time); + D_MSG_RETVM_IF(popup == NULL, NULL, "popup is NULL"); + + if (btn_text) { + Evas_Object *btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, btn_text); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", msg_ui_composer_status_popup_response_cb, popup); + } + + /* give a focus to popup. + * EFL Internally, focus will be set to button of popup. + * Because popup which is a container widget can't have focus according to elementary policy + */ + evas_object_show(popup); + elm_object_focus_set(popup, EINA_TRUE); + + return popup; +} + + Evas_Object *msg_ui_composer_progress_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, const char *msg) { D_ENTER; @@ -156,7 +168,8 @@ Evas_Object *msg_ui_composer_progress_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, c Evas_Object *lb; popup = elm_popup_add(cd->main_window); - if (!popup) return NULL; + if (!popup) + return NULL; Evas_Object *box; box = elm_box_add(popup); @@ -170,12 +183,11 @@ Evas_Object *msg_ui_composer_progress_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, c evas_object_show(progressbar); elm_progressbar_pulse(progressbar, EINA_TRUE); - lb = elm_label_add(popup); elm_object_style_set(lb, "popup_description/default"); evas_object_size_hint_align_set(lb, EVAS_HINT_FILL, 0.0); evas_object_size_hint_weight_set(lb, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_object_text_set(lb,msg); + elm_object_text_set(lb, msg); evas_object_show(lb); elm_box_pack_end(box, lb); @@ -196,7 +208,7 @@ Evas_Object *msg_ui_composer_progress_popup_show(MSG_COMPOSER_VIEW_DATA_S *cd, c /* list type popup */ -Evas_Object *msg_ui_composer_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char * title, Evas_Object *list) +Evas_Object *msg_ui_composer_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char *title, Evas_Object *list, const char *style) { D_ENTER; D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL"); @@ -207,10 +219,14 @@ Evas_Object *msg_ui_composer_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, con if (popup == NULL) return NULL; - elm_object_style_set(popup, "menustyle"); + if (style) + elm_object_style_set(popup, style); + else + elm_object_style_set(popup, "menustyle"); + if (title) - elm_object_part_text_set(popup,"title,text", title); + elm_object_part_text_set(popup, "title,text", title); if (list) elm_object_content_set(popup, list); @@ -225,29 +241,70 @@ Evas_Object *msg_ui_composer_list_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, con return popup; } -Eina_Bool msg_ui_composer_popup_exist(void * data) +/* + custom type popup +*/ +Evas_Object *msg_ui_composer_custom_popup_create(MSG_COMPOSER_VIEW_DATA_S *cd, const char *title, Evas_Object *parent, Evas_Object *layout) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, NULL, "Composer data is NULL"); + D_MSG_RETVM_IF(parent == NULL, NULL, "parent param is NULL"); + + Evas_Object *popup; + popup = elm_popup_add(parent); + if (popup == NULL) + return NULL; + + elm_object_style_set(popup, "customstyle"); + + if (title) + elm_object_part_text_set(popup, "title,text", title); + + if (layout) + elm_object_content_set(popup, layout); + + evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, __popup_delete_cb, cd); + + cd->popup_list = eina_list_append(cd->popup_list, popup); + + evas_object_show(popup); + + D_LEAVE; + return popup; +} + +Eina_Bool msg_ui_composer_popup_exist(void *data) { MSG_COMPOSER_VIEW_DATA_S *cd; cd = (MSG_COMPOSER_VIEW_DATA_S *)data; - if (!cd) return EINA_FALSE; - if (!cd->popup_list) return EINA_FALSE; + if (!cd) + return EINA_FALSE; + + if (!cd->popup_list) + return EINA_FALSE; + D_MSG("popup count = %d", eina_list_count(cd->popup_list)); - if(eina_list_count(cd->popup_list)>0) return EINA_TRUE; - else return EINA_FALSE; + + if (eina_list_count(cd->popup_list) > 0) + return EINA_TRUE; + else + return EINA_FALSE; } -void msg_ui_composer_popup_focus(void * data) +void msg_ui_composer_popup_focus(void *data) { MSG_COMPOSER_VIEW_DATA_S *cd; Evas_Object *p; cd = (MSG_COMPOSER_VIEW_DATA_S *)data; - if (!cd || !cd->popup_list) return; + if (!cd || !cd->popup_list) + return; p = eina_list_nth(cd->popup_list,0); - if (!p) return; + if (!p) + return; elm_object_focus_set(p, EINA_TRUE); } diff --git a/composer/src/ui-composer/msg-ui-composer-predictsearch.c b/composer/src/ui-composer/msg-ui-composer-predictsearch.c index 743c2c8..999b830 100755 --- a/composer/src/ui-composer/msg-ui-composer-predictsearch.c +++ b/composer/src/ui-composer/msg-ui-composer-predictsearch.c @@ -14,6 +14,7 @@ * limitations under the License. */ + #include "msg-ui-composer-data.h" #include "msg-ui-composer-util.h" #include "msg-ui-composer-common.h" @@ -270,13 +271,9 @@ static int __predictsearch_genlist_item_append(PREDICTSEARCH_S *ps, const int int param_get_int; int param_get_addr; int param_get_name; - int param_get_first; - int param_get_last; const char *recipient; const char *display; - const char *first, *last; - char * maked_display; int i = 0 ; Evas_Object * genlist = ps->glist_ps; @@ -284,22 +281,16 @@ static int __predictsearch_genlist_item_append(PREDICTSEARCH_S *ps, const int param_get_int = CTS_LIST_NUM_CONTACT_ID_INT; param_get_addr = CTS_LIST_NUM_NUMBER_STR; param_get_name = CTS_LIST_NUM_CONTACT_DISPLAY_STR; - param_get_first = CTS_LIST_NUM_CONTACT_FIRST_STR; - param_get_last = CTS_LIST_NUM_CONTACT_LAST_STR; } else if (ps->state == COMPOSER_PREDICTSEARCH_LOG) { /*Nothing to Do*/ } else if (ps->state == COMPOSER_PREDICTSEARCH_NUMBER) { param_get_int = CTS_LIST_NUM_CONTACT_ID_INT; param_get_addr = CTS_LIST_NUM_NUMBER_STR; param_get_name = CTS_LIST_NUM_CONTACT_DISPLAY_STR; - param_get_first = CTS_LIST_NUM_CONTACT_FIRST_STR; - param_get_last = CTS_LIST_NUM_CONTACT_LAST_STR; } else if (ps->state == COMPOSER_PREDICTSEARCH_EMAIL){ param_get_int = CTS_LIST_EMAIL_CONTACT_ID_INT; param_get_addr = CTS_LIST_EMAIL_ADDR_STR; param_get_name = CTS_LIST_EMAIL_CONTACT_DISPLAY_STR; - param_get_first = CTS_LIST_EMAIL_CONTACT_FIRST_STR; - param_get_last = CTS_LIST_EMAIL_CONTACT_LAST_STR; } else { ps->state = COMPOSER_PREDICTSEARCH_END; D_MSG("Predict State is END"); @@ -335,21 +326,6 @@ static int __predictsearch_genlist_item_append(PREDICTSEARCH_S *ps, const int strncpy(ct_item->display_name, display, COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX); - } else { - - first = contacts_svc_value_get_str(row_info, param_get_first); - last = contacts_svc_value_get_str(row_info, param_get_last); - maked_display = make_display_name(first, last); - if (maked_display) { - strncpy(ct_item->display_name, - maked_display, - COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX); - g_free(maked_display); - } else { - strncpy(ct_item->display_name, - recipient, - COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX); - } } elm_genlist_item_append(genlist, &ps->itc_2line, ct_item, NULL, ELM_GENLIST_ITEM_NONE, __predictsearch_sel, ps->cd); diff --git a/composer/src/ui-composer/msg-ui-composer-recipient-callback.c b/composer/src/ui-composer/msg-ui-composer-recipient-callback.c index 998a914..18e0d27 100755 --- a/composer/src/ui-composer/msg-ui-composer-recipient-callback.c +++ b/composer/src/ui-composer/msg-ui-composer-recipient-callback.c @@ -14,6 +14,7 @@ * limitations under the License. */ + #include "msg-ui-composer-common.h" #include "msg-ui-composer-util.h" #include "msg-ui-composer-popup.h" @@ -21,11 +22,11 @@ #include "msg-ui-composer-predictsearch.h" #include "msg-ui-composer-recipient.h" #include "msg-ui-composer-recipient-callback.h" +#include "msg-ui-composer-attachment.h" /*================================================================================================== * FUNCTION IMPLEMENTATIONS *==================================================================================================*/ - void msg_ui_recipient_bt_clicked_cb(void *data, Evas_Object *obj, void *event_info) { D_ENTER; @@ -36,6 +37,9 @@ void msg_ui_recipient_bt_clicked_cb(void *data, Evas_Object *obj, void *event_in const char *bt_label = elm_object_text_get(obj); D_MSG("clicked bt label [%s]", bt_label); + /* temporarily, set focus to back_btn to resolve invalid focus tree issue of ly_bt show/hide*/ + elm_object_focus_set(cd->back_btn, EINA_TRUE); + if (!g_strcmp0(bt_label, MSGC_STR_RECENT)) { msg_ui_composer_external_call(cd, COMPOSER_EXT_TYPE_LOG, NULL); } else if (!g_strcmp0(bt_label, MSGC_STR_CONTACT)) { @@ -50,9 +54,9 @@ void msg_ui_recipient_bt_clicked_cb(void *data, Evas_Object *obj, void *event_in void msg_ui_recipient_multibuttonentry_focused_cb(void *data, Evas_Object *obj, void *event_info) { D_ENTER; - MSG_COMPOSER_VIEW_DATA_S *cd; - RECIPIENT_S *rd; - PREDICTSEARCH_S *ps; + MSG_COMPOSER_VIEW_DATA_S *cd = NULL; + RECIPIENT_S *rd = NULL; + PREDICTSEARCH_S *ps = NULL; cd = data; D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); @@ -64,6 +68,9 @@ void msg_ui_recipient_multibuttonentry_focused_cb(void *data, Evas_Object *obj, D_MSG_RETM_IF(rd == NULL, "Predict Data is NULL"); msg_ui_composer_last_focused_entry_set(cd, obj); + /* it is added to prevent unfocused_cb of entry on mbe */ + Elm_Object_Item *item = elm_multibuttonentry_selected_item_get(obj); + elm_multibuttonentry_item_selected_set(item, EINA_FALSE); if (ps->IsShow == EINA_FALSE) msg_ui_composer_bt_show(rd); @@ -95,6 +102,11 @@ void msg_ui_recipient_multibuttonentry_clicked_cb(void *data, Evas_Object *obj, MSG_COMPOSER_VIEW_DATA_S *cd = data; D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + int attach_count = msg_ui_composer_get_attach_count(cd); + + if (attach_count > 1) + msg_ui_composer_contract_attach_list(cd); + if(msg_ui_composer_popup_exist(cd) == EINA_TRUE) { msg_ui_composer_popup_focus(cd); return; @@ -119,6 +131,17 @@ void msg_ui_recipient_entry_changed_cb(void *data, Evas_Object *obj, void *event if (recipient_str == NULL) return; + COMPOSER_RECP_ADDR_E addr_type = COMPOSER_RECP_ADDR_NONE; + if (recipient_str && strlen(recipient_str)) { + addr_type = msg_ui_composer_recipient_type_get(recipient_str); + } + + msg_ui_composer_recipient_addr_type_set(rd, addr_type); + D_MSG("recipient is invalid recipient addr_type = %d", addr_type); + + D_MSG("saved_str = %s", saved_str); + D_MSG("recipient_str = %s", recipient_str); + if (g_strcmp0(saved_str, recipient_str) == 0) { D_MSG("It is same string before str(%s), current str(%s)", saved_str, recipient_str); g_free(recipient_str); @@ -140,7 +163,7 @@ void msg_ui_recipient_entry_changed_cb(void *data, Evas_Object *obj, void *event D_LEAVE; } -void msg_ui_recipient_multibuttonentry_item_selected_cb(void *data, Evas_Object *obj, void *event_info) +void msg_ui_recipient_multibuttonentry_item_clicked_cb(void *data, Evas_Object *obj, void *event_info) { D_ENTER; MSG_COMPOSER_VIEW_DATA_S *cd = data; @@ -160,27 +183,35 @@ void msg_ui_recipient_multibuttonentry_item_selected_cb(void *data, Evas_Object return; } - elm_multibuttonentry_item_selected_set(item, EINA_FALSE); - + rd->sel_r_item = r_item; + rd->sel_mbe_item = item; msg_ui_composer_last_focused_entry_set(cd, rd->mbe); + msg_ui_composer_recipient_select_popup_create(cd); - Evas_Object *entry = elm_multibuttonentry_entry_get(rd->mbe); - char *entry_txt = elm_entry_markup_to_utf8(elm_entry_entry_get(entry)); - if (entry_txt) { - if (strlen(entry_txt) > 0) - elm_multibuttonentry_item_append(rd->mbe, entry_txt, NULL, NULL); + D_LEAVE; +} - g_free(entry_txt); - } +static Eina_Bool __show_invalid_address_popup(void *data) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETVM_IF(cd == NULL, EINA_FALSE, "Composer Data is NULL"); - if (r_item->type != COMPOSER_RECP_ADDR_INVALID && r_item->index > 0 ) { - } else { - elm_entry_entry_set(entry, elm_object_item_text_get(item)); - elm_entry_cursor_line_end_set(entry); - elm_object_item_del(item); + RECIPIENT_S *rd = cd->recipient; + D_MSG_RETVM_IF(rd == NULL, EINA_FALSE, "recipient data is NULL"); + + rd->notify_popup_idler = NULL; + + if (!msg_ui_composer_popup_exist(cd) && !cd->loaded_ug && !cd->loaded_aul) { + /* show popup when message window has a top focus.(active state of app) */ + if (elm_win_focus_get(cd->main_window) == EINA_TRUE) { + if (cd->isclosed == false) + msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK); + } } D_LEAVE; + return EINA_FALSE; } Eina_Bool msg_ui_recipient_multibuttonentry_item_verify_cb(Evas_Object *obj, const char *item_label, void *item_data, void *data) @@ -196,6 +227,8 @@ Eina_Bool msg_ui_recipient_multibuttonentry_item_verify_cb(Evas_Object *obj, con RECIPIENT_ITEM_S *r_item = NULL; + msg_ui_composer_recipient_addr_type_set(rd, COMPOSER_RECP_ADDR_NONE); + /*Check recipient count*/ int r_count = msg_ui_composer_recipient_count_get(rd); if (r_count >= COMPOSER_RECIPIENT_COUNT_MAX) { @@ -223,10 +256,20 @@ Eina_Bool msg_ui_recipient_multibuttonentry_item_verify_cb(Evas_Object *obj, con if (r_item->type == COMPOSER_RECP_ADDR_INVALID) { D_EMSG("recipient is invalid recipient"); - msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_INVALID_RECP); + msg_ui_composer_recipient_addr_type_set(rd, COMPOSER_RECP_ADDR_INVALID); + + if (rd->notify_popup_idler) { + ecore_idler_del(rd->notify_popup_idler); + rd->notify_popup_idler = NULL; + } + rd->notify_popup_idler = ecore_idler_add(__show_invalid_address_popup, cd); + + g_free(r_item); + return EINA_FALSE; } g_free(r_item); + D_LEAVE; return EINA_TRUE; } @@ -256,12 +299,20 @@ void msg_ui_recipient_multibuttonentry_item_added_cb(void *data, Evas_Object *ob } else { D_EMSG("button label is null"); } - } else { recipient_item = elm_object_item_data_get(item); D_MSG(" recipient_item index [%d], recipient_item recipient [%s], recipient_item display_name [%s], recipient_item->image_path [%s]", recipient_item->index, recipient_item->recipient, recipient_item->display_name, recipient_item->image_path); } + if (recipient_item) { + if (recipient_item->type == COMPOSER_RECP_ADDR_VALID_NUMBER || recipient_item->type == COMPOSER_RECP_ADDR_VALID_EMAIL) { + msg_ui_composer_message_type_check_and_change(cd); + } else { + D_EMSG("Invalid recipient added!!"); + } + } else { + D_EMSG("No recipient item"); + } } void msg_ui_recipient_multibuttonentry_item_deleted_cb(void *data, Evas_Object *obj, void *event_info) @@ -280,5 +331,35 @@ void msg_ui_recipient_multibuttonentry_item_deleted_cb(void *data, Evas_Object * D_MSG("===== END of recipient_item free ====="); g_free(recipient_item); + msg_ui_composer_message_type_check_and_change(cd); + D_LEAVE; +} + +void msg_ui_recipient_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + D_ENTER; + RECIPIENT_S *rd = (RECIPIENT_S *)data; + D_MSG_RETM_IF(rd == NULL, "rd is NULL"); + D_MSG_RETM_IF(obj == NULL, "obj is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)rd->cd; + Evas_Coord x = 0; + Evas_Coord y = 0; + Evas_Coord w = 0; + Evas_Coord h = 0; + + evas_object_geometry_get(obj, &x, &y, &w, &h); + D_MSG("recipient box x = %d, y = %d, w = %d, h = %d", x, y, w, h); + if (rd->recipient_h != h) { + rd->recipient_h = h; + + if (cd->isclosed == false) { /* evas_object_resize makes bs during closing composer*/ + Evas_Object *entry = elm_multibuttonentry_entry_get(rd->mbe); + int keypad_h = msg_ui_composer_get_keypad_height(entry); + + msg_ui_composer_change_body_scroll_size(cd, keypad_h); + } + } + D_LEAVE; } + diff --git a/composer/src/ui-composer/msg-ui-composer-recipient.c b/composer/src/ui-composer/msg-ui-composer-recipient.c index 0b5f845..c908bc1 100755 --- a/composer/src/ui-composer/msg-ui-composer-recipient.c +++ b/composer/src/ui-composer/msg-ui-composer-recipient.c @@ -14,33 +14,471 @@ * limitations under the License. */ + /* includes*/ #include "msg-ui-composer-recipient.h" #include "msg-ui-composer-util.h" #include "msg-ui-composer-common.h" #include "msg-ui-composer-recipient-callback.h" #include "msg-ui-composer-message.h" +#include "msg-ui-composer-popup.h" +#include "msg-ui-composer-external.h" /*================================================================================================== * FUNCTION IMPLEMENTATIONS *==================================================================================================*/ -static void __mbe_delete_cb(void *data, Evas * e, Evas_Object *obj, void *event_info) +static void __change_number_popup_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + + RECIPIENT_S *rd = cd->recipient; + D_MSG_RETM_IF(rd == NULL, "Recipient Data is NULL"); + + MSGC_EVAS_OBJECT_DEL(rd->popup_change_number); + D_LEAVE; +} + +static void __change_number_popup_list_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + + RECIPIENT_S *rd = cd->recipient; + D_MSG_RETM_IF(rd == NULL, "recipient data Data is NULL"); + + RECIPIENT_ITEM_S *r_item = evas_object_data_get(obj, "selected_item");; + D_MSG_RETM_IF(r_item == NULL, "Recipient Data is NULL"); + + Elm_Object_Item *item = (Elm_Object_Item *)event_info; + elm_genlist_item_selected_set(item, EINA_FALSE); + + CONTACT_ITEM_S *ct_item = (CONTACT_ITEM_S *)elm_object_item_data_get(item); + D_MSG_RETM_IF(ct_item == NULL, "ct_item is NULL"); + + if (g_strcmp0(r_item->recipient, ct_item->recipient) == 0) { + D_MSG("same recipient %s", ct_item->recipient); + MSGC_EVAS_OBJECT_DEL(rd->popup_change_number); + return; + } + + if (COMPOSER_RETURN_RECIPIENT_DUPLICATE == msg_ui_composer_recipient_duplicate_check(cd->recipient, ct_item->recipient)) { + msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_DUP_RECP); + } else { + memset(r_item->recipient, 0x00, sizeof(r_item->recipient)); + strncpy(r_item->recipient, ct_item->recipient, sizeof(r_item->recipient) - 1); + r_item->type = msg_ui_composer_recipient_type_get(r_item->recipient); + msg_ui_composer_message_type_check_and_change(cd); + } + + MSGC_EVAS_OBJECT_DEL(rd->popup_change_number); + + return; +} + +static char *__contact_type_string_get(int type, int contact_type) +{ + static char return_string[DEF_BUF_LEN + 1] = { 0, }; + memset(return_string, 0, DEF_BUF_LEN + 1); + + if (type == COMPOSER_ADDR_TYPE_NUMBER) { + switch (contact_type) { + case CTS_NUM_TYPE_HOME: + strncpy(return_string, _SYSSTR("IDS_COM_BODY_HOME"), sizeof(return_string) - 1); + break; + case CTS_NUM_TYPE_WORK: + strncpy(return_string, _SYSSTR("IDS_COM_BODY_WORK"), sizeof(return_string) - 1); + break; + case CTS_NUM_TYPE_CELL: + strncpy(return_string, _SYSSTR("IDS_COM_BODY_MOBILE"), sizeof(return_string) - 1); + break; + default: + strncpy(return_string, _MSGSTR("IDS_MSGF_BODY_OTHER"), sizeof(return_string) - 1); + break; + } + } else if (type == COMPOSER_ADDR_TYPE_EMAIL) { + switch (contact_type) { + case CTS_EMAIL_TYPE_HOME: + strncpy(return_string, _SYSSTR("IDS_COM_BODY_HOME"), sizeof(return_string) - 1); + break; + case CTS_EMAIL_TYPE_WORK: + strncpy(return_string, _SYSSTR("IDS_COM_BODY_WORK"), sizeof(return_string) - 1); + break; + default: + strncpy(return_string, _MSGSTR("IDS_MSGF_BODY_OTHER"), sizeof(return_string) - 1); + break; + } + } else { + D_EMSG("Invalid number type !!!"); + strncpy(return_string, _MSGSTR("IDS_MSGF_BODY_OTHER"), sizeof(return_string) - 1); + } + + return return_string; +} + +static char *__change_number_text_get(void *data, Evas_Object *obj, const char *part) +{ + D_MSG_RETVM_IF(data == NULL, NULL, "data param is NULL"); + CONTACT_ITEM_S *ct_item = (CONTACT_ITEM_S *)data; + + if (!strcmp(part, "elm.text.1")) { + return strdup(ct_item->recipient); + } else { + return strdup(__contact_type_string_get(ct_item->type, ct_item->contact_type)); + } +} + +static void __change_number_del_cb(void *data, Evas_Object *obj) +{ + D_MSG_RETM_IF(data == NULL, "RECIPIENT_ITEM_S data is NULL"); + CONTACT_ITEM_S *ct_item = (CONTACT_ITEM_S *)data; + + if (ct_item) + free(ct_item); +} + +static void __change_number_popup_create(void *data) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + + RECIPIENT_S *rd = cd->recipient; + D_MSG_RETM_IF(rd == NULL, "Recipient Data is NULL"); + + Evas_Object *popup = NULL; + Evas_Object *genlist = NULL; + int error_code = CTS_SUCCESS; + int count = 0; + CTSstruct *contact = NULL; + GSList *get_list = NULL; + GSList *iter = NULL; + RECIPIENT_ITEM_S *r_item = NULL; + CONTACT_ITEM_S *ct_item = NULL; + + r_item = msg_ui_composer_recipient_selected_item_data_get(cd); + D_MSG_RETM_IF(r_item == NULL, "Selected Data is NULL"); + D_MSG_RETM_IF(r_item->index <= 0, "Selected index <= 0"); + + error_code = contacts_svc_get_contact(r_item->index, &contact); + if (error_code) { + D_MSG("error_code %d", error_code); + return; + } + + rd->change_number_itc.item_style = "2text.3"; + rd->change_number_itc.func.text_get = __change_number_text_get; + rd->change_number_itc.func.content_get = NULL; + rd->change_number_itc.func.state_get = NULL; + rd->change_number_itc.func.del = __change_number_del_cb; + + genlist = elm_genlist_add(cd->main_window); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_data_set(genlist, "selected_item", r_item); + + contacts_svc_struct_get_list(contact, CTS_CF_NUMBER_LIST, &get_list); + iter = get_list; + + while (NULL != iter) { + int phone_type = contacts_svc_value_get_int(iter->data, CTS_NUM_VAL_TYPE_INT); + + if (phone_type != CTS_NUM_TYPE_ASSISTANT) { + const char *content = contacts_svc_value_get_str(iter->data, CTS_NUM_VAL_NUMBER_STR); + D_MSG("[%d][%d]%s", r_item->index, phone_type, content); + + ct_item = (CONTACT_ITEM_S *)calloc(1, sizeof(CONTACT_ITEM_S)); + if (ct_item) { + ct_item->type = COMPOSER_ADDR_TYPE_NUMBER; + ct_item->contact_type = phone_type; + strncpy(ct_item->recipient, (char *)content, sizeof(ct_item->recipient) - 1); + + elm_genlist_item_append(genlist, &rd->change_number_itc, ct_item, NULL, ELM_GENLIST_ITEM_NONE, __change_number_popup_list_clicked_cb, cd); + + count++; + } else { + D_EMSG("calloc is failed"); + } + + } + + iter = g_slist_next(iter); + } + + get_list = NULL; + contacts_svc_struct_get_list(contact, CTS_CF_EMAIL_LIST, &get_list); + iter = get_list; + + while (NULL != iter) { + int email_type = contacts_svc_value_get_int(iter->data, CTS_EMAIL_VAL_TYPE_INT); + const char *content = contacts_svc_value_get_str(iter->data, CTS_EMAIL_VAL_ADDR_STR); + + D_MSG("[%d][%d]%s", r_item->index, email_type, content); + + ct_item = (CONTACT_ITEM_S *)calloc(1, sizeof(CONTACT_ITEM_S)); + if (ct_item) { + ct_item->type = COMPOSER_ADDR_TYPE_EMAIL; + ct_item->contact_type = email_type; + strncpy(ct_item->recipient, (char *)content, sizeof(ct_item->recipient) - 1); + + elm_genlist_item_append(genlist, &rd->change_number_itc, ct_item, NULL, ELM_GENLIST_ITEM_NONE, __change_number_popup_list_clicked_cb, cd); + + count++; + } else { + D_EMSG("calloc is failed"); + } + + iter = g_slist_next(iter); + } + + if (count >= 5) { + popup = msg_ui_composer_list_popup_create(cd, _SYSSTR("IDS_COM_SK_SELECT"), genlist, NULL); + } else { + Evas_Object *box = NULL; + + box = elm_box_add(cd->main_window); + evas_object_size_hint_min_set(box, MSGC_RECIPIENT_POPUP_W * elm_scale_get(), + MSGC_RECIPIENT_POPUP_LIST_H * count * elm_scale_get()); + evas_object_show(genlist); + elm_box_pack_end(box, genlist); + popup = msg_ui_composer_list_popup_create(cd, _SYSSTR("IDS_COM_SK_SELECT"), box, "min_menustyle"); + } + + Evas_Object *btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, _SYSSTR("IDS_COM_SK_CANCEL")); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", __change_number_popup_btn_clicked_cb, cd); + + rd->popup_change_number = popup; + + D_LEAVE; +} + +RECIPIENT_ITEM_S *msg_ui_composer_recipient_selected_item_data_get(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, NULL, "Composer Data is NULL"); + + RECIPIENT_S *rd = cd->recipient; + D_MSG_RETVM_IF(rd == NULL, NULL, "Recipient Data is NULL"); + + RECIPIENT_ITEM_S *r_item = NULL; + + r_item = rd->sel_r_item; + if (!r_item) { + D_EMSG("No data in Selected MBE item"); + return NULL; + } + + D_LEAVE; + + return r_item; +} + +void msg_ui_composer_recipient_selected_delete(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + + RECIPIENT_S *rd = cd->recipient; + D_MSG_RETM_IF(rd == NULL, "Recipient Data is NULL"); + + Elm_Object_Item *mbe_item = NULL; + mbe_item = rd->sel_mbe_item; + if (!mbe_item) { + D_EMSG("There is no Selected MBE item"); + return; + } + + elm_object_item_del(mbe_item); + msg_ui_composer_message_type_check_and_change(cd); + + D_LEAVE; +} + +void msg_ui_composer_recipient_selected_edit(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETM_IF(cd == NULL, "Composer Data is NULL"); + + RECIPIENT_S *rd = cd->recipient; + D_MSG_RETM_IF(rd == NULL, "Recipient Data is NULL"); + + Elm_Object_Item *mbe_item = NULL; + Evas_Object *sc_entry = NULL; + const char *label_selected_bt = NULL; + + mbe_item = rd->sel_mbe_item; + if (!mbe_item) { + D_EMSG("There is no Selected MBE item"); + return; + } + + label_selected_bt = elm_object_item_text_get(mbe_item); + + sc_entry = elm_multibuttonentry_entry_get(rd->mbe); + elm_entry_entry_set(sc_entry, label_selected_bt); + elm_entry_cursor_line_end_set(sc_entry); + + elm_object_item_del(mbe_item); + msg_ui_composer_message_type_check_and_change(cd); + + D_LEAVE; +} + +static void __selected_popup_list_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + RECIPIENT_S *rd = cd->recipient; + D_MSG_RETM_IF(rd == NULL, "Recipient Data is NULL"); + + Elm_Object_Item *item = (Elm_Object_Item *)event_info; + elm_list_item_selected_set(item, EINA_FALSE); + + elm_multibuttonentry_item_selected_set(rd->sel_mbe_item, EINA_FALSE); + + char *label = (char *)elm_object_item_text_get(item); + + if (cd->isAppControl) { + if (!strcmp(label, _SYSSTR("IDS_COM_OPT_DELETE"))) { + msg_ui_composer_recipient_selected_delete(cd); + } else if (!strcmp(label,_SYSSTR("IDS_COM_BODY_EDIT"))) { + msg_ui_composer_recipient_selected_edit(cd); + } else { + D_EMSG("Invalid list type!!"); + } + } else { + if (!strcmp(label, _SYSSTR("IDS_COM_OPT_DELETE"))) { + msg_ui_composer_recipient_selected_delete(cd); + } else if (!strcmp(label,_SYSSTR("IDS_COM_BODY_EDIT"))) { + msg_ui_composer_recipient_selected_edit(cd); + } else if (!strcmp(label, _MSGSTR("IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"))) { + __change_number_popup_create(cd); + } else if (!strcmp(label, _MSGSTR("IDS_MSGC_OPT_VIEW_CONTACT"))) { + RECIPIENT_ITEM_S *r_item = msg_ui_composer_recipient_selected_item_data_get(cd); + msg_ui_composer_launch_contact_detail_ug(cd, r_item->index); + /* temporarily, set focus to back_btn to resolve invalid focus tree issue */ + elm_object_focus_set(cd->back_btn, EINA_TRUE); + } else if (!strcmp(label, _SYSSTR("IDS_COM_OPT_ADD_TO_CONTACTS"))) { + RECIPIENT_ITEM_S *r_item = msg_ui_composer_recipient_selected_item_data_get(cd); + msg_ui_composer_launch_contact_list_ug(cd, CT_UG_REQUEST_UPDATE_WITH_NUM, r_item->recipient); + /* temporarily, set focus to back_btn to resolve invalid focus tree issue */ + elm_object_focus_set(cd->back_btn, EINA_TRUE); + } else { + D_EMSG("Invalid list type!!"); + } + } + + rd->sel_r_item = NULL; + rd->sel_mbe_item = NULL; + MSGC_EVAS_OBJECT_DEL(rd->popup_selected); + + D_LEAVE; +} + +static void __selected_popup_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + RECIPIENT_S *rd = cd->recipient; + + elm_multibuttonentry_item_selected_set(rd->sel_mbe_item, EINA_FALSE); + rd->sel_r_item = NULL; + rd->sel_mbe_item = NULL; + MSGC_EVAS_OBJECT_DEL(rd->popup_selected); + + D_LEAVE; +} + +void msg_ui_composer_recipient_select_popup_create(void *data) +{ + D_ENTER; + D_MSG_RETM_IF(data == NULL, "data param is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + RECIPIENT_S *rd = cd->recipient; + D_MSG_RETM_IF(rd == NULL, "recipient data is NULL"); + + Evas_Object *popup = NULL; + Evas_Object *list = NULL; + Evas_Object *btn1 = NULL; + RECIPIENT_ITEM_S *r_item = NULL; + char title_str[DEF_BUF_LEN + 1] = {0,}; + char *markup_title_str = NULL; + + r_item = msg_ui_composer_recipient_selected_item_data_get(cd); + if (!r_item) { + D_EMSG("r_item is NULL"); + return; + } + + /*list */ + list = elm_list_add(cd->main_window); + elm_list_mode_set(list, ELM_LIST_EXPAND); + + elm_list_item_append(list, _SYSSTR("IDS_COM_OPT_DELETE"), NULL, NULL, __selected_popup_list_clicked_cb, cd); + elm_list_item_append(list, _SYSSTR("IDS_COM_BODY_EDIT"), NULL, NULL, __selected_popup_list_clicked_cb, cd); + + if (cd->isAppControl) { + snprintf(title_str, sizeof(title_str), "%s", r_item->recipient); + } else { + if (r_item->index > 0) { + if (IsMultipleNumber(r_item->index)) { + elm_list_item_append(list, _MSGSTR("IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB"), NULL, NULL, __selected_popup_list_clicked_cb, cd); + } else { + elm_list_item_append(list, _MSGSTR("IDS_MSGC_OPT_VIEW_CONTACT"), NULL, NULL, __selected_popup_list_clicked_cb, cd); + } + + 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 { + elm_list_item_append(list, _SYSSTR("IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, NULL, __selected_popup_list_clicked_cb, cd); + snprintf(title_str, sizeof(title_str), "%s", r_item->recipient); + } + } + + elm_list_go(list); + + markup_title_str = elm_entry_utf8_to_markup(title_str); + popup = msg_ui_composer_list_popup_create(data, markup_title_str, list, "min_menustyle"); + + if (markup_title_str) + g_free(markup_title_str); + + btn1 = elm_button_add(popup); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, _SYSSTR("IDS_COM_BODY_CLOSE")); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", __selected_popup_btn_clicked_cb, cd); + + rd->popup_selected = popup; + + D_LEAVE; +} + +static void __mbe_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) { D_ENTER; D_MSG_RETM_IF(obj == NULL,"Mbe object is NULL point"); - RECIPIENT_ITEM_S *recipient_item; + RECIPIENT_ITEM_S *r_item; Elm_Object_Item *mbe_item = elm_multibuttonentry_first_item_get(obj); + D_MSG("===== START of mbe_items free ====="); while (mbe_item) { - recipient_item = elm_object_item_data_get(mbe_item); - if (recipient_item) { - D_MSG("===== START of recipient_item free ====="); - D_MSG("recipient_item index [%d]", recipient_item->index); - D_MSG("recipient_item recipient [%s]", recipient_item->recipient); - D_MSG("recipient_item display_name [%s]", recipient_item->display_name); - D_MSG("===== END of recipient_item free ====="); - g_free(recipient_item); + r_item = elm_object_item_data_get(mbe_item); + if (r_item) { + D_MSG("===== START of r_item free ====="); + D_MSG("r_item index [%d]", r_item->index); + D_MSG("r_item recipient [%s]", r_item->recipient); + D_MSG("r_item display_name [%s]", r_item->display_name); + D_MSG("===== END of r_item free ====="); + g_free(r_item); } mbe_item = elm_multibuttonentry_item_next_get(mbe_item); @@ -58,7 +496,9 @@ static Eina_Bool __move_to_scroll_end(void *data) rd->scroll_down_idler = NULL; - Evas_Coord scr_w, scr_h, box_h; + Evas_Coord scr_w; + Evas_Coord scr_h; + Evas_Coord box_h; evas_render(evas_object_evas_get(rd->bx_main)); elm_scroller_region_get(rd->sc, NULL, NULL, &scr_w, &scr_h); @@ -106,7 +546,8 @@ static void __mbe_contracted_cb(void *data, Evas_Object *obj, void *event_info) static Evas_Object *__mbe_create(RECIPIENT_S *rd) { D_ENTER; - Evas_Object *mbe, *entry; + Evas_Object *mbe; + Evas_Object *entry; Ecore_IMF_Context *context; char label_txt[TO_FIELD_LABEL_SIZE_MAX] = { 0, }; @@ -135,7 +576,7 @@ static Evas_Object *__mbe_create(RECIPIENT_S *rd) /*set mbe callback */ evas_object_smart_callback_add(mbe, "item,added", msg_ui_recipient_multibuttonentry_item_added_cb, rd->cd); evas_object_smart_callback_add(mbe, "item,deleted", msg_ui_recipient_multibuttonentry_item_deleted_cb, rd->cd); - evas_object_smart_callback_add(mbe, "item,clicked", msg_ui_recipient_multibuttonentry_item_selected_cb, rd->cd); + evas_object_smart_callback_add(mbe, "item,clicked", msg_ui_recipient_multibuttonentry_item_clicked_cb, rd->cd); evas_object_smart_callback_add(mbe, "expanded", __mbe_expanded_cb, rd); evas_object_smart_callback_add(mbe, "contracted", __mbe_contracted_cb, rd); @@ -153,6 +594,7 @@ static Evas_Object *__mbe_create(RECIPIENT_S *rd) context = elm_entry_imf_context_get(entry); ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, msg_ui_composer_entry_imf_state_cb, rd->cd); + ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)context, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, msg_ui_composer_entry_imf_resize_cb, rd->cd); D_LEAVE; return mbe; @@ -178,13 +620,13 @@ static Evas_Object *__msg_ui_composer_recipient_to_layout_create(RECIPIENT_S *rd D_ENTER; if (rd == NULL) return NULL; + Evas_Object *layout; Evas_Object *parent = rd->parent; layout = msg_ui_composer_load_edj(parent, MSGC_UI_DEFAULT_EDJ, MSGC_EDJ_GRP_RECIPIENT_TO_FIELD); - if (!layout) { + if (!layout) return NULL; - } evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -225,7 +667,8 @@ static Evas_Object *__msg_ui_composer_recipient_ly_bt_create(RECIPIENT_S *rd) { D_ENTER; - Evas_Object *layout, *bt; + Evas_Object *layout; + Evas_Object *bt; layout = msg_ui_composer_load_edj(rd->parent, MSGC_UI_DEFAULT_EDJ, MSGC_EDJ_GRP_RECIPIENT_BT_FIELD); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -259,8 +702,8 @@ static Evas_Object *__msg_ui_composer_recipient_ly_bt_create(RECIPIENT_S *rd) static void __msg_ui_composer_recipient_layout_create(RECIPIENT_S *r) { D_ENTER; - if(r->parent == NULL) - return; + D_MSG_RETM_IF(r->parent == NULL, "r->parent is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)r->cd; /*Create layout*/ Evas_Object *bx; @@ -274,8 +717,12 @@ static void __msg_ui_composer_recipient_layout_create(RECIPIENT_S *r) r->ly_to = __msg_ui_composer_recipient_to_layout_create(r); elm_box_pack_end(r->bx_main, r->ly_to); - r->ly_bt = __msg_ui_composer_recipient_ly_bt_create(r); - evas_object_hide(r->ly_bt); + if (!cd->isAppControl) { + r->ly_bt = __msg_ui_composer_recipient_ly_bt_create(r); + evas_object_hide(r->ly_bt); + } + + evas_object_event_callback_add(r->bx_main, EVAS_CALLBACK_RESIZE, msg_ui_recipient_resize_cb, r); D_LEAVE; } @@ -392,7 +839,8 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_duplicate_check(RECIPIENT_S *rd RECIPIENT_ITEM_S *recipient_item; Elm_Object_Item *mbe_item; - COMPOSER_UTIL_ADDRTYPE_E inp_type, tmp_type; + COMPOSER_UTIL_ADDRTYPE_E inp_type; + COMPOSER_UTIL_ADDRTYPE_E tmp_type; char inp_str[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX + 1] = { 0, }; char tmp_str[COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX + 1] = { 0, }; @@ -438,7 +886,7 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_duplicate_check(RECIPIENT_S *rd break; } } else { - D_EMSG("Unknown type recipient"); + D_EMSG("Unknown type recipient TODO check recipient"); } } @@ -475,6 +923,23 @@ int msg_ui_composer_recipient_count_get(RECIPIENT_S *rd) return r_count; } +void msg_ui_composer_recipient_addr_type_set(RECIPIENT_S *rd, COMPOSER_RECP_ADDR_E type) +{ + D_ENTER; + D_MSG_RETM_IF(rd == NULL, "recipient data is NULL"); + + rd->type = type; +} + +COMPOSER_RECP_ADDR_E msg_ui_composer_recipient_addr_type_get(RECIPIENT_S *rd) +{ + D_ENTER; + D_MSG_RETVM_IF(rd == NULL, COMPOSER_RECP_ADDR_NONE, "recipient data is NULL"); + D_MSG("rd->type = [%d]", rd->type); + + return rd->type; +} + COMPOSER_RECP_ADDR_E msg_ui_composer_recipient_type_get(const char *recipient) { int len = 0; @@ -501,6 +966,11 @@ COMPOSER_RECP_ADDR_E msg_ui_composer_recipient_type_get(const char *recipient) ret = COMPOSER_RECP_ADDR_VALID_NUMBER; } + } else if (type == COMPOSER_UTIL_ADDRTYPE_EMAIL) { + if (len <= COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX ) { + + ret = COMPOSER_RECP_ADDR_VALID_EMAIL; + } } return ret; @@ -536,6 +1006,16 @@ Eina_Bool msg_ui_composer_recipient_vaild_check(const char *recipient) D_PRINT("NUMBER type recipient Too Short [%d]", len); return EINA_FALSE; } + } else if (type == COMPOSER_UTIL_ADDRTYPE_EMAIL) { + if (len > COMPOSER_RECIPIENT_ADDRESS_VAL_LEN_MAX) { + D_PRINT("Email type recipient Too Long [%d]", len); + return EINA_FALSE; + } + + if (len < COMPOSER_RECIPIENT_PHONE_NUMBER_LEN_MIN) { + D_PRINT("Email type recipient Too Short [%d]", len); + return EINA_FALSE; + } } else { D_PRINT("Unknown type recipient[%d]", type); return EINA_FALSE; @@ -545,10 +1025,68 @@ Eina_Bool msg_ui_composer_recipient_vaild_check(const char *recipient) return EINA_TRUE; } +Eina_Bool msg_ui_composer_recipient_is_mms(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, EINA_FALSE, "composer data is NULL"); + + RECIPIENT_ITEM_S *recipient_item = NULL; + Elm_Object_Item *mbe_item = NULL; + Eina_Bool is_mms = EINA_FALSE; + COMPOSER_UTIL_ADDRTYPE_E addrtype; + RECIPIENT_S *rd = cd->recipient; + + if (!cd) { + D_EMSG("cd is NULL"); + return is_mms; + } + + if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { + if (rd->mode == 1) { + mbe_item = elm_multibuttonentry_first_item_get(rd->mbe); + + while (mbe_item) { + recipient_item = elm_object_item_data_get(mbe_item); + + if (recipient_item) { + addrtype = get_address_type(recipient_item->recipient); + + if (addrtype == COMPOSER_UTIL_ADDRTYPE_EMAIL) { + is_mms = EINA_TRUE; + break; + } + } + + mbe_item = elm_multibuttonentry_item_next_get(mbe_item); + } + } + } else if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + Eina_List *list = NULL; + RECIPIENT_ITEM_S *r_item = NULL; + + EINA_LIST_FOREACH(cd->recipient_list, list, r_item) { + if (r_item) { + addrtype = get_address_type(r_item->recipient); + + if (addrtype == COMPOSER_UTIL_ADDRTYPE_EMAIL) { + is_mms = EINA_TRUE; + break; + } + } + } + } else { + D_EMSG("Invalid composer ug mode = %d", cd->msg_ug_mode); + } + + D_LEAVE; + return is_mms; +} + void msg_ui_composer_recipient_focus_set(RECIPIENT_S *rd) { D_ENTER; - if (rd->mbe == NULL) return; + if (rd->mbe == NULL) + return; elm_object_focus_set(rd->mbe, EINA_TRUE); D_LEAVE; @@ -558,7 +1096,7 @@ Eina_List *msg_ui_composer_recipient_invalid_recipient_list_get(RECIPIENT_S *rd) { D_ENTER; RECIPIENT_ITEM_S *r_item; - Elm_Object_Item * mbe_item; + Elm_Object_Item *mbe_item; Eina_List *invalid_list = NULL; if (rd->mode == 1) { @@ -580,7 +1118,13 @@ Eina_List *msg_ui_composer_recipient_invalid_recipient_list_get(RECIPIENT_S *rd) mbe_item = elm_multibuttonentry_item_next_get(mbe_item); } - } else { + } /*else if (rd->mode == 0) { + r_item = &cd->recipient_frame; + if (msg_ui_composer_recipient_vaild_check(r_item->recipient) == EINA_FALSE) { + invalid_list = eina_list_append(invalid_list,r_item); + } + + } */else { return NULL; } return invalid_list; @@ -623,8 +1167,10 @@ RECIPIENT_S *msg_ui_composer_recipient_create(Evas_Object *p, int mode, void *da RECIPIENT_S *rd; rd = calloc(1, sizeof(RECIPIENT_S)); - if (rd == NULL) + if (rd == NULL) { + D_EMSG("calloc is failed"); return NULL; + } rd->parent = p; rd->cd = data; @@ -649,6 +1195,11 @@ void msg_ui_composer_recipient_delete(RECIPIENT_S *rd) rd->scroll_down_idler = NULL; } + if (rd->notify_popup_idler) { + ecore_idler_del(rd->notify_popup_idler); + rd->notify_popup_idler = NULL; + } + MSGC_EVAS_OBJECT_DEL(rd->mbe); MSGC_EVAS_OBJECT_DEL(rd->ly_to); MSGC_EVAS_OBJECT_DEL(rd->ly_bt); @@ -666,7 +1217,7 @@ void msg_ui_composer_recipient_clear(RECIPIENT_S *rd) D_MSG_RETM_IF(rd->mbe == NULL, "Multibuttonentry is NULL"); RECIPIENT_ITEM_S *r_item; - Elm_Object_Item * mbe_item; + Elm_Object_Item *mbe_item; mbe_item = elm_multibuttonentry_first_item_get(rd->mbe); while (mbe_item) { @@ -692,7 +1243,7 @@ void msg_ui_composer_recipient_update(RECIPIENT_S *rd) D_MSG_RETM_IF(rd->mbe == NULL, "Multibuttonentry is NULL"); RECIPIENT_ITEM_S *r_item; - Elm_Object_Item * mbe_item; + Elm_Object_Item *mbe_item; mbe_item = elm_multibuttonentry_first_item_get(rd->mbe); while (mbe_item) { @@ -748,6 +1299,7 @@ void msg_ui_composer_recipient_update(RECIPIENT_S *rd) mbe_item = elm_multibuttonentry_item_next_get(mbe_item); } + D_LEAVE; } @@ -810,8 +1362,12 @@ void msg_ui_composer_bt_show(RECIPIENT_S *rd) D_ENTER; D_MSG_RETM_IF(rd == NULL, "recipient data is NULL"); D_MSG_RETM_IF(rd->ly_bt == NULL, "laytout button is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)rd->cd; - if(evas_object_visible_get(rd->ly_bt) == false) { + if (cd->isAppControl) + return; + + if (evas_object_visible_get(rd->ly_bt) == false) { elm_box_pack_end(rd->bx_main, rd->ly_bt); evas_object_show(rd->ly_bt); } else { @@ -826,8 +1382,12 @@ void msg_ui_composer_bt_hide(RECIPIENT_S *rd) D_ENTER; D_MSG_RETM_IF(rd == NULL, "recipient data is NULL"); D_MSG_RETM_IF(rd->ly_bt == NULL, "laytout button is NULL"); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)rd->cd; + + if (cd->isAppControl) + return; - if(evas_object_visible_get(rd->ly_bt) == true) { + if (evas_object_visible_get(rd->ly_bt) == true) { elm_box_unpack(rd->bx_main, rd->ly_bt); evas_object_hide(rd->ly_bt); } else { @@ -840,15 +1400,34 @@ void msg_ui_composer_bt_hide(RECIPIENT_S *rd) COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_read_data(MSG_COMPOSER_VIEW_DATA_S *cd) { D_ENTER; + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "cd is NULL"); RECIPIENT_S *r; RECIPIENT_ITEM_S *r_item; Elm_Object_Item *mbe_item; int r_count = 0; - if (!cd) return COMPOSER_RETURN_FAIL; if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { - if (msg_ui_composer_add_address(cd->recipient_frame.recipient) == COMPOSER_RETURN_SUCCESS) - r_count++; + Eina_List *recipient_list = cd->recipient_list; + + if (recipient_list) { + int recipient_cnt = eina_list_count(recipient_list); + int i = 0; + RECIPIENT_ITEM_S *r_item = NULL; + D_MSG("recipient_cnt = %d", recipient_cnt); + + for (i = 0; i < recipient_cnt; i++) { + r_item = (RECIPIENT_ITEM_S *)eina_list_nth(recipient_list, i); + if (r_item) { + D_MSG("r_item->recipient = %s", r_item->recipient); + if (msg_ui_composer_message_add_address(r_item->recipient) == COMPOSER_RETURN_SUCCESS) + r_count++; + } else { + D_EMSG("r_item is null"); + } + } + } else { + D_EMSG("There is no recipient address"); + } } else { r = cd->recipient; if (!r) @@ -859,37 +1438,93 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_read_data(MSG_COMPOSER_VIEW_DAT r_item = elm_object_item_data_get(mbe_item); if (r_item) { D_MSG("[%s]", r_item->recipient); - if (msg_ui_composer_add_address(r_item->recipient) == COMPOSER_RETURN_SUCCESS) + if (msg_ui_composer_message_add_address(r_item->recipient) == COMPOSER_RETURN_SUCCESS) r_count++; } mbe_item = elm_multibuttonentry_item_next_get(mbe_item); } } - if (r_count == 0 ) + if (r_count == 0) return COMPOSER_RETURN_FAIL; D_LEAVE; return COMPOSER_RETURN_SUCCESS; } -/*set recipient number for frameview mode*/ -COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_set_recipient(MSG_COMPOSER_VIEW_DATA_S *cd, const char * recipient) +COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_set_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd, msg_thread_id_t thread_id) { D_ENTER; - RECIPIENT_ITEM_S *recipient_item; + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "param is NULL"); - if (!cd) return COMPOSER_RETURN_FAIL; + /* set recipient list for bubble composer */ + msg_struct_list_s addrList; + int i = 0; + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); - recipient_item = &cd->recipient_frame; + if (msg_get_address_list(cd->msg_handle, thread_id, &addrList) != COMPOSER_RETURN_SUCCESS) + return COMPOSER_RETURN_FAIL; - bzero(recipient_item->recipient, sizeof(recipient_item->recipient)); - snprintf(recipient_item->recipient, sizeof(recipient_item->recipient)-1, "%s", recipient); + char address[MAX_ADDRESS_VAL_LEN + 1] = {0,}; + int address_len = sizeof(address); - D_MSG("recipient_item->recipient = %s", recipient_item->recipient); + for (i = 0; i < addrList.nCount; i++) { + memset(&address, 0, address_len); + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, address, address_len); + if (msg_ui_composer_recipient_add_recipient_list(cd, address) != COMPOSER_RETURN_SUCCESS) { + msg_release_list_struct(&addrList); + return COMPOSER_RETURN_FAIL; + } + } + msg_release_list_struct(&addrList); D_LEAVE; return COMPOSER_RETURN_SUCCESS; } + +COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_add_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd, const char *recipient) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "param is NULL"); + D_MSG_RETVM_IF(recipient == NULL, COMPOSER_RETURN_FAIL, "param is NULL"); + D_MSG_RETVM_IF(!strlen(recipient), COMPOSER_RETURN_FAIL, "strlen(recipient) is 0"); + + RECIPIENT_ITEM_S *r_item = NULL; + + r_item = (RECIPIENT_ITEM_S *)calloc(1, sizeof(RECIPIENT_ITEM_S)); + if (!r_item) { + D_EMSG("calloc is failed"); + return COMPOSER_RETURN_FAIL; + } + strncpy(r_item->recipient, recipient, sizeof(r_item->recipient)-1); + + cd->recipient_list = eina_list_append(cd->recipient_list, r_item); + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_recipient_clear_recipient_list(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "param is NULL"); + D_MSG_RETVM_IF(cd->recipient_list == NULL, COMPOSER_RETURN_FAIL, "cd->recipient_list is NULL"); + + RECIPIENT_ITEM_S *r_item = NULL; + D_MSG("recipient_cnt = %d", eina_list_count(cd->recipient_list)); + + EINA_LIST_FREE(cd->recipient_list, r_item) { + if (r_item) + g_free(r_item); + else + D_EMSG("r_item is null"); + } + + cd->recipient_list = NULL; + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + diff --git a/composer/src/ui-composer/msg-ui-composer-subject.c b/composer/src/ui-composer/msg-ui-composer-subject.c new file mode 100755 index 0000000..c926c31 --- /dev/null +++ b/composer/src/ui-composer/msg-ui-composer-subject.c @@ -0,0 +1,433 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +/* includes*/ +#include <Elementary.h> +#include "msg-ui-composer-subject.h" +#include "msg-ui-composer-recipient.h" +#include "msg-ui-composer-util.h" +#include "msg-ui-composer-common.h" +#include "msg-ui-composer-message.h" +#include "msg-ui-composer-body.h" +#include "msg-ui-composer-popup.h" +#include "msg-ui-composer-attachment.h" + +/* defines*/ +#define MSGC_SUBJECT_CHAR_MAX 40 +#define MSGC_SUBJECT_BYTE_MAX 0 + +/* function definitions*/ +static void __msg_composer_subject_guidetext_show(SUBJECT_S *sd) +{ + D_MSG_RETM_IF(sd == NULL, "Subject Data is Invalid"); + D_MSG_RETM_IF(sd->layout== NULL, "Subject Layout is Invalid"); + D_MSG("Subject Guide Text Show"); + + edje_object_part_text_set(_EDJ(sd->layout), "subject.guidetxt", MSGC_STR_SUBJECT); +} + +static void __msg_composer_subject_guidetext_hide(SUBJECT_S *sd) +{ + D_MSG_RETM_IF(sd == NULL, "Subject Data is Invalid"); + D_MSG_RETM_IF(sd->layout== NULL, "Subject Layout is Invalid"); + D_MSG("Subject Guide Text Hide"); + + edje_object_part_text_set(_EDJ(sd->layout), "subject.guidetxt", ""); +} + +static void __msg_composer_subject_entry_press_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); + + if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) { + elm_entry_context_menu_disabled_set(obj, EINA_TRUE); + elm_entry_magnifier_disabled_set(obj, EINA_TRUE); + } else { + elm_entry_context_menu_disabled_set(obj, EINA_FALSE); + elm_entry_magnifier_disabled_set(obj, EINA_FALSE); + } + + D_LEAVE; +} + +static void __msg_composer_subject_entry_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); + + int attach_count = msg_ui_composer_get_attach_count(cd); + + if (attach_count > 1) + msg_ui_composer_contract_attach_list(cd); + + D_LEAVE; +} + +static void __msg_composer_subject_entry_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + char *subject = NULL; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + + D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); + + if (cd->sub_data.entry) { + subject = elm_entry_markup_to_utf8(elm_entry_entry_get(cd->sub_data.entry)); + + if (subject) { + if ((elm_object_focus_get(cd->sub_data.entry) == EINA_FALSE) && (strlen(subject) == 0)) { + __msg_composer_subject_guidetext_show(&cd->sub_data); + } else { + __msg_composer_subject_guidetext_hide(&cd->sub_data); + } + + g_free(subject); + } + } + + if (msg_ui_composer_common_is_send_possible(cd)) { + elm_object_disabled_set(cd->send_button, EINA_FALSE); + msg_ui_composer_body_info_area_update(cd); + } else { + elm_object_disabled_set(cd->send_button, EINA_TRUE); + edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", "");// remove character count + } + + D_LEAVE; +} + +static void __msg_composer_subject_entry_focused_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + D_MSG("FOCUS GET = %d", elm_object_focus_get(obj)); + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); + + if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) { + /* if focused_cb is called twice becuase of double click, move focus to popup */ + if (msg_ui_composer_popup_exist(cd)) + msg_ui_composer_popup_focus(cd); + + return; + } + + /* change body scroller size */ + int keypad_h = msg_ui_composer_get_keypad_height(obj); + msg_ui_composer_change_body_scroll_size(cd, keypad_h); + + __msg_composer_subject_guidetext_hide(&cd->sub_data); + msg_ui_composer_last_focused_entry_set(data, cd->sub_data.entry); + + /* show delete button */ + edje_object_signal_emit(_EDJ(cd->sub_data.layout), "show.delete", "*"); + + D_LEAVE; +} + +static void __msg_composer_subject_entry_unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + char *subject = NULL; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG("FOCUS GET = %d", elm_object_focus_get(obj)); + D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); + + if (cd->sub_data.entry) { + subject = elm_entry_markup_to_utf8(elm_entry_entry_get(cd->sub_data.entry)); + + if (subject) { + if ((elm_object_focus_get(cd->sub_data.entry) == EINA_FALSE) && (strlen(subject) == 0)) { + __msg_composer_subject_guidetext_show(&cd->sub_data); + } else { + __msg_composer_subject_guidetext_hide(&cd->sub_data); + } + + g_free(subject); + } + } + /* hide delete button */ + edje_object_signal_emit(_EDJ(cd->sub_data.layout), "hide.delete", "*"); + + D_LEAVE; +} + +static void __msg_ui_composer_subject_delete_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETM_IF(cd == NULL, "Composer Data is Invalid"); + + msg_ui_composer_remove_subject_layout(cd); + + if (!msg_ui_composer_common_is_send_possible(cd)) { + elm_object_disabled_set(cd->send_button, EINA_TRUE); + edje_object_part_text_set(_EDJ(cd->ly_body), "text.char_count", "");/* remove character count*/ + if (cd->ly_body) { + Evas_Object *entry = msg_ui_composer_last_focused_entry_get(cd); + if (entry) { + if (cd->msg_ug_mode == MSG_UG_MODE_FULL_COMPOSER || cd->msg_ug_mode == MSG_UG_MODE_ONLY_COMPOSER) { + if (entry == cd->recipient->mbe) {/* if last focused widget is recipient multibutton entry*/ + entry = elm_multibuttonentry_entry_get(cd->recipient->mbe); + } + } + } + } + } else { + elm_object_disabled_set(cd->send_button, EINA_FALSE); + msg_ui_composer_body_info_area_update(cd); + } + + cd->isSubject = false; + + if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) { + msg_ui_composer_message_type_check_and_change(cd); + } else { + /* focus change to the first page of message body*/ + MSG_COMPOSER_BODY_PAGE_S *first_page_data = (MSG_COMPOSER_BODY_PAGE_S *)eina_list_nth(cd->body_data.page_list, 0); + + if (first_page_data) { + if (!elm_object_focus_get(first_page_data->entry)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[ASSERT] ENTRY FOCUS CHANGE"); + msg_ui_composer_last_focused_entry_set(cd, first_page_data->entry); + cd->current_edit_entry = 0; + msg_ui_composer_last_focus_load(cd); + } + } + + msg_ui_composer_message_type_check_and_change(cd); + } + + D_LEAVE; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_read_subject(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + const char *entry_text = NULL; + char *body_text = NULL; + int body_length = 0; + + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer Data is Invalid"); + D_MSG_RETVM_IF(cd->isSubject == false, COMPOSER_RETURN_FAIL, "Subject is NOT Exist"); + D_MSG_RETVM_IF(cd->sub_data.entry == NULL, COMPOSER_RETURN_FAIL, "Subject Entry is NOT Exist"); + + entry_text = elm_entry_entry_get(cd->sub_data.entry); + if (entry_text) { + body_text = elm_entry_markup_to_utf8(entry_text); + + if (body_text) { + + body_length = strlen(body_text); + if (body_length > 0) { + msg_ui_composer_message_set_subject(body_text, body_length); + } else { + D_MSG("Subject Text is Empty"); + } + + g_free(body_text); + } + + } else { + D_MSG("Subject Text is Empty"); + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_remove_subject_layout(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_NULL_POINTER, "Composer Data is Invalid"); + + if (cd->isSubject) { + if (cd->sub_data.entry) { + Evas_Object *last_entry = msg_ui_composer_last_focused_entry_get(cd); + if (last_entry && (last_entry == cd->sub_data.entry)) { + msg_ui_composer_last_focused_entry_set(cd, NULL); + } + + evas_object_smart_callback_del(cd->sub_data.entry, "changed", __msg_composer_subject_entry_changed_cb); + evas_object_smart_callback_del(cd->sub_data.entry, "preedit,changed", __msg_composer_subject_entry_changed_cb); + evas_object_smart_callback_del(cd->sub_data.entry, "focused", __msg_composer_subject_entry_focused_cb); + evas_object_smart_callback_del(cd->sub_data.entry, "unfocused", __msg_composer_subject_entry_unfocused_cb); + + evas_object_del(cd->sub_data.entry); + cd->sub_data.entry = NULL; + } + + if (cd->sub_data.layout) { + evas_object_del(cd->sub_data.layout); + cd->sub_data.layout = NULL; + } + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_subject_clear(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + return msg_ui_composer_remove_subject_layout(cd); +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_subject_set_loaded_data(void *data, const char *subject) +{ + D_ENTER; + MSG_COMPOSER_VIEW_DATA_S *cd = (MSG_COMPOSER_VIEW_DATA_S *)data; + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_NULL_POINTER, "Composer Data is Invalid"); + + if (!cd->isSubject && subject && strlen(subject) > 0) { + cd->isSubject = true; + if (msg_ui_composer_add_subject(cd) != COMPOSER_RETURN_SUCCESS) { + return COMPOSER_RETURN_FAIL; + } + } + + if (cd->sub_data.entry) { + elm_entry_entry_set(cd->sub_data.entry, subject); + } + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} + +Evas_Object *msg_ui_composer_create_subject_entry(Evas_Object *parent, MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + Evas_Object *entry = NULL; + Ecore_IMF_Context *entry_ctx = NULL; + static Elm_Entry_Filter_Limit_Size limit_filter_data; + + D_MSG_RETVM_IF(cd == NULL, NULL, "Composer Data is Invalid"); + D_MSG_RETVM_IF(parent == NULL, NULL, "Parent Layout is Invalid"); + + entry = elm_entry_add(parent); + D_MSG_RETVM_IF(entry == NULL, NULL, "Fail to Create Entry"); + + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_single_line_set(entry, EINA_TRUE); + elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT); + evas_object_size_hint_weight_set(entry, 0.0, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(entry, 0.0, EVAS_HINT_FILL); + /* fix font size */ + elm_entry_text_style_user_push(entry, "DEFAULT='font_size=32'"); + + evas_object_show(entry); + + /* add entry filter for changing text to UTF8 if it is markups */ + limit_filter_data.max_char_count = MSGC_SUBJECT_CHAR_MAX; + limit_filter_data.max_byte_count = MSGC_SUBJECT_BYTE_MAX; + elm_entry_markup_filter_append(entry, msg_composer_entry_filter_remove_markup, cd); + elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter_data); + + evas_object_smart_callback_add(entry, "changed", __msg_composer_subject_entry_changed_cb, cd); + evas_object_smart_callback_add(entry, "preedit,changed", __msg_composer_subject_entry_changed_cb, cd); + evas_object_smart_callback_add(entry, "focused", __msg_composer_subject_entry_focused_cb, cd); + evas_object_smart_callback_add(entry, "unfocused", __msg_composer_subject_entry_unfocused_cb, cd); + evas_object_smart_callback_add(entry, "press", __msg_composer_subject_entry_press_cb, cd); + evas_object_smart_callback_add(entry, "clicked", __msg_composer_subject_entry_clicked_cb, cd); + + entry_ctx = elm_entry_imf_context_get(entry); + ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)entry_ctx, ECORE_IMF_INPUT_PANEL_STATE_EVENT, msg_ui_composer_entry_imf_state_cb, cd); + ecore_imf_context_input_panel_event_callback_add((Ecore_IMF_Context *)entry_ctx, ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, msg_ui_composer_entry_imf_resize_cb, cd); + + cd->sub_data.entry = entry; + + D_LEAVE; + return entry; +} + +Evas_Object *msg_ui_composer_create_subject_layout(Evas_Object *parent, MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + + Evas_Object *layout = NULL; + Evas_Object *entry = NULL; + Evas_Object *del_icon = NULL; + + D_MSG_RETVM_IF(cd == NULL, NULL, "Composer Data is Invalid"); + D_MSG_RETVM_IF(parent == NULL, NULL, "Parent Layout is Invalid"); + + layout = elm_layout_add(parent); + elm_layout_file_set(layout, msg_ui_composer_edj_get(cd), MSGC_EDJ_GRP_SUBJECT_FIELD); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + /* add entry */ + entry = msg_ui_composer_create_subject_entry(layout, cd); + D_MSG_RETVM_IF(entry == NULL, NULL, "Fail to Create Subject Entry"); + + elm_object_part_content_set(layout, "subject.swl.entry", entry); + + /* add guide text */ + edje_object_part_text_set(_EDJ(layout), "subject.guidetxt", MSGC_STR_SUBJECT); + + /* create del_button */ + del_icon = elm_icon_add(parent); + elm_icon_file_set(del_icon, MSGC_IMG_SUBJECT_DEL_ICON, NULL); + evas_object_size_hint_weight_set(del_icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(del_icon, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_focus_allow_set(del_icon, EINA_TRUE); + + evas_object_data_set(del_icon, "layout", layout); + elm_object_part_content_set(layout, "subject.swl.del_button", del_icon); + + evas_object_smart_callback_add(del_icon, "clicked", __msg_ui_composer_subject_delete_clicked_cb, cd); + + cd->sub_data.layout = layout; + cd->sub_data.del_icon = del_icon; + + evas_object_show(layout); + + D_LEAVE; + return layout; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_add_subject(MSG_COMPOSER_VIEW_DATA_S *cd) +{ + D_ENTER; + Evas_Object *sub_layout = NULL; + D_MSG_RETVM_IF(cd == NULL, COMPOSER_RETURN_FAIL, "Composer Data is Invalid"); + + sub_layout = msg_ui_composer_create_subject_layout(cd->ly_body, cd); + D_MSG_RETVM_IF(sub_layout == NULL, COMPOSER_RETURN_FAIL, "Fail to Create Subject Layout"); + + /* subject layout is packed on the body main box */ + if (cd->body_box) + elm_box_pack_start(cd->body_box, sub_layout); + + cd->isSubject = true; + + msg_ui_composer_message_type_check_and_change(cd); + + if (!cd->isLoad) { + if (msg_ui_composer_recipient_addr_type_get(cd->recipient) == COMPOSER_RECP_ADDR_INVALID) { + msg_ui_composer_status_btn_popup_show(cd, MSGC_STR_NOTI_RECIPIENT_INVALID, 0, MSGC_STR_BUTTON_OK); + } else { + /* if added recipient is not invalid number, change entry focus to the subject */ + msg_ui_composer_last_focused_entry_set(cd, cd->sub_data.entry); + msg_ui_composer_last_focus_load(cd); + } + } + + D_LEAVE; + return COMPOSER_RETURN_SUCCESS; +} diff --git a/composer/src/util/msg-ui-composer-util.c b/composer/src/util/msg-ui-composer-util.c index 38e9142..b4f1d85 100755 --- a/composer/src/util/msg-ui-composer-util.c +++ b/composer/src/util/msg-ui-composer-util.c @@ -14,9 +14,10 @@ * limitations under the License. */ -#include <contacts-svc.h> -#include <MsgSettingTypes.h> +#include <contacts-svc.h> +#include <mm_util_imgp.h> +#include <mm_util_jpeg.h> #include "msg-ui-composer-data.h" #include "msg-ui-composer-util.h" #include "msg-ui-composer-message.h" @@ -32,7 +33,6 @@ COMPOSER_UTIL_ADDRTYPE_E get_address_type(const char *address) { - COMPOSER_UTIL_ADDRTYPE_E addrtype = COMPOSER_UTIL_ADDRTYPE_INVALID; if (!address) { @@ -53,7 +53,6 @@ COMPOSER_UTIL_ADDRTYPE_E get_address_type(const char *address) return addrtype; } - int get_contact_index_by_recipient(const char *phone_number) { int index; @@ -82,16 +81,13 @@ int get_contact_display_name_by_index(int index, char *dest, int dest_size) error_code = contacts_svc_get_contact(index, &contact); error_code = contacts_svc_struct_get_value(contact, CTS_CF_NAME_VALUE, &name); - display = g_strdup(contacts_svc_value_get_str(name, CTS_NAME_VAL_DISPLAY_STR)); + + first = contacts_svc_value_get_str(name, CTS_NAME_VAL_FIRST_STR); + last = contacts_svc_value_get_str(name, CTS_NAME_VAL_LAST_STR); + display = make_display_name(first, last); if (!display) { - D_EMSG("no display recipient"); - first = contacts_svc_value_get_str(name, CTS_NAME_VAL_FIRST_STR); - last = contacts_svc_value_get_str(name, CTS_NAME_VAL_LAST_STR); - display = make_display_name(first, last); - if (!display) { - D_EMSG("display name is NULL"); - return COMPOSER_RETURN_FAIL; - } + D_EMSG("display name is NULL"); + return COMPOSER_RETURN_FAIL; } if (display) { @@ -174,6 +170,7 @@ int get_contact_default_recipient_by_index(int index, char *dest, int dest_size) } return ret; } + char *make_display_name(const char *first, const char *last) { char *ret_val = NULL; @@ -301,6 +298,7 @@ Eina_Bool IsMultipleNumber(int index) return EINA_FALSE; } + Eina_Bool IsValidNumber(const char *address) { D_ENTER; @@ -468,6 +466,227 @@ int remove_space(const char *src, char *dest, int dest_size) return d_pos; } +int jpeg_image_get_resolution(const char *src_file_path, unsigned int *dst_w, unsigned int *dst_h) +{ + D_ENTER; + + int ret = 0; + char temp_src_file_path[DEF_BUF_LEN_L] = {0,}; + mm_util_jpeg_yuv_format jy_fmt = MM_UTIL_JPEG_FMT_RGB888; + + mm_util_jpeg_yuv_data decoded = {0,}; + + D_MSG_RETVM_IF(ecore_file_exists(src_file_path) == EINA_FALSE, COMPOSER_UTIL_ERR, "There is not exist src file path = %s", src_file_path); + D_MSG_RETVM_IF((dst_w == NULL || dst_h == NULL), COMPOSER_UTIL_ERR, "Parameter is Invalid dst_w = %p, dst_h = %p", dst_w, dst_h); + + strncpy(temp_src_file_path, src_file_path, sizeof(temp_src_file_path)-1); + + /*decode jpeg file*/ + ret = mm_util_decode_from_jpeg_file(&decoded, temp_src_file_path, jy_fmt); + if (ret) { + D_EMSG("mm_util_decode_from_jpeg_file ret = %d", ret); + return COMPOSER_UTIL_ERR; + } + + D_MSG("Image Resolution is (%d x %d)", decoded.width, decoded.height); + + *dst_w = decoded.width; + *dst_h = decoded.height; + + if (decoded.data != NULL) + free(decoded.data); + + D_LEAVE; + return COMPOSER_UTIL_ERR_NONE; +} + +int jpeg_image_resize(const char *src_file_path, unsigned int dst_w, unsigned int dst_h, const char *dst_file_path) +{ + D_ENTER; + int ret = 0; + unsigned int dst_size; + unsigned char *dst = NULL; + char temp_src_file_path[DEF_BUF_LEN_L] = {0,}; + char temp_dst_file_path[DEF_BUF_LEN_L] = {0,}; + + mm_util_jpeg_yuv_format jy_fmt = MM_UTIL_JPEG_FMT_RGB888; + mm_util_img_format i_fmt = MM_UTIL_IMG_FMT_RGB888; + mm_util_jpeg_yuv_data decoded = {0,}; + + if (ecore_file_exists(src_file_path) == EINA_FALSE) { + D_EMSG("There is not exist src file path = %s", src_file_path); + return COMPOSER_UTIL_ERR; + } + strncpy(temp_src_file_path, src_file_path, sizeof(temp_src_file_path)-1); + + if (!dst_file_path) { + D_EMSG("There is not exist dst file path = %s", dst_file_path); + return COMPOSER_UTIL_ERR; + } + strncpy(temp_dst_file_path, dst_file_path, sizeof(temp_dst_file_path)-1); + + if (dst_w <= 0 || dst_h <= 0) { + D_EMSG("There is not valid dst width = %d, height = %d", dst_w, dst_h); + return COMPOSER_UTIL_ERR; + } + + /*decode jpeg file*/ + ret = mm_util_decode_from_jpeg_file(&decoded, temp_src_file_path, jy_fmt); + if (ret) { + D_EMSG("mm_util_decode_from_jpeg_file ret = %d", ret); + return COMPOSER_UTIL_ERR; + } + + /*get size about resize img*/ + ret = mm_util_get_image_size(i_fmt, dst_w, dst_h, &dst_size); + if (ret) { + D_EMSG("mm_util_get_image_size ret = %d", ret); + goto err_return; + } + + if (dst_size > 0) { + D_MSG("dst_size = %d", dst_size); + dst = calloc(1, dst_size); + if (dst == NULL) { + D_EMSG("fail of memory allocation size = %d", dst_size); + goto err_return; + } + + } else { + D_EMSG("no data size = %d", dst_size); + goto err_return; + } + + /* resize image */ + D_MSG("[resize image] src = %s(%d x %d)->(%d x %d)", temp_src_file_path, decoded.width, decoded.height, dst_w, dst_h); + ret = mm_util_resize_image(decoded.data, (unsigned int)decoded.width, (unsigned int)decoded.height, + i_fmt, dst, &dst_w,&dst_h); + if (ret) { + D_EMSG("mm_util_resize_image ret = %d", ret); + goto err_return; + } + + + /*save image to dst file path*/ + ret = mm_util_jpeg_encode_to_file(temp_dst_file_path, dst, dst_w, dst_h, jy_fmt, 100); + if (ret) { + D_EMSG("Fail mm_util_jpeg_encode_to_file ret = %d", ret); + goto err_return; + } + + if (dst) + g_free(dst); + + if (decoded.data != NULL) + free(decoded.data); + + D_LEAVE; + return COMPOSER_UTIL_ERR_NONE; + +err_return: + if (dst) + g_free(dst); + + if (decoded.data != NULL) + free(decoded.data); + + return COMPOSER_UTIL_ERR; +} + +int jpeg_image_quality_set(const char *src_file_path, int quality, const char *dst_file_path) +{ + D_ENTER; + int ret = 0; + char temp_src_file_path[DEF_BUF_LEN_L] = {0,}; + char temp_dst_file_path[DEF_BUF_LEN_L] = {0,}; + + mm_util_jpeg_yuv_format jy_fmt = MM_UTIL_JPEG_FMT_RGB888; + mm_util_jpeg_yuv_data decoded = {0,}; + + if (ecore_file_exists(src_file_path) == EINA_FALSE) { + D_EMSG("There is not exist src file path = %s", src_file_path); + return COMPOSER_UTIL_ERR; + } + strncpy(temp_src_file_path, src_file_path, sizeof(temp_src_file_path)-1); + + if (!dst_file_path) { + D_EMSG("There is not exist dst file path = %s", dst_file_path); + return COMPOSER_UTIL_ERR; + } + strncpy(temp_dst_file_path, dst_file_path, sizeof(temp_dst_file_path)-1); + + if (quality > 100 || quality < 1) { + D_EMSG("Invalid quality ! it should 0 < quality <= 100", dst_file_path); + return COMPOSER_UTIL_ERR; + } + + /*decode jpeg file*/ + ret = mm_util_decode_from_jpeg_file(&decoded, temp_src_file_path, jy_fmt); + if (ret) { + D_EMSG("mm_util_decode_from_jpeg_file ret = %d", ret); + return COMPOSER_UTIL_ERR; + } + + /*set quality save image to dst file path*/ + ret = mm_util_jpeg_encode_to_file(temp_dst_file_path, decoded.data, decoded.width, decoded.height, jy_fmt, quality); + if (ret) { + D_EMSG("Fail mm_util_jpeg_encode_to_file ret = %d", ret); + goto err_return; + } + + if (decoded.data != NULL) + free(decoded.data); + + D_LEAVE; + return COMPOSER_UTIL_ERR_NONE; + +err_return: + + if (decoded.data != NULL) + free(decoded.data); + + return COMPOSER_UTIL_ERR; + +} + +bool msg_composer_util_is_allow_creation_mode(const char *file_path, COMPOSER_MEDIA_TYPE_E media_type) +{ + D_ENTER; + D_MSG_RETVM_IF(file_path == NULL , false, "Input parameter file_path is Invalid"); + + char *ext = msg_common_get_file_ext(file_path); + unsigned int dst_w = 0 , dst_h = 0; + + if (media_type == COMPOSER_MEDIA_TYPE_IMAGE) { + if ((strcasecmp(ext, "jpg") != 0) && (strcasecmp(ext, "jpeg") != 0) + && (strcasecmp(ext, "gif") != 0) && (strcasecmp(ext, "wbmp") != 0) + && (strcasecmp(ext, "png") != 0)) { + return false; + } else { + /* Check High resoluton*/ + jpeg_image_get_resolution(file_path, &dst_w, &dst_h); + if(dst_w > MSG_CREATION_MODE_LARGE_IMG_WIDTH || dst_h > MSG_CREATION_MODE_LARGE_IMG_HEIGHT) { + return false; + } + } + + } else if (media_type == COMPOSER_MEDIA_TYPE_VIDEO) { + if ((strcasecmp(ext, "3gp") != 0) && (strcasecmp(ext, "3g2") != 0) && + (strcasecmp(ext, "mp4") != 0) &&(strcasecmp(ext, "mpeg4") != 0) ){ + return false; + } + } else if (media_type == COMPOSER_MEDIA_TYPE_AUDIO) { + if ((strcasecmp(ext, "amr") != 0) && (strcasecmp(ext, "mid") != 0) && (strcasecmp(ext, "midi") != 0)) + return false; + + } else { + D_MSG("It check only Image, Video, Audio type, media_type[%d] is not need to check", media_type); + } + + D_LEAVE; + return true; +} + const char *search_markup_keyword(const char *string, char *searchword, bool *result) { @@ -528,7 +747,7 @@ const char *search_markup_keyword(const char *string, char *searchword, return return_string; } -bool is_web_uri(const char* uri) +bool is_web_uri(const char *uri) { D_MSG_RETVM_IF(uri == NULL, false, "uri is NULL"); @@ -553,7 +772,8 @@ bool is_web_uri(const char* uri) D_MSG("Not web uri. %s", uri); return false; } -void print_sc_geo(Evas_Object * obj, char * name) + +void print_sc_geo(Evas_Object *obj, char *name) { Evas_Coord x,y,w,h; @@ -563,12 +783,21 @@ void print_sc_geo(Evas_Object * obj, char * name) } -void print_geo(Evas_Object * obj, char * name) +void print_geo(Evas_Object *obj, char *name) { Evas_Coord x,y,w,h; if (!obj) return; evas_object_geometry_get(obj,&x, &y, &w,&h); D_PRINT("[GEO] %s x = %d, y = %d, w =%d, h = %d", name, x, y, w, h); +} + +void print_edje_geo(Evas_Object *obj, char *name) +{ + Evas_Coord x,y,w,h; + if (!obj) return; + edje_object_part_geometry_get(_EDJ(obj), name, &x, &y, &w,&h); + D_PRINT("[EDJ_GEO] %s x = %d, y = %d, w =%d, h = %d", name, x, y, w, h); } + diff --git a/composer/src/util/msg-ui-composer-util.h b/composer/src/util/msg-ui-composer-util.h index a4d04fb..fe29b8f 100755 --- a/composer/src/util/msg-ui-composer-util.h +++ b/composer/src/util/msg-ui-composer-util.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __MSG_COMPOSER_UTIL_H__ #define __MSG_COMPOSER_UTIL_H__ #include "msg-ui-composer-data.h" @@ -68,11 +69,16 @@ Eina_List *make_tokenize_list(const char *ori_string, const char *sep); int remove_space(const char *src, char *dest, int dest_size); char *make_display_name(const char *first, const char *last); +int jpeg_image_resize(const char *src_file_path, unsigned int dst_w, unsigned int dst_h, const char *dst_file_path); +int jpeg_image_quality_set(const char *src_file_path, int quality, const char *dst_file_path); +int jpeg_image_get_resolution(const char *src_file_path, unsigned int *dst_w, unsigned int *dst_h); const char *search_markup_keyword(const char *string, char *searchword, bool *result); -bool is_web_uri(const char* uri); +bool is_web_uri(const char *uri); -void print_geo(Evas_Object * obj, char * name); -void print_sc_geo(Evas_Object * obj, char * name); +void print_geo(Evas_Object *obj, char *name); +void print_sc_geo(Evas_Object *obj, char *name); +void print_edje_geo(Evas_Object *obj, char *name); +bool msg_composer_util_is_allow_creation_mode(const char *file_path, COMPOSER_MEDIA_TYPE_E media_type); #endif /*__MSG_COMPOSER_UTIL_H__*/ diff --git a/debian/changelog b/debian/changelog index 34115a9..9367a96 100644..100755 --- a/debian/changelog +++ b/debian/changelog @@ -1,7 +1,7 @@ -message (0.8.2-20) unstable; urgency=low +message (0.8.2-37) unstable; urgency=low * Git: slp/pkgs/m/message-app - * Tag: message_0.8.2-20 + * Tag: message_0.8.2-37 - -- Jaeyun Jeong <jyjeong@samsung.com> Mon, 16 Apr 2012 19:26:38 +0900 + -- Jaeyun Jeong <jyjeong@samsung.com> Mon, 04 Jun 2012 19:00:27 +0900 diff --git a/debian/control b/debian/control index 87d24d0..0fae198 100755 --- a/debian/control +++ b/debian/control @@ -2,7 +2,7 @@ Source: message Section: devel Priority: optional Maintainer: Jaeyun Jeong <jyjeong@samsung.com>, Sangkoo Kim <sangkoo.kim@samsung.com>, Seunghwan Lee <sh.cat.lee@samsung.com>, SoonMin Jung <sm0415.jung@samsung.com>, Jae-Young Lee <jy4710.lee@samsung.com> -Build-Depends: debhelper (>= 5), libglib2.0-dev, libelm-dev, libecore-dev, libeina-dev, libappcore-common-dev, libappcore-efl-dev, libslp-msg-service-dev, libslp-setting-dev, libslp-utilx-dev, dlog-dev, libui-gadget-dev, libcontacts-service-dev, libug-contacts-dev, libicu-dev, libappsvc-dev, libdevman-haptic-dev, libheynoti-dev, capi-appfw-application-dev +Build-Depends: debhelper (>= 5), libglib2.0-dev, libelm-dev, libecore-dev, libeina-dev, libappcore-common-dev, libappcore-efl-dev, libslp-msg-service-dev, libslp-setting-dev, libslp-utilx-dev, dlog-dev, libui-gadget-dev, libcontacts-service-dev, libaul-1-dev, libug-contacts-dev, drm-client-dev, drm-trusted-dev, libicu-dev, libmm-common-dev, libmm-player-dev, libmm-utility-dev, libmm-session-dev, libmm-fileinfo-dev, libmm-player-internal-dev, libappsvc-dev, libdevman-haptic-dev, libheynoti-dev, capi-appfw-application-dev, syspopup-caller-dev Standards-Version: 3.7.2 Homepage: diff --git a/debian/org.tizen.message.install.in b/debian/org.tizen.message.install.in index d939590..67b6d4c 100755 --- a/debian/org.tizen.message.install.in +++ b/debian/org.tizen.message.install.in @@ -6,4 +6,5 @@ @PREFIX@/data @PREFIX@/lib/* /opt/share/applications/* +/opt/share/icons/* /opt/ug/lib/* diff --git a/debian/org.tizen.message.postinst.in b/debian/org.tizen.message.postinst.in index 2b96d78..38fa0a8 100755 --- a/debian/org.tizen.message.postinst.in +++ b/debian/org.tizen.message.postinst.in @@ -5,4 +5,5 @@ if [ "`id -u`" = "0" ] then #5000 is inhouse user id chown -R 5000:5000 @DATADIR@ + /usr/bin/vconftool set -t int db/private/org.tizen.message/font_size 0 -u 5000 fi diff --git a/debian/rules b/debian/rules index 686d100..9fead62 100755 --- a/debian/rules +++ b/debian/rules @@ -56,19 +56,20 @@ clean: # Add here commands to clean up after the build process. -$(MAKE) clean rm -f CMakeCache.txt - rm -rf CMakeFiles main/CMakeFiles composer/CMakeFiles setting/CMakeFiles dialog/CMakeFiles common/CMakeFiles - rm -f cmake_install.cmake main/cmake_install.cmake composer/cmake_install.cmake setting/cmake_install.cmake dialog/cmake_install.cmake common/cmake_install.cmake - rm -f Makefile main/Makefile composer/Makefile setting/Makefile dialog/Makefile common/Makefile - rm -f install_manifest.txt main/install_manifest.txt composer/install_manifest.txt setting/install_manifest.txt dialog/install_manifest.txt common/install_manifest.txt + rm -rf CMakeFiles main/CMakeFiles composer/CMakeFiles setting/CMakeFiles viewer/CMakeFiles class0/CMakeFiles dialog/CMakeFiles common/CMakeFiles + rm -f cmake_install.cmake main/cmake_install.cmake composer/cmake_install.cmake setting/cmake_install.cmake viewer/cmake_install.cmake class0/cmake_install.cmake dialog/cmake_install.cmake common/cmake_install.cmake + rm -f Makefile main/Makefile composer/Makefile setting/Makefile viewer/Makefile class0/Makefile dialog/Makefile common/Makefile + rm -f install_manifest.txt main/install_manifest.txt composer/install_manifest.txt setting/install_manifest.txt class0/install_manifest.txt dialog/install_manifest.txt viewer/install_manifest.txt common/install_manifest.txt rm -f main/po/CMakeCache.txt rm -rf main/po/CMakeFiles rm -f main/po/cmake_install.cmake rm -f main/po/Makefile # rm -f po/install_manifest.txt - rm -f *.so composer/*.so setting/*.so common/*.so - rm -f *.edj thread/theme/*.edj composer/data/composer_edc/*.edj bubble/theme/*.edj setting/theme/*.edj + rm -f *.so composer/*.so setting/*.so viewer/*.so common/*.so + rm -f *.edj thread/theme/*.edj composer/data/composer_edc/*.edj bubble/theme/*.edj setting/theme/*.edj viewer/theme/*.edj common/data/*.edj rm -f main/*.desktop + rm -f class0/*.desktop for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ rm -f $${f%.in}; \ @@ -110,7 +111,7 @@ binary-arch: build install # dh_installinfo dh_installman dh_link - dh_strip --dbg-package=org.tizen.message-dbg + dh_strip --dbg-package=org.tizen.message-dbg dh_compress dh_fixperms # dh_perl diff --git a/dialog/CMakeLists.txt b/dialog/CMakeLists.txt index 729e326..5cf4fe1 100755 --- a/dialog/CMakeLists.txt +++ b/dialog/CMakeLists.txt @@ -15,6 +15,9 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_COMMON_DIR} /usr/include/msg-service/ ) +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED elementary aul dlog capi-appfw-application) + FOREACH(flag ${pkgs_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") ENDFOREACH(flag) diff --git a/dialog/message-dialog.c b/dialog/message-dialog.c index b126417..94f7759 100755 --- a/dialog/message-dialog.c +++ b/dialog/message-dialog.c @@ -14,13 +14,14 @@ * limitations under the License. */ -#include "message-dialog.h" -#include "app_service.h" +#include "message-dialog.h" +#include "aul.h" static void __msg_ui_dialog_always_ask_left_btn_cb(void *data, Evas_Object *obj, void *event_info); static void __msg_ui_dialog_always_ask_right_btn_cb(void *data, Evas_Object *obj, void *event_info); static int __msg_ui_dialog_create_always_ask_popup(void *data); +static void __msg_ui_dialog_rotate(app_device_orientation_e orientation, void *data); static void __msg_ui_dialog_win_del(void *data, Evas_Object *obj, void *event); static Evas_Object *__msg_ui_dialog_create_win(const char *name); static int parse_opt(int argc, char **argv, struct appdata *ad); @@ -62,41 +63,13 @@ static void __msg_ui_dialog_always_ask_left_btn_cb(void *data, Evas_Object *obj, struct appdata *ad = data; - service_h svc_h; - int ret = SERVICE_ERROR_NONE; - - ret = service_create(&svc_h); - if (ret != SERVICE_ERROR_NONE) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed : %d", ret); - return; - } - - ret = service_set_operation(svc_h, SERVICE_OPERATION_VIEW); - if (ret != SERVICE_ERROR_NONE) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_set_operation() is failed : %d", ret); - goto DESTROY; - } + int ret = -1; - ret = service_set_uri(svc_h, ad->url); - if (ret != SERVICE_ERROR_NONE) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_set_uri() is failed : %d", ret); - goto DESTROY; + ret = aul_open_content(ad->url); + if (ret < 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ret = %d", ret); } - if (service_set_package(svc_h, "org.tizen.browser") < 0) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_set_uri() is failed : %d", ret); - goto DESTROY; - } - - ret = service_send_launch_request(svc_h, NULL, NULL); - if (ret != SERVICE_ERROR_NONE) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request() is failed : %d", ret); - } - -DESTROY: - ret = service_destroy(svc_h); - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_destroy() returns : %d", ret); - msg_ui_dialog_exit(ad); } @@ -148,6 +121,40 @@ static int __msg_ui_dialog_create_always_ask_popup(void *data) return MSG_UI_RET_SUCCESS; } +static void __msg_ui_dialog_rotate(app_device_orientation_e orientation, void *data) +{ + struct appdata *ad = data; + int r; + + if (ad == NULL || ad->main_window == NULL) + return; + + switch (orientation) { + case APP_DEVICE_ORIENTATION_0: + r = 0; + break; + case APP_DEVICE_ORIENTATION_180: + r = 180; + break; + case APP_DEVICE_ORIENTATION_270: + r = 270; + break; + case APP_DEVICE_ORIENTATION_90: + r = 90; + break; + default: + r = -1; + break; + } + + if (r >= 0) { + if (ad->main_window) { + elm_win_rotation_with_resize_set(ad->main_window, r); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid case !!"); + } + } +} static void __msg_ui_dialog_win_del(void *data, Evas_Object *obj, void *event) { @@ -165,7 +172,6 @@ static Evas_Object *__msg_ui_dialog_create_win(const char *name) if (eo) { elm_win_alpha_set(eo, EINA_TRUE); elm_win_title_set(eo, name); - elm_win_borderless_set(eo, EINA_TRUE); elm_win_raise(eo); evas_object_smart_callback_add(eo, "delete,request", __msg_ui_dialog_win_del, NULL); ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); @@ -176,7 +182,7 @@ static Evas_Object *__msg_ui_dialog_create_win(const char *name) return eo; } -static int app_create(void *data) +static bool app_create(void *data) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); @@ -184,50 +190,42 @@ static int app_create(void *data) if (ad->dialog_mode != MSG_UI_DIALOG_MODE_PUSH_MSG_ALWAYS_ASK) { MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid mode !!"); - return MSG_UI_RET_ERR; + return FALSE; } /* Create main window */ ad->main_window = __msg_ui_dialog_create_win(PACKAGE); if (ad->main_window == NULL) { MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "__msg_ui_dialog_create_win() is failed !!"); - return MSG_UI_RET_ERR; + return FALSE; } if (__msg_ui_dialog_create_always_ask_popup(ad) < 0) { MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "__msg_ui_dialog_create_always_ask_popup() is failed !!"); - return MSG_UI_RET_ERR; + return FALSE; } - return MSG_UI_RET_SUCCESS; + return TRUE; } -static int app_terminate(void *data) +static void app_terminate(void *data) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - return MSG_UI_RET_SUCCESS; } -static int app_pause(void *data) +static void app_pause(void *data) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - return MSG_UI_RET_SUCCESS; } -static int app_resume(void *data) +static void app_resume(void *data) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - return MSG_UI_RET_SUCCESS; } -static int app_reset(bundle *b, void *data) +static void app_service(service_h service, void *data) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - return MSG_UI_RET_SUCCESS; } static int parse_opt(int argc, char **argv, struct appdata *ad) @@ -276,22 +274,26 @@ int main(int argc, char **argv) MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); struct appdata ad; - struct appcore_ops ops = { - .create = app_create, - .terminate = app_terminate, - .pause = app_pause, - .resume = app_resume, - .reset = app_reset, - }; - memset(&ad, 0x0, sizeof(struct appdata)); - ops.data = &ad; + + app_event_callback_s event_callback; + + event_callback.create = app_create; + event_callback.terminate = app_terminate; + event_callback.pause = app_pause; + event_callback.resume = app_resume; + event_callback.service = app_service; + event_callback.low_memory = NULL; + event_callback.low_battery = NULL; + event_callback.device_orientation = __msg_ui_dialog_rotate; + event_callback.language_changed = NULL; + event_callback.region_format_changed = NULL; if (parse_opt(argc, argv, &ad) == -1) { MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "parse_opt() is failed !!"); return MSG_UI_RET_ERR; } - return appcore_efl_main(PACKAGE, &argc, &argv, &ops); + return app_efl_main(&argc, &argv, &event_callback, &ad); } diff --git a/dialog/message-dialog.h b/dialog/message-dialog.h index af56570..89291dc 100755 --- a/dialog/message-dialog.h +++ b/dialog/message-dialog.h @@ -14,13 +14,14 @@ * limitations under the License. */ + #ifndef __DEF_message_dialog_H_ #define __DEF_message_dialog_H_ #include <stdio.h> #include <glib.h> #include <Elementary.h> -#include <appcore-efl.h> +#include <app.h> #include <utilX.h> #include <Ecore_X.h> #include "msg-ui-util.h" diff --git a/main/CMakeLists.txt b/main/CMakeLists.txt index 5ff9d37..542925f 100755 --- a/main/CMakeLists.txt +++ b/main/CMakeLists.txt @@ -1,7 +1,7 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6) PROJECT(message C) -SET(SRCS +SET(SRCS message.c ${CMAKE_SOURCE_THREAD_DIR}/src/msg-ui-thread-main.c ${CMAKE_SOURCE_THREAD_DIR}/src/msg-ui-thread-list.c @@ -50,12 +50,12 @@ TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} ${CMAKE_LDFLAGS} msg-commo #Install desktop file & icon. INSTALL(TARGETS message DESTINATION bin) -CONFIGURE_FILE(${CMAKE_SOURCE_MAIN_DIR}/${PKGNAME}.desktop.in ${CMAKE_SOURCE_MAIN_DIR}/${PKGNAME}.desktop) -INSTALL(FILES ${CMAKE_SOURCE_MAIN_DIR}/${PKGNAME}.desktop DESTINATION /opt/share/applications) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/${PKGNAME}.xml DESTINATION /opt/share/packages) INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/image/${PKGNAME}.png DESTINATION ${ICONDIR}) INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/image/${PKGNAME}.voice.png DESTINATION ${ICONDIR}) INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/image/${PKGNAME}.cb.png DESTINATION ${ICONDIR}) INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/image/${PKGNAME}.noti.png DESTINATION ${ICONDIR}) +INSTALL(FILES ${CMAKE_SOURCE_COMMON_DIR}/data/image/${PKGNAME}.png DESTINATION /opt/share/icons/default/small) INSTALL(DIRECTORY ${CMAKE_SOURCE_COMMON_DIR}/data/image/ DESTINATION ${IMGDIR} FILES_MATCHING PATTERN "*.png") INSTALL(DIRECTORY ${CMAKE_SOURCE_COMMON_DIR}/data/image/ DESTINATION ${IMGDIR} FILES_MATCHING PATTERN "*.PNG") INSTALL(DIRECTORY DESTINATION ${DATADIR}) diff --git a/main/message.c b/main/message.c index 862ea55..496e0e7 100755 --- a/main/message.c +++ b/main/message.c @@ -18,19 +18,21 @@ #include <Ecore_X.h> #include <ui-gadget.h> #include <ui-gadget-module.h> +#include <mm_session.h> #include "msg-ui-thread-main.h" - +#include "msg-ui-common-utility.h" static void __msg_ui_popup_warning(Evas_Object *parent, const char *msg); -static bundle *__msg_ui_parse_sms_uri(bundle *b, const char *uri); -static bundle *__get_bundle_with_new_msg(struct appdata *ad); -static bundle *__get_bundle_with_msg_id(struct appdata *ad, bundle *b); - +static service_h __msg_ui_parse_sms_uri(service_h service, const char *uri); +static service_h __msg_ui_parse_mmsto_uri(service_h service, const char *uri); +static service_h __msg_ui_parse_file_uri(service_h service, const char *uri); +static service_h __get_service_with_new_msg(struct appdata *ad); +static service_h __get_service_with_msg_id(struct appdata *ad, service_h service); -void layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv); -void result_cb(struct ui_gadget *ug, bundle *result, void *priv); -void destroy_cb(struct ui_gadget *ug, void *priv); +void layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv); +void result_cb(ui_gadget_h ug, service_h result, void *priv); +void destroy_cb(ui_gadget_h ug, void *priv); struct appdata *gAppData = NULL; @@ -65,9 +67,50 @@ static int region_changed_cb(void *data) return ug_send_event(UG_EVENT_REGION_CHANGE); } +static void rotate(app_device_orientation_e orientation, void *data) +{ + D_ENTER; + + struct appdata *ad = data; + int ret = 0; + int rot = THREAD_ROTATE_ANGLE_UNKNOWN; + + if (ad == NULL || ad->win_main == NULL) + return; + + switch (orientation) { + case APP_DEVICE_ORIENTATION_0: + rot = THREAD_ROTATE_ANGLE_PORTRAIT; + ret = ug_send_event(UG_EVENT_ROTATE_PORTRAIT); + break; + case APP_DEVICE_ORIENTATION_180: + rot = THREAD_ROTATE_ANGLE_PORTRAIT_UPSIDEDOWN; + ret = ug_send_event(UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN); + break; + case APP_DEVICE_ORIENTATION_270: + rot = THREAD_ROTATE_ANGLE_LANDSCAPE; + ret = ug_send_event(UG_EVENT_ROTATE_LANDSCAPE); + break; + case APP_DEVICE_ORIENTATION_90: + rot = THREAD_ROTATE_ANGLE_LANDSCAPE_UPSIDEDOWN; + ret = ug_send_event(UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN); + break; + default: + rot = THREAD_ROTATE_ANGLE_UNKNOWN; + break; + } + + if (rot >= 0) + { + elm_win_rotation_with_resize_set(ad->win_main, rot); + msg_ui_thread_rotation_set(ad->thread_data, rot); + } +} + static void _block_clicked_cb(void *data, Evas_Object *obj, void *event_info) { evas_object_del(obj); + elm_exit(); } static void __msg_ui_popup_warning(Evas_Object *parent, const char *msg) @@ -99,19 +142,20 @@ static void __msg_ui_popup_warning(Evas_Object *parent, const char *msg) D_LEAVE; } -static bundle *__msg_ui_parse_sms_uri(bundle *b, const char *uri) +static service_h __msg_ui_parse_sms_uri(service_h service, const char *uri) { D_ENTER; - bundle *cb = NULL; - char *content = NULL; - const char *recipient = NULL; - const char *body_text = NULL; + char *recipient = NULL; + char *body_text = NULL; + + service_h svc_handle = NULL; - cb = bundle_create(); - if (!cb) + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); return NULL; + } char *scheme = g_strdup(uri); @@ -124,186 +168,412 @@ static bundle *__msg_ui_parse_sms_uri(bundle *b, const char *uri) D_MSG("APPSVC RECIPIENT = [%s]", recipient); if (recipient) - bundle_add(cb, MSG_BUNDLE_KEY_TO, recipient); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient); } } g_free(scheme); } else { - recipient = appsvc_get_data(b, APPSVC_DATA_TO); + service_get_extra_data(service, SERVICE_DATA_TO, &recipient); D_MSG("APPSVC RECIPIENT = [%s]", recipient); - bundle_add(cb, MSG_BUNDLE_KEY_TO, recipient); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient); } /* Add body text */ - body_text = appsvc_get_data(b, APPSVC_DATA_TEXT); + service_get_extra_data(service, SERVICE_DATA_TEXT, &body_text); if (body_text) { D_MSG("APPSVC BODY_TEXT = [%s]", body_text); - bundle_add(cb, MSG_BUNDLE_KEY_BODY, body_text); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_BODY, body_text); } D_LEAVE; - return cb; + return svc_handle; } -static bundle *__get_bundle_app_svc_op(const char *operation, bundle *b) +static service_h __msg_ui_parse_mmsto_uri(service_h service, const char *uri) { D_ENTER; - if (b == NULL || operation == NULL) + char *content = NULL; + char *recipient = NULL; + char *body_text = NULL; + char *subject = NULL; + char *attachment = NULL; + char *cc = NULL; + + service_h svc_handle = NULL; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); return NULL; + } - const char *uri = NULL; - const char *recipient = NULL; - const char *body_text = NULL; + char *scheme = g_strdup(uri); - bundle *cb = NULL; + if (scheme) { + strtok_r(scheme, ":", &content); - if (g_strcmp0(operation, APPSVC_OPERATION_SEND_TEXT) == 0) { - uri = appsvc_get_uri(b); + if (content) { + if (g_ascii_isdigit(content[0]) || (content[0] == '+' && g_ascii_isdigit(content[1]))) { + recipient = strtok_r(NULL, "?", &content); + cc = strtok_r(NULL, "&", &content); + if (cc) + strtok_r(NULL, "=", &cc); + + D_MSG("APPSVC RECIPIENT = [%s]", recipient); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient); + } + } + g_free(scheme); + } else { + service_get_extra_data(service, SERVICE_DATA_TO, &recipient); + D_MSG("APPSVC RECIPIENT = [%s]", recipient); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient); + } + + /* Add body text */ + service_get_extra_data(service, SERVICE_DATA_TEXT, &body_text); + if (body_text) { + D_MSG("APPSVC BODY_TEXT = [%s]", body_text); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_BODY, body_text); + } + + /* Add subject */ + service_get_extra_data(service, SERVICE_DATA_SUBJECT, &subject); + if (subject) { + D_MSG("APPSVC SUBJECT = [%s]", subject); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_SUBJECT, subject); + } + + /* Add attachment */ + service_get_extra_data(service, MSG_BUNDLE_KEY_ATTACHFILE, &attachment); + if (attachment) { + D_MSG("APPSVC ATTACHMENT = [%s]", attachment); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, attachment); + } + + D_LEAVE; + + return svc_handle; +} + +static service_h __msg_ui_parse_file_uri(service_h service, const char *uri) +{ + D_ENTER; + + char *content = NULL; + char attachment[DEF_IMG_PATH_LEN] = {0, }; + int i = 0; + int len = 0; + + service_h svc_handle = NULL; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return NULL; + } + + char *scheme = g_strdup(uri); + + if (scheme) { + strtok_r(scheme, ":", &content); + D_MSG("content = [%s]", content); + + if (content) { + len = strlen(content) - 2; + if (len <= 0) { + D_EMSG("len is less than 0 !!"); + service_destroy(svc_handle); + g_free(scheme); + return NULL; + } + + /* Remove '//' from content string */ + for (i = 0; i < len; i++) { + attachment[i] = content[i+2]; + } + + if (attachment[0] != '\0') { + D_MSG("APPSVC ATTACHMENT = [%s]", attachment); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, attachment); + } + } + g_free(scheme); + } else { + D_EMSG("scheme is NULL!!"); + service_destroy(svc_handle); + return NULL; + } + + D_LEAVE; + + return svc_handle; +} + +static service_h __get_service_app_svc_op(const char *operation, service_h service) +{ + D_ENTER; + + if (service == NULL || operation == NULL) + return NULL; + + char *uri = NULL; + char *recipient = NULL; + char *body_text = NULL; + char *attachment = NULL; + char *subject = NULL; + + service_h svc_handle = NULL; + + if (g_strcmp0(operation, SERVICE_OPERATION_SEND) == 0) { + service_get_uri(service, &uri); + D_MSG("APPSVC URI = [%s]", uri); + + if (uri) { + if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_MMSTO_URI)) { /* MMS URI */ + svc_handle = __msg_ui_parse_mmsto_uri(service, uri); + } else if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_FILE_URI)) { + /* file URI */ + svc_handle = __msg_ui_parse_file_uri(service, uri); + if (svc_handle == NULL) { + D_MSG("cb is NULL"); + return NULL; + } + } else { + D_MSG("Not supported mime type"); + return NULL; + } + } else { + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return NULL; + } + + /* Add recipient number */ + service_get_extra_data(service, SERVICE_DATA_TO, &recipient); + if (recipient) { + D_MSG("APPSVC RECIPIENT = [%s]", recipient); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient); + } + + /* Add body text */ + service_get_extra_data(service, SERVICE_DATA_TEXT, &body_text); + if (body_text) { + D_MSG("APPSVC BODY_TEXT = [%s]", body_text); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_BODY, body_text); + } + + /* Add subject */ + service_get_extra_data(service, SERVICE_DATA_SUBJECT, &subject); + if (subject) { + D_MSG("APPSVC SUBJECT = [%s]", subject); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_SUBJECT, subject); + } + + /* Add attachment */ + service_get_extra_data(service, MSG_BUNDLE_KEY_ATTACHFILE, &attachment); + if (attachment) { + D_MSG("APPSVC ATTACHMENT = [%s]", attachment); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_ATTACHFILE, attachment); + } + } + + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_COMPOSE); + + } else if (g_strcmp0(operation, SERVICE_OPERATION_SEND_TEXT) == 0) { + service_get_uri(service, &uri); D_MSG("APPSVC URI = [%s]", uri); if (uri) { if (g_str_has_prefix(uri, MSG_BUNDLE_VALUE_SMS_URI)) { /* SMS URI */ - cb = __msg_ui_parse_sms_uri(b, uri); + svc_handle = __msg_ui_parse_sms_uri(service, uri); } else { D_MSG("Not supported mime type"); return NULL; } } else { - cb = bundle_create(); + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return NULL; + } /* Add body text */ - body_text = appsvc_get_data(b, APPSVC_DATA_TEXT); + service_get_extra_data(service, SERVICE_DATA_TEXT, &body_text); if (body_text) { D_MSG("APPSVC BODY_TEXT = [%s]", body_text); - bundle_add(cb, MSG_BUNDLE_KEY_BODY, body_text); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_BODY, body_text); } /* Add recipient number */ - recipient = appsvc_get_data(b, APPSVC_DATA_TO); + service_get_extra_data(service, SERVICE_DATA_TO, &recipient); if (recipient) { D_MSG("APPSVC RECIPIENT = [%s]", recipient); - bundle_add(cb, MSG_BUNDLE_KEY_TO, recipient); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, recipient); } } - bundle_add(cb, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_COMPOSE); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_COMPOSE); } D_LEAVE; - return cb; + return svc_handle; } -static bundle *__get_bundle_with_new_msg(struct appdata *ad) +static service_h __get_service_with_new_msg(struct appdata *ad) { D_ENTER; - MSG_ERROR_T err = MSG_SUCCESS; - MSG_SORT_RULE_S sortRule = {0, }; - MSG_THREAD_VIEW_LIST_S peerList = {0,}; - int i, new_sms_cnt; - bundle *b = NULL; + msg_error_t err = MSG_SUCCESS; + msg_struct_list_s peerList; + msg_struct_t sort_rule_t = msg_create_struct(MSG_STRUCT_SORT_RULE); + service_h svc_handle = NULL; + int i = 0; + int new_sms_cnt = 0; + int new_mms_cnt = 0; + int unreadCnt = 0; char buf[DEF_BUF_LEN_L] = {'0',}; char buf_contact[DEF_BUF_LEN] = {'0',}; - sortRule.sortType = MSG_SORT_BY_THREAD_DATE; - sortRule.bAscending = false; + msg_set_int_value(sort_rule_t, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE); + msg_set_bool_value(sort_rule_t, MSG_SORT_RULE_ACSCEND_BOOL, false); vconf_get_int(VCONFKEY_MESSAGE_RECV_SMS_STATE, &new_sms_cnt); + vconf_get_int(VCONFKEY_MESSAGE_RECV_MMS_STATE, &new_mms_cnt); - err = msg_get_thread_view_list(ad->msgHandle, &sortRule, &peerList); - if (err != MSG_SUCCESS) + err = msg_get_thread_view_list(ad->msgHandle, sort_rule_t, &peerList); + if (err != MSG_SUCCESS) { + msg_release_struct(&sort_rule_t); return NULL; + } - if (peerList.nCount <= 0) + if (peerList.nCount <= 0) { + msg_release_list_struct(&peerList); + msg_release_struct(&sort_rule_t); return NULL; + } - for(i=0; i<peerList.nCount; i++){ - if(msg_thread_view_get_unread_cnt(peerList.msgThreadInfo[i])) + for (i=0; i<peerList.nCount; i++){ + msg_get_int_value(peerList.msg_struct_info[i], MSG_THREAD_UNREAD_COUNT_INT, &unreadCnt); + if (unreadCnt > 0) break; } - if(i >= peerList.nCount) + if(i >= peerList.nCount) { + msg_release_list_struct(&peerList); + msg_release_struct(&sort_rule_t); return NULL; + } - if(msg_thread_view_get_unread_cnt(peerList.msgThreadInfo[i]) == new_sms_cnt){ + msg_get_int_value(peerList.msg_struct_info[i], MSG_THREAD_UNREAD_COUNT_INT, &unreadCnt); + if(unreadCnt == new_sms_cnt+new_mms_cnt){ + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + msg_release_list_struct(&peerList); + msg_release_struct(&sort_rule_t); + return NULL; + } - b = bundle_create(); + msg_struct_list_s *addrList = NULL; + int thread_id = 0; + int contact_id = 0; + char strName[DEF_THREAD_NAME_LEN+1] = {0,}; + char strNumber[DEF_THREAD_ADDR_LEN+1] = {0,}; - if (!b) - return NULL; + msg_get_int_value(peerList.msg_struct_info[i], MSG_THREAD_ID_INT, &thread_id); + msg_get_list_handle(peerList.msg_struct_info[i], MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addrList); - bundle_add(b, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_NEW_MSG); - snprintf(buf, DEF_BUF_LEN_L, "%d", msg_thread_view_get_thread_id(peerList.msgThreadInfo[i])); - bundle_add(b, MSG_BUNDLE_KEY_THREAD_ID, buf); - bundle_add(b, MSG_BUNDLE_KEY_THREAD_NAME, msg_thread_view_get_name(peerList.msgThreadInfo[i])); - bundle_add(b, MSG_BUNDLE_KEY_THREAD_ADDRESS, msg_thread_view_get_address(peerList.msgThreadInfo[i])); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_NEW_MSG); + snprintf(buf, DEF_BUF_LEN_L, "%d", thread_id); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf); + msg_get_str_value(peerList.msg_struct_info[i], MSG_THREAD_NAME_STR, strName, DEF_THREAD_NAME_LEN); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_NAME, strName); - snprintf(buf_contact, DEF_BUF_LEN, "%d", msg_thread_view_get_contact_id(peerList.msgThreadInfo[i])); - bundle_add(b, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact); + msg_get_str_value(addrList->msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN); + msg_get_int_value(addrList->msg_struct_info[0], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id); - msg_release_thread_view_list(&peerList); + snprintf(buf_contact, DEF_BUF_LEN, "%d", contact_id); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ADDRESS, strNumber); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact); } + msg_release_struct(&sort_rule_t); + msg_release_list_struct(&peerList); + D_LEAVE; - return b; + return svc_handle; } -static bundle* __get_bundle_with_msg_id(struct appdata *ad, bundle *b) +static service_h __get_service_with_msg_id(struct appdata *ad, service_h service) { D_ENTER; - bundle *nb = bundle_create(); + service_h svc_handle = NULL; - if (!nb) + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); return NULL; + } int msg_id = 0; - const char *msg_id_str = bundle_get_val(b, MSG_BUNDLE_KEY_MSG_ID); + char *msg_id_str = NULL; + service_get_extra_data(service, MSG_BUNDLE_KEY_MSG_ID, &msg_id_str); - if (!msg_id_str) + if (!msg_id_str) { + service_destroy(svc_handle); return NULL; + } msg_id = atoi(msg_id_str); - if (msg_id <= 0) + if (msg_id <= 0) { + service_destroy(svc_handle); return NULL; + } - msg_message_t msg_t = msg_new_message(); - MSG_SENDINGOPT_S sendOpt = {0, }; - MSG_ERROR_T err = MSG_SUCCESS; + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + msg_error_t err = MSG_SUCCESS; int thread_id = 0; int contact_id = 0; char buf_thread[DEF_BUF_LEN_S] = {0,}; char buf_contact[DEF_BUF_LEN_S] = {0,}; - err = msg_get_message(ad->msgHandle, msg_id, msg_t, &sendOpt); + msg_struct_list_s *addr_list = NULL; + char strNumber[DEF_THREAD_ADDR_LEN + 1] = {0,}; + char strName[DEF_THREAD_NAME_LEN + 1] = {0,}; + + err = msg_get_message(ad->msgHandle, (msg_message_id_t)msg_id, msgInfo, sendOpt); if (err != MSG_SUCCESS) { - if (nb) - bundle_free(nb); + service_destroy(svc_handle); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); return NULL; } - thread_id= msg_get_ith_thread_id(msg_t, 0); + msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id); snprintf(buf_thread, sizeof(buf_thread), "%d", thread_id); - contact_id = msg_get_ith_contact_id(msg_t, 0); + msg_get_list_handle(msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list); + + msg_get_str_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN); + msg_get_str_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_DISPLAYNAME_STR, strName, DEF_THREAD_NAME_LEN); + msg_get_int_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id); snprintf(buf_contact, sizeof(buf_contact), "%d", contact_id); - bundle_add(nb, MSG_BUNDLE_KEY_THREAD_ID, buf_thread); - bundle_add(nb, MSG_BUNDLE_KEY_THREAD_NAME, msg_get_ith_name(msg_t, 0)); - bundle_add(nb, MSG_BUNDLE_KEY_THREAD_ADDRESS, msg_get_ith_address(msg_t, 0)); - bundle_add(nb, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf_thread); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_NAME, strName); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ADDRESS, strNumber); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact); - msg_release_message(&msg_t); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); D_LEAVE; - return nb; + return svc_handle; } static Evas_Object* create_win(const char *name) @@ -316,7 +586,6 @@ static Evas_Object* create_win(const char *name) eo = elm_win_add(NULL, name, ELM_WIN_BASIC); if (eo) { elm_win_title_set(eo, name); - elm_win_borderless_set(eo, EINA_TRUE); evas_object_smart_callback_add(eo, "delete,request", win_del, NULL); ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); evas_object_resize(eo, w, h); @@ -326,8 +595,7 @@ static Evas_Object* create_win(const char *name) return eo; } - -void layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv) +void layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) { D_ENTER; @@ -358,10 +626,11 @@ void layout_cb(struct ui_gadget *ug, enum ug_mode mode, void *priv) default: break; } + D_LEAVE; } -void result_cb(struct ui_gadget *ug, bundle *result, void *priv) +void result_cb(ui_gadget_h ug, service_h result, void *priv) { D_ENTER; @@ -370,90 +639,68 @@ void result_cb(struct ui_gadget *ug, bundle *result, void *priv) struct appdata *ad = priv; PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)ad->thread_data; - const char *buf; + PMSG_THREAD_LIST_DATA pListData = NULL; + char *buf = NULL; + char *str_result = NULL; - if (!g_strcmp0(bundle_get_val(result, MSG_BUNDLE_KEY_RESULT), MSG_BUNDLE_VALUE_DEL_ALL)) { + service_get_extra_data(result, MSG_BUNDLE_KEY_RESULT, &str_result); + if (pData == NULL) { + if (!g_strcmp0(str_result, MSG_BUNDLE_VALUE_DEL_ALL)) + ug_destroy(ug); - ug_destroy(ug); + elm_exit(); + return; + } - if(pData) { - PMSG_APP_THREAD_DATA_S item_data = NULL; - const char *del_thread_id = NULL; - Elm_Object_Item *gen_item = NULL; - int del_id = 0; + pListData = msg_ui_thread_get_current_list(); - del_thread_id = bundle_get_val(result, MSG_BUNDLE_KEY_THREAD_ID); - if (!del_thread_id) - return; + if (!g_strcmp0(str_result, MSG_BUNDLE_VALUE_DEL_ALL)) { + ug_destroy(ug); - gen_item = elm_genlist_first_item_get(pData->genlist); - elm_genlist_item_show(gen_item, ELM_GENGRID_ITEM_SCROLLTO_TOP); /** move to the first item */ + if (pListData) { + int del_id = 0; - del_id = atoi(del_thread_id); - while (gen_item) { - item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(gen_item); - if (item_data && item_data->threadId == del_id) { - elm_object_item_del(gen_item); - break; + if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG) { + service_get_extra_data(result, MSG_BUNDLE_KEY_MSG_ID, &buf); + if (buf) { + del_id = atoi(buf); + msg_ui_thread_list_msg_item_delete(pListData, del_id); + } + } else { + service_get_extra_data(result, MSG_BUNDLE_KEY_THREAD_ID, &buf); + if (buf) { + del_id = atoi(buf); + msg_ui_thread_list_item_delete(pListData, del_id); } - gen_item = elm_genlist_item_next_get(gen_item); } - pData->sel_gen_item = NULL; - pData->sel_thread_id = 0; + pListData->sel_gen_item = NULL; + pListData->sel_thread_id = 0; + pListData->sel_msg_id = 0; ad->composer_ug = NULL; - - pData->thread_cnt--; - if (pData->thread_cnt <= 0) - msg_ui_thread_list_load(pData); - } else { - elm_exit(); } + } else { + int update_id = 0; - } else if (!g_strcmp0(bundle_get_val(result, MSG_BUNDLE_KEY_COMPOSER_RESPONSE), MSG_BUNDLE_VALUE_RET_YES)) { - D_MSG("Composer will closed by selecting 'yes'"); - if (pData && pData->msg_b) { - if (g_strcmp0(bundle_get_val(pData->msg_b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_MSG_ID) == 0 || - g_strcmp0(bundle_get_val(pData->msg_b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_NEW_MSG) == 0 || - g_strcmp0(bundle_get_val(pData->msg_b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_COMPOSE) == 0 || - g_strcmp0(bundle_get_val(pData->msg_b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_SMS_URI) == 0) { - - if (msg_ui_load_composer_ug(pData->msg_b) == MSG_UI_RET_ERR) - D_MSG("Failed to load composer ug"); + if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG) { + service_get_extra_data(result, MSG_BUNDLE_KEY_MSG_ID, &buf); + if (buf) { + update_id = atoi(buf); + msg_ui_thread_list_msg_item_update(pListData, update_id); } - bundle_free(pData->msg_b); - pData->msg_b = NULL; - } - } else if (!g_strcmp0(bundle_get_val(result, MSG_BUNDLE_KEY_COMPOSER_RESPONSE), MSG_BUNDLE_VALUE_RET_NO)) { - D_MSG("Composer will not be closed"); - if (pData && pData->msg_b) { - bundle_free(pData->msg_b); - pData->msg_b = NULL; - } - } else if ((buf = bundle_get_val(result, MSG_BUNDLE_KEY_THREAD_ID)) != NULL) { - int thread_id = 0; - PMSG_APP_THREAD_DATA_S item_data = NULL; - Elm_Object_Item *gen_item = NULL; - - thread_id = atoi(buf); - gen_item = elm_genlist_first_item_get(pData->genlist); - - while (gen_item) { - item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(gen_item); - - if (item_data->threadId == thread_id) { - elm_genlist_item_show(gen_item, ELM_GENGRID_ITEM_SCROLLTO_TOP); - msg_ui_thread_list_item_update(pData, thread_id); - break; + } else { + service_get_extra_data(result, MSG_BUNDLE_KEY_THREAD_ID, &buf); + if (buf) { + update_id = atoi(buf); + msg_ui_thread_list_item_update(pListData, update_id); } - gen_item = elm_genlist_item_next_get(gen_item); } } D_LEAVE; } -void destroy_cb(struct ui_gadget *ug, void *priv) +void destroy_cb(ui_gadget_h ug, void *priv) { D_ENTER; @@ -466,37 +713,47 @@ void destroy_cb(struct ui_gadget *ug, void *priv) ad->composer_ug = NULL; } - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)ad->thread_data; + if (ad->layout_main) { + PMSG_THREAD_LIST_DATA pListData = NULL; - if (pData && ad->layout_main) { - if (pData->search_mode == THREAD_SEARCH_ON) - elm_object_focus_set(pData->searchbar, EINA_TRUE); + pListData = msg_ui_thread_get_current_list(); - if (pData->sel_thread_id > 0) - msg_ui_thread_list_item_update(pData, pData->sel_thread_id); + if (pListData == NULL) { + elm_exit(); + return; + } + + if (pListData->search_mode == THREAD_SEARCH_ON) + elm_object_focus_set(pListData->searchbar, EINA_TRUE); - pData->sel_gen_item = NULL; - pData->sel_thread_id = 0; + if (pListData->sel_thread_id > 0) + msg_ui_thread_list_item_update(pListData, pListData->sel_thread_id); - pData->viewmode = THREAD_NORMAL_VIEW; + if (pListData->sel_msg_id > 0) + msg_ui_thread_list_msg_item_update(pListData, pListData->sel_msg_id); + + pListData->sel_gen_item = NULL; + pListData->sel_thread_id = 0; + pListData->sel_msg_id = 0; + + pListData->view_mode = THREAD_NORMAL_VIEW; } else { elm_exit(); } } - -int msg_ui_load_composer_ug(bundle *b) +int msg_ui_load_composer_ug(service_h svc_handle) { D_ENTER; if (!gAppData) return MSG_UI_RET_ERR; - if (gAppData->composer_ug) - ug_send_message(gAppData->composer_ug, b); - else { - bundle_add(b, MSG_BUNDLE_KEY_FROM, MSG_BUNDLE_VALUE_INTERNAL); - gAppData->composer_ug = ug_create(NULL, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, b, &gAppData->cbs); + if (gAppData->composer_ug) { + ug_send_message(gAppData->composer_ug, svc_handle); + } else { + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FROM, MSG_BUNDLE_VALUE_INTERNAL); + gAppData->composer_ug = ug_create(NULL, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &gAppData->cbs); } if (!gAppData->composer_ug) @@ -506,12 +763,11 @@ int msg_ui_load_composer_ug(bundle *b) return MSG_UI_RET_SUCCESS; } -static int app_create(void *data) +static bool app_create(void *data) { -/* return 0 : success, return non-zero : not to run main loop */ + /* return TRUE : success, return FALSE : not to run main loop */ D_ENTER; - D_MSG("Measure time = [%d]", appcore_measure_time()); MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, MSG_UI_RET_ERR); @@ -521,40 +777,37 @@ static int app_create(void *data) /* create window */ win = create_win(MESSAGE_PKGNAME); if (win == NULL) - return MSG_UI_RET_ERR; + return FALSE; ad->win_main = win; - UG_INIT_EFL(ad->win_main, UG_OPT_INDICATOR_ENABLE); + mm_session_init(MM_SESSION_TYPE_SHARE); - /* add system event callback */ - appcore_set_event_callback(APPCORE_EVENT_LANG_CHANGE, lang_changed, ad); - appcore_set_event_callback(APPCORE_EVENT_LOW_BATTERY, low_battery_cb, ad); - appcore_set_event_callback(APPCORE_EVENT_REGION_CHANGE, region_changed_cb, ad); + UG_INIT_EFL(ad->win_main, UG_OPT_INDICATOR_ENABLE); + elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_SHOW); ad->cbs.layout_cb = layout_cb; ad->cbs.result_cb = result_cb; ad->cbs.destroy_cb = destroy_cb; ad->cbs.priv = (void *)ad; - gAppData = ad; /* Set global app data pointer; */ + gAppData = ad; // Set global app data pointer; D_LEAVE; - D_MSG("Measure time = [%d]", appcore_measure_time()); - - return MSG_UI_RET_SUCCESS; + return TRUE; } -static int app_terminate(void *data) +static void app_terminate(void *data) { D_ENTER; - MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, MSG_UI_RET_ERR); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !data, "data is null"); struct appdata *ad = data; - MSG_ERROR_T err; + msg_error_t err; ug_destroy_all(); + mm_session_finish(); if (ad->thread_data) msg_ui_thread_deinit_thread_data(ad->thread_data); @@ -565,10 +818,9 @@ static int app_terminate(void *data) } D_LEAVE; - return MSG_UI_RET_SUCCESS; } -static int app_pause(void *data) +static void app_pause(void *data) { D_ENTER; @@ -576,11 +828,9 @@ static int app_pause(void *data) ug_pause(); D_LEAVE; - - return MSG_UI_RET_SUCCESS; } -static int app_resume(void *data) +static void app_resume(void *data) { D_ENTER; @@ -588,25 +838,20 @@ static int app_resume(void *data) ug_resume(); D_LEAVE; - - return MSG_UI_RET_SUCCESS; } -static int app_reset(bundle *b, void *data) +static void app_service(service_h service, void *data) { D_ENTER; - D_MSG("Measure time = [%d]", appcore_measure_time()); - - MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, MSG_UI_RET_ERR); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !data, "data is NULL"); struct appdata *ad = data; - - bundle *cb = NULL; - MSG_ERROR_T err = MSG_SUCCESS; - MSG_HANDLE_T msgHandle; + service_h svc_handle = NULL; + msg_error_t err = MSG_SUCCESS; + msg_handle_t msgHandle = NULL; bool isDefaultView = false; - const char *operation = NULL; + char *operation = NULL; ug_resume(); @@ -615,48 +860,61 @@ static int app_reset(bundle *b, void *data) if (err != MSG_SUCCESS) { MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "msg_open_msg_handle failed, Error=[%d]\n", err); __msg_ui_popup_warning(ad->win_main, dgettext("sys_string", "IDS_COM_POP_SERVICE_UNAVAILABLE")); - return MSG_UI_RET_ERR; + return; } ad->msgHandle = msgHandle; } - if (b) { - operation = appsvc_get_operation(b); + if (service) { + service_get_operation(service, &operation); if (operation) { - cb = __get_bundle_app_svc_op(operation, b); + svc_handle = __get_service_app_svc_op(operation, service); } else { - if (g_strcmp0(bundle_get_val(b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_COMPOSE) == 0) { /* From call, log,.. etc. */ - cb = bundle_dup(b); - } else if (g_strcmp0(bundle_get_val(b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_NEW_MSG) == 0) { /* From lock-screen */ - cb = __get_bundle_with_new_msg(ad); - if (cb == NULL) - isDefaultView = true; - } else if (g_strcmp0(bundle_get_val(b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_MSG_ID) == 0) { /* From quick-panel */ - cb = __get_bundle_with_msg_id(ad, b); + char *key_type = NULL; + + service_get_extra_data(service, MSG_BUNDLE_KEY_TYPE, &key_type); + if (g_strcmp0(key_type, MSG_BUNDLE_VALUE_COMPOSE) == 0) { + service_clone(&svc_handle, service); + } else if (g_strcmp0(key_type, MSG_BUNDLE_VALUE_NEW_MSG) == 0) { + svc_handle = __get_service_with_new_msg(ad); + } else if (g_strcmp0(key_type, MSG_BUNDLE_VALUE_MSG_ID) == 0) { + svc_handle = __get_service_with_msg_id(ad, service); } else { - isDefaultView = true; + char *mime_type = NULL; + + service_get_extra_data(service, AUL_K_MIME_TYPE, &mime_type); + if (g_strcmp0(mime_type, MSG_BUNDLE_VALUE_SMS_URI) == 0) + svc_handle = __msg_ui_parse_sms_uri(service, NULL); + else if (g_strcmp0(mime_type, MSG_BUNDLE_VALUE_MMSTO_URI) == 0) + svc_handle = __msg_ui_parse_mmsto_uri(service, NULL); + else + isDefaultView = true; } } - if (!cb) + if (!svc_handle) isDefaultView = true; - } else { isDefaultView = true; } if (isDefaultView) { + if (ad->composer_ug) { + ug_destroy(ad->composer_ug); + ad->composer_ug = NULL; + } + if (!ad->thread_data) ad->thread_data = msg_ui_thread_init_thread_data(ad); if (!ad->layout_main) { - ad->layout_main = msg_ui_thread_create_layout_main(ad->win_main); + ad->layout_main = msg_ui_thread_create_layout_main(ad->thread_data); evas_object_size_hint_weight_set(ad->layout_main, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_win_resize_object_add(ad->win_main, ad->layout_main); - msg_ui_thread_load_thread_view(ad->thread_data, b); + msg_ui_thread_load_thread_view(ad->thread_data, service); } else { - msg_ui_thread_reset_thread_view(ad->thread_data, b); + msg_ui_thread_reset_thread_view(ad->thread_data, service); } } else { /* If message app is called by app-service to display composer view, @@ -664,8 +922,8 @@ static int app_reset(bundle *b, void *data) * when user tap back button. */ if (operation != NULL) { - if (g_strcmp0(operation, APPSVC_OPERATION_SEND) == 0 || - g_strcmp0(operation, APPSVC_OPERATION_SEND_TEXT) == 0) { + if (g_strcmp0(operation, SERVICE_OPERATION_SEND) == 0 || + g_strcmp0(operation, SERVICE_OPERATION_SEND_TEXT) == 0) { if (ad->layout_main) { evas_object_del(ad->layout_main); ad->layout_main = NULL; @@ -674,24 +932,27 @@ static int app_reset(bundle *b, void *data) } if (!ad->composer_ug) - ad->composer_ug = ug_create(NULL, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, cb, &ad->cbs); + ad->composer_ug = ug_create(NULL, MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &ad->cbs); else - ug_send_message(ad->composer_ug, cb); - - const char *thread_id_s = NULL; + ug_send_message(ad->composer_ug, svc_handle); PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)ad->thread_data; - thread_id_s = bundle_get_val(cb, MSG_BUNDLE_KEY_THREAD_ID); + char *thread_id_s = NULL; - if (pData && thread_id_s) - pData->sel_thread_id = atoi(thread_id_s); - } + service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, &thread_id_s); - if (cb) { - bundle_free(cb); - cb = NULL; + if (pData) { + PMSG_THREAD_LIST_DATA pListData = NULL; + pListData = msg_ui_thread_get_current_list(); + + if (pListData && thread_id_s) + pListData->sel_thread_id = atoi(thread_id_s); + } } + if (svc_handle) + service_destroy(svc_handle); + if (ad->win_main) { evas_object_show(ad->win_main); elm_win_activate(ad->win_main); @@ -701,28 +962,28 @@ static int app_reset(bundle *b, void *data) elm_exit(); D_LEAVE; - - return MSG_UI_RET_SUCCESS; } int main(int argc, char *argv[]) { D_ENTER; - appcore_measure_start(); struct appdata ad; - struct appcore_ops ops = { - .create = app_create, - .terminate = app_terminate, - .pause = app_pause, - .resume = app_resume, - .reset = app_reset, - }; - memset(&ad, 0x0, sizeof(struct appdata)); - ops.data = &ad; - D_LEAVE; + app_event_callback_s event_callback; + + event_callback.create = app_create; + event_callback.terminate = app_terminate; + event_callback.pause = app_pause; + event_callback.resume = app_resume; + event_callback.service = app_service; + event_callback.low_memory = NULL; + event_callback.low_battery = low_battery_cb; + event_callback.device_orientation = rotate; + event_callback.language_changed = lang_changed; + event_callback.region_format_changed = region_changed_cb; - return appcore_efl_main(MESSAGE_PKGNAME, &argc, &argv, &ops); + D_LEAVE; + return app_efl_main(&argc, &argv, &event_callback, &ad); } diff --git a/main/message.h b/main/message.h index 4e69bb5..24bea78 100755 --- a/main/message.h +++ b/main/message.h @@ -19,21 +19,19 @@ #include <stdio.h> #include <glib.h> - -#include <MsgStorageTypes.h> -#include <MapiStorage.h> -#include <MapiMessage.h> -#include <MapiControl.h> -#include <MapiTransport.h> +#include <msg.h> +#include <msg_storage.h> +#include <msg_transport.h> #include <libintl.h> #include <bundle.h> -#include <appcore-efl.h> +#include <app.h> #include <Ecore.h> #include <Elementary.h> #include <ui-gadget-module.h> #include <utilX.h> #include "msg-ui-util.h" +#include <aul.h> #include <appsvc.h> #define POPUP_DELAY (1) @@ -41,19 +39,17 @@ struct appdata { - Evas_Object *win_main; - Evas_Object *layout_main; - - struct ug_cbs cbs; - struct ui_gadget *composer_ug; + Evas_Object *win_main; + Evas_Object *layout_main; - MSG_HANDLE_T msgHandle; + struct ug_cbs cbs; + ui_gadget_h composer_ug; + msg_handle_t msgHandle; void *thread_data; }; -int msg_ui_load_composer_ug(bundle *b); - +int msg_ui_load_composer_ug(service_h svc_handle); #endif /* __DEF_message_H__ */ diff --git a/main/org.tizen.message.desktop.in b/main/org.tizen.message.desktop.in deleted file mode 100755 index 25eded9..0000000 --- a/main/org.tizen.message.desktop.in +++ /dev/null @@ -1,27 +0,0 @@ -Name=Messages -Name[en_US]=Messages -Name[ko_KR]=메시지 -Name[de_DE]=Nachrichten -Name[el_GR]=ΜηνÏματα -Name[es_ES]=Mensajes -Name[fr_FR]=Messages -Name[it_IT]=Messaggi -Name[ja_JP]=メール -Name[nl_NL]=Berichten -Name[pt_PT]=Mensagem -Name[ru_RU]=Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ -Name[tr_TR]=Mesajlar -Name[zh_CN]=ä¿¡æ¯ -Name[zh_HK]=è¨Šæ¯ -Name[zh_TW]=è¨Šæ¯ -Type=Application -MimeType=sms.uri -Exec=${BINDIR}/message -Icon=${PKGNAME}.png -Comment=message application -Version=0.1.0 -nodisplay=False -X-TIZEN-TaskManage=True -X-TIZEN-Multiple=False -X-TIZEN-Removable=False -X-TIZEN-SVC= http://tizen.org/appsvc/operation/send_text|sms|NULL;http://tizen.org/appsvc/operation/send_text|NULL|NULL diff --git a/main/po/CMakeLists.txt b/main/po/CMakeLists.txt index 4f2d7a8..87608ec 100755 --- a/main/po/CMakeLists.txt +++ b/main/po/CMakeLists.txt @@ -1,7 +1,10 @@ # for i18n #SET(POFILES de.po el.po en_US.po es.po fr.po it.po ja.po ko.po nl.po pt.po ru.po tk.po zh_CN.po zh_HK.po zh_TW.po) -SET(POFILES en.po nl_NL.po de_DE.po zh_HK.po zh_CN.po ru_RU.po ko_KR.po zh_TW.po ja_JP.po es_ES.po el_GR.po it_IT.po tr_TR.po pt_PT.po fr_FR.po) +SET(POFILES ar.po bg.po ca.po cs.po da.po de_DE.po el_GR.po en.po en_US.po es_ES.po + fi.po fr_FR.po he.po hi.po hr.po hu.po id.po it_IT.po ja_JP.po ko_KR.po + lt.po lv.po ms.po nl_NL.po no.po pl.po pt_PT.po ro.po ru_RU.po sk.po + sl.po sr.po sv.po th.po tr_TR.po uk.po vi.po zh_CN.po zh_HK.po zh_TW.po) SET(MSGFMT "/usr/bin/msgfmt") diff --git a/main/po/ar.po b/main/po/ar.po new file mode 100644 index 0000000..57a6559 --- /dev/null +++ b/main/po/ar.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "غير قابل للÙتØ" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "تØميل" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "يتعذر النقل" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "تم الوصول للØد الأقصى لعدد الصÙØات" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "الوضع المقيد. غير قادر على إدراج Ù…Øتوى مقيد" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "تم التوصيل" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "انتهت المدة" + +msgid "IDS_MSGF_BODY_READ" +msgstr "المقروءة" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "جاري التØميل…" + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "أدخل البطاقة لإرسال رسائل. سيتم ØÙظ الرسالة ÙÙŠ الصادرة" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "أدخل رقم القناة" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "تم تØديد رسالة واØدة" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "تم تØديد %d رسائل" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "معاينة" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "اسم المل٠موجود مسبقا" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "لا توجد رسائل" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "إضاÙØ© إلى جهة اتصال" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "تخلص" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "يتعذر إرسال الرسالة" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "التقاط صورة" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "لا يوجد عنوان" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "قائمة العناصر المرÙقة" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "تØميل تلقائي" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "رسائل البث" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "مركز %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "وقت مخصص" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "تقرير التوصيل" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Ùشل الإرسال" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "من" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "قائمة العناصر المدرجة" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "تم توصيل الرسالة" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "تم تØميل الرسالة" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Øر" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "تØذير" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "تم الإرسال" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "كيلوبايت" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "الرسائل التعريÙية" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "تقرير القراءة" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "تم الاستلام" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "يدوي" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "رÙض" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "خيارات الاستقبال" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "طلب تقرير التوصيل" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "طلب تقرير قراءة الرسالة" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "مقيد" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "غير هامة" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "عادي" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "هامة" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "الأولوية" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "إرسال تقرير قراءة الرسالة" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "مدة الصÙØØ©" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "رسائل الطوارئ" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "رسائل نصية" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "إجمالي الØجم" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "Ù…Øتوى DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "قائمة العناصر" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 ثوان" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "ثانيتان" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 ثوان" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "الشبكة المØلية" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "تثبيت" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "الشبكة الأجنبية" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "عرض تÙاصيل جهة الاتصال" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "تم إرسال رسالة الوسائط" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Ùشل استرداد الرسالة" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Ùشل ارسال رسالة متعددة الوسائط." + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "تØويل" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "غير مقروءة" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "نقل إلى الهاتÙ" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "مستلم مكرر" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "تم بلوغ الØد الأقصى لعدد المستلمين (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "إلى" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "تسجيل صوت" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "تسجيل Ùيديو" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "تم التغيير إلى رسالة وسائط" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "تم التغيير إلى SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "يتوÙر %d مرÙقات. قم بتØديد عدد يصل إلى %d مرÙقات" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "يتعذر إرÙاق جميع الملÙات. يبلغ الØد الأقصى لسعة المرÙقات %d كيلوبايت. استمرار؟" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Øجم الخط" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "نمط الإنشاء" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "رسالة وسائط" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "لا يوجد موضوع" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "مركز الخدمة" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "تØديد عنوان" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "نقل إلى البطاقة" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "أنت على وشك تسجيل الدخول (%s). متابعة" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "إعادة إرسال" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "مستلم غير صالØ" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "مستلمين غير صالØين" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "يتعذر التشغيل أثناء المكالمة" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "يتعذر الØÙظ أثناء استخدام وضع التخزين كبير السعة‬" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "رÙض الرسالة الØالية؟" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "تم التØديد" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "مسØØŸ" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "يتعذر الإرÙاق. يبلغ الØد الأقصى Ù„Øجم الملÙات %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "مقيد" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "غير قابل لتØويل هذا الملÙ. تم Ù‚ÙÙ„ تØويل هذا الملÙ" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "رسالة مجدولة" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "سياسة الأمان تقيد إنشاء رسائل نصية" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "تتم الإضاÙØ©. الرجاء الانتظار..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "عنوان مركز الخدمة" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "رسائل البريد العشوائي‬" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "كبير" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "عادي" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "صغير" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "يتعذر إرسال رسالة مجدولة. Øدد موعدا آخر" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "التاريخ Ùˆ الوقت" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "رسائل الوسائط" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "لم تتم إضاÙØ© مستلمين. أدخل المستلمين" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "خيارات الإرسال" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "نوع تنبيه الاستلام" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "طوارئ" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "عادي" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "إرسال رسالة الطوارئ" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "المستقبلون" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "التكرار" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "رسالة" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "مرة واØدة" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 مرات" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 مرات" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "أنا ÙÙŠ Øالة طارئة. رجاء المساعدة" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "لم يتم إدخال بطاقة SIM" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "التقاط صورة" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "التقاط Ùيديو" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "تسجيل الصوت" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "رسائل CB" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "رسائل بطاقة SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "يجب أن تكون المدة أطول من %d ثوان" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "غير قابل على إضاÙØ© Ù…Øتوى" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "تØديد مستلم" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "عرض الاسم" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "المدة (%s ثوان)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "الصورة كبيرة للغاية. ضغط..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "تم ØÙظ الرسالة كمسودة" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "آخر" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "مسودة" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "مدة الشريØØ©" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "إرسال بريد إلكتروني" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "العناصر المدرجة" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "المØتويات الملØقة" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d مرÙقات" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "رسالة\nمجدولة" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "المدة\nâ€(%d ثوان)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "استخدام معلومات جهة اتصال أخرى" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "تØتوي هذه الرسالة على مل٠ملØÙ‚ غير ظاهر" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "تØتوي هذه الرسالة على ملÙات ملØقة غير ظاهرة" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "ØÙظ الكل" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "رسائل المسودة" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "ستتم استعادة الرسالة" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "سيتم إلغاء الرسالة المجدولة" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "نسخ نص الرسالة" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "عرض تÙاصيل الرسالة" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "رسائل مقÙلة" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "صناديق الرسائل" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Øجب" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "نسخ إلى الهاتÙ" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "تم نسخ الرسالة من بطاقة SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "إلغاء الرسالة" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "الملØقات" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "رسالة Ùشل الإرسال" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "تم الوصول إلى أقصى عدد من الØروÙ" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "قيد الاستعادة..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "لا يوجد ملØقات" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "تم النسخ إلى الØاÙظة" + diff --git a/main/po/bg.po b/main/po/bg.po new file mode 100644 index 0000000..4d53e84 --- /dev/null +++ b/main/po/bg.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Ðевъзможно е отварÑнето" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Изтегли" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Ðе може да Ñе премеÑти" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "ДоÑтигнат е макÑималниÑÑ‚ брой Ñтраници" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Ограничен режим. Ðе може да Ñе вмъкне забранено Ñъдържание" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "ДоÑтавено" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "С изтекъл Ñрок" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Прочетено" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "ИзтеглÑне..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "ПоÑтавете SIM карта, за да изпращате ÑъобщениÑ. Съобщението ще бъде запаметено в ИзходÑщи" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Въведете номер на канал" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "Избрано е 1 Ñъобщение" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "Избрани Ñа %d ÑъобщениÑ" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Преглед" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Името на файл вече ÑъщеÑтвува" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "ÐÑма ÑъобщениÑ" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Добави към запиÑ" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Ðнулиране" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Ðе може да Ñе изпрати Ñъобщението" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Снимай" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "ÐÑма адреÑ" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "СпиÑък Ñ Ð¿Ñ€Ð¸ÐºÐ°Ñ‡ÐµÐ½Ð¸ елементи" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Ðвто изтеглÑне" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Излъчени ÑъобщениÑ" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Център %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "ЧаÑова зона по избор" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Отчет за доÑтавка" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "ÐеуÑпешно изпращане" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "От" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "СпиÑък Ñ Ð²Ð¼ÑŠÐºÐ½Ð°Ñ‚Ð¸ елементи" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Съобщението е доÑтавено" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Съобщението е изтеглено" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Свободен" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Предупреждение" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Изпратен" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Push ÑъобщениÑ" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Отчет за прочетени" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Получени" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Ръчно" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Отказ" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Опции за получаване" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Отчет за доÑтавка" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "ИзиÑкване отчет за четене" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Ограничен" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "HиÑък" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Ðормален" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Спешно" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Приоритет" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Изпр. отчет чет." + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Времетраене на Ñтраница" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "SOS ÑъобщениÑ" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "ТекÑтови ÑъобщениÑ" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Общ размер" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM Ñъдържание" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "СпиÑък Ñ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ‚Ð¸" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 Ñекунди" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 Ñекунди" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 Ñекунди" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Ðационална мрежа" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "ИнÑталиране" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Мрежа в чужбина" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Преглед на детайли за запиÑ" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Мултимедийното Ñъобщение е изпратено" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "ÐеуÑпешно изтеглÑне на Ñъобщение" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "ÐеуÑпешно изпращане на мултимедийно Ñъобщение" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Препр" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Ðечетени" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "ПремеÑти в телефона" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "ПовтарÑщ Ñе получател" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "ДоÑтигнат е макÑималниÑÑ‚ брой получатели (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "До" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° звук" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° видео" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Променено на MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Сменено на SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "Възможни Ñа %d прикачени файла. Изберете до %d прикачени файла" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Ðе могат да Ñе прикачат вÑички файлове. МакÑималниÑÑ‚ размер за прикачени файлове е %d KB. Продължаване?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Размер на шрифта" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Режим на Ñъздаване" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Мултимедийно Ñъобщение" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "ÐÑма тема" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Център за обÑлужване" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Изберете адреÑ" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "ПремеÑти в SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Ще преминете в ÑÑŠÑтоÑние â€Ð¾Ð½Ð»Ð°Ð¹Ð½â€(%s). Продължаване?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Повторно изпращане" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Ðевалиден получател" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Ðевалидни получатели" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Ðе може да Ñе възпроизведе по време на разговор" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Ðе може да Ñе запиÑва, докато е в режим на запаметÑващо уÑтройÑтво" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Игнориране на текущото Ñъобщение?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Избран" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Изтриване?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Ðе може да Ñе прикачи. МакÑималниÑÑ‚ размер на файловете е %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Ограничен" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Препращането е невъзможно. Файлът е защитен от препращане" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Съобщение по разпиÑание" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Правилата за защита ограничават пиÑането на текÑтови ÑъобщениÑ" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "ДобавÑне. МолÑ, изчакайте..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "ÐÐ´Ñ€ÐµÑ Ñервизен центъра" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Ð¡ÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ ÑÑŠÑ Ñпам" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Едър" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Ðормален" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Малък" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Мъничък" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Съобщението по разпиÑание не може да Ñе изпрати. Задайте друг чаÑ" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Дата и чаÑ" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Мултимедийни ÑъобщениÑ" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "ÐÑма добавени получатели. Въведете получатели" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Опции за изпращане" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Получаване на вид предупреждение" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Ðормален" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Изпращане на SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Получатели" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Повтори" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Съобщение" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Веднъж" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 пъти" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 пъти" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Има Ñпешен Ñлучай. МолÑ, помогнете ми." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM не е поÑтавена" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Ðаправи Ñнимка" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° видео" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "ЗапиÑване на аудио" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "ЦиркулÑрни ÑъобщениÑ" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Ð¡ÑŠÐ¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° SIM картата" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "ПродължителноÑтта Ñ‚Ñ€Ñбва да е повече от %d Ñекунди" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Ðевъзможно добавÑне на Ñъдържание" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Избор получател" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Преглед на тел. указ." + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Времетраене (%s Ñек.)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Картината е твърде голÑма. КомпреÑиране..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Съобщението запиÑано като чернова" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Друго" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Чернова" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "ПродължителноÑÑ‚ за Ñлайда" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Изпращане на еmail" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Вмъкнати елементи" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Прикачени обекти" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d прикачени файла" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Планирано\nÑъобщение" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Времетраене\n(%d Ñек)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Изп. др. данни за кон." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Това Ñъобщение включва прикачени файлове, които не Ñа показани" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Това Ñъобщение включва прикачени файлове, които не Ñа показани" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Ð—Ð°Ð¿Ð¸Ñ Ð½Ð° вÑичко" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Чернови ÑъобщениÑ" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Съобщението ще бъде възÑтановено" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Съобщението по график ще бъде отменено" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Копирай текÑÑ‚ Ñъобщ." + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "ПодробноÑти Ñъобщ." + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Заключени ÑъобщениÑ" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Кутии ÑÑŠÑ ÑъобщениÑ" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Блокиране" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Копиране в телефона" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Съобщението е копирано от SIM картата" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "ОтмÑна на Ñъобщение" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Прикачени файлове" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Изпращане на неуÑпешно Ñъобщение" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "ДоÑтигнат макÑимален брой знаци" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "ВъзÑтановÑване..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "ÐÑма прикачени файлове" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Копирано в ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€" + diff --git a/main/po/ca.po b/main/po/ca.po new file mode 100644 index 0000000..4d51f57 --- /dev/null +++ b/main/po/ca.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "No es pot obrir" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Recuperar" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "No es pot moure" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "S'ha assolit el nombre mà xim de pà gines" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Mode restringit. No es pot introduir el contingut restringit" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Lliurat" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Caducat" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Llegir" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Recuperant..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Insereixi una targeta SIM per a enviar missatges. El missatge es desarà a la Bústia de sortida" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Introdueixi el número de canal" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 missatge seleccionat" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d missatges seleccionats" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Vista prèvia" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "El nom de fitxer ja existeix" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "No hi ha cap missatge" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Afegir a contacte" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Descartar" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "No es pot enviar el missatge" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Fer una foto" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Sense adreça" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Llista d'elements adjunts" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Descà rrega automà tica" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Missatges de difusió" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Centre %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Hora personalitzada" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Informe de lliurament" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Error en enviar" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "De" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Llista d'elements inserits" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Missatge entregat" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Missatge recuperat" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Lliure" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Advertència" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Enviat" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Missatges Push" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Informe de lectura" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Rebut" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Manual" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Rebutjar" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Opcions de recepció" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Sol·licitar informe lliurament" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Sol·licitar informe lectura" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Restringit" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Baixa" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Urgent" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Prioritat" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Enviar informe de lectura" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Durada de la pà gina" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "Missatges SOS" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Missatges de text" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Mida total" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "Contingut DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Llista d'elements" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 segons" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 segons" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 segons" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Xarxa local" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Instal·lar" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Xarxa externa" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Veure el detall del contacte" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Missatge multimèdia enviat" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Error en recuperar missatge" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Error en l'enviament del missatge multimèdia" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Reenv" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Sense llegir" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Moure a telèfon" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Destinatari duplicat" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "S'ha assolit el nombre mà xim de destinataris (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "A" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Gravar so" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Gravar vÃdeo" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Canviat a MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Canviat a SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d fitxers adjunts disponibles. Seleccioni fins a %d fitxers adjunts" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "No es poden adjuntar tots els fitxers. La capacitat mà xima d'adjunció són %d KB. Continuar?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Mida de font" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Mode de creació" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Missatge multimèdia" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Sense assumpte" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Centre de serveis" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Seleccioni adreça" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Moure a SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Està a punt de connectar-se (%s). Vol continuar?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Torn a env" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Destinatari no và lid" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Destinataris no và lids" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "No es pot reproduir durant la trucada" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "No es pot desar mentre està en mode d'emmagatzematge massiu" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Descartar missatge actual?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Seleccionat" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Esborrar?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Error d'adjunció. La mida mà xima de fitxers és %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Restringit" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "No es pot reenviar.\nEl fitxer està bloquejat per a reenviaments" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Missatge programat" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "La polÃtica de seguretat restringeix la redacció de missatges de text" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Afegint. Esperi..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adreça del centre de serveis" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Missatges de correu brossa" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Gran" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Petit" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "No es pot enviar el missatge programat. Defineixi una altra hora" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Hora i data" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Missatges multimèdia" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "No s'han afegit destinataris. Introdueixi'n" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Opcions d'enviament" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Rebent tipus d'alerta" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Enviant SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Destinataris" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Repetir" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Missatge" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Una vegada" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 vegades" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 vegades" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Tinc una emergència. Ajuda'm" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "No s'ha inserit SIM" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Fer foto" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Capturar vÃdeo" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Gravar à udio" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Missatges CB" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Missatges de la targeta SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "La durada ha de ser superior a %d segons" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "No es pot afegir contingut" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Seleccionar destinatari" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Veure contacte" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Durada (%s s)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Foto massa gran. S'està comprimint..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Missatge desat com a esborrany" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Altres" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Esborran" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Durada de la diapositiva" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Enviar correu electrònic" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Elements introduïts" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Elements adjunts" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d fitxers adjunts" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Missatge\nprogramat" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Durada\n(%d s)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Util info altres cont" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Aquest missatge inclou un fitxer adjunt que no es mostra" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Aquest missatge inclou fitxers adjunts que no es mostren" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Desar-ho tot" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Esborranys de missatges" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Es restablirà el missatge seleccionat" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "El missatge programat es cancel·larà " + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Copiar text miss" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Veure det missatge" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Missatges bloquejats" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Quadres de missatge" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Bloquejar" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Copiar al telèfon" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "S'ha copiat el missatge de la targeta SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Cancel·lar missatge" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Adjunts" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Error en enviar un missatge" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "S'ha assolit el nombre mà xim de carà cters" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Restaurant..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Sense adjunts" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "S'ha copiat al porta-retalls" + diff --git a/main/po/cs.po b/main/po/cs.po new file mode 100644 index 0000000..546968f --- /dev/null +++ b/main/po/cs.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Nelze otevÅ™Ãt" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Stáhnout" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Nelze pÅ™esunout" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Bylo dosaženo maximálnÃho poÄtu stránek" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Omezený režim. Omezený obsah nelze vložit" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "DoruÄeno" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Platnost vyprÅ¡ela" + +msgid "IDS_MSGF_BODY_READ" +msgstr "PÅ™eÄteno" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "NaÄÃtánÃ..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Chcete-li odesÃlat zprávy, vložte SIM kartu. Zpráva bude uložena do složky K odeslánÃ" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Zadejte ÄÃslo kanálu" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "Byla vybrána 1 zpráva" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "Bylo vybráno %d zpráv" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Náhled" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Název souboru již existuje" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Žádné zprávy" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "PÅ™idat do kontaktu" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "VyÅ™adit" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Nelze uložit zprávu" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Fotografovat" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Bez adresy" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Byl pÅ™ipojen seznam položek" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Automaticky stáhnout" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "VysÃlané zprávy" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "StÅ™edisko %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Vlastnà doba" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Potvrzenà o doruÄenÃ" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Odeslánà se nezdaÅ™ilo" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Od" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Byl vložen seznam položek" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Zpráva byla doruÄena" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Zpráva naÄtena" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Volné" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "UpozornÄ›nÃ" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Odesláno" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "kB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Zprávy push" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Zpráva o pÅ™eÄtenÃ" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "PÅ™ijato" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "RuÄnÄ›" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "OdmÃtnout" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Možnosti pÅ™Ãjmu" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Požadovat zprávu o doruÄenÃ" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Požadovat zpr. o pÅ™eÄtenÃ" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Zakázáno" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "NÃzká" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "NormálnÃ" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Naléhavé" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Důležitost" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Odeslat zprávu o pÅ™eÄtenÃ" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Trvánà stránky" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "Zprávy SOS" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "SMS" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Celková velikost" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "Obsah DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Seznam položek" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sekund" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sekund" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sekund" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Domácà sÃÅ¥" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Instalovat" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "SÃÅ¥ roaming" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Zobrazit detaily kontaktu" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "MMS odeslána" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "NaÄtenà zprávy se nezdaÅ™ilo" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Odeslánà MMS zprávy se nezdaÅ™ilo" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "PÅ™ed." + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "NepÅ™eÄt." + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "PÅ™esunout do telefonu" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Duplicitnà pÅ™Ãjemce" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Bylo dosaženo maximálnÃho poÄtu pÅ™Ãjemců (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Do" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Nahrát zvuk" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Nahrát video" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "ZmÄ›nÄ›no na MMS zprávu" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "ZmÄ›nÄ›no na SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "K dispozici je %d pÅ™Ãloh. Vyberte maximálnÄ› %d pÅ™Ãloh" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "NepodaÅ™ilo se pÅ™ipojit vÅ¡echny soubory. Maximálnà kapacita pÅ™Ãlohy je %d kB. Chcete pokraÄovat?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Velikost pÃsma" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Režim vytvářenÃ" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Multimediálnà zpráva." + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Bez pÅ™edmÄ›tu" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "StÅ™edisko služeb" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Zvolte adresu" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "PÅ™esunout na SIM kartu" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Chystáte se pÅ™ejÃt do režimu online (%s). Chcete pokraÄovat?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Odesl. zn." + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Neplatný pÅ™Ãjemce" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Neplatnà pÅ™Ãjemci" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Nelze pÅ™ehrát bÄ›hem hovoru" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Nelze uložit v režimu velkokapacitnÃho paměťového zaÅ™ÃzenÃ" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "ZruÅ¡it aktuálnà zprávu?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Vybráno" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Odstranit?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Nelze pÅ™ipojit. Maximálnà velikost souborů je %d kB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Zakázáno" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Nelze pÅ™edat dál.\nSoubor je zamknut proti pÅ™edávánà dál" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Plánovaná zpráva" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Zásady zabezpeÄenà omezujà vytvářenà textových zpráv" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "PÅ™idávánÃ. PoÄkejte prosÃm..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adresa stÅ™ediska služeb" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Nevyžádané zprávy" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Velké" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "NormálnÃ" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Malé" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Naplánovanou zprávu nelze odeslat. Nastavte jiný Äas" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Datum a Äas" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Nebyli pÅ™idánà žádnà pÅ™Ãjemci. Zadejte pÅ™Ãjemce" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Možnosti odesÃlánÃ" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Typ upozornÄ›nà na pÅ™Ãjem" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "NormálnÃ" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "OdesÃlánà SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "PÅ™Ãjemci" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Opakovat" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Zpráva" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Jednou" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3krát" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5krát" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Jsem v nouzové situaci. ProsÃm, pomozte mi." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM karta nenà vložena" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Fotografovat" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Nahrávánà videoklipů" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Nahrát zvuk" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CB zprávy" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Zprávy na SIM kartÄ›" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Doba trvánà musà být delÅ¡Ã než %d sekund" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Obsah nelze pÅ™idat" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Vybrat pÅ™Ãjemce" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Zobrazit kontakty" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Doba trvánà (%s s)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Obrázek je pÅ™ÃliÅ¡ velký. KomprimovánÃ..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Zpráva byla uložena jako koncept" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "DalÅ¡Ã" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Koncept" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Interval zobrazenà snÃmku" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Odeslat e-mail" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Vložené položky" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "PÅ™ipojené položky" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "PÅ™Ãlohy (%d)" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Plánovaná\nzpráva" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Doba trvánÃ\n(%d s)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "PoužÃt jiné kont. info" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Tato zpráva obsahuje soubor, který nenà uveden." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Tato zpráva zahrnuje pÅ™ipojené soubory, které nejsou zobrazeny" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Uložit vÅ¡e" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Koncepty" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Zpráva bude obnovena" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Naplánovaná zpráva bude zruÅ¡ena" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "KopÃrovat text zpr." + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Zobr. detaily zprávy" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Zamknuté zprávy" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Složky zpráv" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blokovat" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "KopÃrovat do telefonu" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Zpráva byla zkopÃrována ze SIM karty" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "ZruÅ¡it zprávu" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "PÅ™Ãlohy" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "NepodaÅ™ilo se odeslat zprávu" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Bylo dosaženo maximálnÃho poÄtu znaků" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "ObnovenÃ..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Bez pÅ™Ãloh" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "ZkopÃrováno do schránky" + diff --git a/main/po/da.po b/main/po/da.po new file mode 100644 index 0000000..63f6989 --- /dev/null +++ b/main/po/da.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Der kan ikke Ã¥bnes" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Hent" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Kunne ikke flytte" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Det maksimale antal sider er nÃ¥et" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Begrænset tilstand. Kan ikke indsætte begrænset indhold" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Sendt" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Udløbet" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Læs" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Henter..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Indsæt et SIM-kort for at sende meddelelser. Denne meddelelse vil blive gemt i Udbakken" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Indtast kanalnummer" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 meddelelse valgt" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d meddelelser valgt" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "ForhÃ¥ndsvisning" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Filnavnet findes allerede" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Ingen meddelelser" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Føj til kontakt" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Slet" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Kunne ikke sende meddelelse" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Tag billede" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Ingen adresse" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Vedh. Elementliste" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Automatisk overførsel" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Gruppemeddelelser" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Center %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Brugerdefineret tid" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Leveringsrapport" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Afsendelse mislykkedes" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Fra" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Indsat elementliste" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Meddelelsen er leveret" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Meddelelsen er modtaget" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Ledig" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Advarsel" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Sendt" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Push-meddelelser" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Læsningsrapport" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Modtaget" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Manuelt" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Afvis" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Modtagelsesindstillinger" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Anmod om leveringsrapport" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Anmod om læsningsrapport" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Begrænset" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Lav" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Haster" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Prioritet" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Send læsningsrapport" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Sidevarighed" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "SOS-meddelelser" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "SMS-meddelelser" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Størrelse i alt" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM indhold" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Elementliste" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sekunder" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sekunder" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sekunder" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Hjemmenetværk" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Installér" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Roaming" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Vis kontaktdetalje" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Multimediemeddelelse er sendt" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Hentning af meddelelse mislykkedes" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Afsendelse af multimediemeddelelse mislykkedes" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Vid.send" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Ulæst" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Flyt til telefon" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Kopierede modtagere" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Det maksimale antal modtagere (%d) er nÃ¥et" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Til" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Optag lyd" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Optag videoklip" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Ændret til MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Ændret til SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d vedhæftninger tilgængelige. Vælg op til %d vedhæftninger" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Kan ikke vedhæfte alle filer. Maksimal kapacitet for vedhæftning %d KB. Fortsæt?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Skriftstørrelse" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Oprettelsestilstand" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Multimediemeddelelse" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Intet emne" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Tjenestecentral" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Vælg adresse" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Flyt til SIM-kort" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Du er ved at gÃ¥ online(%s). Vil du fortsætte?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Send igen" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Ugyldig modtager" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Ugyldige modtagere" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Kunne ikke afspille under opkald" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Kan ikke gemme lagringsmedietilstand" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Annullér aktuel meddelelse?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Valgte" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Slet?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Kan ikke tilknytte. Maks. størrelse for filer er %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Begrænset" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Kan ikke videresende.\nFilen er lÃ¥st mod videresendelse" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Planlagt meddelelse" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Sikkerhedspolitikken begrænser udfærdigelse af tekstmeddelelser" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Tilføjer. Vent..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adresse pÃ¥ tjenestecentral" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Spam-meddelelser" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Stor" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Lille" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Planlagt meddelelse blev ikke sendt. Indstil et andet tidspunkt" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Dato og tid" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Multimediemeddelelser" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Ingen modtagere tilføjet. Indtast modtagere" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Afsendelsesindstillinger" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Modtager advarselstype" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Sender SOS-meddelelse" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Modtagere" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Gentag" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Meddelelse" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Én gang" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 gange" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 gange" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Jeg er i nød. Hjælp mig!" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM-kort er ikke indsat" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Tag billede" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Optag video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Optag lyd" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Gruppemeddelelser" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM-kortmeddelelser" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Varighed skal være længere end %d sekunder" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Kan ikke tilføje indhold" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Vælg modtagere" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Vis kontakter" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Varighed (%s sek.)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Billede for stort. Komprimerer..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Meddelelse gemt som udkast" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Anden" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Udkast" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Varighed for dias" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Send e-mail" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Indsatte elementer" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Vedhæftede filer" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d vedhæftninger" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Planlagt\nbesked" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Varighed\n(%d sek.)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Brug andre kontaktopl." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Denne meddelelse indeholder en vedhæftet fil, som ikke vises." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Denne meddelelse indeholder vedhæftede filer, der ikke vises" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Gem alle" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Kladdemeddelelser" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Meddelelse bliver gendannet" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Planlagt meddelelse vil blive annulleret" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Kopier medd.tekst" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Vis medd.detaljer" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "LÃ¥ste meddelelser" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Meddelelsesbokse" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Bloker" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Kopiér til telefon" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Meddelelse kopieret fra SIM-kort" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Annuller meddelelse" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Vedhæftede filer" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Meddelelse om mislykket afsendelse" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Det maksimale antal tegn er nÃ¥et" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Gendanner..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Ingen vedhæftede filer" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Kopieret til udklipsholder" + diff --git a/main/po/de_DE.po b/main/po/de_DE.po index 49ec76f..53da88f 100755..100644 --- a/main/po/de_DE.po +++ b/main/po/de_DE.po @@ -7,15 +7,9 @@ msgstr "Abrufen" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "Verschieben nicht möglich" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "Nicht angefragt" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "Maximale Anzahl an Seiten erreicht" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "Angefordert" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "Eingeschränkter Modus. Eingeschränkter Inhalt kann nicht eingefügt werden" @@ -31,54 +25,18 @@ msgstr "Gelesen" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "Wird abgerufen..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "Abrufen fehlgeschlagen" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "SIM-Karte einlegen, um Nachrichten zu senden. Die Nachricht wird im Postausgang gespeichert" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d Sprachen" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "Nummer" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "Verdoppelt" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "Sendernamen eingeben" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "Sendernummer eingeben" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "Nichts ausgewählt" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d Kanäle" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "Gleiche Kanal-ID besteht bereits" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "Sendevorgang fehlgeschlagen. Erneut versuchen?" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "Sender-ID-Liste voll" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "1 Nachricht ausgewählt." -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "1 Person ausgewählt." - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "%d Nachrichten ausgewählt." -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "%d Personen ausgewählt." - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "Vorschau" @@ -88,156 +46,48 @@ msgstr "Dateiname wird bereits verwendet" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "Keine Nachrichten" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "Nachricht erstellen" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "Zu Kontakt hinzufügen" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "Adresse erstellen" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "Sperrliste" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "Nummer hinzufügen" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "Sender erstellen" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "Verwerfen" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "Nachricht kann nicht gesendet werden" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "Kontakte" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "Foto aufnehmen" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "Keine Adresse" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "Signalton" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "Werbung zulassen" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "Anonym zulassen" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "Elementliste angehängt" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "Automatisch herunterladen" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "Automatisch" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "Automatisches Löschen" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "Hintergrundfarbe" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "Nachrichten sperren" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "Infomeldungen" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "Aktivierung" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "Eigene Kanäle" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "Empfangskanäle" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "Zentrale %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "Benutzerdefinierte Zeit" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "Standardstil" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "Zustellbericht" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "Senden fehlgeschlagen" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "Alle 10 Minuten" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "Alle 2 Minuten" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "Alle 5 Minuten" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "Schriftfarbe" - msgid "IDS_MSGF_BODY_FROM" msgstr "Von" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "Allgemeine Einstellungen" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "GSM-Alphabet" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "Halten Sie die Taste 1 gedrückt, um eine Verbindung zur Mailbox herzustellen, wenn kein Programm oder Anruf aktiv ist." - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "Liste der eingefügten Elemente" -msgid "IDS_MSGF_BODY_LANG" -msgstr "Sprachen" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "Maximum" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "Mobilbox-Nummer" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "Nachricht zugestellt" @@ -253,26 +103,14 @@ msgstr "Warnung" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "Gesendet" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "Keine Größen- und Inhaltsbeschränkungen" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "Sie werden gewarnt, wenn Größe und Inhalt das Maximum überschreiten." - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "Fax" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "Stimme" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" -msgstr "Update-Hinweis" +msgstr "WAP-Push" msgid "IDS_MSGF_BODY_READ_REPORT" msgstr "Lesebericht" @@ -284,14 +122,11 @@ msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" msgstr "Manuell" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" -msgstr "Abweisen" +msgstr "Ablehnen" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "Empfangsoptionen" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "Antwortpfad" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "Zustellbericht anfordern" @@ -301,12 +136,6 @@ msgstr "Lesebericht anfordern" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "Eingeschränkt" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "Sendevorgang läuft..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 Tage" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "Niedrig" @@ -316,48 +145,15 @@ msgstr "Normal" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "Dringend" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "Sendeoptionen" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "Gültigkeit" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "Priorität" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "Zustellbericht senden" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "Lesebericht senden" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "Diensttyp" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "Adresse" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "Identisch mit" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "Enthält" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "Passende Kriterien" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "Einmal" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "Seitenanzeigedauer" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "Zeichenunterstützung" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "Text" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "SOS-Nachrichten" @@ -367,21 +163,12 @@ msgstr "SMS" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "Gesamtgröße" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Unicode" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "DRM-Inhalt" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "Sender bearbeiten" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "Elementliste" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "Sekunden" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 Sekunden" @@ -400,12 +187,6 @@ msgstr "Installieren" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "Fremdnetz" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "Gleiten" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "Schriftstil" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "Kontaktdetails anzeigen" @@ -418,18 +199,6 @@ msgstr "Abrufen der Nachricht fehlgeschlagen" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "Senden der Multimedia-Nachricht fehlgeschlagen" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "Sie können Bilder mit bis zu %d KB senden" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "Visitenkarte" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "Kein Name" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "Willkommen" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "Weiterl." @@ -439,132 +208,48 @@ msgstr "Unge-\nlesen" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "In Telefon verschieben" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "Text hinzufügen" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "Doppelter Empfänger" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "Maximale Erstellungsgröße" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "Maximale Anzahl an Empfängern (%d) erreicht" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "Betreff hinzufügen" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "Gruppen" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "Telefonbuch" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "Andere Dateien" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "Ton" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "Multimedia hinzufügen" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "AUS" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "EIN" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "An" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "Ton aufzeichnen" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "Ton aufzeichnen" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "Video aufzeichnen" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "Textvorlage" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "Zu MMS geändert" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "Zu SMS geändert" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "Adresse eingeben" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "Datei ungültig" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "Nachricht gesendet" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "Max. Nachrichtengröße überschritten" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "%d Anhänge verfügbar. Wählen Sie bis zu %d Anhänge." -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "Server antwortet nicht" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "Anhängen der Dateien nicht möglich. Maximale Anhangsgröße ist %d KB. Fortfahren?" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "Senden von MMS nicht möglich. Unerkannter Fehler" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "Kalender synchronisieren" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "Schriftgröße" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "Ohne Anhänge" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "Gesamte E-Mail" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "Erstellungsmodus" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "Nachricht zugestellt" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "MMS" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "Neue Mailbox-Nachricht" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "Kein Betreff" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "Ja, alle" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "Dienstzentrale" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "Dienst wird geladen" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "Ton" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "Senden nicht möglich. Nicht unterstützte Dateitypen im Anhang." - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "Gesprächsliste" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "Adresse auswählen" @@ -574,30 +259,9 @@ msgstr "Auf SIM-Karte verschieben" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "Sie sind im Begriff Online zu gehen (%s). Fortfahren?" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "MMS-Abruf gescheitert" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "Kein Empfänger" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "Erforderlich" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "In Entwürfe speichern" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "Max. Nachrichtengröße überschritten. Größe wird angepasst..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "Synchronisierung fehlgeschlagen" - msgid "IDS_MSGF_SK_RESEND" msgstr "Erneut senden" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "Sender hinzufügen" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "Ungültiger Empfänger" @@ -610,27 +274,15 @@ msgstr "Wiedergabe während Anruf nicht möglich" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "Im Massenspeichermodus kein Speichern möglich" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Im Massenspeichermodus kein Öffnen möglich" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Im Massenspeichermodus keine Verwendung möglich" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "Aktuelle Nachricht verwerfen?" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "Ausgewählt" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "Ausgewählt" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "Löschen?" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "Größe wird angepasst..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "Anhängen nicht möglich. Maximale Dateigröße ist %d KB" @@ -649,3 +301,204 @@ msgstr "Sicherheitsrichtlinie schränkt das Verfassen von SMS ein" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "Hinzufügen. Bitte warten..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adresse der SMS-Zentrale" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Spam-Nachrichten" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Groß" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Klein" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Sehr klein" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Geplante Nachricht kann nicht gesendet werden. Andere Zeit festlegen." + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Datum und Uhrzeit" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Keine Empfänger hinzugefügt. Empfänger hinzufügen." + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Sendeoptionen" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Benachrichtigungston" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "Notruf" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "SOS senden" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Empfänger" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Wiederholen" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Nachricht" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Einmal" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 Mal" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 Mal" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Ich befinde mich in einer Notsituation! Bitte helfen Sie mir." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM nicht eingelegt" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Foto aufnehmen" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Video aufnehmen" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Ton aufzeichnen" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CB-Nachrichten" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM-Karten-Nachrichten" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Länge muss mehr als %d Sekunden betragen." + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Inhalt kann nicht hinzugefügt werden" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Empfänger auswählen" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Kontakte anzeigen" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Dauer (%s Sek.)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Bild zu groß. Komprimieren..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Nachricht als Entwurf gespeichert" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Andere" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Entwurf" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Anzeigedauer:" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "E-Mail senden" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Eingefügte Elemente" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Angehängte Elemente" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d Anhänge" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Geplante\nNachricht" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Dauer:\n(%d Sek.)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Andere Kontaktinfos verw." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Diese Nachricht enthält angehängte Dateien, die nicht angezeigt werden." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Diese Nachricht umfasst angehängte, nicht angezeigte Dateien" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Alle speichern" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Nachrichtenentwürfe" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Nachricht wird wiederhergestellt" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Geplante Nachricht wird abgebrochen" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Nachricht kopieren" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Details anzeigen" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Geschützte Nachrichten" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Nachrichtenkästchen" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Sperren" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Ins Telefon kopieren" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Nachricht von SIM-Karte kopiert" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Nachricht stornieren" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Anhänge" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Nicht gesendete Nachrichten" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Maximal zulässige Zeichenanzahl erreicht." + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Wiederherstellung wird durchgeführt..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Keine Anhänge" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "In Zwischenablage kopiert" + diff --git a/main/po/el_GR.po b/main/po/el_GR.po index 2efdcf9..6c7d91b 100755..100644 --- a/main/po/el_GR.po +++ b/main/po/el_GR.po @@ -7,15 +7,9 @@ msgstr "Ανάκτηση" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "Δεν είναι δυνατή η μετακίνηση" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "Δεν ζητήθηκε" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "ΣυμπληÏώθηκε ο μÎγιστος αÏιθμός σελίδων" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "Έγινε αίτημα" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "ΠεÏιοÏισμός. Δεν είναι δυνατή η εισαγωγή απαγοÏευμÎνου πεÏιεχομÎνου" @@ -31,54 +25,18 @@ msgstr "Ανάγνωση" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "Ανάκτηση..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "Αποτυχία ανάκτησης" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "Εισάγετε κάÏτα SIM για την αποστολή μηνυμάτων. Το μήνυμα θα αποθηκευτεί στα ΕξεÏχόμενα" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d γλώσσες" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "ΔιεÏθυνση κÎντÏου" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "Διπλότυπος" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "Εισαγωγή ονόματος καναλιοÏ" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "Εισαγωγή αÏÎ¹Î¸Î¼Î¿Ï ÎºÎ±Î½Î±Î»Î¹Î¿Ï" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "Δεν Îχει γίνει καμία επιλογή" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d κανάλια" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "ΥπάÏχει ίδιο αναγνωÏιστικό καναλιοÏ" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "Αποτυχία αποστολής. Επανάληψη?" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "Η λίστα ταυτότητας ÎºÎ±Î½Î±Î»Î¹Î¿Ï ÎµÎ¯Î½Î±Î¹ πλήÏης" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "Έχει επιλεχθεί 1 μήνυμα" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "ΕπιλÎχθηκε 1 άτομο" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "Έχουν επιλεχθεί %d μηνÏματα" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "Έχουν επιλεχθεί %d άτομα" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "Î Ïοεπισκόπηση" @@ -88,156 +46,48 @@ msgstr "Το όνομα αÏχείου υπάÏχει ήδη" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "ΚανÎνα μήνυμα" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "ΔημιουÏγία μηνÏματος" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "Î Ïοσθήκη σε επαφή" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "ΔημιουÏγία διεÏθυνσης" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "Λίστα αποκλεισμοÏ" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "Πατήστε για Ï€Ïοσθήκη αÏιθμοÏ" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "ΔημιουÏγία καναλιοÏ" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "ΑπόÏÏιψη" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "Δεν είναι δυνατή η αποστολή μηνÏματος" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "ΕπαφÎÏ‚" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "Λήψη φωτογÏαφίας" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "Καμία διεÏθυνση" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "Ήχος ειδοποίησης" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "Îα επιτÏÎπονται οι διαφημίσεις" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "Αποδ. ανώνυμου" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "ΣυνημμÎνη λίστα στοιχείων" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "Αυτόματη λήψη" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "Αυτόματo" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "Αυτόματη διαγÏαφή" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "ΧÏώμα φόντου" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "Αποκλεισμός μηνυμάτων" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "ΜηνÏματα εκπομπής κυψÎλης" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "ΕνεÏγοποίηση" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "Τα κανάλια μου" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "Λήψη καναλιών" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "ΚÎντÏο %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "Î ÏοσαÏμοσμÎνη ÏŽÏα" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "Î ÏοεπιλεγμÎνο στυλ" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "ΑναφοÏά παÏάδοσης" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "Αποτυχία αποστολής" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "Κάθε 10 λεπτά" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "Κάθε 2 λεπτά" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "Κάθε 5 λεπτά" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "ΧÏώμα γÏαμματοσειÏάς" - msgid "IDS_MSGF_BODY_FROM" msgstr "Από" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "Γεν. Ρυθμίσεις" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "Αλφάβητο GSM" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "ΚÏατήστε πατημÎνο το πλήκτÏο '1' για σÏνδεση στο διακομιστή Ï†Ï‰Î½Î·Ï„Î¹ÎºÎ¿Ï Ï„Î±Ï‡Ï…Î´Ïομείου, όταν δεν βÏίσκεστε σε μια εφαÏμογή ή σε κλήση" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "Εισαχθείσα λίστα στοιχείων" -msgid "IDS_MSGF_BODY_LANG" -msgstr "Γλώσσες" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "ÎœÎγιστο" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "ΑÏιθμός τηλεφωνητή" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "Το μήνυμα παÏαδόθηκε" @@ -253,26 +103,14 @@ msgstr "Î Ïοειδοποίηση" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "Εστάλη" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "ΚανÎνας πεÏιοÏισμός μεγÎθους και πεÏιεχομÎνου" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "Θα ειδοποιηθείτε όταν το μÎγεθος και το πεÏιεχόμενο υπεÏβοÏν το μÎγιστο επιτÏεπτό ÏŒÏιο" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "Φαξ" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "Φωνή" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" -msgstr "Push messages" +msgstr "ΜηνÏματα Push" msgid "IDS_MSGF_BODY_READ_REPORT" msgstr "ΑναφοÏά ανάγνωσης" @@ -289,9 +127,6 @@ msgstr "ΑπόÏÏιψη" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "ΕπιλογÎÏ‚ λήψης" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "ΔιαδÏομή απάντησης" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "Αίτηση αναφοÏάς παÏάδοσης" @@ -301,12 +136,6 @@ msgstr "Αίτηση αναφ. ανάγνωσης" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "ΠεÏιοÏισμός" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "Αποστολή..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 ημÎÏες" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "Χαμηλή" @@ -316,48 +145,15 @@ msgstr "Κανονική" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "Επείγον" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "ΕπιλογÎÏ‚ αποστολής" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "Λήξη" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "Î ÏοτεÏαιότητα" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "Αποστολή αναφοÏάς παÏάδοσης" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "Αποστολή αναφοÏάς ανάγνωσης" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "ΤÏπος υπηÏεσίας" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "ΔιεÏθυνση" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "ΑκÏιβώς ίδιο με" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "Îα συμπεÏιληφθεί" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "Αντιστοίχιση κÏιτηÏίων" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "Μία φοÏά" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "ΔιάÏκεια σελίδας" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "ΥποστήÏιξη χαÏακτήÏων" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "Κείμενο" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "ΜηνÏματα SOS" @@ -367,21 +163,12 @@ msgstr "SMS" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "Συνολικό μÎγεθος" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Unicode" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "ΠεÏιεχόμενο DRM" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "ΕπεξεÏγασία καναλιοÏ" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "Λίστα στοιχείων" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "δευτεÏόλεπτα" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 δευτεÏόλεπτα" @@ -400,12 +187,6 @@ msgstr "Εγκατάσταση" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "Δίκτυο πεÏιαγωγής" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "Διαφάνεια" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "Στυλ γÏαμματοσειÏάς" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "Î Ïοβολή λεπτομεÏειών επαφής" @@ -418,18 +199,6 @@ msgstr "Αποτυχία ανάκτησης μηνÏματος" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "Αποτυχία αποστολής μηνÏματος πολυμÎσων" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "ΜποÏείτε να αποστείλετε εικόνα μÎχÏι %d KB" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "Στοιχεία επαφής" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "ΚανÎνα όνομα" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "Καλώς ήλθατε" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "Î Ïοώθ." @@ -439,132 +208,48 @@ msgstr "Μη αναγνωσμÎνο" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "Μετακίνηση στο τηλÎφωνο" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "Î Ïοσθήκη κειμÎνου" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "Διπλότυπος παÏαλήπτης" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "ÎœÎγιστο μÎγεθος για τη δημιουÏγία" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "ΣυμπληÏώθηκε ο μÎγιστος αÏιθμός παÏαληπτών (%d)" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "Πατήστε για Ï€Ïοσθήκη θÎματος" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "Ομάδες" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "ΕυÏετήÏιο" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "Άλλα αÏχεία" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "Ήχος" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "Î Ïοσθήκη πολυμÎσων" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "ΑνενεÏγό" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "ΕνεÏγό" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "Î Ïος" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "ΕγγÏαφή ήχου" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "ΕγγÏαφή ήχου" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "ΕγγÏαφή βίντεο" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "Î Ïότυπο κειμÎνου" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "Άλλαξε σε MMS" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "Αλλαγή σε SMS" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "Εισαγωγή διεÏθυνσης" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "ΆκυÏο αÏχείο" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "Μήνυμα εστάλη" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "ΥπÎÏβαση μÎγιστου μεγÎθους μηνÏματος" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "%d συνημμÎνα διαθÎσιμα. ΕπιλÎξτε Îως και %d συνημμÎνα" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "Ο διακομιστής δεν αποκÏίνεται" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "Δεν είναι δυνατή η επισÏναψη όλων των αÏχείων. Η μÎγιστη χωÏητικότητα για επισυνάψεις είναι %d KB. ΣυνÎχεια;" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "Δεν είναι δυνατή η αποστολή MMS. Μη αναγνωÏίσιμο σφάλμα" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "ΣυγχÏονισμός ημεÏολογίου" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "ÎœÎγεθος γÏαμματοσειÏάς" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "ΧωÏίς συνημμÎνα" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "ΟλόκληÏο μήνυμα email" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "ΛειτουÏγία δημιουÏγίας" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "Το μήνυμα παÏαδόθηκε" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "MMS" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "ÎÎο φωνητικό μήνυμα" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "ΧωÏίς θÎμα" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "Îαι σε όλα" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "ΚÎντÏο υπηÏεσίας" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "ΦόÏτωση υπηÏεσίας" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "Ήχος" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "Δεν είναι δυνατή η αποστολή. Έχουν επισυναφθεί Ï„Ïποι αÏχείων που δεν υποστηÏίζονται" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "Λίστα συζητήσεων" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "Επιλογή διεÏθυνσης" @@ -574,30 +259,9 @@ msgstr "Μετακίνηση στην κάÏτα SIM" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "Î Ïόκειται να συνδεθείτε (%s). ΣυνÎχεια;" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "Αποτυχία ανάκτησης MMS" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "Δεν υπάÏχει παÏαλήπτης" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "Απαιτείται" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "Αποθήκευση στα Ï€ÏόχειÏα" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "ΥπÎÏβαση μÎγ. μεγÎθους μηνÏματος. Αλλαγή μεγÎθους..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "Ο συγχÏονισμός ακυÏώθηκε" - msgid "IDS_MSGF_SK_RESEND" msgstr "Επανάληψη αποστολής" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "Î Ïοσθήκη καναλιοÏ" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "Μη ÎγκυÏος παÏαλήπτης" @@ -610,27 +274,15 @@ msgstr "Δεν είναι δυνατή η αναπαÏαγωγή παιχνιδΠmsgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "Δεν είναι δυνατή η αποθήκευση κατά την λειτουÏγία μαζικής αποθήκευσης" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Δεν είναι δυνατό το άνοιγμα κατά την λειτουÏγία μαζικής αποθήκευσης" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Δεν είναι δυνατή η χÏήση κατά την λειτουÏγία μαζικής αποθήκευσης" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "Îα αποÏÏιφθεί το Ï„ÏÎχον μήνυμα;" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "ΕπιλεγμÎνο" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "ΕπιλεγμÎνο" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "ΔιαγÏαφή;" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "Αλλαγή μεγÎθους..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "Δεν είναι δυνατή η επισÏναψη. Το μÎγιστο ÏŒÏιο μεγÎθους των αÏχείων είναι %d KB" @@ -649,3 +301,204 @@ msgstr "Η πολιτική ασφαλείας πεÏιοÏίζει τη σÏÎ½Ï msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "Γίνεται Ï€Ïοσθήκη. ΠεÏιμÎνετε..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "ΔιεÏθυνση κÎντÏου υπηÏεσίας" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "ΑνεπιθÏμητα μηνÏματα" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Μεγάλο" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Κανονική" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "ΜικÏή" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Δεν είναι δυνατή η αποστολή του Ï€ÏογÏαμματισμÎνου μηνÏματος. ΟÏίστε άλλη ÏŽÏα" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "ΗμεÏομηνία & ÏŽÏα" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Δεν Îχουν Ï€Ïοστεθεί παÏαλήπτες. Εισάγετε παÏαλήπτες" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "ΕπιλογÎÏ‚ αποστολής" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Λήψη Ï„Ïπου ειδοποίησης" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Κανονική" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Αποστολή μηνÏματος SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "ΠαÏαλήπτες" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Επανάληψη" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Μήνυμα" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Μία φοÏά" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 φοÏÎÏ‚" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 φοÏÎÏ‚" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Î’Ïίσκομαι σε Îκτακτη ανάγκη. Βοηθήστε με." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "Δεν Îχει τοποθετηθεί SIM" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Λήψη φωτογÏαφίας" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Λήψη βίντεο" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "ΗχογÏάφηση" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "ΜηνÏματα εκπομπής κυψÎλης" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "ΜηνÏματα κάÏτας SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Η διάÏκεια Ï€ÏÎπει να είναι μεγαλÏτεÏη από %d δευτεÏόλεπτα" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "ΑδÏνατη η Ï€Ïοσθήκη πεÏιεχομÎνου" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Επιλογή παÏαλήπτη" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Î Ïοβολή επαφών" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "ΔιάÏκεια (%s δευτ/τα)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Î Î¿Î»Ï Î¼ÎµÎ³Î¬Î»Î· εικόνα. Συμπίεση..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Αποθήκευση μηνÏματος ως Ï€ÏόχειÏο" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Άλλο" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Î ÏόχειÏο" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "ΔιάÏκεια διαφάνειας" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Αποστολή email" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Στοιχεία που Îχουν εισαχθεί" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "ΣυνημμÎνα στοιχεία" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d συνημμÎνα" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Î ÏογÏαμ.\nμήνυμα" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "ΔιάÏκεια\n(%d δευτ.)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "ΧÏ. στοιχ. άλλης επαφ." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Αυτό το μήνυμα πεÏιÎχει Îνα συνημμÎνο αÏχείο που δεν εμφανίζεται" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Αυτό το μήνυμα πεÏιÎχει μεÏικά συνημμÎνα που δεν εμφανίζονται" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Αποθήκευση όλων" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Î ÏόχειÏα μηνÏματα" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Θα γίνει επαναφοÏά του μηνÏματος" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Το Ï€ÏογÏαμματισμÎνο μήνυμα θα ακυÏωθεί" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "ΑντιγÏ. κειμÎν. μηνυμ." + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Î Ïοβολ.στοιχ.μηνÏμ." + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "ΚλειδωμÎνα μηνÏματα" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Φάκελοι μηνυμάτων" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Αποκλεισμός" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "ΑντιγÏαφή στο τηλÎφωνο" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Το μήνυμα αντιγÏάφηκε από την κάÏτα SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "ΑκÏÏωση μηνÏματος" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "ΣυνημμÎνα" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Αποστολή μηνÏματος αποτυχίας" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Ο μÎγιστος αÏιθμός χαÏακτήÏων συμπληÏώθηκε" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "ΕπαναφοÏά..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "ΧωÏίς συνημμÎνα" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "ΑντιγÏάφηκε στο Ï€ÏόχειÏο" + diff --git a/main/po/en.po b/main/po/en.po index 4380774..29ca2b1 100755..100644 --- a/main/po/en.po +++ b/main/po/en.po @@ -7,15 +7,9 @@ msgstr "Retrieve" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "Unable to move" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "Not requested" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "Maximum number of pages reached" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "Requested" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "Restricted mode. Unable to insert restricted content" @@ -31,54 +25,18 @@ msgstr "Read" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "Retrieving..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "Retrieving failed" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "Insert a SIM card to send messages. The message will be saved in Outbox" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d languages" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "Centre address" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "Duplicated" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "Enter channel name" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "Enter channel number" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "Nothing selected" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d channels" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "Same channel ID exists" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "Sending failed. Try again?" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "Channel ID list full" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "1 message selected" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "1 person selected" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "%d messages selected" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "%d people selected" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "Preview" @@ -88,156 +46,48 @@ msgstr "File name already exists" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "No messages" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "Create message" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "Add to contact" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "Create address" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "Block list" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "Tap to add number" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "Create channel" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "Discard" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "Unable to send message" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "Contacts" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "Take photo" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "No address" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "Alert tone" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "Allow advertisement" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "Allow anonymous" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "Attached item list" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "Auto download" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "Automatic" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "Auto delete" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "Background colour" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "Block messages" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "Broadcast messages" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "Activation" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "My channels" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "Receiving channels" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "Centre %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "Custom time" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "Default style" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "Delivery report" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "Sending failed" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "Every 10 minutes" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "Every 2 minutes" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "Every 5 minutes" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "Font colour" - msgid "IDS_MSGF_BODY_FROM" msgstr "From" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "General settings" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "GSM alphabet" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "Hold down the '1' key to connect to the voicemail server when you are not in an application or call" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "Inserted item list" -msgid "IDS_MSGF_BODY_LANG" -msgstr "Languages" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "Maximum" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "Voicemail number" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "Message delivered" @@ -253,24 +103,12 @@ msgstr "Warning" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "Sent" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "No size and content restrictions" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "You will be notified when size and content exceed the maximum allowed" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "Fax" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "Voice" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "Push messages" @@ -289,9 +127,6 @@ msgstr "Reject" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "Receiving options" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "Reply path" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "Request delivery report" @@ -301,12 +136,6 @@ msgstr "Request read report" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "Restricted" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "Sending..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 days" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "Low" @@ -316,48 +145,15 @@ msgstr "Normal" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "Urgent" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "Sending options" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "Expiry" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "Priority" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "Send delivery report" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "Send read report" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "Service type" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "Address" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "Exactly the same as" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "Include" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "Match criteria" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "Once" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "Page duration" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "Character support" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "Text" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "SOS messages" @@ -367,21 +163,12 @@ msgstr "Text messages" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "Total size" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Unicode" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "DRM content" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "Edit channel" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "Item list" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "Seconds" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 seconds" @@ -400,12 +187,6 @@ msgstr "Install" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "Foreign network" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "Slide" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "Font style" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "View contact detail" @@ -418,18 +199,6 @@ msgstr "Retrieving message failed" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "Sending multimedia message failed" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "You can send image up to %d KB" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "Name card" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "No name" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "Welcome" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "Fwd" @@ -439,132 +208,48 @@ msgstr "Unread" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "Move to phone" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "Add text" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "Duplicated recipient" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "Maximum creation size" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "Maximum number of recipients (%d) reached" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "Tap to add subject" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "Groups" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "Phonebook" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "Other files" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "Sound" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "Add multimedia" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "OFF" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "ON" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "To" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "Record sound" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "Record sound" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "Record video" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "Text template" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "Changed to MMS" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "Changed to SMS" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "Enter address" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "Invalid file" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "Message sent" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "Message size exceeded" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "%d attachments available. Select up to %d attachments" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "Server not responding" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "Unable to attach all files. Maximum attachment capacity %d KB. Continue?" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "Unable to send MMS. Unrecognised error" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "Calendar sync" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "Font size" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "Without attachments" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "Entire email" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "Creation mode" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "Message delivered" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "Multimedia message" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "New voicemail" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "No subject" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "Yes to all" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "Service centre" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "Service loading" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "Sound" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "Unable to send. Unsupported file types attached" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "Conversation list" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "Select address" @@ -574,30 +259,9 @@ msgstr "Move to SIM" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "You are about to go online(%s). Continue?" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "MMS retrieving failed" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "No recipient" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "Required" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "Save in Drafts?" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "Maximum message size exceeded. Resizing..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "Synchronisation cancelled" - msgid "IDS_MSGF_SK_RESEND" msgstr "Resend" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "Add channel" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "Invalid recipient" @@ -610,27 +274,15 @@ msgstr "Unable to play during call" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "Unable to save while in Mass storage mode" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Unable to open while in Mass storage mode" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Unable to use while in Mass storage mode" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "Discard current message?" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "Selected" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "Selected" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "Delete?" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "Resizing..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "Unable to attach. Maximum size of files is %d KB" @@ -649,3 +301,204 @@ msgstr "Security policy restricts composing of text messages" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "Adding. Please wait..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Service centre address" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Spam messages" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Large" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Small" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Unable to send scheduled message. Set another time" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Date and time" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Multimedia messages" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "No recipients added. Enter recipients" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Sending options" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Receiving alert type" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Sending SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Recipients" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Repeat" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Message" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Once" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 times" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 times" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "I am in an emergency. Please help me" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM not inserted" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Take picture" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Capture video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Record audio" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CB messages" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM card messages" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Duration must be longer than %d seconds" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Unable to add content" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Select recipient" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "View contact" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Duration (%s secs)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Picture too large. Compressing..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Message saved as draft" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Other" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Draft" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Duration for slide" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Send email" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Inserted items" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Attached items" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d attachments" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Scheduled\nmessage" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Duration\n(%d secs)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Use other contact info" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "This message includes an attached file not shown" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "This message includes attached files not shown" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Save all" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Draft messages" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Message will be restored" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Scheduled message will be cancelled" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Copy message text" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "View message details" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Locked messages" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Message boxes" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Block" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Copy to phone" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Message copied from SIM card" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Cancel message" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Attachments" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Sending failed message" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Maximum number of characters reached" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Restoring..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "No attachments" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Copied to clipboard" + diff --git a/main/po/en_US.po b/main/po/en_US.po new file mode 100644 index 0000000..d624fcc --- /dev/null +++ b/main/po/en_US.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Unable to open" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Retrieve" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Unable to move" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Maximum number of pages reached" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Restricted mode. Unable to insert restricted content" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Delivered" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Expired" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Read" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Retrieving..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Insert a SIM card to send messages. The message will be saved in Outbox" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Enter channel number" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 message selected" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d messages selected" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Preview" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "File name already exists" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "No messages" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Add to contact" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Discard" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Unable to send message" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Take photo" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "No address" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Attached item list" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Auto download" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Broadcast messages" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "center %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Custom time" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Delivery report" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Sending failed" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "From" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Inserted item list" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Message delivered" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Message retrieved" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Free" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Warning" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Sent" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Push messages" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Read report" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Received" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Manual" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Reject" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Receiving options" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Request delivery report" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Request read report" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Restricted" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Low" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Urgent" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Priority" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Send read report" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Page duration" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "SOS messages" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Text messages" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Total size" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM content" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Item list" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 seconds" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 seconds" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 seconds" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Home network" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Install" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Foreign network" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "View contact detail" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Multimedia message sent" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Retrieving message failed" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Sending multimedia message failed" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Fwd" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Unread" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Move to phone" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Duplicated recipient" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Maximum number of recipients (%d) reached" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "To" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Record sound" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Record video" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Changed to MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Changed to SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d attachments available. Select up to %d attachments" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Unable to attach all files. Maximum attachment capacity %d KB. Continue?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Font size" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Creation mode" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Multimedia message" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "No subject" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Service center" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Select address" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Move to SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "You are about to go online(%s). Continue?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Resend" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Invalid recipient" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Invalid recipients" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Unable to play during call" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Unable to save while in Mass storage mode" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Discard current message?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Selected" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Delete?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Unable to attach. Maximum size of files is %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Restricted" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Unable to forward.\nFile is forward locked" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Scheduled message" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Security policy restricts composing of text messages" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Adding. Please wait..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Service center address" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Spam messages" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Large" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Small" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Unable to send scheduled message. Set another time" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Date and time" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Multimedia messages" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "No recipients added. Enter recipients" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Sending options" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Receiving alert type" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Sending SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Recipients" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Repeat" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Message" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Once" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 times" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 times" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "I am in an emergency. Please help me" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM not inserted" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Take picture" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Capture video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Record audio" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CB messages" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM card messages" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Duration must be longer than %d seconds" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Unable to add content" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Select recipient" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "View contact" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Duration (%s sec)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Picture too large. Compressing..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Message saved as draft" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Other" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Draft" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Duration for slide" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Send email" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Inserted items" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Attached items" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d attachments" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Scheduled\nmessage" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Duration\n(%d secs)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Use other contact info" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "This message includes an attached file not shown" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "This message includes attached files not shown" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Save all" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Draft messages" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Message will be restored" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Scheduled message will be canceled" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Copy message text" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "View message details" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Locked messages" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Message boxes" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Block" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Copy to phone" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Message copied from SIM card" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Cancel message" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Attachments" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Sending failed message" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Maximum number of characters reached" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Restoring..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "No attachments" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Copied to clipboard" + diff --git a/main/po/es_ES.po b/main/po/es_ES.po index 33f395b..c8c3bd7 100755..100644 --- a/main/po/es_ES.po +++ b/main/po/es_ES.po @@ -7,15 +7,9 @@ msgstr "Recuperar" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "No se puede mover" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "No solicitado" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "Se ha alcanzado el número máximo de páginas" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "Solicitado" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "Modo restringido. No se puede insertar contenido restringido" @@ -31,54 +25,18 @@ msgstr "LeÃdo" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "Recuperando..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "Error al recuperar" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "Inserte una tarjeta SIM para enviar mensajes. El mensaje se guardará en la Bandeja de salida" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d idiomas" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "Dirección de centro" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "Duplicado" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "Introducir nombre de canal" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "Introducir número de canal" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "No se ha seleccionado nada" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d canales" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "ID de canal ya existente" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "Error al enviar. Vuelva a intentarlo?" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "Lista de ID de canales llena" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "1 mensaje seleccionado" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "1 persona seleccionada" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "%d mensajes seleccionados" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "%d personas seleccionadas" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "Vista previa" @@ -88,156 +46,48 @@ msgstr "El nombre del archivo ya existe" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "No hay mensajes" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "Crear mensaje" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "Añadir a contacto" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "Crear dirección" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "Bloq lista" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "Pulse para añadir un número" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "Crear canal" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "Descartar" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "Imposible enviar mensaje" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "Contactos" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "Hacer foto" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "Sin dirección" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "Tono de alerta" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "Permitir publicidad" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "Permitir anónimos" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "Lista de elementos adjuntos" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "Descarga automática" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "Automática" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "Eliminación automática" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "Color de fondo" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "Bloquear mensajes" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "Mensajes de difusión" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "Activación" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "Mis canales" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "Recibiendo canales" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "Centro %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "Personalizar hora" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "Estilo predeterminado" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "Informe de entrega" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "Error al enviar" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "Cada 10 minutos" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "Cada 2 minutos" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "Cada 5 minutos" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "Color de fuente" - msgid "IDS_MSGF_BODY_FROM" msgstr "De" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "Ajustes generales" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "Alfabeto GSM" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "Mantenga presionada la tecla '1' para conectarse al servidor de correo de voz cuando no se encuentre en una aplicación o en el curso de una llamada" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "Lista de elementos insertada" -msgid "IDS_MSGF_BODY_LANG" -msgstr "Idiomas" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "Máximo" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "Número de buzón de voz" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "Mensaje entregado" @@ -253,24 +103,12 @@ msgstr "Aviso" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "Enviado" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "No hay restricciones de tamaño ni contenido" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "Se le notificará cuando el tamaño y el contenido superen el máximo permitido" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "Fax" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "Voz" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "Mensajes push" @@ -289,9 +127,6 @@ msgstr "Rechazar" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "Opciones de recepción" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "Ruta de respuesta" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "Solicitar informe de envÃo" @@ -301,12 +136,6 @@ msgstr "Solicitar inf. de lectura" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "Restringido" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "Enviando..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 dÃas" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "Baja" @@ -316,48 +145,15 @@ msgstr "Normal" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "Urgente" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "Opciones de envÃo" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "Caducidad" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "Prioridad" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "Enviar informe de entrega" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "Enviar informe de lectura" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "Tipo de servicio" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "Dirección" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "Exactamente igual a" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "Incluir" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "Coincidir criterios" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "Una vez" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "Duración de página" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "Compatibilidad de caracteres" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "Texto" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "Mensajes de emergencia" @@ -367,21 +163,12 @@ msgstr "Mensajes de texto" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "Tamaño total" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Unicode" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "Contenido de DRM" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "Editar canal" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "Lista de elementos" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "Segundos" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 segundos" @@ -400,12 +187,6 @@ msgstr "Instalar" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "Red en extranjero" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "Diapositiva" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "Estilo de fuente" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "Ver detalles del contacto" @@ -418,18 +199,6 @@ msgstr "Error al recuperar mensaje" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "Error al enviar mensaje multimedia" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "Puede enviar una imagen de hasta %d KB" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "Tarjeta de visita" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "Sin nombre" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "Bienvenido" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "Reenv." @@ -439,132 +208,48 @@ msgstr "No leÃdos" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "Mover a teléfono" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "Añadir texto" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "Destinatario duplicado" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "Tamaño máximo de creación" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "Alcanzado el número máximo de destinatarios (%d)" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "Toque para añadir asunto" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "Grupos" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "Contactos" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "Otros archivos" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "Sonido" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "Añadir multimedia" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "Desactivar" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "Activar" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "Para" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "Grabar sonido" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "Grabar sonido" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "Grabar vÃdeo" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "Plantilla de texto" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "Cambiado a MMS" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "Cambiado a SMS" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "Introducir dirección" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "Archivo no válido" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "Mensaje enviado" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "Tamaño máximo de mensaje superado" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "%d adjuntos disponibles. Seleccione hasta %d adjuntos" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "El servidor no responde" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "No se pueden adjuntar todos los archivos. Se pueden adjuntar como máximo %d KB. ¿Continuar?" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "No se puede enviar MMS. Error no reconocido" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "Sincr. de calendario" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "Tamaño de fuente" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "Sin archivos adjuntos" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "Correo electrónico completo" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "Modo de creación" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "Mensaje entregado" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "Mensaje multimedia" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "Nuevo correo de voz" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "Sin asunto" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "Sà a todo" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "Centro de servicios" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "Cargando servicio" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "Sonido" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "No se puede enviar. Tipos de archivos adjuntos no admitidos" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "Lista de conversaciones" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "Seleccionar dirección" @@ -574,30 +259,9 @@ msgstr "Mover a SIM" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "Está a punto de conectarse(%s). ¿Continuar?" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "Error en recuperación MMS" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "No hay destinatario" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "Necesario" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "¿Guardar en Borradores?" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "Tamaño máximo de mensaje superado. Cambiando tamaño..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "Sincronización cancelada" - msgid "IDS_MSGF_SK_RESEND" msgstr "Reenviar" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "Añadir canal" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "Destinatario no válido" @@ -610,27 +274,15 @@ msgstr "No se puede reproducir durante la llamada" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "No se puede guardar en modo de almacenamiento masivo" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "No se puede abrir en modo de almacenamiento masivo" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "No se puede utilizar en modo de almacenamiento masivo" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "¿Descartar mensaje actual?" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "Seleccionado" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "Seleccionado" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "¿Eliminar?" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "Ajustando tamaño..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "No se puede adjuntar. El tamaño máximo de archivos es de %d KB" @@ -649,3 +301,204 @@ msgstr "La polÃtica de seguridad restringe la redacción de mensajes de texto" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "Añadiendo. Espere..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Dirección del centro de servicios" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Mensajes de correo basura" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Grande" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Pequeño" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Diminuto" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "No se puede enviar el mensaje programado. Defina otra hora" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Fecha y hora" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Mensajes multimedia" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "No se han añadido destinatarios. Introduzca destinatarios" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Opciones de envÃo" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Recibiendo tipo de alerta" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "Emergencia" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "EnvÃo de mensaje de emergencia" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Destinatarios" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Repetir" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Mensajes" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Una vez" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 veces" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 veces" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Estoy en una emergencia. Ayúdenme, por favor" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM no insertada" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Hacer foto" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Capturar vÃdeo" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Grabar audio" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Mensajes de CB" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Mensajes de tarjeta SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "La duración debe superar los %d segundos" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "No se puede añadir contenido" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Seleccionar destinatario" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Ver contactos" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Duración (%s seg)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Imagen demasiado grande. Comprimiendo..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Mensaje guardado como borrador" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Otro" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Borrador" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Duración de la presentación de diapositiva" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Enviar correo electrónico" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Elementos insertados" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Elementos adjuntos" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d archivos adjuntos" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Mensaje\nprogramado" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Duración\n(%d s)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Usar info otros contac" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Este mensaje incluye un archivo adjunto que no se muestra" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Este mensaje incluye archivos adjuntos que no se muestran" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Guardar todo" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Mensajes de borrador" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Se restablecerá el mensaje" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Se cancelará el mensaje programado" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Copiar texto del mensaje" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Ver detalles mens" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Mensajes bloqueados" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Buzón de mensajes" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Bloquear" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Copiar en el teléfono" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Mensaje copiado desde la tarjeta SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Cancelar mensaje" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Archivos adjuntos" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Error al enviar mensaje" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Alcanzado el número máximo de caracteres" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Restaurando..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Sin archivos adjuntos" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Copiado al portapapeles" + diff --git a/main/po/fi.po b/main/po/fi.po new file mode 100644 index 0000000..c4e4730 --- /dev/null +++ b/main/po/fi.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Ei voi avata" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Nouda" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Ei voi siirtää" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Sivujen enimmäismäärä on saavutettu" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Rajoitettu tila. Rajoitettua sisältöä ei voi lisätä" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Toimitettu" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Vanhentunut" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Lue" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Noudetaan..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Aseta SIM-kortti viestien lähettämiseksi. Viesti tallennetaan Lähetetyt-kansioon" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Syötä kanavanumero" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 viesti valittu" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d viestiä valittu" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Esikatselu" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Tiedostonimi on jo käytössä" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Ei viestejä" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Lisää yhteystietoon" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Hylkää" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Viestiä ei voi lähettää" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Ota valokuva" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Ei osoitetta" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Liitetiedostojen luettelo" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Automaattinen lataus" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Tiedoteviestit" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Keskus %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Määritetty aika" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Toimitusraportti" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Lähetys epäonnistui" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Lähettäjä" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Lisätty kohdeluettelo" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Viesti toimitettu" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Viesti noudettu" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Vapaa" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Varoitus" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Lähetetty" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "t" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "kt" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Palveluviestit" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Lukuraportti" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Vastaanotettu" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Manuaalinen" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Hylkää" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Vastaanottoasetukset" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Pyydä toimitusraportti" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Pyydä lukuraportti" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Rajoitettu" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Matala" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normaali" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Kiireellinen" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Tärkeys" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Lähetä lukuraportti" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Sivun kesto" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "Hätäviestit" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Tekstiviestit" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Koko yhteensä" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM-sisältö" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Kohdeluettelo" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sekuntia" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sekuntia" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sekuntia" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Kotiverkko" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Asenna" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Vierailuverkko" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Näytä yhteystiedot" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Multimediaviesti lähetetty" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Viestin nouto epäonnistui" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Multimediaviestin lähettäminen epäonnistui" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Siir." + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Lukem." + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Siirrä puhelimeen" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Vastaanottaja esiintyy kahdesti" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Vastaanottajien enimmäismäärä (%d) on saavutettu" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Vastaanottaja" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Tallenna ääntä" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Tallenna video" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Muutettu multimediaviestiksi" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Vaihdettu tekstiviestiksi" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d liitettä käytettävissä. Valitse enintään %d liitettä" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Kaikkia tiedostoja ei voi liittää. Liitetiedostojen enimmäiskapasiteetti on %d kt. Jatketaanko?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Kirjasinkoko" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Luontitila" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Multimediaviesti" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Ei aihetta" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Viestikeskus" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Valitse osoite" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Siirrä SIM-kortille" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Olet siirtymässä online-tilaan (%s). Jatketaanko?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Läh. uud." + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Virheellinen vast.ottaja" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Virheelliset vastaanottajat" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Puhelun aikana ei voi toistaa" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Ei voi tallentaa massamuistitilassa" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Hylätäänkö nykyinen viesti?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Valittu" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Poistetaanko?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Ei voi liittää. Tiedostojen enimmäiskoko on %d kt" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Rajoitettu" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Ei voi lähettää edelleen.\nTiedoston edelleenlähetys on estetty" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Ajoitettu viesti" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Suojauskäytäntö estää tekstiviestien kirjoittamisen" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Lisätään. Odota..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Viestikeskuksen osoite" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Roskapostiviestit" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Iso" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normaali" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Pieni" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tosi pieni" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Ajoitettua viestiä ei voi lähettää. Määritä toinen aika" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Päivämäärä ja aika" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Multimediaviestit" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Vastaanottajia ei lisätty. Anna vastaanottajat" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Lähetysasetukset" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Vastaanotettavan hälytyksen tyyppi" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "Hätäviesti" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normaali" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Hätäviestin lähetys" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Vastaanottajat" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Toista" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Viesti" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Kerran" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 kertaa" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 kertaa" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Olen hädässä. Auta minua." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM-korttia ei ole asetettu" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Ota kuva" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Kuvaa video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Tallenna ääntä" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CB-viestit" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM-kortilla olevat viestit" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Keston on oltava enemmän kuin %d sekuntia" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Sisältöä ei voi lisätä" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Valitse vastaanottaja" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Tarkastele yhteystietoja" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Kesto (%s s)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Kuva on liian iso. Pakataan..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Viesti tallennettu luonnoksena" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Muu" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Vedos" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Dian kesto" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Lähetä sähköpostiviesti" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Lisätyt kohteet" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Liitetyt kohteet" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d liitettä" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Ajoitettu\nviesti" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Kesto\n(%d s)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Käytä muita yht.tiet." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Tähän viestiin sisältyy liitetiedosto, jota ei näytetä" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Tähän viestiin sisältyy liitetiedostoja, joita ei näytetä" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Tallenna kaikki" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Viestiluonnokset" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Viesti palautetaan" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Ajoitettu viesti peruutetaan" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Kopioi viestiteksti" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Näytä viestin tiedot" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Lukitut viestit" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Viesti-ikkunat" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Estä" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Kopioi puhelimeen" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Viesti on kopioitu SIM-kortilta" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Peruuta viesti" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Liitteet" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Lähetetään epäonnistunutta viestiä" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Merkkien enimmäismäärä saavutettu" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Palautetaan..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Ei liitteitä" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Kopioitu leikepöydälle" + diff --git a/main/po/fr_FR.po b/main/po/fr_FR.po index 350d3c3..74c0520 100755..100644 --- a/main/po/fr_FR.po +++ b/main/po/fr_FR.po @@ -7,15 +7,9 @@ msgstr "Récupérer" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "Déplacement impossible" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "Non demandé" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "Nombre maximum de pages atteint" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "Demandé" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "Mode restreint. Impossible d'insérer un contenu restreint" @@ -31,54 +25,18 @@ msgstr "Lu" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "Récupération..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "Echec de la récupération" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "Insérez une carte SIM pour envoyer des messages. Le message sera enregistré dans la boîte d'envoi" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d langues" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "Numéro de messagerie" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "Nom déjà existant" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "Saisir le nom de la station" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "Entrez numéro de chaîne" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "Aucune sélection" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d canaux" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "Un ID de station identique existe déjà " - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "Echec de l'envoi. Réessayez ultérieurement?" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "Liste d'ID de canaux saturée" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "1 message sélectionné" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "1 personne sélectionnée" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "%d messages sélectionnés" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "%d personnes sélectionnées" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "Aperçu" @@ -88,156 +46,48 @@ msgstr "Nom de fichier déjà utilisé" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "Aucun message" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "Créer un message" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "Ajouter aux contacts" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "Créer adresse" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "Liste bloquée" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "Appuyez pour ajouter le numéro" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "Créer chaîne" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "Ne pas enregistrer" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "Impossible d'envoyer le message" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "Contacts" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "Prendre une photo" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "Aucune adresse" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "Sonnerie d'alerte" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "Autoriser la publicité" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "Autoriser n° inconnu" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "Liste d'éléments jointe" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "Téléchargement auto." -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "Automatique" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "Suppression auto." - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "Couleur d'arrière-plan" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "Bloquer les messages" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "Messages de diffusion" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "Activation" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "Mes canaux" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "Canaux de réception" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "Centre %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "Durée personnalisée" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "Style par défaut" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "Accusé de réception" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "Echec de l'envoi" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "Toutes les 10 min" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "Toutes les 2 min" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "Toutes les 5 min" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "Couleur de la police" - msgid "IDS_MSGF_BODY_FROM" msgstr "De" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "Paramètres généraux" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "Alphabet GSM" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "Maintenir la touche 1 enfoncée pour accéder à la messagerie vocale lorsqu'aucune application n'est ouverte ou qu'aucun appel n'est en cours" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "Liste d'éléments insérée" -msgid "IDS_MSGF_BODY_LANG" -msgstr "Langues" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "Maximum" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "N° de messagerie vocale" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "Message remis" @@ -253,24 +103,12 @@ msgstr "Avertissement" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "Envoyé(s)" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "Aucune restriction de taille et de contenu" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "Vous serez informé lorsque vous aurez atteint les limites de taille et de contenu" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "O" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "Ko" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "Fax" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "Vocal" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "Messages Push" @@ -289,9 +127,6 @@ msgstr "Refuser" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "Options de réception" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "Chemin de réponse" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "Accusé de réception" @@ -301,12 +136,6 @@ msgstr "Confirmation de lecture" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "Limité" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "Envoi..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 jours" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "Faible" @@ -316,48 +145,15 @@ msgstr "Normale" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "Urgent" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "Options d'envoi" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "Expiration" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "Priorité" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "Accusé de réception" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "Confirmation de lecture" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "Type de service" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "Adresse" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "Identique à " - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "Inclure" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "Critères correspondants" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "Une fois" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "Temps de défilement des pages" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "Type d'alphabet" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "Texte" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "Messages SOS" @@ -367,21 +163,12 @@ msgstr "SMS" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "Taille totale" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Unicode" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "Contenu DRM" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "Modifier les chaînes" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "Sélection" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "secondes" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 secondes" @@ -400,12 +187,6 @@ msgstr "Installer" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "Réseau d'itinérance" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "Défilement" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "Police" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "Afficher les détails du contact" @@ -418,18 +199,6 @@ msgstr "Echec de la récupération du message" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "Echec envoi MMS" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "Vous pouvez envoyer une image de %d Ko maximum" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "Carte de visite" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "Aucun nom" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "Bienvenue" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "Transf." @@ -439,132 +208,48 @@ msgstr "Non lu" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "Déplacer vers le téléphone" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "Ajouter texte" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "Destinataire en double" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "Taille de création maximale autorisée" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "Nombre maximum de destinataires (%d) atteint" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "Ajouter objet" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "Groupes" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "Répertoire" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "Autres fichiers" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "Son" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "Ajouter multimédia" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "Désactivé" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "Activé" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "A" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "Enregistrer un mémo" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "Enregistrer un mémo" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "Enregistrer une vidéo" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "Modèle SMS" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "Modifié en MMS" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "Modifié en SMS" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "Saisir une adresse" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "Fichier non valide" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "Message envoyé" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "Taille de message max. dépassée" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "%d pièces jointes disponibles. Sélectionnez-en %d au maximum" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "Pas de réponse du serveur" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "Impossible de joindre tous les fichiers. La taille maximale des pièces jointes est de %d Ko. Continuer ?" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "Envoi MMS impossible. Erreur non reconnue" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "Synchro. des calendriers" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "Taille de la police" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "Sans pièce jointe" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "E-mail entier" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "Mode de création" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "Message remis" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "MMS" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "Nouveau message vocal" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "Aucun objet" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "Oui à tout" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "Centre de service" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "Chargement du service" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "Son" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "Envoi impossible. Les types de fichiers joints ne sont pas pris en charge" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "Liste de conversations" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "Sélectionner l'adresse" @@ -574,30 +259,9 @@ msgstr "Déplacer vers la carte SIM" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "Connexion imminente (%s). Continuer ?" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "Echec récupération MMS" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "Pas de destinataire" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "Requis" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "Enregistrer dans Brouillons ?" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "La taille du message dépasse la limite autorisée. Redimensionnement..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "Synchronisation annulée" - msgid "IDS_MSGF_SK_RESEND" msgstr "Renvoyer" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "Ajouter un canal" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "Destinataire non valide" @@ -610,27 +274,15 @@ msgstr "Lecture impossible pendant un appel" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "Impossible d'enregistrer en mode Stockage de masse" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Impossible d'ouvrir en mode Stockage de masse" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Utilisation impossible en mode Stockage de masse" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "Ignorer le message actuel ?" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "Sélectionné" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "Sélectionné" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "Supprimer ?" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "Redimensionnement..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "Impossible d'ajouter la pièce jointe. La taille maximale des fichiers est de %d Ko" @@ -649,3 +301,204 @@ msgstr "La politique de sécurité limite la création de SMS" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "Ajout. Veuillez patienter..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adresse du centre de service" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Messages Spam" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Grande" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Petite" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Minuscule" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Impossible d'envoyer un message programmé. Définissez un autre horaire" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Date et heure" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Aucun destinataire ajouté. Sélectionnez" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Options d'envoi" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Type d'alerte de réception" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Envoi de SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Destinataires" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Nombre de répétitions" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Message" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "1 fois" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 fois" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 fois" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Je suis en situation d'urgence. Aidez-moi s'il vous plaît." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "Carte SIM non insérée" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Photographier" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Capturer une vidéo" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Enregistrement audio" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Messages de diffusion" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Messages de la carte SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "La durée doit être supérieure à %d secondes" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Impossible d'ajouter du contenu" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Sélectionner un destinataire" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Voir le contact" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Durée (%s sec)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Image trop volumineuse. Compression..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Message enregistré comme brouillon" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Autre" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Brouil." + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Durée de la diapositive" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Envoyer un e-mail" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Eléments insérés" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Pièces jointes" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d pièces jointes" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Message\nprogrammé" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Durée\n(%d s.)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Util autr. infos cont." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Ce message comporte une pièce jointe non affichée" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Ce message inclut les fichiers joints non affichés" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Tout enregistrer" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Messages brouillons" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Le message sera restauré" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Le message programmé sera annulé" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Copie message texte" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Aff. détails message" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Messages verrouillés" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Messageries" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Bloquer" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Copier dans le téléphone" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Message copié à partir de la carte SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Annuler le message" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Pièce(s) jointe(s)" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Envoi du message d'échec" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Nb. max. de caractères atteint" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Restauration..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Pas de pièce jointe" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Copié dans le Presse-papiers" + diff --git a/main/po/he.po b/main/po/he.po new file mode 100644 index 0000000..9bbe12d --- /dev/null +++ b/main/po/he.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "×œ× × ×™×ª×Ÿ לפתוח" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "×חזר" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "×œ× × ×™×ª×Ÿ להעביר" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "הגעת למספר ×”×¢×ž×•×“×™× ×”×ž×¨×‘×™" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "מצב מוגבל. ×œ× × ×™×ª×Ÿ להוסיף תוכן מוגבל" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "× ×ž×¡×¨" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "פג תוקפו" + +msgid "IDS_MSGF_BODY_READ" +msgstr "קר×" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "מ×חזר..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "×”×›× ×¡ כרטיס SIM כדי לשלוח הודעות. ההודעה תישמר בתיבת דו×ר יוצ×" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "הזן מספר ערוץ" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "× ×‘×—×¨×” הודעה ×חת" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d הודעות × ×‘×—×¨×•" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "תצוגה מקדימה" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "×©× ×§×•×‘×¥ כבר קיי×" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "×ין הודעות" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "הוסף ל×יש קשר" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "מחק" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "×œ× × ×™×ª×Ÿ לשלוח ×ת ההודעה" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "×¦×œ× ×ª×ž×•× ×”" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "×ין כתובת" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "רשימת ×¤×¨×™×˜×™× ×ž×¦×•×¨×¤×™×" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "הורדה ×וטומטית" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "הודעות שידור" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "מרכז %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "שעה מות×מת ×ישית" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "דוח מסירה" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "השליחה × ×›×©×œ×”" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "מ×ת" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "רשימת ×¤×¨×™×˜×™× ×©× ×•×¡×¤×•" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "ההודעה × ×ž×¡×¨×”" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "ההודעה ×וחזרה" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "חופשי" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "×זהרה" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "× ×©×œ×—" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "הודעות ××™× ×˜×¨× ×˜" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "×ישור קרי××”" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "התקבל" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "×™×“× ×™" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "דחה" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "×פשרויות קבלה" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "בקש דוח מסירה" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "בקש ×ישור קרי××”" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "מוגבל" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "× ×ž×•×š" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "רגיל" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "דחוף" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "עדיפות" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "שלח ×ישור קרי××”" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "תזמון דף" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "הודעות SOS" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "הודעות טקסט" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "גודל כולל" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "תוכן DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "רשימת הפריטי×" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 ×©× ×™×•×ª" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 ×©× ×™×•×ª" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 ×©× ×™×•×ª" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "רשת ביתית" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "התקן" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "רשת זרה" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "הצג פרטי ×יש קשר" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "הודעת מולטימדיה × ×©×œ×—×”" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "×חזור הודעה × ×›×©×œ" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "שליחת הודעת מולטימדיה × ×›×©×œ×”" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "העבר" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "×œ× × ×§×¨×" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "העבר לטלפון" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "× ×ž×¢×Ÿ משוכפל" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "הגעת למספר המרבי של × ×ž×¢× ×™× (‎%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "הזן ×©× × ×ž×¢×Ÿ ×ו מספר" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "הקלט צליל" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "הקלט ויד×ו" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "×”×©×ª× ×” ל-MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "הוחלף ב-SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d ×§×‘×¦×™× ×ž×¦×•×¨×¤×™× ×–×ž×™× ×™×. בחר עד %d ×§×‘×¦×™× ×ž×¦×•×¨×¤×™×" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "×œ× × ×™×ª×Ÿ לצרף ×ת כל הקבצי×. הקיבולת המרבית ×œ×§×‘×¦×™× ×ž×¦×•×¨×¤×™× ×”×™× %d KB. להמשיך?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "גודל גופן" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "מצב יצירה" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "הודעת מולטימדיה" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "×ין × ×•×©×" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "מוקד הודעות" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "בחר כתובת" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "העבר ל-SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "×תה עומד לעבור למצב ×œ× ×ž×§×•×•×Ÿ (%s). להמשיך?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "שלח שוב" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "× ×ž×¢×Ÿ ×œ× ×—×•×§×™" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "× ×ž×¢× ×™× ×œ× ×—×•×§×™×™×" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "×œ× × ×™×ª×Ÿ להפעיל במהלך שיחה" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "×œ× × ×™×ª×Ÿ לשמור במצב ×מצעי ×חסון‬" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "השלך הודעה × ×•×›×—×™×ª?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "× ×‘×—×¨" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "למחוק?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "×œ× × ×™×ª×Ÿ לצרף. גודל ×”×§×‘×¦×™× ×”×ž×¨×‘×™ ×”×•× â€Ž%d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "מוגבל" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "×œ× × ×™×ª×Ÿ להעביר.\nהקובץ × ×¢×•×œ ×ž×¤× ×™ העברה" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "הודעה ×ž×ª×•×–×ž× ×ª" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "×ž×“×™× ×™×•×ª ×”×בטחה מגבילה חיבור SMS" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "מוסיף. ×× × ×”×ž×ª×Ÿ..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "כתובת מוקד הודעות" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "הודעה זבל" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "גדול" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "רגיל" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "קטן" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "קטן מ×וד" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "×œ× × ×™×ª×Ÿ לשלוח הודעה ×ž×ª×•×–×ž× ×ª. הגדר מועד ×חר" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "ת×ריך ושעה" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "הודעות מולטימדיה" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "×œ× × ×•×¡×¤×• × ×ž×¢× ×™×. הזן × ×ž×¢× ×™×" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "×פשרויות שליחה" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "סוג התר×ת קבלה" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "רגיל" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "SOS שליחת" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "× ×ž×¢× ×™×" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "חזרה" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "הודעה" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "חד-פעמי" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 פעמי×" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 פעמי×" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "×× ×™ במצוקה. × × ×¢×–×•×¨ לי." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM ×œ× ×”×•×›× ×¡" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "×¦×œ× ×ª×ž×•× ×”" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "×¦×œ× ×•×™×“×ו" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "הקלט שמע" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "הודעות CB" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "הודעות כרטיס SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "משך הזמן חייב להיות ×רוך יותר מ-%d ×©× ×™×•×ª" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "×œ× × ×™×ª×Ÿ להוסיף תוכן" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "בחר × ×ž×¢×Ÿ" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "הצג ×יש קשר" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "משך זמן (%sâ€ ×©× ×™×•×ª)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "×”×ª×ž×•× ×” גדולה מדי. דוחס..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "ההודעה × ×©×ž×¨×” כטיוטה" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "×חר" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "טיוטה" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "משך זמן עבור שקופית" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "שלח דו×â€×œ" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "×¤×¨×™×˜×™× ×©×”×•×›× ×¡×•" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "×¤×¨×™×˜×™× ×ž×¦×•×¨×¤×™×" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d ×§×‘×¦×™× ×ž×¦×•×¨×¤×™×" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "הודעה\n×ž×ª×•×–×ž× ×ª" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "משך\nâ€(‎%d ×©× ×™×•×ª)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "פרטי ×יש קשר ×חרי×" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "הודעה זו כוללת קובץ מצורף ש××™× ×• מוצג" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "הודעה זו כוללת ×§×‘×¦×™× ×ž×¦×•×¨×¤×™× ×©××™× × ×ž×•×¦×’×™×" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "שמור הכל" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "הודעות טיוטה" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "ההודעה תשוחזר" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "ההודעה ×”×ž×ª×•×–×ž× ×ª תבוטל" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "העתק טקסט הודעה" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "צפה בפרטי הודעה" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "הודעות × ×¢×•×œ×•×ª" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "תיבות הודעה" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "חסו×" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "העתק לטלפון" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "ההודעה הועתקה מכרטיס SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "בטל הודעה" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "×§×‘×¦×™× ×ž×¦×•×¨×¤×™×" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "שולח הודעה ×©× ×›×©×œ×”" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "הגעת למספר המרבי של תווי×" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "משחזר..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "×ין ×§×‘×¦×™× ×ž×¦×•×¨×¤×™×" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "הועתק ללוח" + diff --git a/main/po/hi.po b/main/po/hi.po new file mode 100644 index 0000000..c24ca71 --- /dev/null +++ b/main/po/hi.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "खà¥à¤²à¤¨à¥‡ में अकà¥à¤·à¤®" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "पà¥à¤¨à¤ƒ पà¥à¤°à¤¾à¤ªà¥à¤¤ करें" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "मूव करने में अकà¥à¤·à¤®" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "पेज़ों की अधिâ€à¤•à¤¤à¤® संखà¥â€à¤¯à¤¾ पहà¥à¤à¤šà¥€" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "पà¥à¤°à¤¤à¤¿à¤¬à¤‚धित मोड. पà¥à¤°à¤¤à¤¿à¤¬à¤‚धित सामगà¥à¤°à¥€ शामिल करने में अकà¥à¤·à¤®" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "à¤à¥‡à¤œ दिया" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "अवधि समापà¥à¤¤" + +msgid "IDS_MSGF_BODY_READ" +msgstr "पठित" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "पà¥à¤¨: पà¥à¤°à¤¾à¤ªà¥à¤¤ कर रहा है…" + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Messages à¤à¥‡à¤œà¤¨à¥‡ के लिठकोई SIM कारà¥à¤¡ डालें। Message Outbox में सेव किया जाà¤à¤—ा" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "चैनल नंबर दरà¥à¤œ करें" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 सनà¥à¤¦à¥‡à¤¶ चयनित" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d सनà¥à¤¦à¥‡à¤¶ चयनित" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "पूरà¥à¤µà¤¦à¤°à¥à¤¶à¤¨" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "फाइल का नाम पहले से ही मौजूद" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "कोई सनà¥à¤¦à¥‡à¤¶ नहीं" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "संपरà¥à¤• में जोड़ें" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "डिसà¥à¤•à¤¾à¤°à¥à¤¡" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "सनà¥à¤¦à¥‡à¤¶ à¤à¥‡à¤œà¤¨à¥‡ में अकà¥à¤·à¤®" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "फोटो लें" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "कोई पता नहीं" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "संलगà¥à¤¨ आइटेम सूची" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "सà¥à¤µà¤¤: डाउनलोड" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "पà¥à¤°à¤¸à¤¾à¤°à¤£ सनà¥à¤¦à¥‡à¤¶" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "केंदà¥à¤° %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "कसà¥à¤Ÿà¤® समय" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "वितरण रिपोरà¥à¤Ÿ" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "à¤à¥‡à¤œà¤¨à¤¾ असफल हà¥à¤†" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "से" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "शामिल आइटेम सूची" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "सनà¥à¤¦à¥‡à¤¶ पहà¥à¤à¤šà¤¾à¤¯à¤¾ गया" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "सनà¥à¤¦à¥‡à¤¶ वापस मिला" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "मà¥à¤•à¥à¤¤" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "चेतावनी" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "à¤à¥‡à¤œà¤¾" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "पà¥à¤¶ सनà¥à¤¦à¥‡à¤¶" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "पठित रिपोरà¥à¤Ÿ" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "पà¥à¤°à¤¾à¤ªà¥à¤¤ हà¥à¤†" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "मैनà¥à¤…ल" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "असà¥à¤µà¥€à¤•à¤¾à¤°à¥‡à¤‚" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "पà¥à¤°à¤¾à¤ªà¥à¤¤à¤¿ के विकलà¥à¤ª" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "वितरण रिपोरà¥à¤Ÿ के लिठअनà¥à¤°à¥‹à¤§" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "पठित रिपोरà¥à¤Ÿ के लिठअनà¥à¤°à¥‹à¤§" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "पà¥à¤°à¤¤à¤¿à¤¬à¤‚धित" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "निमà¥à¤¨" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "सामानà¥à¤¯" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "ततà¥à¤•à¤¾à¤²" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "पà¥à¤°à¤¾à¤¥à¤®à¤¿à¤•à¤¤à¤¾" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "पठित रिपोरà¥à¤Ÿ à¤à¥‡à¤œà¥‡à¤‚" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "पेज अवधि" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "आपातकाल सनà¥à¤¦à¥‡à¤¶" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "टेकà¥à¤¸à¥à¤Ÿ सनà¥à¤¦à¥‡à¤¶" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "कà¥à¤² आकार" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM सामगà¥à¤°à¥€" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "आइटेम सूची" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 सेकंड" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 सेकंड" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 सेकंड" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "होम नेटवरà¥à¤•" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "सà¥à¤¥à¤¾à¤ªà¤¿à¤¤ करें" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "विदेशी नेटवरà¥à¤•" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "संपरà¥à¤• विवरण देखें" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "मलà¥à¤Ÿà¥€à¤®à¥€à¤¡à¤¿à¤¯à¤¾ सनà¥à¤¦à¥‡à¤¶ à¤à¥‡à¤œà¤¾ गया" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "सनà¥à¤¦à¥‡à¤¶ पà¥à¤¨à¤ƒ पà¥à¤°à¤¾à¤ªà¥à¤¤ करना असफल" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "मलà¥â€à¤Ÿà¥€à¤®à¥€à¤¡à¤¿à¤¯à¤¾ सनà¥à¤¦à¥‡à¤¶ à¤à¥‡à¤œà¤¨à¤¾ असफल" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "आगे" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "अपठित" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "फोन में ले जाà¤à¤‚" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "डà¥à¤ªà¥à¤²à¥€à¤•à¥‡à¤Ÿ पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¥à¤¤à¤¾" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¤¾à¤“ं की अधिकतम संखà¥à¤¯à¤¾ (%d) तक पहà¥à¤à¤š गया" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "को" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "धà¥à¤µà¤¨à¤¿ रिकॉरà¥à¤¡ करें" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "विडियो रिकॉरà¥à¤¡ करें" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "MMS में बदला गया" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "SMS में बदला गया" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d अटैचमेंटà¥à¤¸ उपलबà¥à¤§à¥¤ %d अटैचमेंटà¥à¤¸ तक चà¥à¤¨à¥‡à¤‚" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "सà¤à¥€ फाइलें संलगà¥à¤¨ करने में अकà¥à¤·à¤®à¥¤ अधिकतम अटैचमेंट कà¥à¤·à¤®à¤¤à¤¾ %d केबी है। जारी रखें?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "फॉनà¥à¤Ÿ आकार" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "निरà¥à¤®à¤¾à¤£ मोड" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "मलà¥à¤Ÿà¥€à¤®à¥€à¤¡à¤¿à¤¯à¤¾ सनà¥à¤¦à¥‡à¤¶" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "कोई विषय नहीं" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "सेवा केंदà¥à¤°" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "पता चà¥à¤¨à¥‡à¤‚" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "SIM में ले जाà¤à¤‚" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "आप ऑनलाइन (%s) होने जा रहें हैं। जारी रखें?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "पà¥à¤¨à¤ƒà¤à¥‡à¤œà¥‡à¤‚" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "अमानà¥à¤¯ पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¤¾" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "अमानà¥â€à¤¯ पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¤¾" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "कॉल के दौरान चलाने में असमरà¥à¤¥" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "मास सà¥â€à¤Ÿà¥‹à¤°à¥‡à¤œ मोड में होने पर सेव करने में अकà¥à¤·à¤®" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "वरà¥à¤¤à¤®à¤¾à¤¨ सनà¥à¤¦à¥‡à¤¶ निरसà¥à¤¤ करें?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "चयनित" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "हटाà¤à¤?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "संलगà¥à¤¨ करने में अकà¥à¤·à¤®à¥¤ फ़ाइलों का अधिकतम आकार %d KB है" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "पà¥à¤°à¤¤à¤¿à¤¬à¤‚धित" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "फॉरवरà¥à¤¡ करने में असमरà¥à¤¥à¥¤\n फाइल का फॉरवरà¥à¤¡ लॉक है" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "शेडà¥à¤¯à¥‚लà¥à¤¡ हà¥à¤† सनà¥à¤¦à¥‡à¤¶" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "सà¥à¤°à¤•à¥à¤·à¤¾ नीति टेकà¥â€à¤¸à¥â€à¤Ÿ संदेशों की रचना को पà¥à¤°à¤¤à¤¿à¤¬à¤‚धित करता है" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "जोड रहा है. कृपया पà¥à¤°à¤¤à¥€à¤•à¥à¤·à¤¾ करें..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "सेवा केनà¥à¤¦à¥à¤° पता" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "सà¥â€à¤ªà¥ˆà¤® सनà¥à¤¦à¥‡à¤¶" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "बड़ा" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "सामानà¥à¤¯" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "छोटा" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "छोटा" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "अनà¥à¤¸à¥‚चित सनà¥à¤¦à¥‡à¤¶ à¤à¥‡à¤œà¤¨à¥‡ में अकà¥à¤·à¤®à¥¤ à¤à¤• और समय सेट करें" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "दिनांक और समय" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "मलà¥à¤Ÿà¥€à¤®à¥€à¤¡à¤¿à¤¯à¤¾ सनà¥à¤¦à¥‡à¤¶" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "कोई पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¤¾ जोड़ा नहीं गया। पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¤¾ दरà¥à¤œ करें" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "à¤à¥‡à¤œà¤¨à¥‡à¤‚ के विकलà¥à¤ª" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "अलरà¥à¤Ÿ पà¥à¤°à¤•à¤¾à¤° पà¥à¤°à¤¾à¤ªà¥à¤¤ कर रहा है" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "आपातकाल" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "सामानà¥à¤¯" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "आपातकालीन à¤à¥‡à¤œ रहा है" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "पà¥à¤°à¤¾à¤ªà¥à¤¤à¤•à¤°à¥à¤¤à¥à¤¤à¤¾" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "दोहराà¤à¤" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "सनà¥à¤¦à¥‡à¤¶" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "à¤à¤•à¤¬à¤¾à¤°" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 बार" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 बार" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "मैं आपात सà¥à¤¥à¤¿à¤¤à¤¿ में हूà¤à¥¤ कृपया मेरी मदद करें" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM नहीं डाली गई" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "तसà¥à¤µà¥€à¤° लें" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "वीडियो कैपà¥â€à¤šà¤° करें" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "ऑडियो रिकॉरà¥à¤¡ करें" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CB सनà¥à¤¦à¥‡à¤¶" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "सीम कारà¥à¤¡ सनà¥à¤¦à¥‡à¤¶" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "अवधि %d सेकंडà¥à¤¸ से अधिक होनी चाहिà¤" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "विषय वसà¥à¤¤à¥ जोड़ने में अकà¥à¤·à¤®" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "पà¥à¤°à¤¾à¤ªà¥â€à¤¤à¤•à¤°à¥à¤¤à¤¾ चà¥à¤¨à¥‡à¤‚" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "संपरà¥à¤• देखें" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "अवधि (%s सेकंड)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "चितà¥à¤° बहà¥à¤¤ बडा है। कंपà¥à¤°à¥‡à¤¸ हो रहा है..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "सनà¥à¤¦à¥‡à¤¶ डà¥à¤°à¤¾à¤«à¥à¤Ÿ के रूप में सेव किया" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "अनà¥à¤¯" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "डà¥à¤°à¤¾à¤«à¥à¤Ÿ" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "सà¥à¤²à¤¾à¤‡à¤¡ अवधि" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "ईमेल à¤à¥‡à¤œà¥‡à¤‚" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "समà¥à¤®à¤¿à¤²à¤¿à¤¤ आइटम" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "संलगà¥à¤¨ मदें" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d अटैचमेंटà¥à¤¸" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "निरà¥à¤§à¤¾à¤°à¤¿à¤¤\nसंदेश" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "अवधि\n(%d सेकंड)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "अनà¥à¤¯ संपरà¥à¤• जानकारी का उपयोग करें" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "इस सनà¥à¤¦à¥‡à¤¶ में अदृशà¥à¤¯ संलगà¥à¤¨ फ़ाइल शामिल हैं" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "इस सनà¥à¤¦à¥‡à¤¶ में अपà¥à¤°à¤¦à¤°à¥à¤¶à¤¿à¤¤ संलगà¥à¤¨ की गई फ़ाइलें शामिल हैं" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "सà¤à¥€ सेव करें" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "डà¥à¤°à¤¾à¤«à¤¼à¥à¤Ÿ संदेश" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "संदेश रीसà¥à¤Ÿà¥‹à¤° किठजाà¤à¤à¤—े" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "निरà¥à¤§à¤¾à¤°à¤¿à¤¤ संदेश रदà¥à¤¦ किया जाà¤à¤—ा" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "सनà¥à¤¦à¥‡à¤¶ टेकà¥â€à¤¸à¥â€à¤Ÿ कॉपी करें" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "सनà¥à¤¦à¥‡à¤¶ विवरण देखें" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "सनà¥à¤¦à¥‡à¤¶ लॉक किठगà¤" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Message बॉकà¥â€à¤¸à¥‡à¤œà¤¼" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "बà¥à¤²à¥‰à¤• करें" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "फोन में कॉपी करें" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "SIM कारà¥à¤¡ से सनà¥à¤¦à¥‡à¤¶ कॉपी किया गया" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "संदेश रदà¥à¤¦ करें" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "संलगà¥à¤¨à¤•" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "विफल सनà¥à¤¦à¥‡à¤¶ à¤à¥‡à¤œà¤¾ जा रहा है" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "वरà¥à¤£à¥‹ की संखà¥â€à¤¯à¤¾ अधिकतम पहà¥à¤à¤šà¥€" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "रीसà¥â€à¤Ÿà¥‹à¤° हो रहा है…" + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "कोई संलगà¥à¤¨à¤• नहीं" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "कà¥à¤²à¤¿à¤ªà¤¬à¥‹à¤°à¥à¤¡ में कॉपी किया गया" + diff --git a/main/po/hr.po b/main/po/hr.po new file mode 100644 index 0000000..8b2c9e8 --- /dev/null +++ b/main/po/hr.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Nemoguće otvoriti" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Preuzmi" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Nemoguće premjestiti" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Maks. broj stranica" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "OgraniÄeni naÄin rada. Nemoguće umetnuti ograniÄeni sadržaj" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "IsporuÄeno" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Isteklo" + +msgid "IDS_MSGF_BODY_READ" +msgstr "ProÄitano" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Preuzimanje..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Umetnite SIM karticu prije slanja poruke. Poruka spremljena u Odlazne" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Unesite broj kanala" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "Odabrana 1 poruka" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d odabranih poruka" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Pregled" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Ime datoteke već postoji" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Nema poruka" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Dodaj kontaktu" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Odbaci" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Nemoguće poslati poruku" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Fotografiranje" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Nema adrese" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Privici" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Auto. skidanje" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Info poruke mreže" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Centar %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Postavi" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Izvješće o isporuci" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Slanje neuspjeÅ¡no" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Od" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Umetnute stavke" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Poruka isporuÄena" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Poruka preuzeta" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Slobodno" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Upozorenje" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Poslano" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Push poruke" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "IzvjeÅ¡taj o Äitanju" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Primljeno" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "RuÄno" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Odbaci poziv" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Opcije primanja" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Izvješće isporuke" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Izvješće Äitanja" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "OgraniÄeno" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Niski" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normalni" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Visoki" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Prioritet" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Slanje izvjeÅ¡taja Äitanosti" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Trajanje stranice" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "SOS poruke" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "SMS poruke" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Ukupna veliÄina" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM sadržaj" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Popis stavki" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sek" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sek" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sek" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "MatiÄna mreža" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Instalirati" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Roaming" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Detalji kontakta" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "MMS poslan" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Preuzimanje poruke neuspjeÅ¡no" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "NeuspjeÅ¡no slanje MMS poruke" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Proslij." + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "NeproÄitano" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Premjesti u telefon" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Primatelji su duplicirani" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Maksimalni broj primatelja (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Za" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Snimi zvuk" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Video snimanje" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Promijenjeno na MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Promijenjeno u SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d privitaka dostupno. Odaberite do %d privitaka" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Nemoguće pridružiti sve datoteke. Maksimalna veliÄina privitka %d kB. Nastavak?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "VeliÄina slova" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "NaÄin sastavljanja" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Bez naslova" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Centar za usluge" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Odaberite adresu" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Premjesti na SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Spajanje na internet (%s). Nastaviti?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Pon. poÅ¡alji" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Neispravan primatelj" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "GreÅ¡ka primatelja" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Nemoguće reprod. tijekom poziva" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Nemoguće spremiti u naÄinu spremanja podataka" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Odbaciti trenutnu poruku?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Odabrano" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Obrisati?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Nemoguće pridružiti. Maks. veliÄina datoteka: %d kB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "OgraniÄeno" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "ProsljeÄ‘ivanje nemoguće\nDatoteka zakljuÄana za prosljeÄ‘ivanje" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "OdgoÄ‘eno slanje" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Sigurnosne odredbe ograniÄavaju sastavljanje SMS poruka" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Dodaje se. PriÄekajte..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adresa centra za poruke" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Neželjene poruke" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Velika" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normalna" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Mala" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Nije moguće poslati zakazanu poruku. Postavite drugo vrijeme" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Datum i vrijeme" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS poruke" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Nema dodanih primatelja. Unesite primatelje" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Opcije slanja" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Vrsta obavjesti" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normalna" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Slanje SOS poruke" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Primatelji" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Ponavljanje" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Poruka" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "1 puta" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 puta" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 puta" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "U nevolji sam! Molim pomoć!" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "Umetnite SIM karticu" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Fotografiranje" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Snimanje videa" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Snimi zvuk" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CB poruke" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Poruke na SIM kartici" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Trajanje mora biti dulje od %d sek" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Nemoguće dodati" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Odaberite primatelja" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Prikaz kontakta" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Trajanje (%s sek)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Slika prevelika. Sažimanje..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Poruka spremljena u Pripremu" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Ostalo" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Priprema" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Trajanje stranice" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "PoÅ¡alji email" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Umetnute stavke" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Privitak" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d privitaka" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Zakazana\nporuka" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Trajanje\n(%d sek)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Kor. dru. kontak. pod." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Poruka sadrži privitak koji nije prikazan" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Poruka sadrži privitke koji nisu prikazani" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Spremi sve" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Poruke iz pripreme" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Poruke će biti vraćene" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Zakazane poruke bit će otkazane" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Kopiraj tekst poruke" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Prikaz detalja" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "ZakljuÄane poruke" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Okviri poruka" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blokiraj" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Kopiraj na telefon" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Poruka kopirana sa SIM kartice" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "PoniÅ¡ti poruku" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Privitak" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Slanje neuspjeÅ¡nih poruka" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Maks. broj znakova" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Vraćanje..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Bez privitaka" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Kopirano u meÄ‘uspremnik" + diff --git a/main/po/hu.po b/main/po/hu.po new file mode 100644 index 0000000..ea37cf1 --- /dev/null +++ b/main/po/hu.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Nem nyitható meg" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Fogadás" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Nem helyezhetÅ‘ át" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Elérte az oldalak maximális számát" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Korlátozott mód. Nem szúrható be korlátozott tartalom" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "KézbesÃtve" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Lejárt" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Elolvasva" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Fogadás..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Ãœzenetküldéshez helyezzen be SIM-kártyát. Az üzenet a KimenÅ‘ mappába kerül" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Adja meg a csatorna számát" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 üzenet kiválasztva" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d üzenet kiválasztva" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "ElÅ‘nézet" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Ez a fájlnév már létezik." + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Nincs üzenet" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Hozzáadás névjegyhez" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Elvetés" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Nem lehet elküldeni az üzenetet" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Fényképezés" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Nincs cÃm" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Csatolt tételek" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Automatikus letöltés" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Hálózati hÃrüzenetek" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "%d. központ" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Egyéni idÅ‘pont" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "KézbesÃtési jelentés" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "A küldés sikertelen" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Feladó" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Beszúrt tétellista" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Az üzenet kézbesÃtve" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Az üzenet letöltve" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Szabad" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Figyelmeztetés" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Elküldve" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Push üzenetek" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Jelentést olvas" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Fogadva" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Kézi" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "ElutasÃt" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Fogadás beállÃtások" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "KézbesÃtési jelentést kér" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Olvasási jelentést kér" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Korlátozva" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Alacsony" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normál" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "SürgÅ‘s" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Prioritás" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Olvasási jelentés küldése" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Oldal idÅ‘tartama" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "SegélykérÅ‘ üzenetek" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Szöveges üzenetek" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Teljes méret" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM-tartalom" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Tételek listája" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 másodperc" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 másodperc" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 másodperc" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Saját hálózat" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "TelepÃt" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Roamingban használt hálózat" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Névjegyadatok megtekintése" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Multimédia üzenet elküldve" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Ãœzenet fogadása sikertelen" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "A multimédia üzenet elküldése nem sikerült" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Tov.k." + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Olv.tlan" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Telefonra áthelyez" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Kétszer elÅ‘forduló cÃmzett" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Elérte a cÃmzettek maximális számát (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "CÃmzett" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Hangfelvétel" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Videófelvétel" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Ãtvált MMS-re" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "SMS-re módosÃtva" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d melléklet áll rendelkezésre. Legfeljebb %d mellékletet válasszon ki" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Nem lehet mindegyik fájlt csatolni. Összesen legfeljebb %d KB csatolható. Folytatja?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Betűméret" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Létrehozási mód" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Multimédia üzenet" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Ãœres tárgymezÅ‘" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Szolgáltatásközpont" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Válasszon cÃmet" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "SIM-kártyára áthelyez" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Kapcsolódni készül (%s). Folytatja?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Újraküld" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Érvénytelen cÃmzett" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Érvénytelen cÃmzettek" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "HÃvás közben nem lehet lejátszani" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Háttértár módban nem lehet menteni" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Elveti a jelenlegi üzenetet?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Kiválasztva" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Törli?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Nem csatolható. A maximális fájlméret %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Korlátozva" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Nem lehet továbbküldeni. A fájl védett a továbbküldés ellen" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Ãœtemezett üzenet" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "A biztonsági irányelv korlátozza a szöveges üzenetek Ãrását" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Hozzáadás. Kis türelmet..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Szolgáltatóközpont cÃme" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Levélszemét" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Nagy" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normál" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Kicsi" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Nem lehet elküldeni az ütemezett üzenetet. Más idÅ‘t állÃtson be" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Dátum és idÅ‘" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Multimédia üzenetek" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Nem adott meg cÃmzettet. Adja meg a cÃmzetteket" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Küldés beállÃtások" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Fogadásjelzés tÃpusa" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normál" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "SegélykérÅ‘ üzenet küldése" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "CÃmzettek" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Ismétlés" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Ãœzenet" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Egyszer" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "Háromszor" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "Ötször" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Veszélyben vagyok. SegÃtséget kérek." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "Nincs behelyezve SIM" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Kép készÃtése" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Videó rögzÃtése" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Hang rögzÃtése" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "HÃrüzenetek" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM-üzenetek" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Az idÅ‘tartamnak hosszabbnak kel lennie %d másodpercnél" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "A tartalom nem adható hozzá" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "CÃmzett kiválasztása" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Névjegy megtekintése" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "IdÅ‘tartam (%s mp)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "A kép túl nagy. TömörÃtés..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Ãœzenet piszkozatként mentve" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Egyéb" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Piszkoz." + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Dia idÅ‘tartama" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "E-mail küldése" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Beszúrt tételek" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Csatolt tételek" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d melléklet" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Ãœtemezett\nüzenet" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "IdÅ‘tartam\n(%d mp)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Más kapcs.info. haszn." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Ez az üzenet nem megjelenÃthetÅ‘ mellékletet tartalmaz" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Ez az üzenet megjelenÃtetlen csatolt fájlokat tartalmaz" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Összes mentése" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Piszkozatok" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Vissza fogja állÃtani az üzenetet" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Vissza fogja vonni az ütemezett üzenetet" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Ãœzenetszöv. másolása" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Ãœz.adatok megtekint." + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Védett üzenetek" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Ãœzenetablakok" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Letiltás" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Másolás telefonra" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Ãœzenet átmásolva a SIM kártyáról" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Ãœzenet visszavonása" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Mellékletek" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Sikertelen üzenet küldése" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Nincs hely több karakternek" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "VisszaállÃtás..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Nincs melléklet" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "A vágólapra másolva" + diff --git a/main/po/id.po b/main/po/id.po new file mode 100644 index 0000000..35e576b --- /dev/null +++ b/main/po/id.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Tidak bisa membuka" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Mendapatkan kembali" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Tidak bisa memindahkan" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Maksimum jumlah halaman tercapai" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Mode terbatas. Tidak bisa menyisipkan konten terbatas" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Terkirim" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Habis waktu" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Membaca" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Mendapatkan kembali..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Masukkan kartu SIM utk mengirim pesan. Pesan akan tersimpan di Kotak keluar" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Masukkan nomor saluran" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 pesan dipilih" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d pesan dipilih" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Tinjauan" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Nama file sudah ada" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Tdk ada pesan" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Tambah ke kontak" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Buang" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Tidak bisa mengirim pesan" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Ambil foto" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Tdk ada alamat" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Daftar item terlampir" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Otomatis download" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Pesan siaran" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Pusat %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Kustomisasi waktu" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Laporan pengiriman" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Pengiriman gagal" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Dari" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Dftr item tersisip" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Pesan dikirim" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Pesan ditelusuri" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Bebas" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Peringatan" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Terkirim" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Pesan push" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Baca laporan" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Diterima" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Manual" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Tolak" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Pilihan penerimaan" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Laporan permintaan pengiriman" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Baca laporan permintaan" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Terbatas" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Rendah" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Mendesak" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Prioritas" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Kirim laporan baca" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Durasi halaman" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "Pesan SOS" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Pesan teks" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Ukuran total" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "Konten DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Daftar item" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 detik" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 detik" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 detik" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Jaringan asal" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Instal" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Jaringan luar negeri" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Lihat detail kontak" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Pesan multimedia terkirim" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Penelusuran pesan gagal" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Mengirim pesan multimedia gagal" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Teruskn" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Tak dibaca" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Pindah ke telepon" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Penerima digandakan" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Jumlah maksimum penerima (%d) tercapai" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Ke" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Rekam suara" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Rekam video" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Diubah ke MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Diubah ke SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d lampiran tersedia. Pilih hingga %d lampiran" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Tidak dapat melampirkan semua file. Kapasitas lampiran maksimum %d KB. Lanjutkan?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Ukuran huruf" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Mode kreasi" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Pesan multimedia" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Tanpa subjek" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Pusat layanan" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Pilih alamat" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Pindah ke SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Anda akan online (%s). Lanjutkan?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Krm ulang" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Penerima tidak berlaku" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Penerima tidak berlaku" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Tidak bisa memutar selama panggilan" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Tidak bisa menyimpan dalam mode Media penyimpan" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Buang pesan terkini?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Terpilih" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Hapus?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Tidak bisa melampirkan. Ukuran maksimum file adalah %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Terbatas" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Tdk dapat utk diteruskan.\nFile diteruskan terkunci" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Pesan terjadwal" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Kebijakan pengaman membatasi penulisan pesan teks" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Menambah. Harap tunggu..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Alamat pusat layanan" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Pesan spam" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Besar" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Kecil" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Tidak dapat mengirim pesan yang dijadwalkan. Atur waktu lain" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Tanggal dan waktu" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Pesan multimedia" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Tidak ada penerima ditambahkan. Masukkan penerima" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Pilihan pengiriman" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Menerima tipe alert" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Mengirim SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Penerima" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Mengulang" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Pesan" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Sekali" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 kali" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 kali" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Saya dalam situasi darurat. Tolong saya" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM tidak disisipkan" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Ambil Gambar" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Ambil video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Rekam audio" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Pesan CB" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Pesan kartu SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Durasi harus lebih lama dari %d detik" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Tidak bisa menambah konten" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Pilih penerima" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Lihat kontak" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Durasi (%s detik)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Gambar terlalu besar. Mengkompresi..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Pesan disimpan sebagai draft" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Lain" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Draft" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Durasi untuk slide" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Kirim email" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Item yang dimasukkan" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Item terlampir" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d lampiran" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Pesan\nterjadwal" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Durasi\n(%d detik)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Pakai info kontak lain" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Pesan ini terdapat lampiran file tak ditampilkan" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Pesan ini termasuk file terlampir yang tidak diperlihatkan" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Simpan semua" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Pesan draf" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Pesan akan dipulihkan" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Pesan terjadwal akan dibatalkan" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Salin teks pesan" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Lihat rincian pesan" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Pesan terkunci" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Kotak-kotak pesan" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blok" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Salin ke telepon" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Pesan disalin dari kartu SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Batalkan pesan" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Lampiran" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Mengirim pesan gagal" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Jumlah maksimum karakter tercapai" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Simpan ulang…" + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Tdk ada lampiran" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Disalin ke clipboard" + diff --git a/main/po/it_IT.po b/main/po/it_IT.po index 9f3fcc6..ca744e3 100755..100644 --- a/main/po/it_IT.po +++ b/main/po/it_IT.po @@ -7,15 +7,9 @@ msgstr "Recupera" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "Impossibile spostare" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "Non richiesto" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "Raggiunto numero massimo di pagine" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "Richiesto" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "Modalità limitata. Impossibile inserire contenuto limitato" @@ -31,54 +25,18 @@ msgstr "Letto" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "Recupero..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "Errore recupero" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "Inserire una scheda SIM per inviare messaggi. Il messaggio verrà salvato in In uscita" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d lingue" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "Numero" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "Duplicato" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "Inserisci nome canale" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "Inserire numero canale" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "Nessun elemento selezionato" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d canali" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "Esiste già lo stesso ID canale" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "Invio non eseguito. Riprovare?" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "Elenco ID canale pieno" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "1 messaggio selezionato" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "1 persona selezionata" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "%d messaggi selezionati" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "%d persone selezionate" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "Anteprima" @@ -88,156 +46,48 @@ msgstr "Nome file già in uso" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "Nessun messaggio" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "Crea messaggio" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "Aggiungi a contatto" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "Crea indirizzo" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "Elenco bloccati" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "Toccare per aggiungere il numero" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "Crea canale" - msgid "IDS_MSGF_OPT_DISCARD" -msgstr "Elimina" +msgstr "Annulla" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "Impossibile inviare messaggio" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "Rubrica" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "Scatta foto" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "Nessun indirizzo" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "Tono avviso" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "Consenti pubblicità " - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "Consenti anonimi" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "Elenco elementi allegati" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "Download automatico" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "Automatica" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "Eliminazione automatica" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "Colore sfondo" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "Blocca messaggi" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "Messaggi broadcast" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "Attivazione" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "Canali personali" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "Ricezione canali" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "Centro %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "Ora personalizzata" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "Stile predefinito" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "Rapporto consegna" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "Invio non riuscito" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "Ogni 10 minuti" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "Ogni 2 minuti" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "Ogni 5 minuti" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "Colore carattere" - msgid "IDS_MSGF_BODY_FROM" msgstr "Da" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "Generali" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "Alfabeto GSM" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "Tenere premuto il tasto '1' per connettersi al server della segreteria telefonica mentre non è in esecuzione un'applicazione o in corso una chiamata" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "Elenco elementi inseriti" -msgid "IDS_MSGF_BODY_LANG" -msgstr "Lingue" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "Massimo" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "Numero segreteria telefonica" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "Messaggio consegnato" @@ -253,24 +103,12 @@ msgstr "Avviso" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "Inviato" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "Nessuna restrizione per dimensioni e contenuto" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "Verrà ricevuta una notifica in caso di superamento del limite massimo per dimensioni e contenuto" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "Fax" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "Voce" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "Messaggi Push" @@ -289,9 +127,6 @@ msgstr "Rifiuta" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "Opzioni di ricezione" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "Percorso risposta" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "Chiedi conferma consegna" @@ -301,12 +136,6 @@ msgstr "Conferma lettura" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "Con restrizioni" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "Invio..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 giorni" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "Bassa" @@ -316,48 +145,15 @@ msgstr "Normale" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "Urgente" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "Opzioni di invio" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "Scadenza" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "Priorità " -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "Invia conferma consegna" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "Invia conferma lettura" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "Tipo di servizio" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "Indirizzo" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "Esattamente uguale a" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "Contiene" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "Criteri corrispondenza" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "Una volta" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "Durata pagina" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "Caratteri supportati" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "Testo" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "Messaggi SOS" @@ -367,21 +163,12 @@ msgstr "SMS" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "Dimensione totale" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Unicode" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "Contenuto DRM" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "Modifica canale" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "Elenco elementi" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "secondi" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 secondi" @@ -400,12 +187,6 @@ msgstr "Installa" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "Rete roaming" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "Scorrimento" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "Stile caratteri" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "Visualizza dettagli contatto" @@ -418,18 +199,6 @@ msgstr "Impossibile recuperare messaggio" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "Invio MMS non eseguito" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "È possibile inviare immagini fino a %d KB" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "Biglietto da visita" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "Nessun nome" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "Benvenuto" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "Inoltra" @@ -439,132 +208,48 @@ msgstr "Non letto" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "Sposta nel telefono" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "Aggiungi testo" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "Destinatario duplicato" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "Dimensioni massime creazione" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "Raggiunto numero massimo di destinatari (%d)" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "Aggiungi oggetto" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "Gruppi" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "Rubrica" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "Altri file" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "Suono" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "Aggiungi file multimediale" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "DISATTIVO" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "ATTIVO" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "A" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "Registra suono" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "Registra suono" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "Registra video" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "Modello di testo" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "Cambiato in MMS" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "Cambiato in SMS" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "Inserisci indirizzo" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "File non valido" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "Messaggio inviato" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "Superate dimensioni massime messaggio" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "%d allegati disponibili. Selezionare fino a %d allegati" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "Il server non risponde." - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "Impossibile allegare tutti i file. Capacità massima allegati %d KB. Continuare?" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "Impossibile inviare MMS. Errore non riconosciuto" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "Sincronizza agenda" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "Dimensioni carattere" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "Senza allegati" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "Intera e-mail" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "Modalità creazione" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "Messaggio consegnato" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "MMS" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "Nuovo messaggio vocale" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "Nessun oggetto" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "Sì a tutti" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "Centro servizi" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "Caricamento servizio" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "Suono" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "Impossibile inviare. Tipi file non supportati" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "Elenco conversazioni" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "Seleziona indirizzo" @@ -574,30 +259,9 @@ msgstr "Sposta in SIM" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "Connessione in corso(%s). Continuare?" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "Recupero MMS fallito" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "Nessun destinatario" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "Richiesto" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "Salvare in Bozze?" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "Superate dimensioni max. messaggio. Ridimensionamento..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "Sincronizzazione annullata" - msgid "IDS_MSGF_SK_RESEND" msgstr "Invia di nuovo" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "Aggiungi canale" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "Destinatario non valido" @@ -610,27 +274,15 @@ msgstr "Impossibile riprodurre durante una chiamata" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "Impossibile salvare in modalità Archiviazione di massa" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Impossibile aprire in modalità Archiviazione di massa" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Impossibile utilizzare in modalità Archiviazione di massa" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "Eliminare messaggio corrente?" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "Selezionato" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "Selezionato" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "Eliminare?" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "Ridimensionamento..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "Impossibile allegare. Dimensioni massime file %d KB" @@ -649,3 +301,204 @@ msgstr "I criteri di protezione limitano la composizione degli SMS" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "Aggiunta. Attendere..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Indirizzo centro servizi" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Messaggi spam" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Grande" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normale" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Piccolo" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Minuscolo" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Impossibile inviare messaggio programmato. Impostare un orario diverso" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Data e ora" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Nessun destinatario aggiunto. Immettere i destinatari" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Opzioni di invio" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Ricezione tipo di avviso" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normale" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Invio messaggio SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Destinatari" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Ripeti" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Messaggio" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Una volta" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 volte" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 volte" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Sono in una situazione di emergenza. Ho bisogno di aiuto." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM non inserita" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Scatta foto" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Registra video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Registra audio" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Messaggi CB" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Messaggi scheda SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "La durata deve essere superiore a %d secondi" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Impossibile aggiungere contenuto" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Seleziona destinatario" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Visualizza contatti" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Durata (%s sec)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Immagine troppo grande. Compressione..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Messaggio salvato come bozza" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Altri" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Bozza" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Durata per slide" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Invia e-mail" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Elementi inseriti" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Elementi allegati" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d allegati" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Messaggio\nprogrammato" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Durata\n(%d sec)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Usa altre info contatto" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Il messaggio contiene un file allegato non visualizzato" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Questo messaggio include file allegati non visualizzati" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Salva tutti" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Bozze messaggi" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Il messaggio verrà ripristinato" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Il messaggio programmato verrà annullato" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Copia testo messaggio" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Visual. dettagli msg" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Messaggi bloccati" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Cartelle messaggi" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blocca" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Copia nel telefono" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Messaggio copiato dalla scheda SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Annulla messaggio" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Allegati" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Invio messaggio non riuscito" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Raggiunto numero massimo di caratteri" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Ripristino..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Nessun allegato" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Elemento copiato negli appunti" + diff --git a/main/po/ja_JP.po b/main/po/ja_JP.po index 7458d55..1381216 100755..100644 --- a/main/po/ja_JP.po +++ b/main/po/ja_JP.po @@ -1,5 +1,5 @@ msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" -msgstr "é–‹ã‘​ã¾ã›ã‚“" +msgstr "開らã​ã“ã¨ãŒâ€‹ã§ã​ã¾ã›ã‚“。" msgid "IDS_MSGF_OPT_RETRIEVE" msgstr "å—ä¿¡" @@ -7,20 +7,14 @@ msgstr "å—ä¿¡" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "移動​ã§ã​ã¾ã›ã‚“。" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "è¦æ±‚ã—ã¾ã›ã‚“ã§ã—ãŸã€‚" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "最大​ページ数​ã«â€‹ãªã‚Šã¾ã—ãŸ" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "è¦æ±‚ã—ã¾ã—ãŸã€‚" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "制é™â€‹ãƒ¢ãƒ¼ãƒ‰â€‹ã§ã™ã€‚​制é™â€‹ã•ã‚ŒãŸâ€‹å†…容​を​挿入​ã§ãã¾ã›ã‚“" msgid "IDS_MSGF_BODY_DELIVERED" -msgstr "é…信完了" +msgstr "é…信​完了" msgid "IDS_MSGF_BODY_EXPIRED" msgstr "期é™åˆ‡ã‚Œ" @@ -31,92 +25,35 @@ msgstr "æ—¢èª" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "å—ä¿¡ä¸..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "å—信​ã§ãã¾ã›ã‚“​ã§ã—ãŸ" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "SIM​カード​を​挿入​ã—ã¦â€‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸â€‹ã‚’​é€ä¿¡â€‹ã—ã¾ã™ã€‚​メッセージ​ã¯â€‹é€ä¿¡BOXã«â€‹ä¿å˜â€‹ã•ã‚Œâ€‹ã¾ã™" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d言語​ã§ã™" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "センター​アドレス" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "é‡è¤‡â€‹ã—ã¦ã„ã¾ã™" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "ãƒãƒ£ãƒ³ãƒãƒ«åを​入力​" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "ãƒãƒ£ãƒ³ãƒãƒ«ç•ªå·ã‚’入力" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "何も​é¸æŠžâ€‹ã•ã‚Œã¦â€‹ã„ã¾ã›ã‚“" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d​ãƒãƒ£ãƒ³ãƒãƒ«" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "åŒã˜â€‹ãƒãƒ£ãƒ³ãƒãƒ«â€‹ID​ãŒå˜åœ¨ã—ã¾ã™" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "é€ä¿¡â€‹ã«â€‹å¤±æ•—​ã—ã¾ã—ãŸã€‚​やり直ã—​ã¾ã™ã‹ï¼Ÿ" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "ãƒãƒ£ãƒ³ãƒãƒ«â€‹ID​リスト​ã¯â€‹ã„ã£ã±ã„​ã§ã™" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "1件​ã®â€‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸â€‹ã‚’​é¸æŠžâ€‹ã—ã¾ã—ãŸ" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "1人​é¸æŠžâ€‹ã—ã¾ã—ãŸ" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "%d件ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’é¸æŠžã—ã¾ã—ãŸã€‚" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "%d人​é¸æŠžâ€‹ã—ã¾ã—ãŸ" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "プレビュー" msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" -msgstr "ファイルåãŒæ—¢ã«ã‚ã‚Šã¾ã™ã€‚" +msgstr "ファイルåãŒæ—¢ã«ç™»éŒ²â€‹ã•ã‚Œã¦â€‹ã„ã¾ã™ã€‚" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "メッセージãŒã‚ã‚Šã¾ã›ã‚“。" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "メッセージ作æˆ" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "電話帳ã«è¿½åŠ " -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "アドレス​を​作æˆâ€‹" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "ブãƒãƒƒã‚¯ãƒªã‚¹ãƒˆ" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "タップ​ã—ã¦â€‹ç•ªå·â€‹ã‚’â€‹è¿½åŠ â€‹ã—ã¾ã™" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "ãƒãƒ£ãƒ³ãƒãƒ«â€‹ä½œæˆ" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "ç ´æ£„" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" -msgstr "メッセージ​を​é€ä¿¡â€‹ã§ã​ã¾ã›ã‚“" - -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "電話帳" +msgstr "メッセージ​を​é€ä¿¡â€‹ã§ã​ã¾ã›ã‚“。" msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "カメラを起動" @@ -124,120 +61,33 @@ msgstr "カメラを起動" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "アドレスã¯ã‚ã‚Šã¾ã›ã‚“" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "アラート​音" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "広告を​許å¯" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "匿å​を​許å¯â€‹" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "添付​リスト" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "自動​å—ä¿¡" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "自動" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "メール自動消去" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "背景色" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "メッセージをブãƒãƒƒã‚¯" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "放é€â€‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "アクティベーション" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "マイãƒãƒ£ãƒ³ãƒãƒ«" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "å—信​ãƒãƒ£ãƒ³ãƒãƒ«" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "センター​%d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "時間​è¨å®š" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "標準​スタイル" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "é…信​確èª" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "é€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸã€‚" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "10分ã”ã¨" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "2分ã”ã¨" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "5分ã”ã¨" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "æ–‡å—カラー" - msgid "IDS_MSGF_BODY_FROM" msgstr "é€ä¿¡å…ƒ" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "基本è¨å®š" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "GSM alphabet" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "アプリケーション​ã®â€‹æœªä½¿ç”¨ä¸â€‹ã¾ãŸã¯â€‹é€šè©±ä¸â€‹ã«â€‹â€˜1’​ã‚ー​を​押ã—ãŸâ€‹ã¾ã¾ã«â€‹ã™ã‚‹ã¨ã€â€‹ç•™å®ˆç•ªâ€‹é›»è©±â€‹ã‚µãƒ¼ãƒãƒ¼â€‹ã«â€‹æŽ¥ç¶šâ€‹ã•ã‚Œâ€‹ã¾ã™" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "挿入​アイテム​リスト" -msgid "IDS_MSGF_BODY_LANG" -msgstr "言語" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "最大" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "留守番​電話​番å·" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "メッセージ​ãŒâ€‹é…信​ã•ã‚Œã¾ã—ãŸ" @@ -251,13 +101,7 @@ msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" msgstr "è¦å‘Š" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" -msgstr "é€ä¿¡å±¥æ´" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "サイズ​ãŠã‚ˆã³â€‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„​制約​ã¯â€‹ã‚ã‚Šã¾ã›ã‚“" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "サイズ​ã¨â€‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„​ãŒâ€‹æœ€å¤§â€‹è¨±å¯å€¤â€‹ã‚’​超ãˆãŸâ€‹å ´åˆã¯â€‹é€šçŸ¥â€‹ã•ã‚Œâ€‹ã¾ã™" +msgstr "é€ä¿¡å®Œäº†" msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" @@ -265,12 +109,6 @@ msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "FAX" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "音声" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "プッシュ​メッセージ" @@ -289,9 +127,6 @@ msgstr "æ‹’å¦" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "å—信​オプション" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "返信パス" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "é…信​レãƒãƒ¼ãƒˆâ€‹ã‚’​è¦æ±‚​" @@ -301,63 +136,24 @@ msgstr "æ—¢èªâ€‹ãƒ¬ãƒãƒ¼ãƒˆâ€‹ã‚’​è¦æ±‚​" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "制é™ã•ã‚Œã¾ã—ãŸã€‚" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "é€ä¿¡ä¸..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2æ—¥" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "低" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" -msgstr "標準" +msgstr "ä¸" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "高" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "é€ä¿¡ã‚ªãƒ—ション" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "有効期é™" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "優先度" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "é…信​レãƒãƒ¼ãƒˆâ€‹ã‚’​é€ä¿¡â€‹" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "æ—¢èªâ€‹ãƒ¬ãƒãƒ¼ãƒˆâ€‹ã‚’​é€ä¿¡â€‹" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "サービス​タイプ" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "アドレス" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "完全一致" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "内容" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "振り分ã‘ルール" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "1回ã®ã¿" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "ページ​間隔" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "æ–‡å—​コード" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "テã‚スト" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "SOSメッセージ" @@ -367,21 +163,12 @@ msgstr "SMS" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "åˆè¨ˆâ€‹ã®â€‹ã‚µã‚¤ã‚º" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Unicode" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "DRM​コンテンツ" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "ãƒãƒ£ãƒ³ãƒãƒ«ã‚’​編集​" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "アイテム​リスト" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "秒" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10秒" @@ -400,12 +187,6 @@ msgstr "インストール" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "外部ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "スライド" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "フォント​スタイル" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "連絡先​詳細​を​表示" @@ -418,18 +199,6 @@ msgstr "メッセージ​ã®â€‹å—信​ã«â€‹å¤±æ•—​ã—ã¾ã—ãŸ" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "マルãƒâ€‹ãƒ¡ãƒ‡ã‚£ã‚¢â€‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸â€‹ã®â€‹é€ä¿¡â€‹ã«â€‹å¤±æ•—​ã—ã¾ã—ãŸ" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "最大%dKB​ã¾ã§â€‹ç”»åƒâ€‹ã‚’​é€ä¿¡â€‹ã§ãã¾ã™" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "å刺" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "åå‰ãªã—" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "よã†ã“ã" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "転é€" @@ -439,132 +208,48 @@ msgstr "未èª" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "本体ã«ç§»å‹•" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "本文を入力" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "宛先​ãŒâ€‹é‡è¤‡â€‹ã—ã¦â€‹ã„ã¾ã™ã€‚" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "メール作æˆã‚µã‚¤ã‚º" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "宛先ãŒæœ€å¤§ä»¶æ•°ï¼ˆ%d)ã«é”ã—ã¾ã—ãŸã€‚" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "​件åâ€‹ã‚’â€‹è¿½åŠ â€‹" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "グループ" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "電話帳" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "ãã®ä»–​ã®ãƒ•ã‚¡ã‚¤ãƒ«" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "サウンド" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "マルãƒãƒ¡ãƒ‡ã‚£ã‚¢â€‹ã‚’â€‹è¿½åŠ â€‹" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "OFF" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "ON" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "宛先" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "ボイスレコーダー起動" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "ボイスレコーダー起動" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "ビデオカメラ起動" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "定型文" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "MMS​ã«â€‹å¤‰æ›´â€‹ã—ã¾ã—ãŸ" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "SMS​ã«â€‹å¤‰æ›´â€‹ã—ã¾ã—ãŸ" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "アドレス入力" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "ファイルãŒä¸æ£ã§ã™" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "メッセージ​ãŒâ€‹é€ä¿¡â€‹ã•ã‚Œâ€‹ã¾ã—ãŸ" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "メッセージ​サイズ​を​超ãˆâ€‹ã¾ã—ãŸ" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "ã‚ã¨<n>件 è¿½åŠ ã§ãã¾ã™ã€‚最大%d件ã¾ã§æ·»ä»˜å¯èƒ½ã§ã™" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "サーãƒãƒ¼â€‹ã‹ã‚‰â€‹å¿œç”​ãŒâ€‹ã‚り​ã¾ã›ã‚“" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "å…¨ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«ã‚’添付ã§ãã¾ã›ã‚“。 最大添付サイズã¯%dKBã§ã™ã€‚ 続行ã—ã¾ã™ã‹ï¼Ÿ" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "MMS​を​é€ä¿¡â€‹ã§ã​ã¾ã›ã‚“。​èªè˜â€‹ã•ã‚Œã¦â€‹ã„ãªã„​エラー​ã§ã™" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "カレンダー​åŒæœŸ" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "æ–‡å—サイズ" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "添付​ãªã—" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "Eメール全体" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "作æˆâ€‹ãƒ¢ãƒ¼ãƒ‰" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "メッセージ​ãŒâ€‹é…信​ã•ã‚Œã¾ã—ãŸ" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "マルãƒãƒ¡ãƒ‡ã‚£ã‚¢â€‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "æ–°ã—ã„​留守番電話" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "件åãªã—" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "å…¨ã¦â€‹ã«â€‹ã¯ã„" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "サービス​センター" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "サービス​èªè¾¼" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "サウンド" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "é€ä¿¡ã§ãã¾ã›ã‚“。未対応ã®ãƒ•ã‚¡ã‚¤ãƒ«ãŒæ·»ä»˜ã•ã‚Œã¦ã„ã¾ã™ã€‚" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "会話​リスト" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "アドレスã®é¸æŠž" @@ -574,30 +259,9 @@ msgstr "SIMã«ç§»å‹•" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "オンライン​ã—よã†ã¨â€‹ã—ã¦â€‹ã„ã¾ã™â€‹ï¼ˆ%s)。​続行ã—ã¾ã™ã‹ï¼Ÿ" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "MMS retrieving failed" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "å—信者ãŒâ€‹ã‚ã‚Šã¾ã›ã‚“" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "å¿…è¦" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "下書ãã«ä¿å˜ã—ã¾ã™ã‹ï¼Ÿ" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "メッセージã®æœ€å¤§ã‚µã‚¤ã‚ºã‚’超ãˆã¾ã—ãŸã€‚サイズ変更ä¸..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "åŒæœŸâ€‹ãŒâ€‹ã‚ャンセル​ã•ã‚Œâ€‹ã¾ã—ãŸ" - msgid "IDS_MSGF_SK_RESEND" msgstr "å†é€ä¿¡" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "ãƒãƒ£ãƒ³ãƒãƒ«ã‚’è¿½åŠ " - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "宛先​ãŒâ€‹ç„¡åŠ¹â€‹ã§ã™" @@ -605,32 +269,20 @@ msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" msgstr "無効ãªå®›å…ˆ" msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" -msgstr "通話ä¸â€‹ã«â€‹å†ç”Ÿâ€‹ã§ãã¾ã›ã‚“。" +msgstr "通話ä¸â€‹ã«â€‹å†ç”Ÿâ€‹ã§ã​ã¾ã›ã‚“。" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "マスストレージモードä¸â€‹ã«â€‹ä¿å˜â€‹ã™ã‚‹â€‹ã“ã¨ã¯â€‹ã§ãã¾ã›ã‚“。" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "マスストレージモードä¸â€‹ã«â€‹é–‹ã​ã“ã¨ã¯â€‹ã§ãã¾ã›ã‚“。" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "マスストレージモードä¸â€‹ã«â€‹ä½¿ç”¨â€‹ã™ã‚‹â€‹ã“ã¨ã¯â€‹ã§ãã¾ã›ã‚“。" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "ç¾åœ¨â€‹ã®â€‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸â€‹ã‚’â€‹ç ´æ£„â€‹ã—ã¾ã™ã‹â€‹ï¼Ÿ" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "1件" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "é¸æŠžã—ã¾ã—ãŸã€‚" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "削除ã—ã¾ã™ã‹ï¼Ÿ" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "リサイズä¸â€¦" - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "添付ã§ãã¾ã›ã‚“。ファイルã®æœ€å¤§ã‚µã‚¤ã‚ºã¯%dKBã§ã™ã€‚" @@ -649,3 +301,204 @@ msgstr "SMSã®ä½œæˆã¯ã€ã‚»ã‚ュリティãƒãƒªã‚·ãƒ¼ã«ã‚ˆã£ã¦åˆ¶é™ã•ã‚Œ msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "è¿½åŠ ä¸â€‹ã§ã™ã€‚​ã—ã°ã‚‰ã​ãŠå¾…ã¡â€‹ãã ã•ã„..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "サービス​センター​アドレス" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "迷惑​メッセージ" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "大" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "標準" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "å°" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "最å°" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "予約​メッ​セー​ジ​を​é€ä¿¡â€‹ã§ã​ã¾ã›â€‹ã‚“。​他​ã®â€‹æ™‚刻​を​è¨å®šâ€‹ã—ã¦â€‹ãã ​ã•â€‹ã„。" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "日付ã¨æ™‚刻" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "マルãƒãƒ¡ãƒ‡ã‚£ã‚¢â€‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "宛先ã¯è¿½åŠ ã•ã‚Œã¾ã›ã‚“ã§ã—ãŸã€‚宛先を入力ã—ã¦ãã ã•ã„。" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "é€ä¿¡ã‚ªãƒ—ション" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "å—信​通知ã®ç¨®é¡ž" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "標準" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "SOSã®â€‹é€ä¿¡ä¸" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "宛先" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "ç¹°ã‚Šè¿”ã—期間" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "メッセージ" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "1回ã®ã¿" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3回" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5回" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "緊急​ã§ã™ã€‚​助ã‘ã¦â€‹ãã ã•ã„" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM​ãŒâ€‹æŒ¿å…¥â€‹ã•ã‚Œã¦â€‹ã„ã¾ã›ã‚“" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "カメラを起動" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "動画撮影" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "録音" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CBメッセージ" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIMカード​メッセージ" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "表示時間ã¯%d秒以上ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "ã‚³ãƒ³ãƒ†ãƒ³ãƒ„â€‹ã‚’â€‹è¿½åŠ â€‹ã§ãã¾ã›ã‚“" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "宛先​を​é¸æŠžâ€‹ã—ã¦â€‹ãã ã•ã„" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "連絡先を表示" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "所è¦æ™‚é–“ (%s秒)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "ç”»åƒãŒå¤§ãã™ãŽã¾ã™ã€‚ 圧縮ä¸..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "メッセージã¯ä¸‹æ›¸ãã«ä¿å˜ã•ã‚Œã¾ã—ãŸã€‚" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "ãã®ä»–" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "下書ã" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "スライドã®å†ç”Ÿæ™‚é–“" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Eメールé€ä¿¡" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "挿入​アイテム" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "添付​アイテム" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d件​ã®â€‹æ·»ä»˜â€‹ãƒ•ã‚¡ã‚¤ãƒ«" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "é€ä¿¡â€‹äºˆå®š\nメッセージ" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "期間\n(%d秒)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "他​ã®â€‹é€£çµ¡â€‹å…ˆâ€‹æƒ…å ±â€‹ã‚’â€‹ä½¿ç”¨" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã¯éžè¡¨ç¤ºã®æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã«ã¯éžè¡¨ç¤ºã®æ·»ä»˜ãƒ•ã‚¡ã‚¤ãƒ«ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "å…¨ã¦ä¿å˜" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "下書ã​メッセージ" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "メッセージを復元ã—ã¾ã™ã€‚" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "é€ä¿¡äºˆå®šãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’ã‚ャンセルã—ã¾ã™ã€‚" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "本文を​コピー" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "メッセージ​詳細​ã®â€‹è¡¨ç¤º" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "ä¿è·ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "メッセージ​ボックス" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "ブãƒãƒƒã‚¯" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "本体ã«ã‚³ãƒ”ー" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "メッセージをSIMカードã‹ã‚‰ã‚³ãƒ”ーã—ã¾ã—ãŸã€‚" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "メッセージをã‚ャンセル" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "ファイル添付" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "失敗​ã—ãŸâ€‹ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸â€‹ã®â€‹é€ä¿¡â€‹ä¸" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "最大​文å—数​ã«â€‹é”ã—​ã¾ã—ãŸã€‚" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "復元ä¸..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "未​添付" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "クリップボード​ã«â€‹ã‚³ãƒ”ー​ã—ã¾ã—ãŸã€‚" + diff --git a/main/po/ko_KR.po b/main/po/ko_KR.po index 1ef07d6..8636dc2 100755..100644 --- a/main/po/ko_KR.po +++ b/main/po/ko_KR.po @@ -7,15 +7,9 @@ msgstr "본문 받기" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "ì´ë™ì‹œí‚¬ 수 없습니다" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "ìš”ì²ë˜ì§€ 않았습니다" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "최대 페ì´ì§€ 수를 초과하였습니다" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "ìš”ì²ë˜ì—ˆìŠµë‹ˆë‹¤" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "ì œí•œ 모드입니다. ì œí•œëœ ì»¨í…ì¸ ëŠ” ì‚½ìž…í• ìˆ˜ 없습니다" @@ -23,62 +17,26 @@ msgid "IDS_MSGF_BODY_DELIVERED" msgstr "ì „ì†¡ë˜ì—ˆìŠµë‹ˆë‹¤" msgid "IDS_MSGF_BODY_EXPIRED" -msgstr "ê¸°í•œì´ ë§Œë£Œë˜ì—ˆìŠµë‹ˆë‹¤" +msgstr "ë§Œë£Œëœ ì»¨í…ì¸ " msgid "IDS_MSGF_BODY_READ" -msgstr "ì½ê¸°" +msgstr "ì½ìŒ" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "ê°€ì ¸ì˜¤ëŠ” 중..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "불러오지 못하였습니다" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" -msgstr "메시지를 ì „ì†¡í•˜ê¸° 위해서는 사용 가능한 USIM 카드를 넣으세요. ì „ì†¡ë˜ì§€ 못한 메시지는 ë°œì‹ ëŒ€ê¸°í•¨ì— ì €ìž¥ë©ë‹ˆë‹¤" - -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%dê°œ 언어" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "메시지 서버 주소" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "ê°™ì€ ë²ˆí˜¸ê°€ 있습니다" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "ì±„ë„ ì´ë¦„ì„ ìž…ë ¥í•˜ì„¸ìš”" +msgstr "메시지를 ì „ì†¡í•˜ê¸° 위해서는 사용 가능한 SIM 카드를 넣으세요. ì „ì†¡ë˜ì§€ 못한 메시지는 ë°œì‹ ëŒ€ê¸°í•¨ì— ì €ìž¥ë©ë‹ˆë‹¤" msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "ì±„ë„ ë²ˆí˜¸ë¥¼ ìž…ë ¥í•˜ì„¸ìš”" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "ì„ íƒëœ ê²ƒì´ ì—†ìŠµë‹ˆë‹¤" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d 채ë„" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "ê°™ì€ ì±„ë„ IDê°€ 있습니다" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "ì „ì†¡í•˜ì§€ 못하였습니다. 다시 ì‹œë„í• ê¹Œìš”?" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "ì±„ë„ ID 목ë¡ì´ ê°€ë“ ì°¼ìŠµë‹ˆë‹¤" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "1ê°œì˜ ë©”ì‹œì§€ê°€ ì„ íƒë˜ì—ˆìŠµë‹ˆë‹¤" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "1ëª…ì´ ì„ íƒë˜ì—ˆìŠµë‹ˆë‹¤" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "%dê°œì˜ ë©”ì‹œì§€ê°€ ì„ íƒë˜ì—ˆìŠµë‹ˆë‹¤" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "%dëª…ì´ ì„ íƒë˜ì—ˆìŠµë‹ˆë‹¤" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "미리보기" @@ -88,156 +46,48 @@ msgstr "사용 ì¤‘ì¸ ì´ë¦„입니다" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "메시지가 없습니다" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "메시지 작성" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "ì—°ë½ì²˜ì— 추가" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "주소 추가" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "차단 목ë¡" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "ì „í™”ë²ˆí˜¸ë¥¼ ì¶”ê°€í•˜ë ¤ë©´ 누르세요" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "ì±„ë„ ì¶”ê°€" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "취소" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "메시지를 ì „ì†¡í• ìˆ˜ 없습니다" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "ì—°ë½ì²˜" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "사진 ì´¬ì˜" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "ì €ìž¥ëœ ì£¼ì†Œê°€ 없습니다" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "알림ìŒ" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "ê´‘ê³ ìˆ˜ì‹ " - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "ìµëª… 메시지 ìˆ˜ì‹ " - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "ì²¨ë¶€íŒŒì¼ ëª©ë¡" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "ìžë™ 다운로드" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "ìžë™" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "ìžë™ ì‚ì œ" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "배경색" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "스팸 메시지 차단" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "방송 메시지" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "실행" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "ë‚´ 채ë„" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "ìˆ˜ì‹ ì±„ë„" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "센터%d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "ì‚¬ìš©ìž ì„¤ì • 시간" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "메시지 ì†ì„±" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "ìˆ˜ì‹ í™•ì¸" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "ì „ì†¡í•˜ì§€ 못하였습니다" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "10분마다" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "2분마다" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "5분마다" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "색깔" - msgid "IDS_MSGF_BODY_FROM" msgstr "ë°œì‹ " -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "ì¼ë°˜ ì„¤ì •" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "GSM 알파벳" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "ìŒì„±ì‚¬ì„œí•¨ì— ì—°ê²°í•˜ë ¤ë©´ ì• í”Œë¦¬ì¼€ì´ì…˜ì„ 사용하지 ì•Šì„ ë•Œë‚˜ 통화 ì¤‘ì´ ì•„ë‹ ë•Œ 1번 ë²„íŠ¼ì„ ê¸¸ê²Œ 누르세요" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "ì²¨ë¶€íŒŒì¼ ëª©ë¡" -msgid "IDS_MSGF_BODY_LANG" -msgstr "언어" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "최대" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "ìŒì„±ì‚¬ì„œí•¨ 번호" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "메시지가 ì „ë‹¬ë˜ì—ˆìŠµë‹ˆë‹¤" @@ -253,29 +103,17 @@ msgstr "ê²½ê³ " msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "ì „ì†¡ë˜ì—ˆìŠµë‹ˆë‹¤" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "메시지와 첨부파ì¼ì˜ ìš©ëŸ‰ì´ ì œí•œë˜ì–´ 있지 않습니다" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "메시지와 첨부파ì¼ì˜ ìš©ëŸ‰ì´ í—ˆìš© 범위를 ì´ˆê³¼í• ê²½ìš° 알립니다" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "팩스" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "ìŒì„± 메시지" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "푸시 메시지" msgid "IDS_MSGF_BODY_READ_REPORT" -msgstr "ì½ìŒ í™•ì¸ ë©”ì‹œì§€" +msgstr "ì½ìŒ 확ì¸" msgid "IDS_MSGF_BODY_RECEIVED" msgstr "ìˆ˜ì‹ í•˜ì˜€ìŠµë‹ˆë‹¤" @@ -289,9 +127,6 @@ msgstr "ê±°ì ˆ" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "ìˆ˜ì‹ ì˜µì…˜" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "íšŒì‹ ê²½ë¡œ" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "ìˆ˜ì‹ í™•ì¸" @@ -301,12 +136,6 @@ msgstr "ì½ìŒ 확ì¸" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "ì œí•œ" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "ì „ì†¡ 중..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2ì¼" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "ë‚®ìŒ" @@ -316,48 +145,15 @@ msgstr "보통" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "긴급" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "ì „ì†¡ 옵션" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "만료ì¼" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "중요ë„" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "ìˆ˜ì‹ í™•ì¸ ë©”ì‹œì§€ ì „ì†¡" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "ì½ìŒ í™•ì¸ ì„¤ì •" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "서비스 형ì‹" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "주소" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "ìž…ë ¥ ë‚´ìš©ê³¼ ì¼ì¹˜" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "í¬í•¨" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "ì ìš© 기준" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "í•œ 번만" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "페ì´ì§€ 표시 시간" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "지ì›ë¬¸ìž 형ì‹" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "문ìž" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "SOS메시지" @@ -367,21 +163,12 @@ msgstr "ë¬¸ìž ë©”ì‹œì§€" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "ì´ í¬ê¸°" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "ìœ ë‹ˆì½”ë“œ" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "DRM 컨í…ì¸ " -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "ì±„ë„ íŽ¸ì§‘" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "í•ëª© 목ë¡" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "ì´ˆ" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10ì´ˆ" @@ -400,12 +187,6 @@ msgstr "설치" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "ë¡œë° ë„¤íŠ¸ì›Œí¬" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "슬ë¼ì´ë“œ" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "ê¸€ìž íš¨ê³¼" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "ì—°ë½ì²˜ ìƒì„¸ì •ë³´ 보기" @@ -418,18 +199,6 @@ msgstr "메시지를 ê°€ì ¸ì˜¤ì§€ 못하였습니다" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "MMS를 ì „ì†¡í•˜ì§€ 못하였습니다" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "%dKB까지 ì´ë¯¸ì§€ë¥¼ ì „ì†¡í• ìˆ˜ 있습니다" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "ë‚´ ì—°ë½ì²˜" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "ì´ë¦„ì´ ì—†ìŠµë‹ˆë‹¤" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "환ì˜í•©ë‹ˆë‹¤" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "ì „ë‹¬" @@ -439,132 +208,48 @@ msgstr "ì½ì§€ ì•ŠìŒ" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "휴대í°ìœ¼ë¡œ ì´ë™" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "í…스트 추가" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "ìˆ˜ì‹ ì¸ì´ 중복 ìž…ë ¥ë˜ì—ˆìŠµë‹ˆë‹¤" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "최대 작성 í¬ê¸°" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "ì¶”ê°€í• ìˆ˜ 있는 ìˆ˜ì‹ ì¸(%d명)ì„ ì´ˆê³¼í•˜ì˜€ìŠµë‹ˆë‹¤" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "ì œëª©ì„ ìž…ë ¥í•˜ë ¤ë©´ 누르세요" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "그룹" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "ì—°ë½ì²˜" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "기타" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "사운드" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "íŒŒì¼ ì¶”ê°€" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "ë„기" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "켜기" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "ìˆ˜ì‹ ì¸" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "ìŒì„±ë…¹ìŒ" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "ìŒì„±ë…¹ìŒ" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "ë™ì˜ìƒ ì´¬ì˜" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "ìƒìš©êµ¬" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "MMSë¡œ ì „í™˜ë˜ì—ˆìŠµë‹ˆë‹¤" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "ë¬¸ìž ë©”ì‹œì§€ë¡œ 변경ë˜ì—ˆìŠµë‹ˆë‹¤" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "주소를 ìž…ë ¥í•˜ì„¸ìš”" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "ì‚¬ìš©í• ìˆ˜ 없는 파ì¼ìž…니다" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "메시지가 ì „ì†¡ë˜ì—ˆìŠµë‹ˆë‹¤" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "ì „ì†¡ 가능한 메시지 í¬ê¸°ê°€ 초과ë˜ì—ˆìŠµë‹ˆë‹¤" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "ì²¨ë¶€íŒŒì¼ %d개가 있습니다. %d개까지 ì„ íƒí• 수 있습니다" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "서버가 ì‘답하지 않습니다" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "ëª¨ë“ íŒŒì¼ì„ ì²¨ë¶€í• ìˆ˜ 없습니다. ì²¨ë¶€í• ìˆ˜ 있는 최대 íŒŒì¼ ìš©ëŸ‰ì€ %dKB입니다. 계ì†í• 까요?" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "ì•Œ 수 없는 오류가 ë°œìƒí•˜ì˜€ìŠµë‹ˆë‹¤. MMS를 ì „ì†¡í• ìˆ˜ 없습니다" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "ì¼ì • ë™ê¸°í™”" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "ê¸€ìž í¬ê¸°" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "ì²¨ë¶€íŒŒì¼ ì œì™¸" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "ì „ì²´ ì´ë©”ì¼" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" -msgstr "작성 모드" - -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "메시지가 ì „ë‹¬ë˜ì—ˆìŠµë‹ˆë‹¤" +msgstr "첨부 ì œí•œ ì„¤ì •" msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "MMS" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "새 ìŒì„± 메시지" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "ì œëª©ì´ ì—†ìŠµë‹ˆë‹¤" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "모ë‘ì—게 알림" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "서비스 센터" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "서비스 불러오기" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "소리" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "ì „ì†¡í• ìˆ˜ 없습니다. 지ì›ë˜ì§€ 않는 íŒŒì¼ í˜•ì‹ì´ 첨부ë˜ì—ˆìŠµë‹ˆë‹¤" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "대화 목ë¡" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "주소를 ì„ íƒí•˜ì„¸ìš”" @@ -574,30 +259,9 @@ msgstr "SIM으로 ì´ë™" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "%sì— ì ‘ì†í•©ë‹ˆë‹¤. 계ì†í• 까요?" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "MMS retrieving failed" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "ìˆ˜ì‹ ì¸ì´ 없습니다" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "ìš”ì²ë˜ì—ˆìŠµë‹ˆë‹¤" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "ìž„ì‹œë³´ê´€í•¨ì— ì €ìž¥í• ê¹Œìš”?" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "ì „ì†¡ 가능한 메시지 í¬ê¸°ë¥¼ 초과하였습니다. í¬ê¸° ì¡°ì ˆ 중..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "ë™ê¸°í™”ê°€ 취소ë˜ì—ˆìŠµë‹ˆë‹¤" - msgid "IDS_MSGF_SK_RESEND" msgstr "ìž¬ì „ì†¡" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "ì±„ë„ ì¶”ê°€" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "ìˆ˜ì‹ ì¸ì´ 바르지 않습니다" @@ -610,27 +274,15 @@ msgstr "통화 중ì—는 재ìƒí• 수 없습니다" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "대용량 ì €ìž¥ì†Œ 모드를 실행 ì¤‘ì¼ ë•ŒëŠ” ì €ìž¥í• ìˆ˜ 없습니다" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "대용량 ì €ìž¥ì†Œ 모드를 실행 ì¤‘ì¼ ë•ŒëŠ” ì—´ 수 없습니다" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "대용량 ì €ìž¥ì†Œ 모드를 실행 ì¤‘ì¼ ë•ŒëŠ” ì‚¬ìš©í• ìˆ˜ 없습니다" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "현재 메시지를 ì‚ì œí• ê¹Œìš”?" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "ë‹¨ì¼ ì„ íƒ" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "ì„ íƒë˜ì—ˆìŠµë‹ˆë‹¤" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "ì‚ì œí• ê¹Œìš”?" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "í¬ê¸° ì¡°ì ˆ 중..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "ì²¨ë¶€í• ìˆ˜ 없습니다. ì²¨ë¶€í• ìˆ˜ 있는 íŒŒì¼ í¬ê¸°ëŠ” %dKB까지 입니다" @@ -649,3 +301,204 @@ msgstr "보안 ì •ì±…ì— ë”°ë¼ ë¬¸ìž ë©”ì‹œì§€ ìž‘ì„±ì´ ì œí•œë©ë‹ˆë‹¤" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "추가 중... ìž ì‹œë§Œ 기다리세요" +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "서비스 센터 주소" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "스팸 메시지" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "í¬ê²Œ" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "보통" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "작게" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "아주 작게" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "예약 메시지를 ì „ì†¡í• ìˆ˜ 없습니다. 다른 ì‹œê°„ì„ ì„¤ì •í•˜ì„¸ìš”" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "ë‚ ì§œ ë° ì‹œê°„" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "ì¶”ê°€ëœ ìˆ˜ì‹ ì¸ì´ 없습니다. ìˆ˜ì‹ ì¸ì„ ìž…ë ¥í•˜ì„¸ìš”" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "ì „ì†¡ 옵션" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "ìˆ˜ì‹ ì•Œë¦¼ 방법" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "보통" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "SOS메시지 보내기" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "ìˆ˜ì‹ ì¸" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "반복" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "메시지" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "í•œ 번만" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3회" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5회" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "위급 ìƒí™©ìž…니다. ë„와주세요" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIMì´ ì‚½ìž…ë˜ì§€ 않았습니다" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "사진 ì´¬ì˜" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "ë™ì˜ìƒ ì´¬ì˜" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "오디오 ë…¹ìŒ" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "방송 메시지" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM ì¹´ë“œ 메시지" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "표시 시간 ê°’ì€ %d초보다 커야 합니다" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "ì²¨ë¶€í• ìˆ˜ 없습니다" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "ìˆ˜ì‹ ì¸ ì„ íƒ" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "ì—°ë½ì²˜ 보기" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "표시 시간(%sì´ˆ)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "ì‚¬ì§„ì´ ë„ˆë¬´ í½ë‹ˆë‹¤. 압축 중..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "메시지가 ìž„ì‹œ ë³´ê´€ ë˜ì—ˆìŠµë‹ˆë‹¤" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "기타" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "ìž„ì‹œ ë³´ê´€" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "슬ë¼ì´ë“œ ìž¬ìƒ ì‹œê°„" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "ì´ë©”ì¼ ë³´ë‚´ê¸°" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "ì¶”ê°€ëœ í•ëª©" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "첨부파ì¼" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%dê°œì˜ ì²¨ë¶€íŒŒì¼" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "예약\n메시지" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "시간\n(%dì´ˆ)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "다른 ì—°ë½ì²˜ ì •ë³´ 사용" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "ë©”ì‹œì§€ì— ìˆ¨ê²¨ì§„ 첨부파ì¼ì´ í¬í•¨ë˜ì–´ 있습니다" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "ë©”ì‹œì§€ì— ìˆ¨ê²¨ì§„ 첨부파ì¼ì´ í¬í•¨ë˜ì–´ 있습니다" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "ëª¨ë‘ ì €ìž¥" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "ìž„ì‹œ 메시지" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "메시지가 ë³µì›ë©ë‹ˆë‹¤" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "예약 메시지가 취소ë©ë‹ˆë‹¤" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "메시지 본문 복사" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "메시지 ë‚´ìš© 보기" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "보호 메시지" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "메시지 보관함" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "차단" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "휴대í°ìœ¼ë¡œ 복사" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "SIM ì¹´ë“œì—ì„œ 메시지가 복사ë˜ì—ˆìŠµë‹ˆë‹¤" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "예약 메시지 취소" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "첨부파ì¼" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "메시지를 ì „ì†¡í•˜ì§€ 못하였습니다" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "ìž…ë ¥ 가능한 최대 글ìžìˆ˜ë¥¼ 초과하였습니다" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "복구 중..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "첨부파ì¼ì´ 없습니다" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "í´ë¦½ë³´ë“œì— 복사ë˜ì—ˆìŠµë‹ˆë‹¤" + diff --git a/main/po/lt.po b/main/po/lt.po new file mode 100644 index 0000000..ac9bc97 --- /dev/null +++ b/main/po/lt.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Nepavyko atidaryti" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Atnaujinti" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Negalima perkelti" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Pasiektas didžiausias puslapių skaiÄius" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Draudžiamas režimas. Neįmanoma įterpti draudžiamo turinio" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Pristatyta" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Galiojimas pasibaigÄ™s" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Skaityti" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "AtsiunÄiama..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Ä®dÄ—kite SIM kortelÄ™, kad galÄ—tumÄ—te siųsti praneÅ¡imus. PraneÅ¡imas bus iÅ¡saugotas IÅ¡siųstuose" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Ä®veskite kanalo numerį" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "Pasirinkta 1 žinutÄ—" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "Pasirinkta žinuÄių: %d" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "PeržiÅ«ra" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Failas tokiu pavadinimu jau yra" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "ŽinuÄių nÄ—ra" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Ä®traukti adresatÄ…" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Panaikinti" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Negalima iÅ¡siųsti žinutÄ—s" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Fotografuoti" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "NÄ—ra adreso" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "PridÄ—tas elementų sÄ…raÅ¡as" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Automatinis atsisiuntimas" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Transliavimo žinutÄ—s" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Centras %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Pasirinktu laiku" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Ataskaita apie pristatymÄ…" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "IÅ¡siųsti nepavyko" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Nuo" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "PridÄ—tų elementų sÄ…raÅ¡as" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "ŽinutÄ— pristatyta" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "ŽinutÄ— atnaujinta" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Laisva" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "PerspÄ—jimas" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "IÅ¡siųsta" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Naujienų žinutÄ—s" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Perskaitymo patvirtinimas" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Gauta" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Rankinis" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Atmesti" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Gavimo parinktys" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "PraÅ¡yti pristatymo ataskaitos" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "PraÅ¡yti perskaitymo patvirtinimo" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Apribota" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Nesvarbus" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Ä®prastas" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Skubu" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "PirmenybÄ—" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Siųsti ataskaitÄ… apie perskaitymÄ…" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Puslapio rodymo trukmÄ—" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "SOS žinutÄ—s" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Teksto žinutÄ—s" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Bendras dydis" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM turinys" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Elementų sÄ…raÅ¡as" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sekundžių" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sekundÄ—s" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sekundÄ—s" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Vietos tinklas" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Ä®diegti" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Tarptinklinis ryÅ¡ys" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "PeržiÅ«rÄ—ti adresato informacijÄ…" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "DaugialypÄ— žinutÄ— iÅ¡siųsta" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "ŽinutÄ—s gauti nepavyko" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "MMS žinutÄ—s iÅ¡siųsti nepavyko" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Persiųs." + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Neskaityta" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Perkelti į telefonÄ…" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Du tokie pat gavÄ—jai" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Pasiektas didžiausias gavÄ—jų (%d) skaiÄius" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Kam" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Ä®raÅ¡yti garsÄ…" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Ä®raÅ¡yti vaizdo įraÅ¡Ä…" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Pakeista į MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Keisti į SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "Yra %d priedai (-ų). Pasirinkti iki %d priedų" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Neįmanoma pridÄ—ti visų failų. Maksimalus priedo dydis: %d KB. TÄ™sti?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Å rifto dydis" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "KÅ«rimo režimas" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "DaugialypÄ— žinutÄ—" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "NÄ—ra temos" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Paslaugų centras" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Pasirinkti adresÄ…" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Perkelti į SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Prisijungsite prie tinklo(%s). TÄ™sti?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Persiųsti" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Klaidingas gavÄ—jas" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Neteisingi gavÄ—jai" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Negalima paleisti skambuÄio metu" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Neįmanoma iÅ¡saugoti, kol veikia duomenų saugyklos režimas" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Atmesti dabartinÄ™ žinutÄ™?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Pasirinkta" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Ar trinti?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Neįmanoma pridÄ—ti. Maksimalus failų dydis yra %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Apribota" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Persiųsti nepavyko.\nFailo persiuntimo galimybÄ— užrakinta" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Suplanuota žinutÄ—" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Saugos strategija riboja teksto žinuÄių kÅ«rimÄ…" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Pridedama. Palaukite..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Paslaugų centro adresas" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Brukalų žinutÄ—s" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Didelis" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Ä®prastas" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Mažas" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Neįmanoma iÅ¡siųsti suplanuotos žinutÄ—s. Nustatyti kitÄ… laikÄ…" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Data ir laikas" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "DaugialypÄ—s žinutÄ—s" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "NÄ—ra pridÄ—tų gavÄ—jų. Ä®veskite gavÄ—jus" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Siuntimo parinktys" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "PriÄ—mimo signalo tipas" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Ä®prastas" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "SOS siunÄiama" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "GavÄ—jai" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Kartoti" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "ŽinutÄ—" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "VienÄ… kartÄ…" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 kartus" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 kartus" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Man atsitiko bÄ—da. PadÄ—kite man." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM neįdÄ—ta" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Fotografuoti" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Filmuoti vaizdo įraÅ¡Ä…" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Ä®raÅ¡yti garso įraÅ¡Ä…" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Tinklo žinutÄ—s" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM kortelÄ—je esanÄios žinutÄ—s" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "TrukmÄ— turi bÅ«ti ilgesnÄ— nei %d sek." + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Ä®traukti turinio nepavyko" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Pasirinkti gavÄ—jÄ…" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Rodyti adresatÄ…" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "TrukmÄ— (%s sek.)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Per didelÄ— nuotrauka. Glaudinama..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "ŽinutÄ— iÅ¡saugota kaip juodraÅ¡tis" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Kiti" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "JuodraÅ¡." + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "SkaidrÄ—s trukmÄ—" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Siųsti el. laiÅ¡kÄ…" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Ä®terpti elementai" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "PridÄ—ti elementai" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "Priedai: %d" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Suplanuota\nžinutÄ—" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "TrukmÄ—\n(%d sek.)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Naud. kitÄ… kontak.inf." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Å ioje žinutÄ—je yra pridÄ—tas, taÄiau nerodomas failas." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Å ioje žinutÄ—je yra keli pridÄ—ti, taÄiau nerodomi failai." + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "IÅ¡saugoti viskÄ…" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "JuodraÅ¡tinÄ—s žinutÄ—s" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "ŽinutÄ— bus atkurta" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Suplanuota žinutÄ— bus atÅ¡aukta" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Kopij. žinut. tekstÄ…" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Rodyti žin. inf." + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Užrakintos žinutÄ—s" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "ŽinuÄių dėžutÄ—s" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blokuoti" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Kopijuoti į telefonÄ…" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "IÅ¡ SIM kortelÄ—s nukopijuota žinutÄ—" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "AtÅ¡aukti žinutÄ™" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Priedai" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "PraneÅ¡imas IÅ¡siųsti nepavyko" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Pasiektas didžiausias simbolių skaiÄius" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Atkuriama..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Priedų nÄ—ra" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Nukopijuota į iÅ¡karpinÄ™" + diff --git a/main/po/lv.po b/main/po/lv.po new file mode 100644 index 0000000..4dc9750 --- /dev/null +++ b/main/po/lv.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Nevar atvÄ“rt" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "IzgÅ«t" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Nevar pÄrvietot" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Ir sasniegts maksimÄlais lapu skaits" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Ierobežots režīms. Nevar ievietot ierobežotu saturu" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "PiegÄdÄta" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Beidzies derÄ«gums" + +msgid "IDS_MSGF_BODY_READ" +msgstr "LasÄ«ta" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "IzgÅ«st..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Lai sÅ«tÄ«tu ziņas, ievietojiet SIM karti. Ziņu saglabÄs mapÄ“ IzejoÅ¡Äs" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Ievadiet kanÄla numuru" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "IzvÄ“lÄ“ta 1 ziņa" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "IzvÄ“lÄ“tas %d ziņas" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "PriekÅ¡skatÄ«jums" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Faila nosaukums jau pastÄv" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Nav ziņu" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Pievienot kontaktam" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Atmest" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Nevar nosÅ«tÄ«t ziņu" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "FotografÄ“t" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Nav adreses" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Pievienoto objektu sarakts" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "AutomÄtiska lejupielÄde" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Apraides ziņas" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Centrs %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "PielÄgots laiks" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "PiegÄdes atskaite" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "NeizdevÄs nosÅ«tÄ«t" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "No" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Ievietoto objektu saraksts" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Ziņa piegÄdÄta" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Ziņa ielÄdÄ“ta" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "BrÄ«vs" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "BrÄ«dinÄjums" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "NosÅ«tÄ«ts" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Infoziņas" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "LasÄ«Å¡anas atskaite" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Saņemts" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "ManuÄli" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "NoraidÄ«t" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "SaņemÅ¡anas iespÄ“jas" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "PieprasÄ«t piegÄdes atskaiti" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "PieprasÄ«t lasÄ«Å¡anas atsk." + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Aizliegts" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Zema" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Parasta" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Steidzami" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "PrioritÄte" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "SÅ«tÄ«t lasÄ«Å¡anas atskaiti" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Lapas ilgums" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "SOS ziņas" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Īsziņas" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "KopÄ“jais lielums" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM saturs" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Objektu saraksts" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sekundes" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sekundes" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sekundes" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "MÄjas tÄ«kls" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "InstalÄ“t" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "ViesabonÄ“Å¡anas tÄ«kls" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "SkatÄ«t kontakta datus" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Multiziņa nosÅ«tÄ«ta" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Ziņas izguve neizdevÄs" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Multivides ziņas sÅ«tÄ«Å¡ana neizdevÄs" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "PÄrsÅ«t." + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Nelas." + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "PÄrvietot uz tÄlruni" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "AdresÄta dublikÄts" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Sasniegts maksimÄlais adresÄtu skaits (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Kam" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "IerakstÄ«t skaņu" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "IerakstÄ«t video" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "MainÄ«ts uz multiziņu" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "MainÄ«ts uz Ä«sziņu" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "Pieejami %d pielikumi. IzvÄ“lieties lÄ«dz pat %d pielikumiem" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Nevar pievienot visus failus. MaksimÄlais pievienojamo failu lielums ir %d KB. Vai turpinÄt?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Fonta lielums" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Izveides režīms" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Multiziņa" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Nav tÄ“mas" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Pakalpojumu centrs" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Atlasiet adresi" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "PÄrvietot uz SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "JÅ«s grasÄties pÄriet uz tieÅ¡saistes(%s) režīmu. Vai turpinÄt?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "SÅ«tÄ«t vÄ“lreiz" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "NederÄ«gs adresÄts" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "NederÄ«gi adresÄti" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Sarunas laikÄ nevar veikt atskaņoÅ¡anu" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Nevar saglabÄt, atrodoties lielapjoma atmiņas režīmÄ" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Vai izmest paÅ¡reizÄ“jo ziņu?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "IzvÄ“lÄ“ts" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Vai dzÄ“st?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Nevar pievienot. MaksimÄlais failu lielums ir %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Aizliegts" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Nevar pÄrsÅ«tÄ«t.\nFails ir bloÄ·Ä“ts pret pÄrsÅ«tÄ«Å¡anu" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "IeplÄnotÄ ziņa" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "DroÅ¡Ä«bas politika ierobežo Ä«sziņu izveidi" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Notiek pievienoÅ¡ana. LÅ«dzu, uzgaidiet..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Pakalpojuma centra adrese" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "SurogÄtpasta ziņas" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Liels" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Parasta" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Mazs" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "SÄ«ks" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Nevar nosÅ«tÄ«t ieplÄnoto ziņu. Iestatiet citu laiku" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Datums un laiks" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Multiziņas" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Nav pievienots neviens adresÄts. Ievadiet adresÄtus" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "SÅ«tÄ«Å¡anas iespÄ“jas" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "SaņemÅ¡anas signÄla veids" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Parasta" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "SOS sÅ«tÄ«Å¡ana" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "AdresÄti" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "AtkÄrtot" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Ziņa" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Vienu reizi" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "trÄ«sreiz" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "piecreiz" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Man radusies ÄrkÄrtas situÄcija. LÅ«dzu, palÄ«dzi." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM karte nav ievietota" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "FotografÄ“t" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Uzņemt videoklipu" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "IerakstÄ«t skaņu" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Å Å«nu apraides ziņas" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM kartes ziņas" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Ilgumam jÄbÅ«t garÄkam par %d sekundÄ“m" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Nevar pievienot saturu" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "AdresÄta izvÄ“le" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "SkatÄ«t kontaktu" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Ilgums (%s s.)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "AttÄ“ls par lielu. Notiek saspieÅ¡ana..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Ziņa saglabÄta kÄ melnraksts" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Cits" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Melnr." + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Slaida ilgums" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "SÅ«tÄ«t e-pasta ziņu" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Ievietotie objekti" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Pievienotie objekti" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d pielikumi" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "IeplÄnota\nziņa" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Ilgums\n(%d sek.)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Izm. citu kontaktinf." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Å ai ziņai ir pievienoti daži faili, kas netiek rÄdÄ«ti." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Å ajÄ ziÅ†Ä ir pievienoti faili, kurus nerÄda" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "SaglabÄt visu" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Ziņu melnraksti" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Ziņa tiks atjaunota" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "IeplÄnotÄ ziņa tiks atcelta" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "KopÄ“t ziņas tekstu" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "SkatÄ«t ziņas datus" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "BloÄ·Ä“tÄs ziņas" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Ziņu pastkastes" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "BloÄ·Ä“t" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "KopÄ“t tÄlrunÄ«" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Ziņa nokopÄ“ta no SIM kartes" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Atcelt ziņu" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Pielikumi" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Ziņa par neveiksmÄ«gu nosÅ«tÄ«Å¡anu" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Sasniegts maksimÄlais rakstzÄ«mju skaits" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Atjauno..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Nav pielikumu" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "KopÄ“ts starpliktuvÄ“" + diff --git a/main/po/ms.po b/main/po/ms.po new file mode 100644 index 0000000..35ee30e --- /dev/null +++ b/main/po/ms.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Tidak boleh membuka" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Dapat semula" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Tidak boleh alih" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Bilangan maksimum halaman dicapai" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Mod terhad. Tidak dapat memasukkan kandungan terhad" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Dihantar" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Telah tamat tempoh" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Baca" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Mendpt semula..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Masukkan kad SIM utk menghantar mesej. Mesej akan disimpan ke Peti keluar" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Masukkan nombor saluran" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 mesej dipilih" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d mesej dipilih" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Pratonton" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Nama fail telah wujud" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Tiada mesej" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Tambah ke kenalan" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Buang" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Tidak boleh menghantar mesej" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Tangkap foto" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Tiada alamat" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Senarai item yang dilampirkan" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Muat turun auto" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Mesej siaran" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "%d tengah" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Masa langganan" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Laporan penghantaran" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Penghantaran gagal" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Daripada" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Senarai perkara dimasukkan" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Mesej diserahkan" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Mesej didapatkan semula" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Bebas" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Amaran" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Dihantar" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Mesej tolakan" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Laporan baca" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Diterima" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Manual" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Tolak" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Pilihan penerimaan" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Minta laporan penghantaran" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Minta laporan baca" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Terhad" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Rendah" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Biasa" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Penting" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Keutamaan" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Hantar laporan baca" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Tempoh halaman" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "Mesej SOS" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Mesej teks" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Jumlah saiz" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "Kandungan DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Senarai item" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 saat" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 saat" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 saat" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Rangkaian rumah" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Pasang" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Rangkaian asing" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Lihat butiran kenalan" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Mesej multimedia dihantar" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Mendapatkan semula mesej gagal" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Penghantaran mesej multimedia gagal" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "K'mukakn" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Nyahbaca" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Pindah ke telefon" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Penerima dipenduakan" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Bilangan maksimum penerima (%d) dicapai" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Kpd" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Rakam bunyi" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Rakam video" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Tukar ke MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Tukar ke SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d lampiran tersedia. Pilih sehingga %d lampiran" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Tidak boleh melampirkan semua fail. Muatan maksimum lampiran ialah %d KB. Teruskan?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Saiz fon" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Mod cipta" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Mesej multimedia" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Tiada subjek" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Pusat perkhidmatan" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Pilih alamat" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Pindah ke SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Anda akan ke dalam talian (%s). Teruskan?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Htr smula" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Penerima tidak sah" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Penerima tidak sah" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Tdk dpt memainkan semasa panggilan" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Tidak boleh menyimpan semasa dalam mod storan besar" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Buang mesej semasa?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Dipilih" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Padam?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Tdk dpt melampirkan. Saiz fail maksimum ialah %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Terhad" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Tdk dpt memajukan.\nFail berkunci" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Mesej berjadual" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Polisi keselamatan melarang mengarang mesej teks" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Menambah. Sila tunggu..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Alamat pusat perkhidmatan" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Mesej spam" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Besar" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Biasa" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Kecil" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Kecil" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Tidak dapat menghantar mesej berjadual. Tetapkan masa yang lain" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Tarikh dan masa" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Mesej multimedia" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Tiada penerima ditambah. Masukkan penerima" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Pilihan penghantaran" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Menerima jenis peringatan" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Biasa" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Menghantar SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Penerima" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Ulang" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Mesej" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Sekali" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 kali" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 kali" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Saya dalam kecemasan. Sila bantu saya" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM tidak disisipkan" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Tangkap gambar" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Ambil video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Rakam audio" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Mesej CB" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Mesej kad SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Tempoh mesti lebih lama daripada %d saat" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Tidak boleh menambah kandungan" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Pilih penerima" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Lihat kenalan" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Tempoh (%s saat)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Gambar terlalu besar. Memampatkan..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Mesej disimpan sebagai draf" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Lain" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Draf" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Tempoh untuk slaid" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Hantar emel" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Item yang dimasukkan" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Perkara yang dilampirkan" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d lampiran" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Mesej\nberjadual" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Tempoh\n(%d saat)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Guna maklumt knln lain" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Mesej ini merangkumi fail lampiran yang tidak ditunjukkan" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Mesej ini termasuk fail lampiran yang tidak ditunjukkan" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Simpan semua" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Mesej draf" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Mesej akan dipulihkan" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Mesej berjadual akan dibatalkan" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Salin teks mesej" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Lihat butiran mesej" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Mesej dikunci" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Peti mesej" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Sekat" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Salin ke telefon" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Mesej disalin dari kad SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Batal mesej" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Lampiran" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Mesej penghantaran gagal" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Bilangan maksimum aksara dicapai" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Memulih…" + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Tiada lampiran" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Disalin ke papan klip" + diff --git a/main/po/nl_NL.po b/main/po/nl_NL.po index 90f0eda..496d55c 100755..100644 --- a/main/po/nl_NL.po +++ b/main/po/nl_NL.po @@ -7,15 +7,9 @@ msgstr "Ophalen" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "Kan niet verplaatsen" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "Niet aangevraagd" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "Maximumaantal pagina's bereikt" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "Aangevraagd" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "Beperkte modus. Kan inhoud met restricties niet invoegen" @@ -31,54 +25,18 @@ msgstr "Gelezen" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "Ophalen..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "Ophalen mislukt" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "Plaats een SIM-kaart om berichten te verzenden. Het bericht wordt opgeslagen in het Postvak UIT" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d talen" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "Adres centrale" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "Gedupliceerd" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "Zendernaam invoeren" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "Kanaalnummer invoeren" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "Niets geselecteerd" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d zenders" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "Zelfde zenderinfo bestaat" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "Verzenden mislukt. Opnieuw?" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "Lijst met kanaal-id's vol" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "1 bericht geselecteerd" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "1 persoon geselecteerd" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "%d berichten geselecteerd" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "%d personen geselecteerd" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "Voorbeeld" @@ -88,156 +46,48 @@ msgstr "Bestandsnaam bestaat al" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "Geen berichten" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "Bericht maken" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "Toevoegen aan contactpersoon" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Portugees" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "Adres maken" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "Blokkeerlijst" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "Tikken om nummer toe te voegen" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "Zender maken" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "Verwijderen" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "Kan bericht niet verzenden" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "Contacten" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "Foto maken" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "Geen adres" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "Waarschuwingstoon" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "Reclame toestaan" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "Anoniem toestaan" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "Lijst met bijgevoegde items" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "Automatisch downloaden" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "Automatisch" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "Automatisch verwijderen" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "Achtergrondkleur" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "Berichten blokkeren" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "Infoberichten" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "Inschakelen" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "Mijn kanalen" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "Ontvangstkanalen" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "Centrale %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "Aangepast tijdstip" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "Standaardstijl" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "Ontvangstbevestiging" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "Verzenden mislukt" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "Om de 10 minuten" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "Om de 2 minuten" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "Om de 5 minuten" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "Letterkleur" - msgid "IDS_MSGF_BODY_FROM" msgstr "Van" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "Algemene instellingen" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "GSM-alfabet" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "Houd de toets '1' ingedrukt om verbinding te maken met de voicemailserver wanneer u niet een applicatie hebt geopend of in gesprek bent" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "Lijst met ingevoegde items" -msgid "IDS_MSGF_BODY_LANG" -msgstr "Talen" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "Maximum" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "Voicemailnummer" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "Bericht afgeleverd" @@ -253,24 +103,12 @@ msgstr "Waarschuwing" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "Verzonden" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "Geen beperkingen voor grootte en inhoud" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "U krijgt een melding wanneer grootte en inhoud de maximumgrens overschrijden" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "Fax" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "Spraak" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "Serverberichten" @@ -289,9 +127,6 @@ msgstr "Weigeren" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "Ontvangstopties" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "Antwoordpad" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "Ontvangstbevestiging vragen" @@ -301,12 +136,6 @@ msgstr "Leesbevestiging vragen" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "Beperkt" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "Verzenden..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 dagen" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "Laag" @@ -316,48 +145,15 @@ msgstr "Normaal" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "Dringend" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "Verzendopties" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "Vervaldatum" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "Prioriteit" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "Ontvangstbevestiging verzenden" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "Leesbevestiging verzenden" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "Servicetype" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "Adres" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "Precies gelijk aan" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "Invoegen" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "Blokkeringscriteria" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "Eenmalig" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "Weergavetijd pagina" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "Ondersteunde tekenset" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "Tekst" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "SOS-berichten" @@ -367,21 +163,12 @@ msgstr "SMS-berichten" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "Totale omvang" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Unicode" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "DRM-inhoud" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "Zender bewerken" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "Itemlijst" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "seconden" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 seconden" @@ -400,12 +187,6 @@ msgstr "Installeren" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "Roamingnetwerk" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "Pictogram" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "Letterstijl" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "Contactgegevens weergeven" @@ -418,18 +199,6 @@ msgstr "Ophalen bericht mislukt" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "Verzenden MMS mislukt" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "U kunt afbeeldingen tot %d KB verzenden" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "Naamkaartje" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "Geen naam" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "Welkom" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "Doorst." @@ -439,132 +208,48 @@ msgstr "Niet gelezen" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "Verplaatsen naar telefoon" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "Tekst toevoegen" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "Dubbele ontvanger" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "Maximumgrootte maken" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "Maximumaantal ontvangers (%d) bereikt" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "Tik om onderwerp toe te voegen" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "Groepen" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "Telefoonlijst" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "Overige bestanden" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "Geluid" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "Multimedia toevoegen" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "UIT" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "AAN" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "Aan" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "Geluid opnemen" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "Geluid opnemen" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "Video opnemen" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "Standaard SMS-berichten" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "Gewijzigd in MMS" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "Gewijzigd in SMS" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "Adres invoeren" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "Ongeldig bestand" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "Bericht verzonden" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "Maximale berichtgrootte overschreden" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "%d bijlagen beschikbaar. Selecteer maximaal %d bijlagen" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "Server reageert niet" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "Kan niet alle bestanden toevoegen. Maximumcapaciteit voor bijlagen is %d KB. Doorgaan?" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "Kan MMS niet verzenden. Onbekende fout" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "Agenda synchroniseren" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "Tekstgrootte" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "Zonder bijlagen" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "Volledige e-mail" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "Aanmaakmodus" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "Bericht afgeleverd" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "MMS-bericht" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "Nieuwe voicemail" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "Geen onderwerp" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "Ja op alles" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "SMS-centrale" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "Service laden" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "Geluid" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "Kan niet verzenden. Niet-ondersteunde bestanden aangehecht." - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "Gesprekslijst" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "Adres selecteren" @@ -574,30 +259,9 @@ msgstr "Verplaatsen naar SIM" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "U gaat bijna online (%s). Doorgaan?" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "Ophalen MMS mislukt" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "Geen ontvanger" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "Vereist" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "Opslaan in Concepten?" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "Berichtgrootte overschreden. Grootte wordt gewijzigd..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "Synchronisatie geannuleerd" - msgid "IDS_MSGF_SK_RESEND" msgstr "Opnieuw verzenden" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "Kanaal toevoegen" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "Ongeldige ontvanger" @@ -610,27 +274,15 @@ msgstr "Niet mogelijk tijdens gesprek" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "Kan niet opslaan in massaopslag-modus" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Kan niet openen in massaopslag-modus" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Kan niet gebruiken in massaopslag-modus" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "Huidig bericht verwijderen?" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "Geselecteerd" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "Geselecteerd" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "Verwijderen?" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "Grootte wordt gewijzigd..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "Kan niet toevoegen. Maximumgrootte van bestanden is %d KB" @@ -649,3 +301,204 @@ msgstr "Beveiligingsbeleid legt beperkingen op voor SMS-berichten" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "Toevoegen. Even geduld..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adres servicecentrum" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Spamberichten" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Groot" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normaal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Klein" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Extra klein" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Kan gepland bericht niet verzenden. Stel een andere tijd in" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Datum en tijd" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS-berichten" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Geen ontvangers toegevoegd. Geef ontvangers in" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Verzendopties" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Alarmtype ontvangen" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normaal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "SOS wordt verzonden" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Ontvangers" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Herhalen" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Bericht" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Eenmalig" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 keer" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 keer" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Ik ben in gevaar. Help me." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM niet geplaatst" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Foto maken" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Video opnemen" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Geluid opnemen" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Infoberichten" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM-kaartberichten" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Duur moet langer zijn dan %d seconden" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Kan inhoud niet toevoegen" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Ontvanger selecteren" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Contacten weergeven" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Duur (%s sec)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Foto te groot. Comprimeren..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Bericht opgeslagen als concept" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Overige" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Concept" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Duur voor dia" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "E-mail verzenden" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Ingevoegde items" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Bijlagen" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d bijlagen" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Gepland\nbericht" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Duur\n(%d sec)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Andere contactgegevens" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Dit bericht bevat een bijlage die niet wordt weergegeven" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Dit bericht bevat niet getoonde bijlagen" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Alles opslaan" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Conceptberichten" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Bericht wordt hersteld" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Gepland bericht wordt geannuleerd" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Berichttekst kopiëren" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Berichtdetails tonen" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Vergrendelde berichten" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Postvakken" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blokkeren" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Kopiëren naar telefoon" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Bericht gekopieerd van SIM-kaart" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Bericht annuleren" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Bijlagen" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Bericht “Verzenden misluktâ€" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Maximumaantal tekens bereikt" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Herstellen..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Geen bijlagen" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Gekopieerd naar klembord" + diff --git a/main/po/no.po b/main/po/no.po new file mode 100644 index 0000000..5ca260f --- /dev/null +++ b/main/po/no.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Kan ikke Ã¥pne" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Hent" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Kan ikke flytte" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Det maksimale antall sider er nÃ¥dd" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Begrenset modus. Kan ikke sette inn begrenset innhold" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Levert" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Utløpt" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Lest" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Henter..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Sett inn et SIM-kort for Ã¥ sende meldinger. Meldinger vil lagres i utboksen" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Angi kanalnummer" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 melding valgt" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d meldinger valgt" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "ForhÃ¥ndsvisning" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Filnavn allerede i bruk" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Ingen meldinger" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Legg til kontakt" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Forkast" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Kan ikke sende melding" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Ta bilde" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Ingen adresse" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Vedlagt elementliste" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Automatisk nedlasting" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Kringkastingsmeldinger" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Senter %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Egendefinert tid" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Leveringsrapport" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Mislykket..." + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Fra" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Innsatt elementliste" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Melding levert" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Melding hentet" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Ledig" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Advarsel" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Sendt" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Tjenestemeldinger" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Leserapport" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Mottatt" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Manuelt" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Avvis" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Mottaksalternativer" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Be om leveringsrapport" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Be om leserapport" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Begrenset" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Lav" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Haster" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Prioritet" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Send leserapport" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Sidevarighet" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "SOS-meldinger" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Tekstmeldinger" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Total størrelse" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM-innhold" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Elementliste" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sekunder" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sekunder" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sekunder" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Hjemmenettverk" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Installer" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Roaming-nettverk" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Vis kontaktdetalj" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "MMS-melding sendt" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Kunne ikke hente melding" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Sending av mulitmediamelding feilet" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Vid.send" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Ulest" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Flytt til telefon" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Duplisert mottaker" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Maksimalt antall mottakere (%d) er nÃ¥dd" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Til" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Spill inn lyd" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Spill inn video" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Endret til MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Endret til SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d vedlegg tilgjengelig. Velg opptil %d vedlegg" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Kan ikke legge ved alle filer. Maksimal kapasitet for vedlegg er %d kB. Fortsette?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Skriftstørrelse" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Opprettelsesmodus" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "MMS-melding" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Intet emne" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Tjenestesentral" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Velg adresse" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Flytt til SIM-kort" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Du er i ferd med Ã¥ gÃ¥ pÃ¥ nett (%s). Fortsette?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Send pÃ¥ nytt" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Ugyldig mottaker" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Ugyldige mottakere" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Kan ikke spille av under samtale" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Kan ikke lagre mens enheten er i masselagringsmodus" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Forkast aktuell melding?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Valgt" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Slette?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Kan ikke legge ved. Maksimal filstørrelse er %d kB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Begrenset" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Kan ikke legge til. Filen er beskyttet mot videresending" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Planlagt melding" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Sikkerhetspolicy begrenser skriving av tekstmeldinger" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Legger til. Vennligst vent..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Tjenestesenteradresse" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Spammeldinger" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Stor" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Liten" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Veldig liten" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Kan ikke sende planlagt melding. Angi et annet tidspunkt" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Dato og tid" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS-meldinger" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Ingen mottakere lagt til. Angi mottakere" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Sendingsalternativer" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Mottar varseltype" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Sender SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Mottakere" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Gjenta" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Melding" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Én gang" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 ganger" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 ganger" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Jeg er i nød. Hjelp meg." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM-kort ikke satt inn" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Ta bilde" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Ta opp video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Spill inn lyd" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CB-meldinger" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM-kortmeldinger" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Varigheten mÃ¥ være lenger enn %d sekunder" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Kan ikke legge til innhold" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Velg mottaker" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Vis kontakter" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Varighet (%s sek)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Bildet er for stort. Komprimerer..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Melding lagret som utkast" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Annet" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Utkast" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Varighet for bilde" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Send e-post" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Elementer som er satt inn" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Vedlagte elementer" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d vedlegg" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Planlagt\nmelding" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Varighet\n(%d sek)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Bruk annen kontaktinfo" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Denne meldingen inneholder ett filvedlegg som ikke vises" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Denne meldingen inkluderer vedlagte filer som ikke vises" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Lagre alle" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Kladdemeldinger" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Meldingen vil bli gjenopprettet" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Planlagt melding vil bli avbrutt" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Kopier meldingstekst" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Vis meldingsdetaljer" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "LÃ¥ste meldinger" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Meldingsbokser" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blokker" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Kopier til telefon" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Meldinger kopiert fra SIM-kort" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Avbryt melding" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Vedlegg" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Sending mislyktes-melding" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "NÃ¥dd maksimalt antall tegn" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Gjenoppretter..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Ingen vedlegg" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Kopiert til utklippstavle" + diff --git a/main/po/pl.po b/main/po/pl.po new file mode 100644 index 0000000..6467fe0 --- /dev/null +++ b/main/po/pl.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Nie można otworzyć" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Pobierz wiad." + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Nie można przenieść" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "OsiÄ…gniÄ™to maksymalnÄ… liczbÄ™ stron" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Tryb ograniczony. Nie można wstawić zastrzeżonej treÅ›ci" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "DorÄ™czono" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "WygasÅ‚a wiadomość" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Przeczytano" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Pobieranie..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Włóż kartÄ™ SIM w celu wysÅ‚ania wiadomoÅ›ci. Wiadomość zostanie zapisana w skrzynce nadawczej" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Wprowadź numer kanaÅ‚u" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "Wybranych wiadomoÅ›ci: 1" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "Wybranych wiadomoÅ›ci: %d" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "PodglÄ…d" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Nazwa pliku już istnieje" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Brak wiadomoÅ›ci" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Dodaj do kontaktów" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Anuluj" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Nie można wysÅ‚ać wiadomoÅ›ci" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Zrób zdjÄ™cie" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Brak adresu" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Lista zaÅ‚Ä…czników" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Automatycznie" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Wiad. sieciowe" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Centrum SMS %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Ustaw. wÅ‚asne" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Raport dorÄ™czenia" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "BÅ‚Ä…d wysyÅ‚ania" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Od" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Lista wstawionych elementów" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Wiadomość dostarczona" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Wiadomość pobrana" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Nie ostrzegaj" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Ostrzeżenie" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "WysÅ‚ano" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "kB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "WAP Push" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Raport odczytania" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Odebrano" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "RÄ™cznie" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Odrzucaj" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Ustawienia odbierania" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Raport dorÄ™czenia" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Żądaj raportu przeczytania" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Ograniczony" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Niski" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normalny" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Wysoki" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Priorytet" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "WyÅ›lij raport odczytu" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Czas wyÅ›wietlania strony" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "Wiad. alarmowa" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "SMS" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "ÅÄ…czny rozmiar" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "Zawartość DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Lista elementów" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sek." + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sek." + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sek." + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Odbiór w sieci domowej" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Instaluj" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Odbiór w roamingu" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "WyÅ›wietl szczegóły kontaktu" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "WysÅ‚ano MMS" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "BÅ‚Ä…d pobierania wiadomoÅ›ci" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "BÅ‚Ä…d wysyÅ‚ania MMS" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "P. dalej" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Nieprz." + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "PrzenieÅ› do pamiÄ™ci telefonu" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Powtórzony odbiorca" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "OsiÄ…gniÄ™to maksymalnÄ… liczbÄ™ odbiorców (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Do" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Nagraj dźwiÄ™k" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Nagraj film" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Zmieniono na MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Zmieniono na SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "Liczba dostÄ™pnych zaÅ‚Ä…czników: %d. Maksymalna liczba zaÅ‚Ä…czników do wybrania: %d" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Nie można doÅ‚Ä…czyć wszystkich plików. Maksymalna wielkość zaÅ‚Ä…cznika to %d kB. Kontynuować?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Rozmiar czcionki" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Tryb tworzenia" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Brak tematu" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Centrum SMS" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Wybierz adres" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "PrzenieÅ› do pamiÄ™ci SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "PoÅ‚Ä…czyć z WAP(%s)? Kontynuować?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "WyÅ›lij ponownie" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "NieprawidÅ‚owy odbiorca" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "NieprawidÅ‚owi odbiorcy" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Niedozwolone podczas poÅ‚Ä…czenia" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Nie można zapisać w trybie pamiÄ™ci masowej" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Usunąć bieżącÄ… wiadomość?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Wybrane" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Usunąć?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Nie można doÅ‚Ä…czyć. Maksymalny rozmiar plików to %d kB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Ograniczony" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Nie można przesÅ‚ać dalej.\nPrzesyÅ‚anie pliku jest zablokowane" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Zaplanowana wiadomość" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Zasady zabezpieczeÅ„ ograniczajÄ… tworzenie wiadomoÅ›ci SMS" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Dodawanie. Czekaj..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adres centrum usÅ‚ug" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "WiadomoÅ›ci typu spam" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Duża" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normalny" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Pomniejsz" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Bardzo maÅ‚a" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Nie można wysÅ‚ać zaplanowanej wiadomoÅ›ci. Ustaw innÄ… godzinÄ™" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Data i godzina" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Nie dodano żadnych odbiorców. Wprowadź odbiorców" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Ustawienia wysyÅ‚ania" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Typ alarmu odbierania" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normalny" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "WysyÅ‚anie wiad. alarmowej" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Odbiorcy" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Powtarzanie" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Wiadomość" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Raz" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 razy" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 razy" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Sytuacja alarmowa. ProszÄ™ o pomoc." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "Nie wÅ‚ożono karty SIM" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Zrób zdjÄ™cie" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Nagraj video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Nagraj dźwiÄ™k" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "WiadomoÅ›ci sieciowe" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "WiadomoÅ›ci karty SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Czas trwania musi być dÅ‚uższy niż %d s" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Nie można dodać zawartoÅ›ci" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Wybierz odbiorcÄ™" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "WyÅ›wietl kontakt" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Czas trwania (%s s)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Obraz za duży. Trwa kompresja..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Wiadomość zostaÅ‚a zapisana jako robocza" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Inne" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Wer.rob." + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Czas trwania slajdu" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "WyÅ›lij e-mail" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Wstawione elementy" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "ZaÅ‚Ä…czniki" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "ZaÅ‚Ä…czników: %d" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Zaplanowana\nwiadomość" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Czas trwania\n(%d s)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Użyj inf. innego kont." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Ta wiadomość zawiera pewne zaÅ‚Ä…czniki, które nie sÄ… pokazane." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Ta wiadomość zawiera niewyÅ›wietlone doÅ‚Ä…czone pliki" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Zapisz wszystko" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Wersje robocze wiadomoÅ›ci" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Wiadomość zostanie przywrócona" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Zaplanowana wiadomość zostanie anulowana" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Kopiuj tekst wiad." + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Pokaż szczeg. wiad." + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Zablokowane wiadomoÅ›ci" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Skrzynki wiadomoÅ›ci" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blokuj" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Kopiuj do pamiÄ™ci telefonu" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Skopiowano wiadomość z karty SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Anuluj wiadomość" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "ZaÅ‚Ä…czniki" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "BÅ‚Ä…d wysyÅ‚ania wiadomoÅ›ci" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "OsiÄ…gniÄ™to maksymalnÄ… liczbÄ™ znaków" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Przywracanie..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Bez zaÅ‚Ä…czników" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Skopiowane do schowka" + diff --git a/main/po/pt_PT.po b/main/po/pt_PT.po index ac7a139..eb0416e 100755..100644 --- a/main/po/pt_PT.po +++ b/main/po/pt_PT.po @@ -7,15 +7,9 @@ msgstr "Receber" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "ImpossÃvel mover" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "Não pedido" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "Número máximo de páginas atingido" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "Pendente" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "Modo restringido. ImpossÃvel inserir conteúdo restringido" @@ -31,54 +25,18 @@ msgstr "Ler" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "A receber..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "Falha de recepção" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "Insira um cartão SIM para enviar mensagens. A mensagem será guardada na Caixa de saÃda" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d idiomas" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "Endereço do centro" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "Duplicado" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "Introduzir nome de canal" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "Introduzir número de canal" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "Nada seleccionado" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d canais" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "Já existe ID de canal igual" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "Falha ao enviar. Tente novamente?" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "Lista de ID de canais cheia" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "1 mensagem seleccionada" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "1 pessoa seleccionada" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "%d mensagens seleccionadas" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "%d pessoas seleccionadas" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "Pré-visualizar" @@ -88,156 +46,48 @@ msgstr "Nome do ficheiro já existente" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "Nenhuma mensagem" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "Criar mensagem" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "Adicionar a contacto" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "Criar endereço" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "Lista de bloqueios" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "Tocar para adicionar número" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "Criar canal" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "Cancelar" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "ImpossÃvel enviar mensagem" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "Contactos" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "Tirar fotografia" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "Nenhum endereço" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "Tom de alerta" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "Permitir publicidade" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "Permitir anón." - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "Lista de itens anexados" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "Transferência automática" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "Automático" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "Eliminação automática" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "Cor de fundo" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "Bloquear mensagens" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "Mensagens de difusão" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "Activação" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "Os meus canais" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "Recepção de canais" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "Centro %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "Personalizar hora" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "Estilo padrão" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "Relatório de entrega" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "Falha no envio" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "Cada 10 minutos" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "Cada 2 minutos" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "Cada 5 minutos" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "Cor do tipo de letra" - msgid "IDS_MSGF_BODY_FROM" msgstr "De" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "Defin. gerais" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "Alfabeto GSM" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "Prima a tecla '1' sem soltar para ligar ao servidor de correio de voz quando não estiver numa aplicação ou numa chamada" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "Lista de itens inseridos" -msgid "IDS_MSGF_BODY_LANG" -msgstr "Idiomas" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "Máximo" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "Número do correio de voz" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "Mensagem entregue" @@ -253,24 +103,12 @@ msgstr "Aviso" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "Enviada" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "Sem restrições de tamanho e conteúdo" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "Será notificado quando o tamanho e o conteúdo excederem o máximo permitido" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "Fax" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "Voz" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "Mensagens push" @@ -278,7 +116,7 @@ msgid "IDS_MSGF_BODY_READ_REPORT" msgstr "Relatório de leitura" msgid "IDS_MSGF_BODY_RECEIVED" -msgstr "Recebida" +msgstr "Recebido" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" msgstr "Manual" @@ -289,9 +127,6 @@ msgstr "Rejeitar" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "Opções de recepção" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "Caminho de resposta" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "Pedir relatório de entrega" @@ -301,12 +136,6 @@ msgstr "Pedir relatório de leitura" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "Restringido" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "A enviar..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 dias" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "Baixa" @@ -316,48 +145,15 @@ msgstr "Normal" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "Urgente" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "Opções de envio" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "Expiração" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "Prioridade" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "Enviar relatório de entrega" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "Enviar relatório de leitura" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "Tipo de serviço" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "Endereço" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "Exactamente o mesmo que" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "Incluir" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "Corresponder critérios" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "Uma vez" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "Duração da página" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "Suporte de caracteres" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "Texto" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "Mensagens SOS" @@ -367,21 +163,12 @@ msgstr "SMS" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "Tamanho total" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Unicode" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "Conteúdo DRM" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "Editar canal" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "Lista de itens" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "Segundos" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 segundos" @@ -400,12 +187,6 @@ msgstr "Instalar" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "Rede de roaming" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "Slide" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "Estilo do tipo de letra" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "Ver detalhes do contacto" @@ -418,18 +199,6 @@ msgstr "Falha na recepção da mensagem" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "Falha ao enviar mensagem multimédia" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "Pode enviar imagens até %d KB" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "Cartão de visita" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "Sem nome" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "Bem-vindo" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "Reenc." @@ -439,132 +208,48 @@ msgstr "Não lida" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "Mover para o telefone" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "Adicionar texto" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "Destinatário duplicado" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "Tamanho de criação máximo" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "Número máximo de destinatários (%d) atingido" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "Tocar para ad. assunto" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "Grupos" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "Lista telefónica" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "Outros ficheiros" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "Som" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "Adicionar multimédia" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "DESLIGADO" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "LIGADO" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "Para" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "Gravar som" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "Gravar som" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "Gravar vÃdeo" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "Modelo do texto" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "Alterado para MMS" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "Alterado para SMS" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "Introduzir endereço" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "Ficheiro inválido" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "Mensagem enviada" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "Tamanho máx. de mensagem excedido" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "%d anexos disponÃveis. Seleccione até %d anexos" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "O servidor não responde" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "ImpossÃvel anexar todos os ficheiros. Capacidade máxima para anexos %d KB. Continuar?" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "ImpossÃvel enviar MMS. Erro não reconhecido" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "Sincronização da agenda" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "Tamanho da fonte" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "Sem anexos" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "E-mail completo" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "Modo de criação" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "Mensagem entregue" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "MMS" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "Novo correio de voz" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "Sem assunto" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "Sim para todos" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "Centro de serviço" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "A carregar serviço" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "Som" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "ImpossÃvel enviar. Tipos de ficheiro não suportados anexados" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "Lista de conversações" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "Seleccionar endereço" @@ -574,30 +259,9 @@ msgstr "Mover para o SIM" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "Está prestes a ficar online (%s). Continuar?" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "Falha ao recuperar MMS" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "Nenhum destinatário" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "Necessário" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "Guardar nos Rascunhos?" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "Tamanho máx. de mensagem excedido. A redimensionar..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "Sincronização cancelada" - msgid "IDS_MSGF_SK_RESEND" msgstr "Reenviar" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "Adicionar canal" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "Destinatário inválido" @@ -610,27 +274,15 @@ msgstr "ImpossÃvel jogar durante chamada" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "ImpossÃvel guardar durante o modo de armazenamento de massa" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "ImpossÃvel abrir durante modo de armazenamento de massa" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "ImpossÃvel utilizar durante modo de armazenamento de massa" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "Eliminar mensagem actual?" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "Seleccionado" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "Seleccionado" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "Eliminar?" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "A redimensionar..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "ImpossÃvel anexar. O tamanho máximo dos ficheiros é %d KB" @@ -649,3 +301,204 @@ msgstr "A polÃtica de segurança restringe a redacção de mensagens de texto" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "A adicionar. Aguarde por favor..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Endereço do centro de serviço" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Mensagens de spam" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Grande" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Pequeno" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Muito pequeno" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "ImpossÃvel enviar mensagem programada. Defina outra hora" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Data e hora" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Nenhum destinatário adicionado. Introduzir destinatários" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Opções de envio" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Tipo de alerta de recepção" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Envio de SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Destinatários" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Repetir" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Mensagem" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Uma vez" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 vezes" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 vezes" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Estou numa situação de emergência. Ajudem-me." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM não inserido" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Tirar fotografia" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Capturar vÃdeo" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Gravação de áudio" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Mensagens DC" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Mensagens do cartão SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "A duração tem de ser mais longa do que %d segundos" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "ImpossÃvel adicionar conteúdo" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Seleccionar destinatário" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Ver contactos" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Duração (%s s)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Imagem demasiado grande. A comprimir..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Mensagem guardada como rascunho" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Outro" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Rascunho" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Duração para o slide" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Enviar e-mail" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Itens inseridos" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Itens anexados" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d anexos" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Mensagem\nprogramada" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Duração\n(%d s)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Util. out. infos cntc." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Esta mensagem inclui um ficheiro anexado não apresentado." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Esta mensagem inclui ficheiros anexados não mostrados" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Guardar tudo" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Mensagens rascunho" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "A mensagem será restaurada" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "A mensagem programada será cancelada" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Copiar texto msg." + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Ver detalhes msg." + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Mensagens bloqueadas" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Caixas de mensagens" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Bloquear" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Copiar para o telefone" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Mensagem copiada do cartão SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Cancelar mensagem" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Anexos" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "A enviar mensagem que falhou" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Número máximo de caracteres atingido." + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "A recuperar..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Nenhum anexo" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Copiado para a área de transferência" + diff --git a/main/po/ro.po b/main/po/ro.po new file mode 100644 index 0000000..6da3295 --- /dev/null +++ b/main/po/ro.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Imposibil de deschis" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Preluare" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Imposibil de mutat" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "A fost atins numărul maxim de pagini" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Mod restricÅ£ionat. Imposibil de introdus conÅ£inutul restricÅ£ionat" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Livrat" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Expirat" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Citit" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Se preia..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "IntroduceÅ£i cartela SIM pentru a trimite mesaje. Mesajele vor fi salvate în Cutia de ieÅŸire" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Introducere număr canal" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 mesaj selectat" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d mesaje selectate" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Previzualizare" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Numele fiÅŸierului există deja" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Nici un mesaj" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Adăugare la contacte" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "RenunÅ£are" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Imposibil de trimis mesajul" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Realizare fotografie" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Nicio adresă" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Listă de elemente ataÅŸate" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Descărcare automată" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Mesaje informare" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Centru %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Timp particularizat" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Raport livrare" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Trimitere eÅŸuată" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "De la" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Listă de elemente inserate" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Mesaj livrat" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Mesaj regăsit" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Liber" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Avertisment" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Trimis" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KO" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Mesaje server" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Citire raport" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Primit" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Manual" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Respingere" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "OpÅ£iuni primire" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Solicitare raport de livrare" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Solicitare raport citire" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "RestricÅ£ionat" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Scăzută" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Urgent" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Prioritate" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Trimitere raport citire" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Dimensiune pagină" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "Mesaje SOS" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Mesaje text" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Dimensiune totală" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "ConÅ£inut DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Listă elemente" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 secunde" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 secunde" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 secunde" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "ReÅ£ea reÅŸedinţă" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Instalare" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "ReÅ£ea în roaming" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Vizualizare detalii contact" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Mesaj multimedia trimis" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Preluare mesaj nereuÅŸită" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Trimitere mesaj multimedia nereuÅŸită" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Redir" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Necitit" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Mutare în telefon" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Destinatar dublat" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Numărul maxim de destinatari (%d) a fost atins" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Către" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "ÃŽnregistrare sunet" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "ÃŽnregistrare videoclip" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Schimbat în MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Modificat la SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d ataşări disponibile. SelectaÅ£i maximum %d ataşări" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Imposibil de ataÅŸat toate fiÅŸierele. Capacitatea maximă a ataşării este de %d KO. ContinuaÅ£i?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Dimensiune font" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Mod creare" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Mesaj multimedia" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Niciun subiect" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Centru service" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Selectare adresă" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Mutare în SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "SunteÅ£i pe cale să vă conectaÅ£i (%s). ContinuaÅ£i?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Retrimitere" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Destinatar nevalid" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Destinatari nevalizi" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Imposibil de redat în timpul unui apel" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Imposibil de salvat din modul Stocare în masă" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "RenunÅ£aÅ£i la mesajul curent?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Selectat" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "ÅžtergeÅ£i?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Imposibil de ataÅŸat. Dimensiunea maximă a fiÅŸierelor este de %d KO" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "RestricÅ£ionat" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Imposibil de redirecÅ£ionat. FiÅŸierul este blocat la redirecÅ£ionare" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Mesaj programat" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Politica de securitate restricÅ£ionează compunerea mesajelor text" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "ÃŽn curs de adăugare. AÅŸteptaÅ£i..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adresă centru servicii" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Mesaje spam" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Mare" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Mic" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Foarte mic" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Imposibil de trimis mesajul programat. SetaÅ£i o altă oră" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Dată ÅŸi oră" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Mesaje multimedia" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Nu a fost adăugat niciun destinatar. IntroduceÅ£i destinatari" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "OpÅ£iuni trimitere" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Tip de alertă la primire" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Se trimite SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Destinatari" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Repetare" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Mesaj" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "O dată" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 ori" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 ori" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Sunt într-o situaÅ£ie de urgenţă. Vă rog să mă ajutaÅ£i." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM neinserat" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Fotografiere" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Captură video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "ÃŽnregistrare audio" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Mesaje CB" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Mesaje de pe cartela SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Durata trebuie să fie mai mare de %d secunde" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Imposibil de adăugat conÅ£inut" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Selectare destinatar" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Vizualizare contacte" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Durată (%s s)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Fotografia este prea mare. Se comprimă..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Mesajul a fost salvat ca ciornă" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Alte" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Ciornă" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Durata pentru diapozitiv" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Trimitere email" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Elemente inserate" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Elemente ataÅŸate" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d ataşări" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Mesaj\nprogramat" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Durată\n(%d secunde)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Ut. alte inf. contact" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Acest mesaj include un fiÅŸiere ataÅŸat care nu este prezentat." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Acest mesaj conÅ£ine fiÅŸiere ataÅŸate neafiÅŸate" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Salvare totală" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "SchiÅ£e de mesaje" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Mesajul va fi restabilit" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Mesajul programat va fi revocat" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Copiere text mesaj" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "AfiÅŸ. detalii mesaj" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Mesaje blocate" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Casete de mesaje" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blocare" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Copiere în telefon" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Mesaj copiat de pe cartela SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Revocare mesaj" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Ataşări" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Trimiterea mesajului nereuÅŸit" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Adăugare la marcaje" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Restabilire" + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Nicio ataÅŸare" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Copiat în clipboard" + diff --git a/main/po/ru_RU.po b/main/po/ru_RU.po index 9bc2ece..3560620 100755..100644 --- a/main/po/ru_RU.po +++ b/main/po/ru_RU.po @@ -2,20 +2,14 @@ msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" msgstr "Ðевозможно открыть" msgid "IDS_MSGF_OPT_RETRIEVE" -msgstr "Загрузить" +msgstr "Извлечь" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "Ðевозможно перемеÑтить" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "Ðе требуетÑÑ" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "ДоÑтигнуто макÑимальное чиÑло Ñтраниц" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "Ограниченный режим. Ðевозможно вÑтавить ограниченное Ñодержимое" @@ -23,7 +17,7 @@ msgid "IDS_MSGF_BODY_DELIVERED" msgstr "ДоÑтавлено" msgid "IDS_MSGF_BODY_EXPIRED" -msgstr "Срок дейÑÑ‚Ð²Ð¸Ñ ÑƒÐ¶Ðµ закончен" +msgstr "Срок дейÑÑ‚Ð²Ð¸Ñ Ð·Ð°ÐºÐ¾Ð½Ñ‡ÐµÐ½" msgid "IDS_MSGF_BODY_READ" msgstr "Прочитано" @@ -31,54 +25,18 @@ msgstr "Прочитано" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "Получение..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "Сбой извлечениÑ" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "Ð”Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²ÐºÐ¸ Ñообщений уÑтановите SIM-карту. Сообщение будет Ñохранено в иÑходÑщих" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "Кол-во Ñзыков: %d" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "ÐÐ´Ñ€ÐµÑ Ñ†ÐµÐ½Ñ‚Ñ€Ð°" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "ПовторÑетÑÑ" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "Введите Ð¸Ð¼Ñ ÐºÐ°Ð½Ð°Ð»Ð°" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "Введите номер канала" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "Ðичего не выбрано" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d каналов(a)" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "ID канала уже ÑущеÑтвует" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "Сбой отправки. Повторите попытку?" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "СпиÑок каналов заполнен" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "Выбрано 1 Ñообщение" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "Выбран 1 человек" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "Выбрано Ñообщений: %d" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "Выбрано людей: %d" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "ПроÑмотр" @@ -88,156 +46,48 @@ msgstr "Файл Ñ Ñ‚Ð°ÐºÐ¸Ð¼ именем уже ÑущеÑтвует" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "Ðет Ñообщений" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "Создать Ñообщение" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "Добавить к контакту" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "Создать адреÑ" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "Черный ÑпиÑок" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "Ðажмите Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ð¾Ð¼ÐµÑ€Ð°" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "Создать канал" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "Отменить" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "Ðевозможно отправить Ñообщение" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "Контакты" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "Сделать фото" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "Ðет адреÑа" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "Сигнал предупреждениÑ" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "Разрешить рекламу" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "Разрешить анонимные" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "Вложенные Ñлементы" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "Ðвтозагрузка" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "ÐвтоматичеÑки" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "Ðвтоудаление" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "Цвет фона" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "Черный ÑпиÑок" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñети" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "ÐктивациÑ" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "Мои каналы" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "СпиÑок каналов" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "Центр %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "Выбрать времÑ" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "Стиль по умолчанию" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "Отчет о доÑтавке" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "Сбой при отправке" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "Каждые 10 минут" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "Каждые 2 минуты" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "Каждые 5 минут" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "Цвет шрифта" - msgid "IDS_MSGF_BODY_FROM" msgstr "От" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "Общие наÑтройки" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "GSM-алфавит" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "Ð”Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ðº Ñерверу голоÑовой почты, нажмите и удерживайте клавишу '1' (при уÑловии, что не открыты Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ нет активных вызовов)" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "Ð’Ñтавленные Ñлементы" -msgid "IDS_MSGF_BODY_LANG" -msgstr "Кол-во Ñзыков" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "МакÑимум" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "ГолоÑÐ¾Ð²Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð°" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "Сообщение доÑтавлено" @@ -245,7 +95,7 @@ msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" msgstr "Сообщение получено" msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" -msgstr "Без ограничений" +msgstr "Свободно" msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" msgstr "Предупреждающий" @@ -253,24 +103,12 @@ msgstr "Предупреждающий" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "Отправлено" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "Ðет ограничений на размер и Ñодержимое" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "Оповещение о превышении макÑимально допуÑтимого размера" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "б" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "Кб" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "ФакÑ" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "ГолоÑ" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "Push-ÑообщениÑ" @@ -289,11 +127,8 @@ msgstr "Отказ" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "Параметры приема" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "Оплата ответа" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" -msgstr "Отчет о доÑтавке" +msgstr "ЗапроÑить отчет о доÑтавке" msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" msgstr "Отчет о прочтении" @@ -301,12 +136,6 @@ msgstr "Отчет о прочтении" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "Ограниченный" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "Отправка..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 днÑ" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "Ðизкий" @@ -316,48 +145,15 @@ msgstr "Обычный" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "Ð’Ñ‹Ñокий" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "Параметры отправки" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "Срок дейÑтвиÑ" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "Приоритет" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "Отправить отчет о доÑтавке" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "ОтправлÑÑ‚ÑŒ отчет о прочтении" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "Тип контента" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "ÐдреÑ" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "Точное Ñовпадение" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "Содержит" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "УÑловие ÑовпадениÑ" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "Один раз" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "ДлительноÑÑ‚ÑŒ Ñтраницы" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "Кодировка Ñимволов" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "ТекÑÑ‚" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "SOS ÑообщениÑ" @@ -367,21 +163,12 @@ msgstr "SMS" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "Общий размер" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Юникод" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "Файлы DRM" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "Изменить канал" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "СпиÑок Ñлементов" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "Ñек." - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 Ñекунд" @@ -400,12 +187,6 @@ msgstr "УÑтановить" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "Роуминг" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "Сдвиг" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "Стиль шрифта" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "Ð¡Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ контакте" @@ -418,18 +199,6 @@ msgstr "Сбой Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ ÑообщениÑ" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "Сбой отправки ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ MMS" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "Можно отправлÑÑ‚ÑŒ изображение размером до %d Кб" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "Визитка" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "Ðет имени" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "Добро пожаловать" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "ПереÑ." @@ -439,165 +208,60 @@ msgstr "Ðепрочитанные" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "ПеремеÑтить на телефон" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "Добавить текÑÑ‚" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "ПовторÑющийÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð°Ñ‚ÐµÐ»ÑŒ" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "МакÑимальный размер Ð´Ð»Ñ ÑозданиÑ" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "ДоÑтигнуто макÑимальное чиÑло получателей (%d)" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "Добавить тему" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "Группы" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "Контакты" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "Другие файлы" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "Звук" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "Добавить медиа" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "Выключено" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "Включено" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "Кому" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "ЗапиÑать звук" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "ЗапиÑать звук" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "ЗапиÑать видео" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "Шаблоны SMS" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "Изменено на MMS" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "Изменено на SMS" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "Введите адреÑ" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "ÐедопуÑтимый файл" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "Сообщение отправлено" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "Размер ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð¿Ñ€ÐµÐ²Ñ‹ÑˆÐµÐ½" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "ДоÑтупно вложений: %d. Выберите не более %d вложений" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "Сервер не отвечает" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "Ðевозможно вложить вÑе файлы. МакÑимальный размер вложений — %d Кб. Продолжить?" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "Ðевозможно отправить MMS. ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°Ñ€Ñ" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "Размер шрифта" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "Без вложений" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "Ð’Ñе ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ñлектронной почты" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "Режим ÑозданиÑ" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "Сообщение доÑтавлено" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "MMS" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "Ðовое Ñообщение голоÑовой почты" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "Ðет темы" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "Да, вÑе" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "SMS-центр" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "Загрузка уÑлуг" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "Звук" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "Ðе удалоÑÑŒ отправить. Вложены файлы неподдерживаемого типа" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "СпиÑок беÑед" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "Выберите адреÑ" msgid "IDS_MSGF_OPT_MOVE_TO_SIM" -msgstr "ПеремеÑтить на SIM" +msgstr "ПеремеÑтить на SIM-карту" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "Ð’Ñ‹ ÑобираетеÑÑŒ выйти в Ñеть (%s). Продолжить?" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "Сбой загрузки MMS" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "Ðет получателÑ" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "ТребуетÑÑ" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "Сохранить в черновиках?" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "Превышен макÑимальный размер ÑообщениÑ. Изменение размера..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¾Ñ‚Ð¼ÐµÐ½ÐµÐ½Ð°" - msgid "IDS_MSGF_SK_RESEND" msgstr "Отправить повторно" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "Добавить канал" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "ÐедопуÑтимый получатель" @@ -610,27 +274,15 @@ msgstr "ВоÑпроизведение во Ð²Ñ€ÐµÐ¼Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð° невозм msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "Ðевозможно Ñохранить в режиме Ñъемного диÑка" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Ðевозможно открыть в режиме Ñъемного диÑка" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Ðевозможно иÑпользовать в режиме Ñъемного диÑка" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "Отметить текущее Ñообщение?" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "Выбранное" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "Выбрано" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "Удалить?" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "Изменение размера..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "Ðевозможно вложить. МакÑимальный размер файлов: %d КБ" @@ -649,3 +301,204 @@ msgstr "Политика безопаÑноÑти ограничивает наРmsgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "Добавление. Подождите..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "ÐÐ´Ñ€ÐµÑ Ñ†ÐµÐ½Ñ‚Ñ€Ð° обÑлуживаниÑ" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Спам" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Большой" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Обычный" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Маленький" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Ðе удалоÑÑŒ отправить запланированное Ñообщение. Задайте другое времÑ" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Дата и времÑ" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Получатели не введены. Введите получателей" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Параметры отправки" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Тип ÑƒÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾ получении" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Обычный" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Отправка SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Получатели" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Повтор" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Сообщение" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "1 раз" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 раза" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 раз" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Я в беде! Мне нужна помощь." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM-карта не уÑтановлена" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Сделать фото" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "ЗапиÑать видео" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "ЗапиÑÑŒ звука" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Широковещательные Ñообщ." + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Ð¡Ð¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° SIM-карте" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "ДлительноÑÑ‚ÑŒ должна быть более %d Ñек." + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Ðевозможно добавить Ñодержимое" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Выберите получателÑ" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "ПроÑмотреть" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "ДлительноÑÑ‚ÑŒ (%s Ñек.)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Слишком большой размер изображениÑ. Сжатие..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Сообщение Ñохранено как черновик" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Другой" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Черновик" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "ДлительноÑÑ‚ÑŒ Ñлайда" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Отправить E-mail" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Ð’Ñтавленные Ñлементы" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "ВложениÑ" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "Вложений: %d" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Запланир.\nÑообщение" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Продолжительн.\n(%d Ñ.)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "ИÑп. Ñвед. о др. конт." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Сообщение Ñодержит вложенный файл, который не отображаетÑÑ." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Сообщение Ñодержит вложенные файлы, которые не отображаютÑÑ" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Сохранить вÑе" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Черновики" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Сообщение будет воÑÑтановлено" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Запланированное Ñообщение будет отменено" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Копировать текÑÑ‚" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "ПроÑмотреть ÑведениÑ" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Заблокированные ÑообщениÑ" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Папки Ñообщений" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Блокировать" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Копировать на телефон" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Сообщение Ñкопировано Ñ SIM-карты" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Отменить ÑообщениÑ" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "ВложениÑ" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Отправка Ñбойного ÑообщениÑ" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "ДоÑтигнуто макÑимальное чиÑло Ñимволов" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "ВоÑÑтановление..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Ðет вложений" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Скопировано в буфер обмена" + diff --git a/main/po/sk.po b/main/po/sk.po new file mode 100644 index 0000000..37c7b82 --- /dev/null +++ b/main/po/sk.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Nedá sa otvoriÅ¥" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "StiahnuÅ¥" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Nedá sa presunúť" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Dosiahol sa maximálny poÄet strán" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Obmedzený režim. Nedá sa vložiÅ¥ obmedzený obsah" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "DoruÄené" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "PlatnosÅ¥ vyprÅ¡ala" + +msgid "IDS_MSGF_BODY_READ" +msgstr "PreÄÃtané" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "NaÄÃtavanie..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Pred odoslanÃm správ vložte SIM kartu. Správa sa uložà do prieÄinka Na odoslanie" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Zadajte ÄÃslo kanála" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 vybratá správa" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "Vybraté správy: %d" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Ukážka" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Názov súboru už existuje" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Žiadne správy" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "PridaÅ¥ do kontaktu" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "VyradiÅ¥" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Správa sa nedá odoslaÅ¥" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "OdfotiÅ¥" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Žiadna adresa" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Zoznam priložených položiek" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Automaticky stiahnuÅ¥" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Vysielané správy" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Centrum %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Vlastný Äas" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Potvrdenie o doruÄenÃ" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Odosielanie sa nepodarilo" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Od" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Zoznam vložených položiek" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Správa bola doruÄená" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Správa naÄÃtaná" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Voľné" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Upozornenie" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Odoslané" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "kB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Správa push" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Potvrdenie o preÄÃtanÃ" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Prijatá" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "RuÄne" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "OdmietnuÅ¥" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Možnosti prÃjmu" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "VyžiadaÅ¥ potvrdenie o doruÄenÃ" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "VyžiadaÅ¥ potvrd. o preÄÃt." + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Zakázané" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "NÃzka" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normálna" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Naliehavé" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "DôležitosÅ¥" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "OdoslaÅ¥ potvrdenie o preÄÃtanÃ" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Trvanie stránky" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "Tiesňové správy" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "SMS" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Celková veľkosÅ¥" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "Obsah DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Zoznam položiek" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sekúnd" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sekundy" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sekúnd" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Domáca sieÅ¥" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "InÅ¡talovaÅ¥" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "SieÅ¥ roaming" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "ZobraziÅ¥ kontaktné údaje" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "MMS odoslaná" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "NaÄÃtanie správy sa nepodarilo" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Odoslanie multimediálnej správy zlyhalo" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "PredaÅ¥" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Nepre-ÄÃtané" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Presunúť do telefónu" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Duplicitný prÃjemca" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Dosiahol sa maximálny poÄet prÃjemcov (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Komu" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "NahraÅ¥ zvuk" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "NahraÅ¥ video" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Zmenená na MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Zmenené na SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d prÃloh k dispozÃcii. Vyberte maximálne %d prÃloh" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Nedajú sa priložiÅ¥ vÅ¡etky súbory. Maximálna veľkosÅ¥ prÃloh je %d kB. PokraÄovaÅ¥?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "VeľkosÅ¥ pÃsma" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Režim vytvárania" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Žiadny predmet" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Stredisko služieb" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Vyberte adresu" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Presunúť na SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Chystáte sa prejsÅ¥ do režimu online (%s). Chcete pokraÄovaÅ¥?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "OdoslaÅ¥ znova" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Neplatný prÃjemca" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Neplatnà prÃjemcovia" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "PoÄas hovoru sa nedá prehrávaÅ¥" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Nemožno uložiÅ¥ v režime veľkokapacitného ukladacieho priestoru" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "ZahodiÅ¥ aktuálnu správu?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Vybrané" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "OdstrániÅ¥?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Nedá sa priložiÅ¥. Maximálna veľkosÅ¥ súborov je %d kB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Zakázané" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Nedá sa preposlaÅ¥ Äalej.\nSúbor je zamknutý proti preposielaniu Äalej" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Naplánovaná správa" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Politika zabezpeÄenia obmedzuje pÃsanie textových správ" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Pridáva sa. PoÄkajte, prosÃm..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adresa strediska služieb" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Nevyžiadané správy" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Veľké" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normál." + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Malé" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Naplánovaná správa sa nedá odoslaÅ¥. Nastavte iný Äas" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Dátum a Äas" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Nepridali sa žiadni prÃjemcovia. Zadajte prÃjemcov" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Možnosti odosielania" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Typ upozornenia na prijÃmanie" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normál." + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Odosielanie tiesňovej správy" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "PrÃjemcovia" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "OpakovaÅ¥" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Správa" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Raz" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "Trikrát" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "Päťkrát" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Som v tiesňovej situácii. Pomôžte mi, prosÃm." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM karta nie je vložená" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "FotografovaÅ¥" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "SnÃmaÅ¥ video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "NahraÅ¥ zvuk" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Správy CB" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Správy na karte SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Trvanie musà byÅ¥ dlhÅ¡ie než %d sekundy" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Obsah sa nedá pridaÅ¥" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "VybraÅ¥ prÃjemcu" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "ZobraziÅ¥ kontakty" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Trvanie (%s s)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Obrázok je prÃliÅ¡ veľký. Komprimuje sa..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Správa uložená ako koncept" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "ÄŽalÅ¡ie" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Koncept" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Trvanie snÃmky" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "OdoslaÅ¥ e-mail" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Vložené položky" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Pripojené položky" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "PrÃlohy: %d" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Naplánovaná\nspráva" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Trvanie\n(%d s)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Použ. Äal. kont. údaje" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Tato správa obsahuje súbor, ktorý nie je uvedený." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Tato správa obsahuje nezobrazené priložené súbory" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "UložiÅ¥ vÅ¡etko" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Koncepty správ" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Správa sa obnovÃ" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Naplánovaná správa sa zruÅ¡Ã" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "KopÃr. text správy" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Zobr. detaily správy" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Uzamknuté správy" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Schránky správ" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "BlokovaÅ¥" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "KopÃrovaÅ¥ do telefónu" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Správa sa skopÃrovala z karty SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "ZruÅ¡iÅ¥ správu" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "PrÃlohy" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Odosiela sa zlyhaná správa" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Bol dosiahnutý maximálny poÄet znakov" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Obnovenie..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Žiadne prÃlohy" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "SkopÃrované do schránky" + diff --git a/main/po/sl.po b/main/po/sl.po new file mode 100644 index 0000000..8a6856f --- /dev/null +++ b/main/po/sl.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Ni mogoÄe odpreti" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Naloži" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Premikanje ni mogoÄe" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Doseženo je najveÄje dovoljeno Å¡tevilo strani" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Omejen naÄin. Ni mogoÄe vstaviti omejene vsebine" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Dostavljeno" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Veljavnost je potekla" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Prebrano" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Nalagam..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Vstavite kartico SIM za poÅ¡iljanje sporoÄil. SporoÄilo se bo shranilo v mapo V poÅ¡iljanju" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Vnesi Å¡tevilko postaje" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 sporoÄilo je izbrano" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d izbranih sporoÄil" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Predogled" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Ime datoteke že obstaja" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Ni sporoÄil" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Dodaj v stike" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Zavrzi." + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Ni mogoÄe poslati sporoÄila" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Posnemi fotografijo" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Ni naslova" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Seznam pripetih predmetov" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Samodejno nalaganje" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Info sporoÄila" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Center %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "ÄŒas po meri" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "PoroÄilo o dostavi" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "PoÅ¡iljanje ni uspelo" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Od" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Seznam vnesenih predmetov" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "SporoÄilo je dostavljeno" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "SporoÄilo je naloženo" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Prosto" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Opozorilo" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Poslano" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Potisna sporoÄila" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "PoroÄilo o branju" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Prejeto" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "RoÄno" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Zavrni" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Možnosti sprejema" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Zahtevaj poroÄilo o dostavi" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Zahtevaj poroÄilo o branju" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Omejeno" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Nizka" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normalno" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Nujno" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Pomembnost" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "PoÅ¡lji poroÄilo o branju" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Trajanje strani" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "SporoÄila v sili" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Besedilna sporoÄila" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Skupna velikost" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "Vsebina DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Seznam predmetov" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sekund" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sekundi" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sekund" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "DomaÄe omrežje" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Namesti" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Tuje omrežje" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Prikaži podrobnosti stika" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "VeÄpredstavnostno sporoÄilo je poslano" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Nalaganje sporoÄila ni uspelo" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "PoÅ¡iljanje sporoÄila MMS ni uspelo" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Posred." + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Neprebr." + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Premakni v telefon" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Prejemnik je podvojen" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Doseženo je najveÄje dovoljeno Å¡tevilo prejemnikov (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Za" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Posnemi zvok" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Posnemi video" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Spremenjeno v MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Spremenjeno v SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "Na voljo je %d prilog. Izberite do %d prilog" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Vseh datotek ni mogoÄe priložiti. Velikost prilog je omejena na %d KB. Želite nadaljevati?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Velikost pisave" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "NaÄin ustvarjanja" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Multimedijsko sporoÄilo" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Ni zadeve" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Servisni center" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Izberi naslov" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Premakni na SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Vzpostavili boste povezavo (%s). Nadaljujem?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Znova poÅ¡lji" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Neveljaven prejemnik" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Neveljavni prejemniki" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Ni mogoÄe predvajati med klicem" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Ni mogoÄe shraniti v naÄinu shranjevanja" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Zavržem trenutno sporoÄilo?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Izbrano" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "IzbriÅ¡em?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Ni mogoÄe priložiti. NajveÄja dovoljena velikost datotek je %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Omejeno" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Dodajanje ni mogoÄe. Datoteka ima onemogoÄeno posredovanje" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "NaÄrtovano sporoÄilo" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Varnostni pravilnik omejuje sestavljanje besedilnih sporoÄil" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Dodajam. PoÄakajte ..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Naslov centra za storitve" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Neželena sporoÄila" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Velika" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normalno" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Majhna" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Drobna" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "NaÄrtovanega sporoÄila ni mogoÄe poslati. Nastavite drugo uro" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Datum in Äas" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Multimedijska sporoÄila" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Ni dodanih prejemnikov. Vnesite prejemnike." + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Možnosti za poÅ¡iljanje" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Vrsta opozorila za sprejem" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normalno" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "PoÅ¡iljanje sporoÄila v sili" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Prejemniki" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Ponovi" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "SporoÄilo" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Enkrat" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3-krat" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5-krat" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Potrebujem pomoÄ. Pomagajte mi" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM ni vstavljena" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Posnemi sliko" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Posnemi video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Posnemi zvok" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "SporoÄila v celici" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SporoÄila na kartici SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Trajanje mora biti daljÅ¡e od %d sekund" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Vsebine ni mogoÄe dodati" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Izberite prejemnika" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Prikaži vizitko" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Trajanje (%s s)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Slika je prevelika. Stiskam..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "SporoÄilo shranjeno kot osnutek" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Drugo" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Osnutek" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Trajanje za diapozitiv" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "PoÅ¡lji e-poÅ¡to" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Vstavljeni elementi" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Priloženi predmeti" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d prilog" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "NaÄrtovano\nsporoÄilo" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Trajanje\n(%d s)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Up. druge pod. za stik" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "SporoÄilo vsebuje pripeto datoteko, ki ni prikazana" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "To sporoÄilo vkljuÄuje priložene datoteke, ki niso prikazane" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Shrani vse" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Osnutki sporoÄil" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "SporoÄilo bo obnovljeno" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "NaÄrtovano sporoÄilo bo preklicano" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Kop. bes. sporoÄila" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Prik.podr. sporoÄila" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Zaklenjena sporoÄila" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "SporoÄilna polja" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blokiraj" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Kopiraj v telefon" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "SporoÄilo je kopirano s kartice SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "PrekliÄi sporoÄilo" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Priloge" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "PoÅ¡iljanje sporoÄila ni uspelo" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Doseženo je najveÄje dovoljeno Å¡tevilo znakov" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Obnavljanje..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Ni prilog" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Kopirano v odložiÅ¡Äe" + diff --git a/main/po/sr.po b/main/po/sr.po new file mode 100644 index 0000000..82ce48c --- /dev/null +++ b/main/po/sr.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Nemoguće otvoriti" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Preuzmi" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Nemoguće premestiti" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Dostignut maksimalan broj strana" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "OgraniÄen režim. Nemoguće ubaciti sadržaj sa ograniÄenjem prikazivanja" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "IsporuÄeno" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Datum isteka već proÅ¡ao" + +msgid "IDS_MSGF_BODY_READ" +msgstr "ProÄitano" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Preuzimanje..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Ubaci SIM karticu radi slanja poruka. Poruka će biti saÄuvana u otpremnom sanduÄetu" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Unesi broj kanala" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "Izabrano poruka: 1" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "Izabrano poruka: %d" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Pregled" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Naziv fajla već postoji" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Nema poruka" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Dodaj u kontakte" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Odbaci" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Nemoguće poslati poruku" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Slikaj" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Nema adrese" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Lista priloženih stavki" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Automatsko preuzimanje" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Info poruke" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Centar %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Željeno vreme" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "IzveÅ¡taj o prispeću" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Slanje neuspeÅ¡no" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Od" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Lista ubaÄenih stavki" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Poruka isporuÄena" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Poruka primljena" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Slobodno" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Upozorenje" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Poslato" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Pritisne poruke" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "ÄŒitanje izveÅ¡taja" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Primljeno" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "RuÄno" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Odbaci" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Opcije prijema" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Zahtevaj izveÅ¡taj o prispeću" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Zahtevaj izveÅ¡. o Äitanju" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "OgraniÄeno" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Nizak" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normalan" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Hitno" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Prioritet" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Å alji izveÅ¡taj o Äitanju" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Dužina prikaza jedne strane" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "SOS poruke" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Tekstualne poruke" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Ukupna veliÄina" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM sadržaj" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Lista stavki" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sekundi" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sekunde" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sekundi" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Domaća mreža" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Instaliraj" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Strana mreža" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Prikaži podatke o kontaktu" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Multimedijalna poruka poslata" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Preuzimanje poruke neuspeÅ¡no" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Slanje multimedijalne poruke neuspeÅ¡no" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Prosledi" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "NeproÄ." + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Prebaci u telefon" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Primalac dupliran" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Dostignut maksimalan broj primalaca (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Za" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Snimi zvuk" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Snimi video zapis" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Promenjeno na MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Promenjeno u SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "Dostupno je %d priloga. Izaberi do %d priloga" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Nemoguće priložiti sve fajlove. Maksimalna veliÄina priloga je %d KB. Nastavak?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "VeliÄina fonta" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Režim kreiranja" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Multimedijalna poruka" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Nema naslova" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Servisni centar" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Izaberi adresu" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Prebaci u SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Prećićete u online režim (%s). Nastaviti?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Ponovi slanje" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Neispravan primalac" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Neispravni primaoci" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Nemoguće reprodukovati tokom poziva" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Nije moguće Äuvanje u režimu masovne memorije" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Odbaci trenutnu poruku?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Izabrano" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "ObriÅ¡i?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Nemoguće priložiti. Maks. veliÄina fajlova je %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "OgraniÄeno" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Nemoguće proslediti. Fajl je zakljuÄan za prosleÄ‘ivanje" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Planirana poruka" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Politika bezbednosti ograniÄava pisanje tekstualnih poruka" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Dodavanje. SaÄekaj..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adresa servisnog centra" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Spam poruke" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Velika" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normalan" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Mala" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Mala" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Nije moguće poslati planiranu poruku. Podesi drugo vreme" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Datum i vreme" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Multimedijalne poruke" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Nisu dodati primaoci. Unesi primaoce" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Opcije slanja" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Tip upozorenja na prijem" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normalan" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Slanje SOS-a" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Primaoci" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Ponovi" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Poruka" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Jednom" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 puta" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 puta" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "U opasnosti sam. Pomozite mi." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM kartica nije ubaÄena" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Slikaj" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Snimi video zapis" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Snimi audio" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Info poruke" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Poruke SIM kartice" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Trajanje mora biti duže od %d sekundi" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Nemoguće dodati sadržaj" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Izaberi primaoca" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Prikaži kontakt" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Trajanje (%s sek.)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Slika prevelika. Sabijanje..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Poruka saÄuvana kao skica" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Ostalo" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Skice" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Trajanje prikaza slajda" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "PoÅ¡alji e-poruku" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "UbaÄene stavke" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Priložene stavke" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d priloga" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Planirana\nporuka" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Trajanje\n(%d sek.)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Koristi druge kontakt informacije" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Ova poruka sadrži neprikazan priložen fajl" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Ova poruka sadrži neprikazane priložene fajlove" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "SaÄuvaj sve" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Skica poruka" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Poruke će biti vraćene" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Planirana poruka će biti otkazana" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Kopiraj tekst poruke" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Prikaži info. o por." + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "ZakljuÄane poruke" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "SanduÄići" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blokiraj" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Kopiraj u telefon" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Poruka je kopirana sa SIM kartice" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Otkaži poruku" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Prilozi" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Slanje neuspeÅ¡no poslate poruke" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Dostignut maksimalan broj karaktera" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Vraćanje..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Nema priloga" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Iskopirano u privremenu memoriju" + diff --git a/main/po/sv.po b/main/po/sv.po new file mode 100644 index 0000000..33e19c6 --- /dev/null +++ b/main/po/sv.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Det gÃ¥r inte att öppna" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Hämta" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Det gÃ¥r inte att flytta" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Högsta antal sidor har uppnÃ¥tts" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Begränsat läge. Det gÃ¥r inte att infoga begränsat innehÃ¥ll" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Levererat" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Har slutat gälla" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Läs" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Hämtar..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Sätt i ett SIM-kort för att skicka meddelanden. Meddelandet sparas i Utkorgen" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Ange kanalnummer" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 valt meddelande" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d valda meddelanden" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Förhandsgranska" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Filnamnet finns redan" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Inga meddelanden" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Lägg till till kontakt" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Avvisa" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Kan inte skicka meddelande" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Ta foto" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Ingen adress" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Bifogade objekt" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Autohämtning" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Broadcast-meddelanden" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Center %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Egen tid" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Leveransrapport" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Sändningsfel" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "FrÃ¥n" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Infogade objekt" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Meddelande levererat" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Meddelande hämtat" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Fritt" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Varning" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Sänt" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Push-meddelanden" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Läsrapport" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Mottaget" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Manuellt" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Avvisa" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Mottagningsalternativ" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Begär leveransrapport" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Begär läsrapport" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Begränsat" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "LÃ¥g" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "BrÃ¥dskande" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Prioritet" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Sänd läsrapport" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Sidvaraktighet" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "SOS-meddelanden" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Textmeddelanden" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Total storlek" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "DRM-innehÃ¥ll" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Lista över objekt" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 sekunder" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 sekunder" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 sekunder" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Hemnät" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Installera" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Roaming-nät" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Visa kontaktinformation" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Multimediemeddelande skickat" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Fel vid hämtning av meddelande" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Det gick inte att skicka multimediemeddelandet" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Vidare." + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Olästa" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Flytta till telefon" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "Mottagare finns redan" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Högsta antalet mottagare (%d) har uppnÃ¥tts" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Till" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Spela in ljud" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Spela in video" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Ändrad till multimediemeddelande" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Ändrat till SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d bilagor är tillgängliga. Välj upp till %d bilagor" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Det gÃ¥r inte att bifoga alla filer. Högsta kapacitet för bilagor är %d KB. Fortsätta?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Teckenstorlek" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Skapaläge" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Multimediemeddelande" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Ingen rubrik" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Tjänstecenter" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Välj adress" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Flytta till SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Du kommer att ansluta (%s). Fortsätt?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Skicka igen" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Ogiltig mottagare" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "Ogiltiga mottagare" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Kan inte spela upp under samtal" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Det gÃ¥r inte att spara i masslagringsläget" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Ignorera aktuellt meddelande?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Vald" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Radera?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Det gÃ¥r inte att bifoga. Högsta filstorlek är %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Begränsat" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Det gÃ¥r inte att vidarebefordra.\nFilen är lÃ¥st" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Schemalagt meddelande" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Säkerhetspolicy begränsar hur textmeddelanden kan skrivas" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Lägger till. Vänta..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Adress till tjänstcentral" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Skräppostmeddelanden" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Stor" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Liten" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Det gÃ¥r inte att skicka schemalagt meddelande. Ange en annan tid" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Datum och tid" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Multimediemeddelanden" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Inga mottagare har lagts till. Lägg till mottagare" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Sändalternativ" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Tar emot varningstyp" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Sänder SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Mottagare" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Upprepa" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Meddelande" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "En gÃ¥ng" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 gÃ¥nger" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 gÃ¥nger" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Jag är i nöd. Hjälp mig." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM-kortet är inte isatt" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Ta foto" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Spela in video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Spela in ljud" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CB-meddelanden" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM-kortsmeddelanden" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Varaktigheten mÃ¥ste vara längre än %d sekunder" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Det gÃ¥r inte att lägga till innehÃ¥ll" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Välj mottagare" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Visa kontakter" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Varaktighet (%s s)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "För stor bild. Komprimerar..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Meddelandet har sparats som utkast" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Annat" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Utkast" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Tidslängd för bild" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Skicka e-post" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Infogade objekt" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Bifogade objekt" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d bilagor" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Schemalagt\nmeddelande" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Varaktighet\n(%d sek)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Anv. ann. kontaktinfo." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Meddelandet innehÃ¥ller en bifogad fil som inte visas" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Meddelandet innehÃ¥ller bifogade filer som inte visas" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Spara alla" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Utkast" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Meddelandet kommer att Ã¥terställas" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Schemalagt meddelande kommer att avbrytas" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Kopiera medd.text" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Visa meddelandeinfo" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "LÃ¥sta meddelanden" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Meddelanderutor" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Blockera" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Kopiera till telefonen" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Meddelandet har kopierats frÃ¥n SIM-kortet" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Avbryt meddelande" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Bilagor" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Skickar misslyckat meddelande" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Maximalt antal tecken har använts" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Ã…terställer..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Inga bilagor" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Kopierat till Urklipp" + diff --git a/main/po/th.po b/main/po/th.po new file mode 100644 index 0000000..23b1ba6 --- /dev/null +++ b/main/po/th.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "เปิด​ไม่​ได้" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "เรียà¸" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "ย้าย​ไม่​ได้" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "จำนวน​หน้า​มาà¸â€‹à¸—ี่​สุด" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "โหมด​à¹à¸šà¸šâ€‹à¸–ูà¸â€‹à¸ˆà¸³à¸à¸±à¸” ไม่​สามารถ​ใส่​คà¸à¸™â€‹à¹€à¸—นท์​ที่​ถูà¸â€‹à¸ˆà¸³à¸à¸±à¸”" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "ส่ง​à¹à¸¥à¹‰à¸§" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "หมด​à¸à¸²à¸¢à¸¸" + +msgid "IDS_MSGF_BODY_READ" +msgstr "à¸à¹ˆà¸²à¸™" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "à¸à¸³à¸¥à¸±à¸‡â€‹à¹€à¸£à¸µà¸¢à¸..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "ใส่ SIM ​à¸à¸²à¸£à¹Œà¸”​เพื่à¸â€‹à¸ªà¹ˆà¸‡â€‹à¸‚้à¸â€‹à¸„วาม ข้à¸â€‹à¸„วาม​จะ​ถูà¸â€‹à¸šà¸±à¸™à¸—ึà¸â€‹à¹ƒà¸™â€‹à¸‚้à¸â€‹à¸„วาม​à¸à¸à¸" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "ใส่​หมาย​เลข​สถานี" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "เลืà¸à¸â€‹à¹à¸¥à¹‰à¸§ 1 ​ข้à¸â€‹à¸„วาม" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "เลืà¸à¸â€‹à¹à¸¥à¹‰à¸§ %d ​ข้à¸â€‹à¸„วาม" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "ตัวà¸à¸¢à¹ˆà¸²à¸‡" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "มี​ชื่à¸â€‹à¹„ฟล์​à¸à¸¢à¸¹à¹ˆâ€‹à¹à¸¥à¹‰à¸§" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "ไม่มีข้à¸à¸„วาม" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "เพิ่ม​ใน​ราย​ชื่à¸" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "ละทิ้ง" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "ไม่​สามารถ​ส่ง​ข้à¸â€‹à¸„วาม" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "ถ่าย​รูป" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "ไม่​มี​ที่​à¸à¸¢à¸¹à¹ˆ" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "รายà¸à¸²à¸£â€‹à¸—ี่​à¹à¸™à¸šâ€‹à¸¡à¸²â€‹à¸”้วย" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "ดาวน์​โหลด​à¸à¸±à¸•à¹‚นมัติ" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "ข้à¸à¸„วามเครืà¸à¸‚่าย" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "ศูนย์ข้à¸à¸„วาม %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "à¸à¸³à¸«à¸™à¸”​เวลา​เà¸à¸‡" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "รายงาน​à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡â€‹à¸œà¸´à¸”​พลาด" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "จาà¸" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "รายà¸à¸²à¸£â€‹à¸—ี่​ใส่​เพิ่ม" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "ข้à¸â€‹à¸„วาม​ถูà¸â€‹à¸™à¸³â€‹à¸ªà¹ˆà¸‡â€‹à¹à¸¥à¹‰à¸§" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "ข้à¸â€‹à¸„วาม​ถูà¸â€‹à¹€à¸£à¸µà¸¢à¸â€‹à¹à¸¥à¹‰à¸§" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "ฟรี" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "คำ​เตืà¸à¸™" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "ส่งà¹à¸¥à¹‰à¸§" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "ข้à¸â€‹à¸„วาม​พุ​ช" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "รายงาน​à¸à¸²à¸£â€‹à¸à¹ˆà¸²à¸™" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "ได้​รับ​à¹à¸¥à¹‰à¸§" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "เลืà¸à¸â€‹à¹€à¸à¸‡" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "ปà¸à¸´à¹€à¸ªà¸˜" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "ทาง​เลืà¸à¸â€‹à¸à¸²à¸£â€‹à¸£à¸±à¸š" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "ต้à¸à¸‡â€‹à¸à¸²à¸£â€‹à¸£à¸²à¸¢à¸‡à¸²à¸™â€‹à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "ต้à¸à¸‡â€‹à¸à¸²à¸£â€‹à¸£à¸²à¸¢à¸‡à¸²à¸™â€‹à¸à¸²à¸£â€‹à¸à¹ˆà¸²à¸™" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "จำà¸à¸±à¸”" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "ต่ำ" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "ปà¸à¸•à¸´" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "เร่ง​ด่วน" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "ระดับ​ความ​สำคัà¸" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "ส่ง​รายงาน​à¸à¸²à¸£â€‹à¸à¹ˆà¸²à¸™" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "เวลา​à¹à¸ªà¸”ง​หน้า​ข้à¸â€‹à¸„วาม" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "ข้à¸â€‹à¸„วาม​ฉุà¸â€‹à¹€à¸‰à¸´à¸™" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "ข้à¸â€‹à¸„วาม" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "ขนาด​ทั้ง​หมด" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "คà¸à¸™â€‹à¹€à¸—นท์ DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "ราย​à¸à¸²à¸£â€‹" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 วินาที" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 ​วินาที" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 ​วินาที" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "เครืà¸â€‹à¸‚่าย​หลัà¸" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "ติด​ตั้ง" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "เครืà¸â€‹à¸‚่าย​ต่าง​ประเทศ" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "ดู​ราย​ละเà¸à¸µà¸¢à¸”​ราย​ชื่à¸" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "ส่ง​ข้à¸â€‹à¸„วาม​มัลติ​มี​เดีย​à¹à¸¥à¹‰à¸§" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "เรียà¸à¸‚้à¸à¸„วาม\n​ผิดพลาด" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡â€‹à¸‚้à¸â€‹à¸„วาม​มัลติ​มี​เดีย​ไม่​สำเร็จ" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "ส่ง​ต่à¸" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "ไม่​à¸à¹ˆà¸²à¸™" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "ย้าย​ไป​ยัง​\nโทรศัพท์" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "ผู้​รับ​ซ้ำ" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "ถึง​จำนวน​ผู้​รับ​สูง​สุด (%d) ​à¹à¸¥à¹‰à¸§" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "ถึง" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "บันทึà¸â€‹à¹€à¸ªà¸µà¸¢à¸‡" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "บันทึà¸â€‹à¸§à¸µâ€‹à¸”ี​โà¸" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "เปลี่ยน​เป็น MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "เปลี่ยน​เป็น SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "มี​ไฟล์​à¹à¸™à¸šâ€‹à¸—ี่​ใช้​ได้ %d ​ไฟล์ เลืà¸à¸â€‹à¹„ฟล์​à¹à¸™à¸šâ€‹à¹„ม่​เà¸à¸´à¸™ %d ​ไฟล์" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "ไม่​สามารถ​à¹à¸™à¸šâ€‹à¹„ฟล์​ทั้ง​หมด ความ​จุ​ขà¸à¸‡â€‹à¹„ฟล์​à¹à¸™à¸šâ€‹à¸ªà¸¹à¸‡â€‹à¸ªà¸¸à¸” %d ​KB ​ทำ​ต่à¸?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "ขนาด​à¸à¸±à¸à¸©à¸£" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "โหมด​à¸à¸²â€‹à¸£à¸ªâ€‹à¸£à¹‰à¸²à¸‡" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "ข้à¸â€‹à¸„วาม​มัลติ​มี​เดีย" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "ไม่​มี​ชื่à¸â€‹à¹€à¸£à¸·à¹ˆà¸à¸‡" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "ศูนย์​บริà¸à¸²à¸£" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "เลืà¸à¸â€‹à¸—ี่​à¸à¸¢à¸¹à¹ˆ" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "ย้าย​ไป​ยัง SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "คุณ​à¸à¸³à¸¥à¸±à¸‡â€‹à¸ˆà¸°â€‹à¸à¸â€‹à¸™â€‹à¹„ลน์(%s) ​ทำ​ต่à¸?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "ส่ง​ใหม่" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "ผู้​รับ​ไม่​ถูà¸â€‹à¸•à¹‰à¸à¸‡" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "ผู้​รับ​ไม่​ถูà¸â€‹à¸•à¹‰à¸à¸‡" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "เล่น​ไม่​ได้ ขณะ​โทร" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "บันทึà¸â€‹à¹„ม่​ได้ ขณะ​à¸à¸¢à¸¹à¹ˆâ€‹à¹ƒà¸™â€‹à¹‚หมด​ที่​เà¸à¹‡à¸šâ€‹à¸‚้à¸à¸¡à¸¹à¸¥" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "ยà¸â€‹à¹€à¸¥à¸´à¸â€‹à¸‚้à¸â€‹à¸„วาม​ปัจจุบัน?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "เลืà¸à¸à¹à¸¥à¹‰à¸§" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "ลบ?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "ไม่​สามารถ​à¹à¸™à¸šâ€‹à¹„ด้ ขนาด​ไฟล์​สูง​สุด​คืภ%d ​KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "จำà¸à¸±à¸”" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "ส่ง​ต่à¸â€‹à¹„ม่​ได้\n​ไฟล์​ถูà¸â€‹à¸¥à¹‡à¸à¸â€‹à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡â€‹à¸•à¹ˆà¸" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "ข้à¸â€‹à¸„วาม​\nที่ตั้งเวลา" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "นโยบาย​ความ​ปลà¸à¸”ภัย​จำà¸à¸±à¸”​à¸à¸²à¸£â€‹à¹€à¸‚ียน​ข้à¸â€‹à¸„วาม​ปà¸à¸•à¸´" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "à¸à¸³à¸¥à¸±à¸‡â€‹à¹€à¸žà¸´à¹ˆà¸¡ โปรด​รà¸..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "หมาย​เลข​ศูนย์​บริà¸à¸²à¸£" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "ข้à¸â€‹à¸„วาม​ขยะ" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "ใหà¸à¹ˆ" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "ปà¸à¸•à¸´" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "เล็à¸" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "ไทนี" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "ไม่​สามารถ​ส่ง​ข้à¸â€‹à¸„วาม​ที่​วาง​à¸à¸³à¸«à¸™à¸”​à¸à¸²à¸£â€‹à¹„ว้ ตั้ง​ค่า​เวลา​à¸à¸·à¹ˆà¸™" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "วัน​ที่​à¹à¸¥à¸°â€‹à¹€à¸§à¸¥à¸²" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "ข้à¸â€‹à¸„วาม MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "ไม่​ได้​เพิ่ม​ผู้​รับ ใส่​ผู้​รับ" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "ทาง​เลืà¸à¸â€‹à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "ประเภท​à¸à¸²à¸£â€‹à¹€à¸•à¸·à¸à¸™â€‹à¹€à¸¡à¸·à¹ˆà¸â€‹à¹„ด้​รับ" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "ฉุà¸â€‹à¹€à¸‰à¸´à¸™" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "ปà¸à¸•à¸´" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "à¸à¸²à¸£â€‹à¸ªà¹ˆà¸‡â€‹à¸‚้à¸â€‹à¸„วาม​ฉุà¸â€‹à¹€à¸‰à¸´à¸™" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "ผู้​รับ" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "ซ้ำ" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "ข้à¸â€‹à¸„วาม" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "ครั้ง​เดียว" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 ​ครั้ง" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 ​ครั้ง" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "à¸à¸³à¸¥à¸±à¸‡â€‹à¸à¸¢à¸¹à¹ˆâ€‹à¹ƒà¸™â€‹à¹€à¸«à¸•à¸¸â€‹à¸‰à¸¸à¸â€‹à¹€à¸‰à¸´à¸™ ช่วย​ด้วย" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "ไม่​ได้​ใส่ SIM" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "ใส่​รูป​ภาพ" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "ถ่ายวีดีโà¸" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "à¸à¸²à¸£â€‹à¸šà¸±à¸™à¸—ึà¸â€‹à¹€à¸ªà¸µà¸¢à¸‡" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "ข้à¸â€‹à¸„วาม CB" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "ข้à¸â€‹à¸„วาม​ใน SIM ​à¸à¸²à¸£à¹Œà¸”" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "ช่วง​เวลา​ต้à¸à¸‡â€‹à¸™à¸²à¸™à¸à¸§à¹ˆà¸² %d ​วินาที" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "เพิ่ม​คà¸à¸™â€‹à¹€à¸—นท์​ไม่​ได้" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "เลืà¸à¸â€‹à¸œà¸¹à¹‰â€‹à¸£à¸±à¸š" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "ดู​ราย​ชื่à¸" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "ช่วง​เวลา (%s ​วินาที)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "รูป​ภาพ​ใหà¸à¹ˆâ€‹à¹€à¸à¸´à¸™â€‹à¹„ป à¸à¸³à¸¥à¸±à¸‡â€‹à¸šà¸µà¸šâ€‹à¸à¸±à¸”..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "ข้à¸â€‹à¸„วาม​ที่​บันทึà¸â€‹à¹€à¸›à¹‡à¸™â€‹à¸‚้à¸â€‹à¸„วาม​ร่าง" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "à¸à¸·à¹ˆà¸™à¹†" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "ร่าง" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "ช่วง​เวลา​ขà¸à¸‡â€‹à¸ªà¹„ลด์" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "ส่ง​à¸à¸µâ€‹à¹€à¸¡à¸¥à¹Œ" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "รายà¸à¸²à¸£à¸—ี่ใส่" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "รายà¸à¸²à¸£â€‹à¹à¸™à¸š" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d ​ไฟล์​à¹à¸™à¸š" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "ข้à¸â€‹à¸„วาม\nที่ตั้งเวลา" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "ช่วงเวลา\n(%d วินาที)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "ใช้ข้à¸à¸¡à¸¹à¸¥à¸£à¸²à¸¢à¸Šà¸·à¹ˆà¸à¸à¸·à¹ˆà¸™" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "ข้à¸â€‹à¸„วาม​นี้​รวม​ไฟล์​à¹à¸™à¸šâ€‹à¸—ี่​ไม่​à¹à¸ªà¸”ง" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "ข้à¸â€‹à¸„วาม​นี้​รวม​ไฟล์​à¹à¸™à¸šâ€‹à¸—ี่​ไม่​à¹à¸ªà¸”ง" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "บันทึà¸â€‹à¸—ั้ง​หมด" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "ข้à¸à¸„วามร่าง" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "ข้à¸à¸„วามจะถูà¸à¸„ืนค่า" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "ข้à¸â€‹à¸„วามที่ตั้งเวลาจะถูà¸à¸¢à¸à¹€à¸¥à¸´à¸" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "คัด​ลà¸à¸â€‹à¸‚้à¸â€‹à¸„วาม" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "ดู​ราย​ละเà¸à¸µà¸¢à¸”​ข้à¸â€‹à¸„วาม" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "ข้à¸â€‹à¸„วาม​ที่​ล็à¸à¸" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "à¸à¸¥à¹ˆà¸à¸‡â€‹à¸‚้à¸â€‹à¸„วาม" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "บล็à¸à¸" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "คัด​ลà¸à¸â€‹à¹„ป​ยัง​โทรศัพท์" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "ข้à¸â€‹à¸„วาม​ที่​คัด​ลà¸à¸â€‹à¸ˆà¸²à¸ SIM ​à¸à¸²à¸£à¹Œà¸”" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "ยà¸à¹€à¸¥à¸´à¸à¸‚้à¸à¸„วาม" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "ไฟล์​à¹à¸™à¸š" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "à¸à¸³à¸¥à¸±à¸‡â€‹à¸ªà¹ˆà¸‡â€‹à¸‚้à¸â€‹à¸„วาม​ที่​ล้ม​เหลว" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "จำนวนตัวà¸à¸±à¸à¸©à¸£à¹€à¸à¸´à¸™à¸‚à¸à¸šà¹€à¸‚ต" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "à¸à¸³à¸¥à¸±à¸‡â€‹à¹€à¸£à¸µà¸¢à¸â€‹à¸„ืน..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "ไม่​มี​ไฟล์​à¹à¸™à¸š" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "คัด​ลà¸à¸â€‹à¸¥à¸‡â€‹à¸„ลิ​ป​บà¸à¸£à¹Œà¸”" + diff --git a/main/po/tr_TR.po b/main/po/tr_TR.po index 6dc8a60..d4afbdd 100755..100644 --- a/main/po/tr_TR.po +++ b/main/po/tr_TR.po @@ -7,15 +7,9 @@ msgstr "Al" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "Taşınamıyor" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "Talep edilmedi" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "Maksimum sayfa sayısına ulaşıldı" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "Talep edildi" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "Kısıtlı mod. Kısıtlı içerik girilemedi" @@ -31,54 +25,18 @@ msgstr "Oku" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "Alınıyor..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "Alma baÅŸarısız" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "Mesaj gönderebilmek için lütfen SIM kartını takın. Mesaj, Giden Kutusuna kaydedilecektir" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d dil" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "Merkez adresi" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "Tekrarlanan" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "Kanal adını girin" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "Kanal numarası gir" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "Bir ÅŸey seçilmedi" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d kanal" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "Aynı kanal ID'si var" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "Gönderme baÅŸarısız. Yeniden deneyin?" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "Kanal kimlik listesi dolu" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "1 mesaj seçildi" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "1 kiÅŸi seçildi" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "%d mesaj seçildi" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "%d kiÅŸi seçildi" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "Önizleme" @@ -88,156 +46,48 @@ msgstr "Dosya adı zaten kullanılıyor" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "Mesaj yok" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "Mesaj oluÅŸtur" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "Rehbere ekle" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "Adres oluÅŸtur" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "Engellenenler listesi" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "Numara eklemek için dokunun" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "Kanal oluÅŸtur" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "At" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "Mesaj gönderilemiyor" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "Rehber" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "FotoÄŸraf çek" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "Adres yok" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "Uyarı sesi" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "Reklama izin ver" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "Anonime izin ver" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "Eklenen öğe listesi" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "Oto. indirme" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "Otomatik" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "Otomatik sil" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "Arkaplan rengi" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "Mesajları engelle" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "Hücre yayını mesajları" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "EtkinleÅŸtirme" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "Kanallarım" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "Alınan kanallar" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "Merkez %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "Özel süre" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "Varsayılan stil" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "Ä°letim raporu" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "Gönderme baÅŸarısız" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "Her 10 dakikada bir" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "Her 2 dakikada bir" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "Her 5 dakikada bir" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "Yazı tipi rengi" - msgid "IDS_MSGF_BODY_FROM" msgstr "Kimden" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "Genel ayarlar" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "GSM-Alfabesi" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "Bir uygulama veya görüşme içinde deÄŸilseniz sesli posta sunucusuna baÄŸlanmak için '1' tuÅŸunu basılı tutun" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "Dahil öğe listesi" -msgid "IDS_MSGF_BODY_LANG" -msgstr "Diller" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "Maksimum" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "Telesekreter numarası" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "Mesaj iletildi" @@ -253,24 +103,12 @@ msgstr "Uyarı" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "Gönderildi" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "Boyut ve içerik sınırlaması yok" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "Boyut ve içerik izin verilen maksimum deÄŸeri aÅŸtığında size bilgi verilecektir" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "Faks" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "Ses" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "Ä°letim mesajları" @@ -289,9 +127,6 @@ msgstr "Reddet" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "Alma seçenekleri" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "Cevap yolu" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "Ä°letim raporu talep et" @@ -301,12 +136,6 @@ msgstr "Okundu raporu iste" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "Kısıtlı" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "Gönderiliyor..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 gün" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "Düşük" @@ -316,48 +145,15 @@ msgstr "Normal" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "Acil" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "Gönderme seçenekleri" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "Sona erme" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "Öncelik" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "Ä°letim raporu gönder" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "Okundu raporu gönder" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "Servis türü" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "Adres" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "Aynısı" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "Dahil et" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "EÅŸleÅŸme kriterleri" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "1 kez" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "Sayfa süresi" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "Karakter desteÄŸi" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "Metin" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "Acil durum mesajları" @@ -367,21 +163,12 @@ msgstr "Metin mesajları" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "Toplam boyut" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Çoklu dil" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "DRM içeriÄŸi" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "Kanalı düzenle" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "Öğe listesi" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "saniye" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 saniye" @@ -400,12 +187,6 @@ msgstr "Kur" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "Dış ÅŸebeke" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "Slayt" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "Yazı tipi stili" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "KiÅŸi detaylarını göster" @@ -418,18 +199,6 @@ msgstr "Mesaj alınamadı" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "Multimedya mesajı gönderme baÅŸarısız" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "%d KB'ye kadar resim gönderebilirsiniz" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "Kartvizit" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "Ä°sim yok" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "HoÅŸgeldiniz" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "Ä°let" @@ -439,132 +208,48 @@ msgstr "Okunmamış" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "Telefon'a taşı" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "Metin ekle" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "ÇoÄŸaltılan alıcı" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "Maksimum oluÅŸturma boyutu" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "Maksimum alıcı sayısına (%d) ulaşıldı" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "Konu eklemek için dokunun" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "Gruplar" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "Rehber" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "DiÄŸer dosyalar" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "Ses" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "Multimedya ekle" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "KAPALI" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "AÇIK" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "Alıcı" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "Ses kaydet" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "Ses kaydet" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "Video kaydet" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "Metin ÅŸablonu" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "MMS olarak deÄŸiÅŸtirildi" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "SMS olarak deÄŸiÅŸti" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "Adresi girin" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "Geçersiz dosya" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "Mesaj gönderildi" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "Mesaj boyutu aşıldı" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "%d ek mevcut. %d eke kadar seçin" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "Sunucu cevap vermiyor" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "Tüm dosyalar eklenemiyor. Maksimum ekleme kapasitesi %d KB. Devam edilsin mi?" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "MMS gönderilemiyor. Tanımlanmayan hata" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "Takvim senkr" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "Yazı tipi boyutu" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "Ekler olmadan" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "Bütün e-posta" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "OluÅŸturma modu" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "Mesaj iletildi" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "Multimedya mesajı" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "Yeni sesli posta" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "Konu yok" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "Tümüne evet" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "Servis merkezi" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "Hizmet yükleme" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "Ses" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "Gönderilemiyor. Desteklenmeyen dosya türleri eklendi" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "Görüşme listesi" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "Adres seçin" @@ -574,30 +259,9 @@ msgstr "SIM'e taşı" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "Çevrimiçine(%s) geçmek üzeresiniz. Devam edilsin mi?" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "MMS alma baÅŸarısız" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "Alıcı yok" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "Gerekli" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "Taslaklara kaydedilsin mi?" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "Maks. mesaj boyutu aşıldı. Yeniden boyutlandırılıyor..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "Senkronizasyon iptal edildi" - msgid "IDS_MSGF_SK_RESEND" msgstr "Tekrar Gönder" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "Kanal ekle" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "Geçersiz alıcı" @@ -610,27 +274,15 @@ msgstr "Görüşme sırasında çalınamaz" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "Yığın depolama modunda kaydetme saÄŸlanamıyor" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Yığın depolama modunda açma saÄŸlanamıyor" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "Yığın depolama modunda kullanma saÄŸlanamıyor" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "Geçerli mesajdan vazgeçilsin mi?" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "Seçili" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "Seçili" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "Sil?" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "Yeniden boyutlandırılıyor..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "Eklenemiyor. Maksimum dosya boyutu %d KB" @@ -649,3 +301,204 @@ msgstr "Güvenlik ilkesi metin mesajı yazımını kısıtlıyor" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "Ekleniyor. Lütfen bekleyin..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Servis merkezi adresi" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Spam mesajları" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Büyük" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Küçük" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Zamanlanan mesaj gönderilemiyor. BaÅŸka zaman ayarlayın" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Tarih ve saat" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Multimedya mesajları" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Alıcı eklenemedi. Alıcı girin" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Gönderme seçenekleri" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Alma uyarı türü" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "Acil" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Normal" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Acil durum mesajı gönder" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Alıcılar" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Tekrar" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Mesaj" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Bir defa" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 kez" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 kez" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Acil bir durumla karşı karşıyayım. Lütfen bana yardım edin." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM takılı deÄŸil" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Resim çek" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Video yakala" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Ses kaydet" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CB mesajları" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM kart mesajları" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Süre %d saniyeden uzun olmalıdır" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "İçerik eklenemiyor" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Alıcı seç" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "KiÅŸiyi görüntüle" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Süre (%s sn)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Resim çok büyük. Sıkıştırılıyor..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Mesaj taslak olarak kaydedildi" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "DiÄŸer" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Taslak" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Slayt süresi" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "E-posta gönder" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Eklenen öğeler" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Ekli öğeler" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d ek" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Zamanlı\nmesaj" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Süre\n(%d san)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "DÄŸr kiÅŸi blglrn kllnın" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Bu mesajda gösterilmemiÅŸ ekli dosya var" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Bu mesajda gösterilmemiÅŸ bazı ekli dosyalar var" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Tümünü kaydet" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Taslak mesajlar" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Mesaj geri yüklenecek" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Zamanlı mesaj iptal edilecek" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Mesaj metni kopyala" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Mesaj ayrıntı göster" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Kilitli mesajlar" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Mesaj kutuları" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Engelle" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Telefona kopyala" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Mesaj SIM karttan kopyalandı" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Mesajı iptal et" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Eklentiler" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Gönderme baÅŸarısız mesajı" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Maksimum karakter sayısına ulaşıldı" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Geri alınıyor..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Eklenti yok" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Panoya kopyalandı" + diff --git a/main/po/uk.po b/main/po/uk.po new file mode 100644 index 0000000..5fe850e --- /dev/null +++ b/main/po/uk.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Ðеможливо відкрити" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "Отримати" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Ðеможливо переміÑтити" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "ДоÑÑгнуто макÑимальної кількоÑÑ‚Ñ– Ñторінок" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Обмежений режим. Ðеможливо вÑтавити обмежений вміÑÑ‚" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "ДоÑтавлено" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Термін дії вже минув" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Прочитане" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "ОтриманнÑ..." + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Щоб надіÑлати повідомленнÑ, вÑтавте SIM-картку. ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ збережено у вихідних" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Введіть номер каналу" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "Вибрано 1 повідомленнÑ" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "Вибрано повідомлень: %d" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Попередній переглÑд" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Файл з такою назвою вже Ñ–Ñнує" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Ðемає повідомлень" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Додати до контакту" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "СкаÑувати" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Ðеможливо надіÑлати повідомленнÑ" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Сфотографувати" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Без адреÑи" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Приєднано ÑпиÑок об’єктів" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "ÐвтозавантаженнÑ" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "СВ-повідомленнÑ" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Центр %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Призначити чаÑ" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Звіт про доÑтавку" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Збій надÑиланнÑ" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Від" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Ð’Ñтавлено ÑпиÑок об’єктів" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð´Ð¾Ñтавлено" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð¾" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Вільно" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "ПопередженнÑ" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "ÐадіÑлано" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "Б" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "КБ" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Push-повідомленнÑ" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Звіт про прочитаннÑ" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Отримано" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Вручну" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Відхилити" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Опції отриманнÑ" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Запитувати звіт про доÑтавку" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Запит. звіт про прочитаннÑ" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Обмежено" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Ðизький" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Звичайний" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Терміново" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Пріоритет" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "ÐадіÑлати звіт про прочитаннÑ" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "ТриваліÑÑ‚ÑŒ Ñторінки" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "ЕкÑтрені повідомленнÑ" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "SMS-повідомленнÑ" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Загальний розмір" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "ВміÑÑ‚ DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "СпиÑок об’єктів" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 Ñекунд" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 Ñекунди" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 Ñекунд" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ð¼ÐµÑ€ÐµÐ¶Ð°" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Ð’Ñтановити" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Мережа роумінгу" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "ПереглÑнути деталі контакту" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "MMS-Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð½Ð°Ð´Ñ–Ñлано" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "Збій Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Збій під Ñ‡Ð°Ñ Ð½Ð°Ð´ÑÐ¸Ð»Ð°Ð½Ð½Ñ MMS" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "ПереÑ." + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "Ðепроч." + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "ПереміÑтити в телефон" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "ÐŸÐ¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ð¾Ð´ÐµÑ€Ð¶ÑƒÐ²Ð°Ñ‡Ð°" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "ДоÑÑгнуто макÑимальної кількоÑÑ‚Ñ– одержувачів (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Кому" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "ЗапиÑати звук" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "ЗапиÑати відео" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Змінено на MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Змінено на SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "ДоÑтупно вкладень: %d. Виберіть не більше %d вкладень" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Ðеможливо вклаÑти вÑÑ– файли. МакÑимальний обÑÑг вкладень: %d КБ. Продовжити?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Розмір шрифту" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Режим ÑтвореннÑ" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "MMS-повідомленнÑ" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Ðемає теми" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "SMS-центр" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Вибрати адреÑу" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "ПереміÑтити на SIM-картку" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "ÐŸÑ–Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð½Ñ Ð´Ð¾ інтернету (%s) Продовжити?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Повторити надÑиланнÑ" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "Хибний одержувач" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "ÐеприпуÑтимі одержувачі" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Ðеможливо відтворити під Ñ‡Ð°Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑƒ" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Ðеможливо зберегти в режимі накопичувача" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "СкаÑувати поточне повідомленнÑ?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Вибрано" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Видалити?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Ðеможливо вклаÑти. МакÑимальний розмір файлів Ñтановить %d КБ" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Обмежено" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Ðеможливо переÑлати.\nЗаблоковано переÑÐ¸Ð»Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñƒ" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Заплановане повідомленнÑ" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "Ð¡Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ SMS-повідомлень обмежено політикою безпеки" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "ДодаваннÑ. Зачекайте..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "ÐдреÑа ÑервіÑного центру" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Ðебажані повідомленнÑ" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Великий" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Звичайний" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Малий" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Tiny" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Ðеможливо надіÑлати заплановане повідомленнÑ. Ð’Ñтановіть інший чаÑ" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Дата Ñ– чаÑ" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "MMS-повідомленнÑ" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Одержувачів не додано. Введіть одержувачів" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Опції надÑиланнÑ" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Тип отримуваного Ñигналу" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Звичайний" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "ÐадÑÐ¸Ð»Ð°Ð½Ð½Ñ ÐµÐºÑтреного повідомленнÑ" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "Одержувачі" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Повторити" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "ПовідомленнÑ" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Один раз" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 рази" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 разів" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Я в надзвичайній Ñитуації. Допоможіть мені." + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM-картку не вÑтавлено" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Зробити знімок" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Відеозйомка" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "ЗапиÑати звук" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "CB-повідомленнÑ" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ SIM-картки" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "ТриваліÑÑ‚ÑŒ має бути більшою за %d Ñек." + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Ðеможливо додати вміÑÑ‚" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Вибір одержувача" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "ПереглÑнути контакт" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "ТриваліÑÑ‚ÑŒ (%s Ñек.)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Ð¤Ð¾Ñ‚Ð¾Ð³Ñ€Ð°Ñ„Ñ–Ñ Ð·Ð°Ð²ÐµÐ»Ð¸ÐºÐ°. СтиÑканнÑ..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð·Ð±ÐµÑ€ÐµÐ¶ÐµÐ½Ð¾ Ñк чернетку" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Інші" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Чернетка" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "ТриваліÑÑ‚ÑŒ Ñлайда" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "ÐадіÑлати Email" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Ð’Ñтавлені об'єкти" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Вкладені об’єкти" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d вкладень" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Запланов.\nповідомленнÑ" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "ТриваліÑÑ‚ÑŒ\n(%d Ñек)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Вик. інші конт. дані" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ” приєднаний файл, що не відображений." + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Це Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ” приєднані файли, що не відображені." + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "Зберегти вÑе" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Чернетки повідомлень" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ відновлено" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Заплановане Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ð±ÑƒÐ´Ðµ ÑкаÑовано" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Копіюв. текÑÑ‚ повід." + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Перегл. повідомленнÑ" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Захищені повідомленнÑ" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Вікна повідомлень" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Блокувати" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Копіювати на телефон" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "ÐŸÐ¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñкопійовано із SIM-картки" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "СкаÑувати надÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "ВкладеннÑ" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "ÐадÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ, з Ñким ÑтавÑÑ Ð·Ð±Ñ–Ð¹" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "ДоÑÑгнуто макÑимальної кількоÑÑ‚Ñ– Ñимволів" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "ВідновленнÑ..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Без вкладень" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Скопійовано в буфер обміну" + diff --git a/main/po/vi.po b/main/po/vi.po new file mode 100644 index 0000000..38fbdf3 --- /dev/null +++ b/main/po/vi.po @@ -0,0 +1,504 @@ +msgid "IDS_MSGF_POP_UNABLE_TO_OPEN" +msgstr "Không thể mở" + +msgid "IDS_MSGF_OPT_RETRIEVE" +msgstr "K.phục" + +msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" +msgstr "Không thể di chuyển" + +msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" +msgstr "Äã đạt số trang tối Ä‘a" + +msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" +msgstr "Chế Ä‘á»™ hạn chế. Không thể chèn ná»™i dung hạn chế" + +msgid "IDS_MSGF_BODY_DELIVERED" +msgstr "Äã gửi" + +msgid "IDS_MSGF_BODY_EXPIRED" +msgstr "Äã hết hạn" + +msgid "IDS_MSGF_BODY_READ" +msgstr "Äá»c" + +msgid "IDS_MSGF_BODY_RETRIEVING_ING" +msgstr "Äang khôi phục…" + +msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" +msgstr "Gắn thẻ SIM để gá»i tin nhắn. Tin nhắn sẽ được lÆ°u và o Há»™p thÆ° Ä‘i" + +msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" +msgstr "Nháºp số kênh" + +msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" +msgstr "1 tin nhắn được chá»n" + +msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" +msgstr "%d tin nhắn được chá»n" + +msgid "IDS_MSGC_HEADER_PREVIEW" +msgstr "Xem trÆ°á»›c" + +msgid "IDS_MSGF_POP_FILE_NAME_ALREADY_EXISTS" +msgstr "Tên File đã tồn tại" + +msgid "IDS_MSGF_POP_NOMESSAGES" +msgstr "Không có tin nhắn" + +msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" +msgstr "Thêm và o danh bạ" + +msgid "IDS_MSGF_OPT_DISCARD" +msgstr "Thoát" + +msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" +msgstr "Không thể gá»i tin nhắn" + +msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" +msgstr "Chụp ảnh" + +msgid "IDS_MSGC_POP_NO_ADDRESS" +msgstr "Không địa chỉ" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" +msgstr "Äã Ä‘Ãnh kèm danh sách các mục" + +msgid "IDS_MSGF_BODY_AUTODOWNLOAD" +msgstr "Tá»± Ä‘á»™ng tải vá»" + +msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" +msgstr "Tin nhắn quảng bá" + +msgid "IDS_MSGF_BODY_CENTRE_PD" +msgstr "Trung tâm %d" + +msgid "IDS_MSGF_BODY_CUSTOM_TIME" +msgstr "Giá» tùy chỉnh" + +msgid "IDS_MSGF_BODY_DELIVERY_REPORT" +msgstr "Báo đã gá»i tin" + +msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" +msgstr "Không gá»i được" + +msgid "IDS_MSGF_BODY_FROM" +msgstr "Từ" + +msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" +msgstr "Danh sách các mục đã chèn" + +msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" +msgstr "Tin nhắn được gá»i" + +msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" +msgstr "Tin nhắn đã truy xuất" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" +msgstr "Tá»± do" + +msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" +msgstr "Cảnh báo" + +msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" +msgstr "Äã gá»i" + +msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" +msgstr "B" + +msgid "IDS_MSGF_BODY_MSGSIZE_KB" +msgstr "KB" + +msgid "IDS_MSGF_BODY_PUSH_MESSAGES" +msgstr "Tin nhắn Push" + +msgid "IDS_MSGF_BODY_READ_REPORT" +msgstr "Báo cáo Ä‘á»c" + +msgid "IDS_MSGF_BODY_RECEIVED" +msgstr "Äã nháºn" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL" +msgstr "Thủ công" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT" +msgstr "Từ chối" + +msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" +msgstr "Tùy chá»n khi nháºn" + +msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" +msgstr "Yêu cầu báo cáo gá»i tin" + +msgid "IDS_MSGF_BODY_REQUEST_READ_REPORT" +msgstr "Yêu cầu báo đã Ä‘á»c tin" + +msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" +msgstr "Hạn chế" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" +msgstr "Thấp" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_NORMAL" +msgstr "Bình thÆ°á»ng" + +msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" +msgstr "Khẩn cấp" + +msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" +msgstr "Äá»™ Æ°u tiên" + +msgid "IDS_MSGF_BODY_SEND_READ_REPORT" +msgstr "Gá»i thông báo Ä‘á»c tin" + +msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" +msgstr "Thá»i gian hiển thị trang" + +msgid "IDS_MSGF_BODY_SOS_MESSAGES" +msgstr "Tin nhắn SOS" + +msgid "IDS_MSGF_BODY_TEXT_MESSAGES" +msgstr "Tin nhắn" + +msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" +msgstr "Tổng kÃch thÆ°á»›c" + +msgid "IDS_MSGF_HEADER_DRM_CONTENT" +msgstr "Ná»™i dung DRM" + +msgid "IDS_MSGF_HEADER_ITEM_LIST" +msgstr "Danh sách mục" + +msgid "IDS_MSGF_OPT_10SEC" +msgstr "10 giây" + +msgid "IDS_MSGF_OPT_2SEC" +msgstr "2 giây" + +msgid "IDS_MSGF_OPT_5SEC" +msgstr "5 giây" + +msgid "IDS_MSGF_OPT_HOME_NETWORK" +msgstr "Mạng địa phÆ°Æ¡ng" + +msgid "IDS_MSGF_OPT_INSTALL" +msgstr "Cà i đặt" + +msgid "IDS_MSGF_OPT_ROAM_NETWORK" +msgstr "Mạng nÆ°á»›c ngoà i" + +msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" +msgstr "Xem chi tiết danh bạ" + +msgid "IDS_MSGF_POP_MULTIMEDIA_MESSAGE_SENT" +msgstr "Tin nhắn MMS đã gá»i" + +msgid "IDS_MSGF_POP_RETRIEVING_MESSAGE_FAILED" +msgstr "truy cáºp tin nhắn đã thất bại" + +msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" +msgstr "Gá»i tin nhắn MMS đã thất bại" + +msgid "IDS_MSGF_SK_FORWARD_LITE" +msgstr "Ch.tiếp" + +msgid "IDS_MSGF_SK3_UNREAD" +msgstr "ChÆ°a Ä‘á»c" + +msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" +msgstr "Chuyển qua Ä‘iện thoại" + +msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" +msgstr "NgÆ°á»i nháºn trùng lặp" + +msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" +msgstr "Äã đạt số ngÆ°á»i nháºn tối Ä‘a (%d)" + +msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" +msgstr "Tá»›i" + +msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" +msgstr "Ghi âm" + +msgid "IDS_MSGC_OPT_RECORD_VIDEO" +msgstr "Quay video" + +msgid "IDS_MSGC_POP_CHANGED_TO_MMS" +msgstr "Äổi thaÌ€nh MMS" + +msgid "IDS_MSGC_POP_CHANGED_TO_SMS" +msgstr "Äã đổi thà nh SMS" + +msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" +msgstr "%d mục Ä‘Ãnh kèm hiện có. Chá»n tối Ä‘a %d Ä‘Ãnh kèm" + +msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" +msgstr "Không thể Ä‘Ãnh kèm tất cả file. Dung lượng Ä‘Ãnh kèm tối Ä‘a là %d KB. Tiếp tục?" + +msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" +msgstr "Cỡ chữ" + +msgid "IDS_MSGF_BODY_MMSCREATIONMODE" +msgstr "Chế Ä‘á»™ tạo" + +msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" +msgstr "Tin nhắn MMS" + +msgid "IDS_MSGF_BODY_NO_SUBJECT" +msgstr "Không có chủ Ä‘á»" + +msgid "IDS_MSGF_BODY_SERVICECENTRE" +msgstr "Trung tâm dịch vụ" + +msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" +msgstr "Chá»n địa chỉ" + +msgid "IDS_MSGF_OPT_MOVE_TO_SIM" +msgstr "Chuyển qua thẻ SIM" + +msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" +msgstr "Bạn Ä‘ang định trá»±c tuyến(%s). Tiếp tục?" + +msgid "IDS_MSGF_SK_RESEND" +msgstr "Gá»i lại" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" +msgstr "NgÆ°á»i nháºn không hợp lệ" + +msgid "IDS_MSGF_BODY_INVALID_RECIPIENTS" +msgstr "NgÆ°á»i nháºn không hợp lệ" + +msgid "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL" +msgstr "Không thể phát khi Ä‘ang gá»i" + +msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" +msgstr "Không thể lÆ°u khi Ä‘ang trong Chế Ä‘á»™ bá»™ nhá»› chung" + +msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" +msgstr "Hủy tin nhắn hiện thá»i?" + +msgid "IDS_MSGC_POP_SPACE_SELECTED" +msgstr "Äã chá»n" + +msgid "IDS_MSGF_OPT_DELETE_Q" +msgstr "Xóa?" + +msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" +msgstr "Không thể Ä‘Ãnh kèm. KÃch cỡ tối Ä‘a của file là %d KB" + +msgid "IDS_MSGF_BODY_CREATIONMODERESTRICTED" +msgstr "Hạn chế" + +msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" +msgstr "Không thể chuyển.\n File bị khoá chuyển" + +msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" +msgstr "Tin nhắn theo lịch trình" + +msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" +msgstr "ChÃnh sách bảo máºt hạn chế soạn tin nhắn văn bản" + +msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" +msgstr "Äang thêm. Vui lòng chá»..." + +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "Äịa chỉ trung tâm dịch vụ" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "Tin nhắn rác" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "Lá»›n" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "Bình thÆ°á»ng" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "Nhá»" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "Rất nhá»" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "Không thể gá»i tin nhắn đã lên lịch. Äặt thá»i gian khác" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "Thá»i gian" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "Tin nhắn MMS" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "Không có ngÆ°á»i nháºn nà o được thêm. Nháºp ngÆ°á»i nháºn" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "Tùy chá»n khi gá»i" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "Loại báo hiệu nháºn" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "Bình thÆ°á»ng" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "Äang gá»i tin nhắn SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "NgÆ°á»i nháºn" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "Lặp lại" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "Tin nhắn" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "Má»™t lần" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 lần" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 lần" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "Tôi Ä‘ang trong tình trạng khẩn cấp. Hãy giúp tôi" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "ChÆ°a gắn SIM" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "Chụp ảnh" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "Quay video" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "Thu âm" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "Tin nhắn CB" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "Tin nhắn trong SIM" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "Thá»i lượng phải dà i hÆ¡n %d giây" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "Không thể thêm ná»™i dung" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "Select recipient" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "Xem danh bạ" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "Thá»i lượng (%s giây)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "Ảnh quá lá»›n. Äang nén..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "Tin nhắn được lÆ°u nhÆ° bản thảo" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "Khác" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "Dá»± thảo" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "Thá»i lượng của bản trình chiếu" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "Gá»i email" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "Mục được thêm" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "Các mục Ä‘Ãnh kèm" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d Ä‘Ãnh kèm" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "Äã lên lịch\nthông báo" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "Thá»i gian\n(%d giây)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "Sá» dụng thông tin danh bạ khác" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "Tin nhắn nà y bao gồm má»™t file Ä‘Ãnh kèm không hiện lên" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "Tin nhắn nà y bao gồm các file Ä‘Ãnh kèm không được hiện lên" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "LÆ°u tất cả" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "Tin nhắn bản thảo" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "Tin nhăÌn sẽ Ä‘Æ°Æ¡Ì£c khôi phục" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "Tin nhắn đã được xếp lịch sẽ bị hủy" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "Chép văn bản tin nhắn" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "Xem chi tiết t.nhắn" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "Äã khoá tin nhắn" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "Há»™p tin nhắn" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "Chặn" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "Chép và o Ä‘iện thoại" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "Äã chép tin nhắn từ thẻ SIM" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "Hủy tin nhăÌn" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "Phần Ä‘Ãnh kèm" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "Gá»i tin nhắn bị lá»—i" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "Äã đạt số ký tá»± tối Ä‘a" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "Äang phục hồi" + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "Không có phần Ä‘Ãnh kèm" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "Äã chép và o bảng tạm" + diff --git a/main/po/zh_CN.po b/main/po/zh_CN.po index 2d3def3..0240455 100755..100644 --- a/main/po/zh_CN.po +++ b/main/po/zh_CN.po @@ -7,15 +7,9 @@ msgstr "å–回" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "æ— æ³•ç§»åŠ¨" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "未请求" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "已达页é¢æœ€å¤§æ•°é‡" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "å·²å‘出请求" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "å—é™æ¨¡å¼ã€‚ æ— æ³•æ’å…¥å—é™å†…容" @@ -31,54 +25,18 @@ msgstr "阅读" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "å–回ä¸..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "å–回失败" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "æ’å…¥ SIM å¡ä»¥å‘é€ä¿¡æ¯ã€‚ä¿¡æ¯å°†è¢«å˜äºŽå‘件箱" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%dç§è¯è¨€" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "ä¸å¿ƒåœ°å€" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "é‡å¤" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "输入频é“å称" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "输入频é“å·ç " -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "未选择" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d 个频é“" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "相åŒé¢‘é“ ID å·²å˜åœ¨" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "å‘é€å¤±è´¥ã€‚é‡è¯•ï¼Ÿ" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "é¢‘é“ ID 列表已满" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "已选择一æ¡ä¿¡æ¯" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "已选择1个人" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "已选择%dæ¡ä¿¡æ¯" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "已选择%d个人" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "预览" @@ -88,156 +46,48 @@ msgstr "文件åå·²å˜åœ¨" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "æ— ä¿¡æ¯" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "新建信æ¯" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "æ·»åŠ åˆ°è”系人" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "è‘¡è„牙è¯" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "新建地å€" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "阻æ¢åˆ—表" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "ç‚¹å‡»å¹¶æ·»åŠ å·ç " - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "创建频é“" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "放弃" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "æ— æ³•å‘é€ä¿¡æ¯" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "è”系人" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "æ‹ç…§" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "æ— åœ°å€" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "æ示音" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "å…许广告" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "å…许匿å" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "附件列表" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "自动下载" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "自动" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "è‡ªåŠ¨åˆ é™¤" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "背景颜色" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "阻æ¢ä¿¡æ¯" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "广æ’ä¿¡æ¯" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "å¯åŠ¨" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "å¾·è¯" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "西ç牙è¯" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "法è¯" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "æ„大利è¯" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "è·å…°è¯" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "个人频é“" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "接收信é“" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "ä¸å¿ƒ %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "自定时间" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "é»˜è®¤é£Žæ ¼" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "å‘é€æŠ¥å‘Š" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "å‘é€å¤±è´¥" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "æ¯ 10 分钟" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "æ¯ 2 分钟" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "æ¯ 5 分钟" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "å—体颜色" - msgid "IDS_MSGF_BODY_FROM" msgstr "å‘件人" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "基本设置" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "GSM å—æ¯ç³»ç»Ÿ" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "未使用应用程åºæˆ–未在通è¯æ—¶ï¼ŒæŒ‰ä½ '1' é”®å¯è¿žæŽ¥è¯éŸ³ä¿¡ç®±æœåŠ¡å™¨" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "å·²æ’入项目列表" -msgid "IDS_MSGF_BODY_LANG" -msgstr "è¯è¨€" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "最大" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "è¯éŸ³ä¿¡ç®±å·ç " - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "ä¿¡æ¯å·²é€è¾¾" @@ -253,26 +103,14 @@ msgstr "è¦å‘Š" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "å·²å‘é€" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "ä¸é™åˆ¶å¤§å°å’Œå†…容" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "当超过å…许的最大大å°å’Œå®¹é‡æ—¶å°†æ”¶åˆ°é€šçŸ¥" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "ä¼ çœŸ" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "è¯éŸ³" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" -msgstr "WAPçŸä¿¡" +msgstr "推é€ä¿¡æ¯" msgid "IDS_MSGF_BODY_READ_REPORT" msgstr "阅读报告" @@ -289,9 +127,6 @@ msgstr "æ‹’ç»" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "接收选项" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "回å¤è·¯å¾„" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "è¦æ±‚é€è¾¾æŠ¥å‘Š" @@ -301,12 +136,6 @@ msgstr "è¦æ±‚阅读报告" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "é™åˆ¶" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "å‘é€ä¸â€¦" - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 天" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "低" @@ -316,48 +145,15 @@ msgstr "æ£å¸¸" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "紧急" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "å‘é€é€‰é¡¹" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "有效期" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "优先级" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "å‘é€é€è¾¾æŠ¥å‘Š" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "å‘é€è¯»å–报告" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "æœåŠ¡ç±»åž‹" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "地å€" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "å®Œå…¨ä¸€æ ·" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "包括" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "匹é…æ ‡å‡†" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "一次" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "页é¢æŒç»æ—¶é—´" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "å—符支æŒ" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "文本" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "SOSä¿¡æ¯" @@ -367,21 +163,12 @@ msgstr "çŸä¿¡" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "总大å°" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "å•ä¸€ç " - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "DRM 内容" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "编辑频é“" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "项目列表" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "秒" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 秒" @@ -400,12 +187,6 @@ msgstr "安装" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "外国网络" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "å¹»ç¯ç‰‡" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "å—ä½“é£Žæ ¼" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "查看è”系人详细信æ¯" @@ -418,18 +199,6 @@ msgstr "å–回失败" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "å‘é€å½©ä¿¡å¤±è´¥" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "最多å¯å‘é€ %d KB 的图åƒ" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "å片" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "æ— å称" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "欢迎" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "转å‘" @@ -439,132 +208,48 @@ msgstr "未读" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "移动到手机" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "æ·»åŠ æ–‡æœ¬" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "é‡å¤çš„收件人" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "最大新建尺寸" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "已达到最大收件人数é‡(%d)" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "ç‚¹å‡»å¹¶æ·»åŠ ä¸»é¢˜" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "分组" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "电è¯ç°¿" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "其它文件" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "声音" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "å¢žåŠ å¤šåª’ä½“" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "å…³" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "å¼€" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "至" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "录音" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "录音" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "æ‹æ‘„录åƒ" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "文本模æ¿" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "更改为彩信" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "已更改为çŸä¿¡" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "输入地å€" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "æ— æ•ˆæ–‡ä»¶" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "å·²å‘é€" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "超过信æ¯å¤§å°" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "%d个文件å¯ç”¨ã€‚至多å¯é€‰æ‹©%d个附件" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "æœåŠ¡å™¨æ— å“应" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "æ— æ³•é™„åŠ æ‰€æœ‰æ–‡ä»¶ã€‚é™„ä»¶çš„æœ€å¤§å®¹é‡ä¸º%dKB。继ç»ï¼Ÿ" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "æ— æ³•å‘é€ MMSã€‚å‡ºçŽ°æ— æ³•è¯†åˆ«çš„é”™è¯¯" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "日历åŒæ¥" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "å—体大å°" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "ä¸å«é™„件" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "完整电å邮件" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "创建模å¼" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "ä¿¡æ¯å·²é€è¾¾" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "彩信" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "æ–°è¯éŸ³ä¿¡ç®±" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "没有主题" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "全部确定" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "çŸä¿¡æ¯æœåŠ¡ä¸å¿ƒ" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "装载æœåŠ¡" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "声音" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "æ— æ³•å‘é€ã€‚é™„åŠ äº†ä¸æ”¯æŒçš„文件类型" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "会è¯åˆ—表" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "选择地å€" @@ -574,30 +259,9 @@ msgstr "移动到 SIM å¡" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "您将上网(%s)。 继ç»ï¼Ÿ" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "MMS å–回失败" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "æ— æ”¶ä»¶äºº" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "需è¦" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "ä¿å˜åˆ°è‰ç¨¿ç®±ï¼Ÿ" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "超过最大信æ¯å¤§å°é‡æ•´å¤§å°ä¸......" - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "åŒæ¥å·²å–消" - msgid "IDS_MSGF_SK_RESEND" msgstr "é‡æ–°å‘é€" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "æ·»åŠ é¢‘é“" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "æ— æ•ˆæ”¶ä»¶äºº" @@ -610,27 +274,15 @@ msgstr "通è¯ä¸æ— 法æ’放" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "大容é‡å˜å‚¨æ¨¡å¼æ‰“å¼€ï¼Œæ— æ³•ä¿å˜" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "大容é‡å˜å‚¨æ¨¡å¼æ‰“å¼€ï¼Œæ— æ³•æ‰“å¼€" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "大容é‡å˜å‚¨æ¨¡å¼æ‰“å¼€ï¼Œæ— æ³•ä½¿ç”¨" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "丢弃当å‰ä¿¡æ¯ï¼Ÿ" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "已选择" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "已选择" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "åˆ é™¤ï¼Ÿ" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "调整ä¸..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "æ— æ³•é™„åŠ ã€‚æœ€å¤§æ–‡ä»¶å¤§å°æ˜¯ %d KB" @@ -641,7 +293,7 @@ msgid "IDS_MSGC_POP_UNABLE_TO_ADD_FILE_IS_FORWARD_LOCKED" msgstr "æ— æ³•è½¬å¯„\n文件已é”上转寄" msgid "IDS_MSGC_HEADER_SCHEDULED_MESSAGE" -msgstr "预定的信æ¯" +msgstr "定时信æ¯" msgid "IDS_MSGF_POP_SECURITY_POLICY_RESTRICTS_COMPOSING_OF_TEXT_MESSAGES" msgstr "安全政ç–é™åˆ¶ç¼–写çŸä¿¡" @@ -649,3 +301,204 @@ msgstr "安全政ç–é™åˆ¶ç¼–写çŸä¿¡" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "æ·»åŠ ä¸ï¼Œè¯·ç¨ç‰â€¦" +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "æœåŠ¡ä¸å¿ƒåœ°å€" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "垃圾信æ¯" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "大" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "æ£å¸¸" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "å°" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "å¾®å°" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "æ— æ³•å‘é€å®šæ—¶ä¿¡æ¯ã€‚设置其他时间" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "日期和时间" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "彩信" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "æ²¡æœ‰æ·»åŠ æ”¶ä»¶äººï¼Œè¯·è¾“å…¥è”系人" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "å‘é€é€‰é¡¹" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "接收æ示类型" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "æ£å¸¸" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "å‘é€SOSä¿¡æ¯" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "收件人" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "é‡å¤" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "ä¿¡æ¯" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "一次" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 次" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 次" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "我的情况很紧急。请帮帮我" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "未æ’å…¥ SIM å¡" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "æ‹ç…§" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "æ‹æ‘„录åƒ" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "录音" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "å°åŒºä¿¡æ¯" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIMå¡ä¿¡æ¯" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "æŒç»æ—¶é—´å¿…须长于 %d 秒" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "æ— æ³•æ·»åŠ å†…å®¹" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "选择收件人" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "查看è”系人" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "æŒç»æ—¶é—´(%s秒)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "图片太大。压缩ä¸â€¦" + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "ä¿¡æ¯å·²ä¿å˜ä¸ºè‰ç¨¿" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "其他" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "è‰ç¨¿" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "å¹»ç¯ç‰‡æŒç»æ—¶é—´" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "å‘é€é‚®ä»¶" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "æ’入的项目" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "附件æ¡ç›®" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d个附件" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "定时\n消æ¯" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "时长\n(%d 秒)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "使用其他è”系人信æ¯" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "æ¤ä¿¡æ¯åŒ…å«ä¸€ä¸ªæœªæ˜¾ç¤ºçš„附件" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "æ¤ä¿¡æ¯åŒ…å«æœªæ˜¾ç¤ºçš„附件" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "全部ä¿å˜" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "ä¿¡æ¯è‰ç¨¿" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "å°†æ¢å¤ä¿¡æ¯" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "定时信æ¯å°†å–消" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "å¤åˆ¶ä¿¡æ¯æ–‡æœ¬" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "查看信æ¯è¯¦æƒ…" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "é”定信æ¯" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "ä¿¡ç®±" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "阻æ¢" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "å¤åˆ¶è‡³æ‰‹æœº" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "从 SIM å¡å¤åˆ¶çš„ä¿¡æ¯" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "å–消信æ¯" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "附件" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "å‘é€å¤±è´¥çš„ä¿¡æ¯" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "已达到最大å—符é™åˆ¶" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "æ¢å¤ä¸..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "æ— é™„ä»¶" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "å·²å¤åˆ¶åˆ°å‰ªè´´æ¿" + diff --git a/main/po/zh_HK.po b/main/po/zh_HK.po index c7e3a72..05488f5 100755..100644 --- a/main/po/zh_HK.po +++ b/main/po/zh_HK.po @@ -7,15 +7,9 @@ msgstr "å–回" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "無法移動" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "未è¦æ±‚" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "é é¢æ•¸ç›®å·²é”上é™" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "已請求" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "é™åˆ¶æ¨¡å¼ã€‚無法æ’å…¥é™åˆ¶çš„內容" @@ -31,54 +25,18 @@ msgstr "已讀å–" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "æ£åœ¨å–回..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "å–回失敗" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "æ’å…¥ SIM å¡ä»¥ç™¼é€è¨Šæ¯ã€‚訊æ¯å°‡æœƒå„²å˜åˆ°å¯„件匣" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d 語言" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "ä¸å¿ƒåœ°å€" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "é‡è¤‡" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "è¼¸å…¥é »é“å稱" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "è¼¸å…¥é »é“數å—" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "ç„¡å·²é¸æ“‡é …ç›®" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d é »é“" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "相åŒé »é“ ID å·²å˜åœ¨" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "發é€å¤±æ•—。è¦é‡è©¦å—Žï¼Ÿ" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "é »é“ ID 清單已滿" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "å·²é¸æ“‡ 1 則訊æ¯" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "å·²é¸æ“‡ 1 人" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "å·²é¸æ“‡ %d 則訊æ¯" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "å·²é¸æ“‡ %d 人" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "é 覽" @@ -88,156 +46,48 @@ msgstr "檔案å稱已å˜åœ¨" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "無訊æ¯" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "建立訊æ¯" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "åŠ åˆ°è¯çµ¡äºº" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "Português" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "建立地å€" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "å°éŽ–清單" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "è¼•è§¸ä»¥åŠ å…¥è™Ÿç¢¼" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "å»ºç«‹é »é“" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "æ¨æ£„" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "無法發é€ä¿¡æ¯" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "è¯çµ¡äºº" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "æ‹ç…§" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "無地å€" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "æ示音" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "å…許廣告" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "å…許暱å" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "å·²é™„åŠ é …ç›®æ¸…å–®" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "自動下載" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "自動" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "自動刪除" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "背景é¡è‰²" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "å°éŽ–訊æ¯" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "廣æ’訊æ¯" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "å•Ÿå‹•" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "Deutsch" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "Español" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "Français" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "Italiano" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "Nederlands" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "Svenska" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "æˆ‘çš„é »é“" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "æŽ¥æ”¶é »é“" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "ä¸å¿ƒ %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "自訂時間" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "é è¨é¢¨æ ¼" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "傳éžå ±å‘Š" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "發é€å¤±æ•—" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "æ¯ 10 分é˜" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "æ¯ 2 分é˜" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "æ¯ 5 分é˜" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "å—é«”é¡è‰²" - msgid "IDS_MSGF_BODY_FROM" msgstr "ç”±" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "一般è¨å®š" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "GSM å—符表" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "當您ä¸åœ¨ä½¿ç”¨æ‡‰ç”¨ç¨‹å¼æˆ–ä¸åœ¨é€šè©±ä¸æ™‚,å¯æŒ‰ä½ '1' éµä»¥é€£æŽ¥åˆ°èªžéŸ³éƒµä»¶ä¼ºæœå™¨" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "å·²æ’å…¥é …ç›®æ¸…å–®" -msgid "IDS_MSGF_BODY_LANG" -msgstr "語言" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "最大" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "留言信箱號碼" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "訊æ¯å·²å‚³éž" @@ -245,7 +95,7 @@ msgid "IDS_MSGF_BODY_MESSAGE_RETRIEVED" msgstr "訊æ¯å·²å–回" msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE" -msgstr "自由" +msgstr "å¯ç”¨" msgid "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING" msgstr "è¦å‘Š" @@ -253,24 +103,12 @@ msgstr "è¦å‘Š" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "已發é€" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "無大å°å’Œå…§å®¹çš„é™åˆ¶" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "當訊æ¯å¤§å°åŠå…§å®¹è¶…éŽæœ€å¤§å€¼æ™‚,您將收到通知" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "傳真" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "語音" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "推é€è¨Šæ¯" @@ -289,9 +127,6 @@ msgstr "拒絕" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "接收é¸é …" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "回覆路徑" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "è¦æ±‚é€é”å ±å‘Š" @@ -301,12 +136,6 @@ msgstr "è¦æ±‚讀å–å ±å‘Š" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "å·²é™åˆ¶" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "æ£åœ¨ç™¼é€..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 æ—¥" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "低" @@ -316,48 +145,15 @@ msgstr "æ£å¸¸" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "緊急" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "發é€é¸é …" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "到期" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "優先次åº" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "發é€å‚³éžå ±å‘Š" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "發é€è®€å–å ±å‘Š" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "æœå‹™é¡žåž‹" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "地å€" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "完全相åŒæ–¼" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "包括" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "符åˆæ¨™æº–" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "一次" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "é é¢æŒçºŒæ™‚é–“" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "支æ´çš„å—å…ƒ" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "æ–‡å—" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "SOS 訊æ¯" @@ -367,21 +163,12 @@ msgstr "æ–‡å—訊æ¯" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "總大å°" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Unicode" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "DRM 內容" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "ç·¨è¼¯é »é“" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "é …ç›®æ¸…å–®" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "秒" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 秒" @@ -400,12 +187,6 @@ msgstr "安è£" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "漫éŠç¶²çµ¡" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "滑動" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "å—é«”é¢¨æ ¼" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "檢視è¯çµ¡äººè©³ç´°è³‡æ–™" @@ -418,18 +199,6 @@ msgstr "å–回訊æ¯å¤±æ•—" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "發é€å¤šåª’體訊æ¯å¤±æ•—" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "最多å¯ä»¥ç™¼é€ %d KB 圖åƒ" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "å片" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "無姓å" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "æ¡è¿Ž" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "轉寄" @@ -439,132 +208,48 @@ msgstr "未讀" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "移動到手機" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "åŠ å…¥æ–‡å—" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "é‡è¤‡çš„收件人" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "建立大å°ä¸Šé™" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "å·²é”收件人的數é‡ä¸Šé™(%d)" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "è¼•è§¸ä»¥åŠ å…¥ä¸»é¡Œ" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "群組" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "電話簿" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "其他檔案" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "è²éŸ³" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "åŠ å…¥å¤šåª’é«”" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "é—œ" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "é–‹" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "至" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "錄音" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "錄音" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "錄影" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "æ–‡å—範本" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "更改為 MMS" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "已更改為çŸè¨Š" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "輸入地å€" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "檔案無效" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "訊æ¯å·²ç™¼é€" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "已超éŽè¨Šæ¯å¤§å°" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "%d 個附件å¯ç”¨ã€‚最多å¯é¸æ“‡ %d 個附件" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "伺æœå™¨ç„¡å›žæ‡‰" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "ç„¡æ³•é™„åŠ å…¨éƒ¨æª”æ¡ˆã€‚é™„ä»¶å®¹é‡ä¸Šé™ç‚º %d KB。是å¦ç¹¼çºŒï¼Ÿ" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "ç„¡æ³•ç™¼é€ MMS。出ç¾ç„¡æ³•è˜åˆ¥çš„錯誤" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "日曆åŒæ¥" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "å—體大å°" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "無附件" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "完整電郵" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "建立模å¼" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "訊æ¯å·²å‚³éž" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "多媒體訊æ¯" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "新留言" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "無主題" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "全部確定" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "æœå‹™ä¸å¿ƒ" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "æœå‹™è¼‰å…¥" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "è²éŸ³" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "無法發é€ã€‚ä¸æ”¯æ´é™„åŠ çš„æª”æ¡ˆé¡žåž‹" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "å°è©±æ¸…å–®" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "é¸æ“‡åœ°å€" @@ -574,30 +259,9 @@ msgstr "移動到 SIM å¡" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "您å³å°‡ä¸Šç¶² (%s)。è¦ç¹¼çºŒå—Žï¼Ÿ" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "MMS å–回失敗" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "無收件人" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "需è¦" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "è¦å„²å˜åˆ°è‰ç¨¿åŒ£å—Žï¼Ÿ" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "巳超éŽè¨Šæ¯å¤§å°ä¸Šé™ã€‚æ£åœ¨é‡è¨å¤§å°..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "åŒæ¥å–消" - msgid "IDS_MSGF_SK_RESEND" msgstr "é‡æ–°ç™¼é€" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "åŠ å…¥é »é“" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "無效收件人" @@ -610,27 +274,15 @@ msgstr "通話期間無法æ’放" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "在大容é‡å„²å˜è£ç½®æ¨¡å¼ä¸‹ï¼Œç„¡æ³•å„²å˜" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "在大容é‡å„²å˜è£ç½®æ¨¡å¼ä¸‹ï¼Œç„¡æ³•é–‹å•Ÿ" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "在大容é‡å„²å˜è£ç½®æ¨¡å¼ä¸‹ï¼Œç„¡æ³•ä½¿ç”¨" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "æ¨æ£„ç›®å‰çš„訊æ¯å—Žï¼Ÿ" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "å·²é¸æ“‡" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "å·²é¸æ“‡" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "刪除嗎?" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "æ£åœ¨é‡è¨å¤§å°..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "ç„¡æ³•é™„åŠ ã€‚æª”æ¡ˆæœ€å¤§ç‚º%d KB" @@ -649,3 +301,204 @@ msgstr "安全政ç–é™åˆ¶æ’°å¯«æ–‡å—訊æ¯" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "åŠ å…¥ä¸ã€‚è«‹ç¨å€™â€¦" +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "æœå‹™ä¸å¿ƒåœ°å€" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "垃圾訊æ¯" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "大" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "æ£å¸¸" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "å°" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "å¾®å°" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "無法發é€é 定訊æ¯ã€‚è«‹è¨å®šå…¶ä»–時間" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "日期和時間" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "多媒體訊æ¯" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "æœªåŠ å…¥æ”¶ä»¶äººã€‚è«‹è¼¸å…¥æ”¶ä»¶äºº" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "發é€é¸é …" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "接收æ示類型" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "æ£å¸¸" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "ç™¼é€ SOS 訊æ¯" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "收件人" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "é‡è¤‡" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "訊æ¯" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "1 次" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 次" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 次" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "我ç¾åœ¨æƒ…æ³ç·Šæ€¥ã€‚請救我" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM å¡æœªæ’å…¥" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "æ‹ç…§" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "æ‹æ”影片" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "錄音" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "å€åŸŸå»£æ’訊æ¯" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM å¡è¨Šæ¯" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "æŒçºŒæ™‚é–“å¿…é ˆè¶…éŽ %d 秒" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "ç„¡æ³•åŠ å…¥å…§å®¹" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "é¸æ“‡æ”¶ä»¶äºº" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "檢視è¯çµ¡äºº" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "æŒçºŒæ™‚é–“ (%s 秒)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "圖片太大。壓縮ä¸â€¦" + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "訊æ¯å·²å˜æˆè‰ç¨¿" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "其他" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "è‰ç¨¿" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "投影片æŒçºŒæ™‚é–“" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "發é€é›»å郵件" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "å·²æ’å…¥é …ç›®" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "å·²é™„åŠ é …ç›®" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d 個附件" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "已排程\n訊æ¯" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "æŒçºŒæ™‚é–“n(%d 秒)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "使用其他è¯çµ¡äººè³‡è¨Š" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "æ¤è¨Šæ¯åŒ…æ‹¬ä¸€å€‹æœªé¡¯ç¤ºçš„é™„åŠ æª”æ¡ˆ" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "æ¤è¨Šæ¯åŒ…æ‹¬æœªé¡¯ç¤ºçš„é™„åŠ æª”æ¡ˆ" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "全部儲å˜" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "è‰ç¨¿è¨Šæ¯" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "訊æ¯å°‡è¢«å¾©åŽŸ" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "é 定訊æ¯å°‡è¢«å–消" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "複製訊æ¯æ–‡å—" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "檢視訊æ¯è©³æƒ…" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "已鎖定訊æ¯" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "訊æ¯ç®±" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "å°éŽ–" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "複製到手機" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "從 SIM å¡è¤‡è£½è¨Šæ¯" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "å–消訊æ¯" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "附件" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "æ£åœ¨ç™¼é€å¤±æ•—çš„ä¿¡æ¯" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "å—元數目已é”上é™" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "æ£åœ¨é‚„原..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "無附件" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "已複製到剪貼æ¿" + diff --git a/main/po/zh_TW.po b/main/po/zh_TW.po index 1aa6a24..074b87a 100755..100644 --- a/main/po/zh_TW.po +++ b/main/po/zh_TW.po @@ -7,15 +7,9 @@ msgstr "æ“·å–" msgid "IDS_MSGF_POP_UNABLE_TO_MOVE" msgstr "無法移動" -msgid "IDS_MSGC_BODY_NOT_REQUESTED" -msgstr "沒有è¦æ±‚" - msgid "IDS_MSGC_POP_MAXIMUM_NUMBER_OF_PAGES_REACHED" msgstr "é 數已é”上é™" -msgid "IDS_MSGF_BODY_REQUESTED" -msgstr "å·²è¦æ±‚" - msgid "IDS_MSGF_POP_RESTRICTED_MODE_UNABLE_TO_INSERT_RESTRICTED_CONTENT" msgstr "é™åˆ¶æ¨¡å¼ã€‚無法æ’å…¥é™åˆ¶çš„內容" @@ -31,54 +25,18 @@ msgstr "已讀å–" msgid "IDS_MSGF_BODY_RETRIEVING_ING" msgstr "æ£åœ¨æ“·å–..." -msgid "IDS_MSGF_POP_RETRIEVING_FAILED" -msgstr "æ“·å–失敗" - msgid "IDS_MSGC_POP_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES_MESSAGE_WILL_BE_SAVED_IN_OUTBOX" msgstr "æ’å…¥ SIM å¡ä»¥å‚³é€è¨Šæ¯ã€‚訊æ¯å°‡æœƒå„²å˜åœ¨å¯„件匣ä¸" -msgid "IDS_MSGF_BODY_PD_LANGUAGES" -msgstr "%d 語言" - -msgid "IDS_MSGF_BODY_SETTINGSSMS_CENTRE_ADDRESS" -msgstr "ä¸å¿ƒåœ°å€" - -msgid "IDS_MSGF_POP_BLOCKNUMBERDUPLICATED" -msgstr "é‡è¤‡" - -msgid "IDS_MSGF_POP_ENTER_CHANNEL_NAME" -msgstr "è¼¸å…¥é »é“å稱" - msgid "IDS_MSGF_POP_ENTER_CHANNEL_NUMBER" msgstr "è¼¸å…¥é »é“號碼" -msgid "IDS_MSGF_POP_NOTHINGSELECTED" -msgstr "未é¸æ“‡ä»»ä½•é …ç›®" - -msgid "IDS_MSGF_POP_N_CHANNELS" -msgstr "%d é »é“" - -msgid "IDS_MSGF_POP_SAME_CHANNEL_ID_EXISTS" -msgstr "有相åŒçš„é »é“ ID å˜åœ¨" - -msgid "IDS_MSGF_POP_SENDING_FAILED_TRY_AGAIN_Q" -msgstr "傳é€å¤±æ•—。å†è©¦ä¸€æ¬¡ï¼Ÿ" - -msgid "IDS_MSGF_POP_SMSCBENTERCODEFULL" -msgstr "é »é“ ID 清單已滿" - msgid "IDS_MSGF_BODY_1_MESSAGE_SELECTED" msgstr "å·²é¸æ“‡ 1 則訊æ¯" -msgid "IDS_MSGF_BODY_1_PERSON_SELECTED" -msgstr "å·²é¸æ“‡ 1 人" - msgid "IDS_MSGF_BODY_PD_MESSAGES_SELECTED" msgstr "å·²é¸æ“‡ %d 則訊æ¯" -msgid "IDS_MSGF_BODY_PD_PEOPLE_SELECTED" -msgstr "å·²é¸æ“‡ %d 人" - msgid "IDS_MSGC_HEADER_PREVIEW" msgstr "é 覽" @@ -88,156 +46,48 @@ msgstr "檔案å稱已å˜åœ¨" msgid "IDS_MSGF_POP_NOMESSAGES" msgstr "無訊æ¯" -msgid "IDS_MSGC_BODY_CREATE_NEW_MESSAGE" -msgstr "建立訊æ¯" - msgid "IDS_MSGF_BODY_ADD_TO_CONTACT" msgstr "åŠ åˆ°è¯çµ¡äºº" -msgid "IDS_MSGF_BODY_CBLANGUAGE_PT" -msgstr "è‘¡è„牙文" - -msgid "IDS_MSGF_BODY_CREATE_ADDRESS" -msgstr "建立地å€" - -msgid "IDS_MSGF_BODY_SETBLOCK_BLOCK_LIST" -msgstr "å°éŽ–清單" - -msgid "IDS_MSGF_BODY_TAP_TO_ADD_NUMBER" -msgstr "輕觸以新增號碼" - -msgid "IDS_MSGF_HEADER_CREATE_CHANNEL_MCELLBROADCAST" -msgstr "å»ºç«‹é »é“" - msgid "IDS_MSGF_OPT_DISCARD" msgstr "æ¨æ£„" msgid "IDS_MSGC_BODY_UNABLE_TO_SEND_MESSAGE" msgstr "無法傳é€è¨Šæ¯" -msgid "IDS_MSGC_HEADER_CONTACTS" -msgstr "è¯çµ¡äºº" - msgid "IDS_MSGC_OPT_CREATE_ITEM_TAKE_PHOTO" msgstr "æ‹ç…§" msgid "IDS_MSGC_POP_NO_ADDRESS" msgstr "無地å€" -msgid "IDS_MSGF_BODY_ALERT_TONE" -msgstr "æ示音" - -msgid "IDS_MSGF_BODY_ALLOW_ADVERTISEMENT" -msgstr "å…許廣告" - -msgid "IDS_MSGF_BODY_ALLOW_ANONYMOUS" -msgstr "å…許暱å" - msgid "IDS_MSGF_BODY_ATTACHED_ITEM_LIST" msgstr "é™„åŠ é …ç›®æ¸…å–®" msgid "IDS_MSGF_BODY_AUTODOWNLOAD" msgstr "自動下載" -msgid "IDS_MSGF_BODY_AUTOMATIC" -msgstr "自動" - -msgid "IDS_MSGF_BODY_AUTO_DELETE" -msgstr "自動刪除" - -msgid "IDS_MSGF_BODY_BACKGROUND_COLOUR" -msgstr "背景é¡è‰²" - -msgid "IDS_MSGF_BODY_BLOCK_MESSAGES" -msgstr "å°éŽ–訊æ¯" - msgid "IDS_MSGF_BODY_BROADCASTMESSAGES" msgstr "廣æ’訊æ¯" -msgid "IDS_MSGF_BODY_BROADCASTMESSAGES_ACTIVATION" -msgstr "å•Ÿå‹•" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_DE" -msgstr "å¾·æ–‡" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_EN" -msgstr "English" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_ES" -msgstr "西ç文語" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_FR" -msgstr "法語" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_IT" -msgstr "義大利文" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_NL" -msgstr "è·è˜èªž" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_SV" -msgstr "瑞典文" - -msgid "IDS_MSGF_BODY_CBLANGUAGE_TR" -msgstr "Türkçe" - -msgid "IDS_MSGF_BODY_CBS_MY_CHANNELS" -msgstr "æˆ‘çš„é »é“" - -msgid "IDS_MSGF_BODY_CBS_RECEIVING_CHANNEL" -msgstr "æŽ¥æ”¶é »é“" - msgid "IDS_MSGF_BODY_CENTRE_PD" msgstr "ä¸å¿ƒ %d" msgid "IDS_MSGF_BODY_CUSTOM_TIME" msgstr "自訂時間" -msgid "IDS_MSGF_BODY_DEFAULT_STYLE" -msgstr "é è¨æ¨£å¼" - msgid "IDS_MSGF_BODY_DELIVERY_REPORT" msgstr "傳éžå ±å‘Š" msgid "IDS_MSGF_BODY_DETAILSSENDINGFAILED" msgstr "傳é€å¤±æ•—" -msgid "IDS_MSGF_BODY_EVERY_10_MINUTES" -msgstr "æ¯ 10 分é˜" - -msgid "IDS_MSGF_BODY_EVERY_2_MINUTES" -msgstr "æ¯ 2 分é˜" - -msgid "IDS_MSGF_BODY_EVERY_5_MINUTES" -msgstr "æ¯ 5 分é˜" - -msgid "IDS_MSGF_BODY_FONT_COLOUR" -msgstr "å—åž‹é¡è‰²" - msgid "IDS_MSGF_BODY_FROM" msgstr "自" -msgid "IDS_MSGF_BODY_GENERAL_SETTINGS" -msgstr "一般è¨å®š" - -msgid "IDS_MSGF_BODY_GSM_ALPHABET" -msgstr "GSM å—æ¯è¡¨" - -msgid "IDS_MSGF_BODY_HOLD_DOWN_1_KEY_CONNECT_TO_VOICE_MAIL_SERVER" -msgstr "當您沒有使用應用程å¼æˆ–沒有通話時,按下「1ã€éµå¯é€£ç·šè‡³èªžéŸ³éƒµä»¶ä¼ºæœå™¨" - msgid "IDS_MSGF_BODY_INSERTED_ITEM_LIST" msgstr "å·²æ’å…¥é …ç›®æ¸…å–®" -msgid "IDS_MSGF_BODY_LANG" -msgstr "語言" - -msgid "IDS_MSGF_BODY_MAX" -msgstr "最大" - -msgid "IDS_MSGF_BODY_MESSAGESETTINGS_VOICE_MAIL_NUMBER" -msgstr "語音信箱號碼" - msgid "IDS_MSGF_BODY_MESSAGE_DELIVERED" msgstr "訊æ¯å·²å‚³éž" @@ -253,24 +103,12 @@ msgstr "è¦å‘Š" msgid "IDS_MSGF_BODY_MMSNOTIMSGSTATUSSENT" msgstr "已傳é€" -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_FREE" -msgstr "無大å°åŠå…§å®¹é™åˆ¶" - -msgid "IDS_MSGF_BODY_MMS_CONTENTCLASS_HELP_WARNING" -msgstr "當大å°åŠå…§å®¹è¶…éŽå…許的上é™æ™‚,您將收到通知" - msgid "IDS_MSGF_BODY_MSGSIZE_BYTE" msgstr "B" msgid "IDS_MSGF_BODY_MSGSIZE_KB" msgstr "KB" -msgid "IDS_MSGF_BODY_MSGTYPE_FAX" -msgstr "傳真" - -msgid "IDS_MSGF_BODY_MSGTYPE_VOICE" -msgstr "語音" - msgid "IDS_MSGF_BODY_PUSH_MESSAGES" msgstr "推é€è¨Šæ¯" @@ -289,9 +127,6 @@ msgstr "拒絕" msgid "IDS_MSGF_BODY_RECEIVINGOPTIONS" msgstr "接收é¸é …" -msgid "IDS_MSGF_BODY_REPLYPATH" -msgstr "回覆路徑" - msgid "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT" msgstr "è¦æ±‚傳éžå ±å‘Š" @@ -301,12 +136,6 @@ msgstr "è¦æ±‚讀å–å ±å‘Š" msgid "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED" msgstr "ä¿å¯†" -msgid "IDS_MSGF_BODY_SENDING" -msgstr "æ£åœ¨å‚³é€..." - -msgid "IDS_MSGF_BODY_SENDINGOPTIONEXPIRY_2_DAY" -msgstr "2 天" - msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_LOW" msgstr "低" @@ -316,48 +145,15 @@ msgstr "æ£å¸¸" msgid "IDS_MSGF_BODY_SENDINGOPTIONPRIORITY_URGENT" msgstr "緊急" -msgid "IDS_MSGF_BODY_SENDINGOPTIONS" -msgstr "傳é€é¸é …" - -msgid "IDS_MSGF_BODY_SENDINGOPTION_EXPIRY" -msgstr "éŽæœŸ" - msgid "IDS_MSGF_BODY_SENDINGOPTION_PRIORITY" msgstr "å„ªå…ˆé †åº" -msgid "IDS_MSGF_BODY_SEND_DELIVERY_REPORT" -msgstr "傳é€å‚³éžå ±å‘Š" - msgid "IDS_MSGF_BODY_SEND_READ_REPORT" msgstr "傳é€è®€å–å ±å‘Š" -msgid "IDS_MSGF_BODY_SERVICE_TYPE" -msgstr "æœå‹™é¡žåž‹" - -msgid "IDS_MSGF_BODY_SETBLOCK_ADDRESS" -msgstr "地å€" - -msgid "IDS_MSGF_BODY_SETBLOCK_EXACTLY_THE_SAME_AS" -msgstr "完全一樣" - -msgid "IDS_MSGF_BODY_SETBLOCK_INCLUDE" -msgstr "包括" - -msgid "IDS_MSGF_BODY_SETBLOCK_MATCH_CRITERIA" -msgstr "符åˆæ¢ä»¶" - -msgid "IDS_MSGF_BODY_SETTINGSOSMSGREPEAT_ONCE" -msgstr "一次" - msgid "IDS_MSGF_BODY_SETUP_PAGE_DURATION" msgstr "é é¢é¡¯ç¤ºæ™‚é–“" -msgid "IDS_MSGF_BODY_SMSSENDINGOPTCHARSUPPORT" -msgstr "å—元支æ´" - -msgid "IDS_MSGF_BODY_SMSTYPETEXT" -msgstr "æ–‡å—" - msgid "IDS_MSGF_BODY_SOS_MESSAGES" msgstr "SOS 訊æ¯" @@ -367,21 +163,12 @@ msgstr "簡訊" msgid "IDS_MSGF_BODY_TOTAL_SIZE_ABB" msgstr "總大å°" -msgid "IDS_MSGF_BODY_UNICODE" -msgstr "Unicode" - msgid "IDS_MSGF_HEADER_DRM_CONTENT" msgstr "DRM 內容" -msgid "IDS_MSGF_HEADER_EDIT_CHANNEL_CHANNEL_MCELLBROADCAST" -msgstr "ç·¨è¼¯é »é“" - msgid "IDS_MSGF_HEADER_ITEM_LIST" msgstr "é …ç›®æ¸…å–®" -msgid "IDS_MSGF_HEADER_MMSDURSECONDS" -msgstr "秒" - msgid "IDS_MSGF_OPT_10SEC" msgstr "10 秒" @@ -400,12 +187,6 @@ msgstr "安è£" msgid "IDS_MSGF_OPT_ROAM_NETWORK" msgstr "外部網路" -msgid "IDS_MSGF_OPT_SLIDE" -msgstr "投影片" - -msgid "IDS_MSGF_OPT_SP_FONT_STYLE" -msgstr "å—型樣å¼" - msgid "IDS_MSGF_OPT_VIEW_CONTACT_DETAIL" msgstr "檢視è¯çµ¡äººè©³ç´°è³‡æ–™" @@ -418,18 +199,6 @@ msgstr "æ“·å–訊æ¯å¤±æ•—" msgid "IDS_MSGF_POP_SENDING_MULTIMEDIA_MESSAGE_FAILED" msgstr "傳é€å¤šåª’體訊æ¯å¤±æ•—" -msgid "IDS_MSGF_POP_YOU_CAN_SEND_IMAGE_UP_TO_PD_KB" -msgstr "最多å¯ä»¥å‚³é€ %d KB å½±åƒ" - -msgid "IDS_MSGF_OPT_NAME_CARD" -msgstr "å片" - -msgid "IDS_MSGF_BODY_EMAILNONAME" -msgstr "無姓å" - -msgid "IDS_MSGF_BODY_WELCOME" -msgstr "æ¡è¿Ž" - msgid "IDS_MSGF_SK_FORWARD_LITE" msgstr "轉寄" @@ -439,132 +208,48 @@ msgstr "未讀" msgid "IDS_MSGF_OPT_MOVE_TO_PHONE" msgstr "移動到手機" -msgid "IDS_MSGC_BODY_ADD_TEXT" -msgstr "åŠ å…¥æ–‡å—" - msgid "IDS_MSGC_BODY_DUPLICATED_RECIPIENT" msgstr "é‡è¦†çš„收件人" -msgid "IDS_MSGC_BODY_MAXIMUM_CREATION_SIZE" -msgstr "最大新建訊æ¯" - msgid "IDS_MSGC_BODY_MAXIMUM_NUMBER_OF_RECIPIENTS_HPD_REACHED" msgstr "收件人的最大數é‡ï¼ˆ%dä½ï¼‰å·²é”到" -msgid "IDS_MSGC_BODY_TAP_TO_ADD_SUBJECT" -msgstr "è¼•è§¸ä»¥åŠ å…¥ä¸»æ—¨" - -msgid "IDS_MSGC_BUTTON_GROUPS" -msgstr "群組" - -msgid "IDS_MSGC_BUTTON_PHONEBOOK" -msgstr "電話簿" - -msgid "IDS_MSGC_OPT_ADDATTACHMENT_OTHER_FILE" -msgstr "其他檔案" - -msgid "IDS_MSGC_OPT_ADD_ATTACHMENT_SOUND" -msgstr "è²éŸ³" - -msgid "IDS_MSGC_OPT_ADD_MULTIMEDIA" -msgstr "åŠ å…¥å¤šåª’é«”" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_OFF" -msgstr "é—œ" - -msgid "IDS_MSGC_OPT_AUTO_COMPLETE_ON" -msgstr "é–‹" - msgid "IDS_MSGC_OPT_CHANGE_RECIPIENTS_TO" msgstr "至" msgid "IDS_MSGC_OPT_CREATEITEMRECORDSOUND" msgstr "錄音" -msgid "IDS_MSGC_OPT_RECORD_SOUND" -msgstr "錄音" - msgid "IDS_MSGC_OPT_RECORD_VIDEO" msgstr "錄影" -msgid "IDS_MSGC_OPT_TEXT_TEMPLATE" -msgstr "æ–‡å—範本" - msgid "IDS_MSGC_POP_CHANGED_TO_MMS" msgstr "已變更為 MMS" msgid "IDS_MSGC_POP_CHANGED_TO_SMS" msgstr "更改為簡çŸè¨Šæ¯" -msgid "IDS_MSGC_POP_INPUTWINDOW_ENTER_ADDRESS_TMO_US" -msgstr "輸入地å€" - -msgid "IDS_MSGC_POP_INVALID_FILE" -msgstr "檔案無效" - -msgid "IDS_MSGC_POP_MESSAGESENT" -msgstr "訊æ¯å·²å‚³é€" - -msgid "IDS_MSGC_POP_MSG_SIZE_OVER" -msgstr "已超éŽè¨Šæ¯å¤§å°ä¸Šé™" - msgid "IDS_MSGC_POP_PD_ATTACHMENTS_AVAILABLE_SELECT_UP_TO_PD_ATTACHMENTS" msgstr "åŠ å…¥é™„ä»¶/ 最多至%個附件" -msgid "IDS_MSGC_POP_SERVER_NOT_RESPONDING" -msgstr "伺æœå™¨ç„¡å›žæ‡‰" - msgid "IDS_MSGC_POP_UNABLE_TO_ATTACH_ALL_FILES_MAXIMUM_ATTACHMENT_CAPACITY_PD_KB_CONTINUE_Q" msgstr "ç„¡æ³•é™„åŠ æ‰€æœ‰æª”æ¡ˆï¼Œæœ€å¤§å®¹é‡ï¼…KB。è¦ç¹¼çºŒå—Žï¼Ÿ" -msgid "IDS_MSGC_POP_UNABLE_TO_SEND_MMS_UNRECOGNISED_ERROR" -msgstr "ç„¡æ³•å‚³é€ MMS。無法辨è˜çš„錯誤" - -msgid "IDS_MSGF_BODY_CALENDAR_SYNC" -msgstr "日曆åŒæ¥" - msgid "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE" msgstr "å—型大å°" -msgid "IDS_MSGF_BODY_EMAIL_WITHOUT_ATTACHMENTS" -msgstr "無附件" - -msgid "IDS_MSGF_BODY_ENTIRE_EMAIL" -msgstr "æ•´å°é›»å郵件" - msgid "IDS_MSGF_BODY_MMSCREATIONMODE" msgstr "建立模å¼" -msgid "IDS_MSGF_BODY_MMSDELIVERYMSGDELIVERED" -msgstr "訊æ¯å·²å‚³éž" - msgid "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE" msgstr "多媒體訊æ¯" -msgid "IDS_MSGF_BODY_NEW_VOICEMAIL" -msgstr "新留言" - msgid "IDS_MSGF_BODY_NO_SUBJECT" msgstr "無主旨" -msgid "IDS_MSGF_BODY_SENDREADRECEIPT_YES_TO_ALL" -msgstr "全部é¸æ˜¯" - msgid "IDS_MSGF_BODY_SERVICECENTRE" msgstr "æœå‹™ä¸å¿ƒ" -msgid "IDS_MSGF_BODY_SERVICE_LOADING" -msgstr "æœå‹™è¼‰å…¥" - -msgid "IDS_MSGF_BODY_SOUND" -msgstr "音效" - -msgid "IDS_MSGF_BODY_UNABLE_TO_SEND_UNSUPPORTED_FILE_TYPES_ATTACHED" -msgstr "無法發é€,ä¸æ”¯æ´çš„文件類型" - -msgid "IDS_MSGF_HEADER_CONVERSATION_LIST" -msgstr "å°è©±æ¸…å–®" - msgid "IDS_MSGF_HEADER_SELECT_ADDRESS" msgstr "é¸æ“‡åœ°å€" @@ -574,30 +259,9 @@ msgstr "移動到 SIM å¡" msgid "IDS_MSGF_POP_ABOUT_TO_GO_ONLINE_CONTINUE_Q" msgstr "您å³å°‡ä¸Šç·š (%s)。繼續?" -msgid "IDS_MSGF_POP_MMSRETRIEVEFAILED_ORANGE" -msgstr "MMS æ“·å–失敗" - -msgid "IDS_MSGF_POP_NO_RECIPIENT" -msgstr "無收件人" - -msgid "IDS_MSGF_POP_REQUIRED" -msgstr "å¿…è¦é …" - -msgid "IDS_MSGF_POP_SAVE_IN_DRAFT" -msgstr "è¦å„²å˜åœ¨è‰ç¨¿åŒ£ä¸å—Žï¼Ÿ" - -msgid "IDS_MSGF_POP_SIZE_OVER_RESIZING" -msgstr "超éŽè¨Šæ¯å¤§å°ä¸Šé™ã€‚æ£åœ¨é‡è¨å¤§å°..." - -msgid "IDS_MSGF_POP_SYNCHRONISATION_CANCELLED" -msgstr "åŒæ¥å·²å–消" - msgid "IDS_MSGF_SK_RESEND" msgstr "é‡æ–°å‚³é€" -msgid "IDS_MSGF_BODY_CBS_CHANNEL_ADD" -msgstr "å¢žåŠ é »é“" - msgid "IDS_MSGF_BODY_INVALID_RECIPIENT" msgstr "無效的收件人" @@ -610,27 +274,15 @@ msgstr "通話期間無法æ’放" msgid "IDS_MSG_POP_UNABLE_TO_SAVE_WHILE_IN_MASS_STORAGE_MODE" msgstr "處於大容é‡å„²å˜è£ç½®æ¨¡å¼æ™‚,無法儲å˜" -msgid "IDS_MSG_POP_UNABLE_TO_OPEN_WHILE_IN_MASS_STORAGE_MODE" -msgstr "處於大容é‡å„²å˜è£ç½®æ¨¡å¼æ™‚,無法開啟" - -msgid "IDS_MSG_POP_UNABLE_TO_USE_WHILE_IN_MASS_STORAGE_MODE" -msgstr "處於大容é‡å„²å˜è£ç½®æ¨¡å¼æ™‚,無法使用" - msgid "IDS_MSGC_POP_DISCARD_CURRENT_MESSAGE_Q" msgstr "放棄目å‰è¨Šæ¯" -msgid "IDS_MSGF_OPT_SELECTED" -msgstr "å·²é¸æ“‡" - msgid "IDS_MSGC_POP_SPACE_SELECTED" msgstr "å·²é¸æ“‡" msgid "IDS_MSGF_OPT_DELETE_Q" msgstr "è¦åˆªé™¤å—Žï¼Ÿ" -msgid "IDS_MSGF_POP_RESIZING_ING" -msgstr "æ£åœ¨é‡è¨å¤§å°..." - msgid "IDS_MSGF_POP_UNABLE_TO_ATTACH_MAXIMUM_SIZE_OF_FILES_IS_PD_KB" msgstr "ç„¡æ³•é™„åŠ ã€‚æœ€å¤§æ–‡ä»¶%d KB" @@ -649,3 +301,204 @@ msgstr "訊æ¯å®‰å…¨æ”¿ç–é™åˆ¶" msgid "IDS_MSGF_POP_ADDING_PLEASE_WAIT_ING" msgstr "å¢žåŠ ä¸ã€‚è«‹ç¨å€™..." +msgid "IDS_MSGF_BODY_PUSHADDRESS" +msgstr "æœå‹™ä¸å¿ƒåœ°å€" + +msgid "IDS_MSGF_BODY_SPAM_MESSAGES" +msgstr "垃圾郵件訊æ¯" + +msgid "IDS_MSGF_BODY_LARGE" +msgstr "大" + +msgid "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL" +msgstr "æ£å¸¸" + +msgid "IDS_MSGF_BODY_SMALL" +msgstr "å°" + +msgid "IDS_MSGF_BODY_TINY" +msgstr "ç´°å°" + +msgid "IDS_MSG_POP_UNABLE_TO_SEND_SCHEDULED_MESSAGE_SET_ANOTHER_TIME" +msgstr "無法發é€é 定的訊æ¯ã€‚è«‹è¨å®šå…¶ä»–時間" + +msgid "IDS_MSGC_OPT_DATE_AND_TIME" +msgstr "日期與時間" + +msgid "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE" +msgstr "多媒體訊æ¯" + +msgid "IDS_MSGF_POP_NO_RECIPIENTS_ADDED_ENTER_RECIPIENTS" +msgstr "沒有收件人,請輸入收件人" + +msgid "IDS_MSGF_BODY_SOSSENDINGOPTIONS" +msgstr "傳é€é¸é …" + +msgid "IDS_MSGF_BODY_RECEIVING_ALERT_TYPE" +msgstr "接收è¦å ±é¡žåž‹" + +msgid "IDS_MSGF_BODY_SOSALERTYES" +msgstr "SOS" + +msgid "IDS_MSGF_BODY_SOSMESSAGE_NORMAL" +msgstr "æ£å¸¸" + +msgid "IDS_MSGF_OPT_SENDING_SOS" +msgstr "å‚³é€ SOS" + +msgid "IDS_MSGF_BODY_RECIPIENTS" +msgstr "收件人" + +msgid "IDS_MSGF_BODY_REPEAT" +msgstr "é‡è¦†" + +msgid "IDS_MSGF_BODY_MESSAGE" +msgstr "訊æ¯" + +msgid "IDS_MSGF_BODY_SETTING_SOS_MSGREPEAT_ONCE" +msgstr "一次" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_3TIMES" +msgstr "3 次" + +msgid "IDS_MSGF_BODY_SOSMSGSENDING_5TIMES" +msgstr "5 次" + +msgid "IDS_MSGF_BODY_SOSMSG" +msgstr "我ç¾åœ¨æƒ…æ³ç·Šæ€¥ã€‚請救我" + +msgid "IDS_MSGF_POP_SIM_NOT_INSERTED" +msgstr "SIM å¡æœªæ’å…¥" + +msgid "IDS_MSGC_BODY_TAKE_PICTURE" +msgstr "æ‹ç…§" + +msgid "IDS_MSGC_BODY_CAPTURE_VIDEO" +msgstr "æ‹æ”影片" + +msgid "IDS_MSGC_BODY_RECORD_AUDIO" +msgstr "錄音" + +msgid "IDS_MSGF_BODY_CB_MESSAGES" +msgstr "å€åŸŸå»£æ’訊æ¯" + +msgid "IDS_MSGF_BODY_SIM_CARD_MESSAGES" +msgstr "SIM å¡è¨Šæ¯" + +msgid "IDS_MSG_BODY_DURATION_MUST_BE_LONGER_THAN_PD_SECONDS" +msgstr "æ™‚é–“å¿…é ˆè¶…éŽ %d 秒" + +msgid "IDS_MSGC_POP_MMSCANTADD" +msgstr "ç„¡æ³•åŠ å…¥å…§å®¹" + +msgid "IDS_MSG_HEADER_SELECT_RECIPIENT" +msgstr "é¸æ“‡æ”¶ä»¶äºº" + +msgid "IDS_MSGC_OPT_VIEW_CONTACT" +msgstr "檢視è¯çµ¡äºº" + +msgid "IDS_MSGC_OPT2_DURATION_HPS_SEC_ABB" +msgstr "æŒçºŒæ™‚é–“ (%s 秒)" + +msgid "IDS_MSGC_BODY_PICTURE_TOO_LARGE_COMPRESSING_ING" +msgstr "圖片太大。壓縮 ..." + +msgid "IDS_MSGC_POP_MESSAGE_SAVED_AS_DRAFT" +msgstr "訊æ¯å·²å˜æˆè‰ç¨¿" + +msgid "IDS_MSGF_BODY_OTHER" +msgstr "其他" + +msgid "IDS_MSGF_HEADER_DRAFT_ABB" +msgstr "è‰ç¨¿" + +msgid "IDS_MSGC_HEADER_DURATION_FOR_SLIDE" +msgstr "幻燈片時間為" + +msgid "IDS_MSGF_OPT_SEND_EMAIL" +msgstr "傳é€é›»å郵件" + +msgid "IDS_MSGF_BODY_INSERTED_ITEMS" +msgstr "å·²æ’å…¥é …ç›®" + +msgid "IDS_MSGF_BODY_ATTACHED_ITEMS" +msgstr "å·²é™„åŠ é …ç›®" + +msgid "IDS_MSGC_BODY_PD_ATTACHMENTS" +msgstr "%d 個附件" + +msgid "IDS_MSGC_BUTTON2_SCHEDULED_N_MESSAGE" +msgstr "已排定\n訊æ¯" + +msgid "IDS_MSGC_BUTTON2_DURATION_N_HPD_SECS" +msgstr "æŒçºŒæ™‚é–“n(%d 秒)" + +msgid "IDS_MSGC_OPT_USE_OTHER_CONTACT_INFO_ABB" +msgstr "使用其他è¯çµ¡äººè³‡è¨Š" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE_FOR_ONE_FILE" +msgstr "æ¤è¨Šæ¯åŒ…æ‹¬ä¸€å€‹æœªé¡¯ç¤ºçš„é™„åŠ æª”æ¡ˆ" + +msgid "IDS_MSGF_POP_HELP_PAGE_MESSAGE" +msgstr "æ¤è¨Šæ¯åŒ…æ‹¬æœªé¡¯ç¤ºçš„é™„åŠ æª”æ¡ˆ" + +msgid "IDS_MSGF_HEADER_SAVE_ALL" +msgstr "全部儲å˜" + +msgid "IDS_MSG_BODY_DRAFT_MESSAGES" +msgstr "è‰ç¨¿è¨Šæ¯" + +msgid "IDS_MSG_BODY_MESSAGE_WILL_BE_RESTORED" +msgstr "訊æ¯å°‡å¾©åŽŸ" + +msgid "IDS_MSG_BODY_SCHEDULED_MESSAGE_WILL_BE_CANCELLED" +msgstr "é 約訊æ¯å°‡æœƒå–消" + +msgid "IDS_MSGF_BODY_COPY_MESSAGE_TEXT_ABB" +msgstr "複製訊æ¯æ–‡å—" + +msgid "IDS_MSGF_BODY_VIEW_MESSAGE_DETAILS_ABB" +msgstr "檢視訊æ¯è©³ç´°è³‡æ–™" + +msgid "IDS_MSGF_BODY_INBOX_LOCKED_MESSAGES" +msgstr "已鎖定訊æ¯" + +msgid "IDS_MSGF_HEADER_MESSAGE_BOXES" +msgstr "訊æ¯æ–¹å¡Š" + +msgid "IDS_MSGF_OPT_BLOCK" +msgstr "å°éŽ–" + +msgid "IDS_MSGF_BODY_COPY_TO_PHONE" +msgstr "複製到手機" + +msgid "IDS_MSGF_POP_MESSAGE_COPIED_FROM_SIM_CARD" +msgstr "從 SIM å¡è¤‡è£½çš„訊æ¯" + +msgid "IDS_MSGC_OPT_CANCEL_MESSAGE" +msgstr "å–消訊æ¯" + +msgid "IDS_MSGC_OPT_ATTACHMENTS" +msgstr "附件" + +msgid "IDS_MSGF_POP_SENDING_FAILED_MESSAGE" +msgstr "訊æ¯å‚³é€å¤±æ•—" + +msgid "IDS_MSGF_POP_MAXIMUM_CHARACTERS" +msgstr "å·²é”å—元數上é™" + +msgid "IDS_MSGF_POP_SAVED_IN_MY_FILES" +msgstr "Saved in My Files" + +msgid "IDS_MSGF_HEADER_MESSAGE_DETAILS" +msgstr "Message details" + +msgid "IDS_MSGF_POP_RESTORING_ING" +msgstr "æ£åœ¨é‚„原..." + +msgid "IDS_MSGF_POP_NO_ATTACHMENTS" +msgstr "無附件" + +msgid "IDS_MSGF_POP_COPIED_TO_CLIPBOARD" +msgstr "複製到剪貼簿" + diff --git a/org.tizen.message.xml b/org.tizen.message.xml new file mode 100755 index 0000000..5a7398b --- /dev/null +++ b/org.tizen.message.xml @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns="http://tizen.org/ns/packages" package="org.tizen.message" version="0.8.15" install-location="internal-only"> + <label>Message</label> + <author email="jyjeong@samsung.com" href="www.samsung.com">Jaeyun Jeong</author> + <description>Message Application</description> + <ui-application appid="org.tizen.message" exec="/opt/apps/org.tizen.message/bin/message" nodisplay="false" multiple="false" type="capp" taskmanage="true"> + <icon>org.tizen.message.png</icon> + <label>Messages</label> + <label xml:lang="en-us">Messages</label> + <label xml:lang="nl-nl">Berichten</label> + <label xml:lang="de-de">Nachrichten</label> + <label xml:lang="zh-hk">訊æ¯</label> + <label xml:lang="zh-cn">ä¿¡æ¯</label> + <label xml:lang="ru-ru">СообщениÑ</label> + <label xml:lang="zh-tw">訊æ¯</label> + <label xml:lang="ja-jp">メール</label> + <label xml:lang="es-es">Mensajes</label> + <label xml:lang="el-gr">ΜηνÏματα</label> + <label xml:lang="it-it">Messaggi</label> + <label xml:lang="tr-tr">Mesajlar</label> + <label xml:lang="pt-pt">Mensagem</label> + <label xml:lang="fr-fr">Messages</label> + <label xml:lang="ko-kr">메시지</label> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send"/> + </application-service> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send"/> + <uri name="mmsto"/> + <mime name="*/*"/> + </application-service> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send"/> + <mime name="*/*"/> + </application-service> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send_text"/> + </application-service> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send_text"/> + <uri name="sms"/> + <mime name="*/*"/> + </application-service> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send_text"/> + <mime name="*/*"/> + </application-service> + </ui-application> + <ui-application appid="org.tizen.msg-ui-class0" exec="/opt/apps/org.tizen.message/bin/msg-ui-class0" nodisplay="true" multiple="false" type="capp" taskmanage="true"> + <label>Msg-ui-class0</label> + <label xml:lang="en-us">Class0 message viewer</label> + <label xml:lang="ko-kr">메시지</label> + </ui-application> + <ui-application appid="msg-composer-efl" exec="/opt/ug/bin/msg-composer-efl" nodisplay="true" multiple="true" type="capp" taskmanage="false"> + <icon>org.tizen.message.png</icon> + <label>Message</label> + <label xml:lang="en-us">Message</label> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send"/> + </application-service> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send"/> + <uri name="mmsto"/> + <mime name="*/*"/> + </application-service> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send"/> + <mime name="*/*"/> + </application-service> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send_text"/> + </application-service> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send_text"/> + <uri name="sms"/> + <mime name="*/*"/> + </application-service> + <application-service> + <operation name="http://tizen.org/appsvc/operation/send_text"/> + <mime name="*/*"/> + </application-service> + </ui-application> +</manifest> diff --git a/packaging/org.tizen.message.spec b/packaging/org.tizen.message.spec index c58ae83..3acb335 100755 --- a/packaging/org.tizen.message.spec +++ b/packaging/org.tizen.message.spec @@ -1,18 +1,19 @@ Name: org.tizen.message Summary: message application -Version: 0.8.2 +Version: 0.8.22 Release: 1 Group: devel -License: Flora Software License +License: Samsung Source0: %{name}-%{version}.tar.gz Requires(post): /bin/touch -BuildRequires: pkgconfig(appcore-common) -BuildRequires: pkgconfig(appcore-efl) +Requires(post): /usr/bin/vconftool BuildRequires: pkgconfig(appsvc) BuildRequires: pkgconfig(bundle) BuildRequires: pkgconfig(capi-appfw-application) BuildRequires: pkgconfig(contacts-service) BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(drm-client) +BuildRequires: pkgconfig(drm-trusted) BuildRequires: pkgconfig(devman_haptic) BuildRequires: pkgconfig(elementary) BuildRequires: pkgconfig(ecore) @@ -25,8 +26,17 @@ BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(heynoti) BuildRequires: pkgconfig(icu-i18n) BuildRequires: pkgconfig(msg-service) +BuildRequires: pkgconfig(mm-common) +BuildRequires: pkgconfig(mm-player) +BuildRequires: pkgconfig(mm-session) +BuildRequires: pkgconfig(mmutil-jpeg) +BuildRequires: pkgconfig(mmutil-imgp) +BuildRequires: pkgconfig(mm-fileinfo) BuildRequires: pkgconfig(utilX) -BuildRequires: pkgconfig(ui-gadget) +BuildRequires: pkgconfig(ui-gadget-1) +BuildRequires: pkgconfig(syspopup-caller) +BuildRequires: pkgconfig(capi-media-sound-manager) +BuildRequires: pkgconfig(status) BuildRequires: libug-contacts-devel BuildRequires: cmake BuildRequires: edje-tools @@ -52,18 +62,23 @@ make #%{?jobs:-j%jobs} rm -rf %{buildroot} %make_install -mkdir -p %{buildroot}/opt/apps/org.tizen.message/data - %post +vconftool set -t int db/private/org.tizen.message/font_size 0 -u 5000 +#mkdir -p %{buildroot}/opt/apps/org.tizen.message/data +chown -R 5000:5000 /opt/apps/org.tizen.message/data +mkdir -p /opt/ug/bin +ln -sf /usr/bin/ug-client /opt/ug/bin/msg-composer-efl %files %defattr(-,root,root,-) /opt/apps/org.tizen.message/bin/message /opt/apps/org.tizen.message/lib/* /opt/apps/org.tizen.message/bin/message-dialog -/opt/share/applications/*.desktop +/opt/apps/org.tizen.message/bin/msg-ui-class0 +/opt/share/packages/*.xml /opt/apps/org.tizen.message/res/* /opt/ug/lib/*.so -%attr(-,inhouse,inhouse) %dir /opt/apps/org.tizen.message/data +%dir /opt/apps/org.tizen.message/data +/opt/share/icons/default/small/*.png %changelog diff --git a/setting/CMakeLists.txt b/setting/CMakeLists.txt index 59ed23a..318a5e6 100755 --- a/setting/CMakeLists.txt +++ b/setting/CMakeLists.txt @@ -12,7 +12,13 @@ SET(SETTING_SRCS ./src/main/msg-ui-setting-callback.c ./src/main/msg-ui-setting-common-util.c ./src/main/msg-ui-setting-msg-service-wrapper.c + ./src/main/msg-ui-setting-font-size.c + ./src/general/msg-ui-setting-general-setting.c + ./src/general/msg-ui-setting-general-block-message.c ./src/text/msg-ui-setting-text-message.c + ./src/text/msg-ui-setting-text-service-center.c + ./src/multimedia/msg-ui-setting-mm-message.c + ./src/multimedia/msg-ui-setting-mm-recv-option.c ) INCLUDE_DIRECTORIES(${CMAKE_SOURCE_SETTING_DIR}/include @@ -31,12 +37,14 @@ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{PREFIX}\"") ADD_DEFINITIONS("-DDATAFS=\"$ENV{DATADIR}\"") ADD_DEFINITIONS("-DTARGET") +ADD_DEFINITIONS("-DSLP_PROF") + # Install executable and .edj files. ADD_LIBRARY(ug-msg-setting-efl SHARED ${SETTING_SRCS}) TARGET_LINK_LIBRARIES(ug-msg-setting-efl ${pkgs_LDFLAGS} -L${CMAKE_SOURCE_COMMON_DIR} -lmsg-common) -INSTALL(TARGETS ug-msg-setting-efl DESTINATION ${UGDIR}) +INSTALL(TARGETS ug-msg-setting-efl DESTINATION ${UGDIR}) #i18n #ADD_SUBDIRECTORY(po) diff --git a/setting/include/msg-ui-setting-callback.h b/setting/include/msg-ui-setting-callback.h index 04d433b..28e90d8 100755 --- a/setting/include/msg-ui-setting-callback.h +++ b/setting/include/msg-ui-setting-callback.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __DEF_MSG_UI_SETTING_CALLBACK_H__ #define __DEF_MSG_UI_SETTING_CALLBACK_H__ @@ -24,6 +25,12 @@ =============================================================================*/ void msg_ui_setting_text_msg_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_setting_mm_msg_cb(void *data, Evas_Object *obj, void *event_info); + +void msg_ui_setting_spam_msg_cb(void *data, Evas_Object *obj, void *event_info); + +void msg_ui_setting_font_size_cb(void *data, Evas_Object *obj, void *event_info); + void msg_ui_setting_quit_cb(void *data, Evas_Object *obj, void *event_info); #endif diff --git a/setting/include/msg-ui-setting-common-util.h b/setting/include/msg-ui-setting-common-util.h index b10d077..a79c16a 100755 --- a/setting/include/msg-ui-setting-common-util.h +++ b/setting/include/msg-ui-setting-common-util.h @@ -14,12 +14,14 @@ * limitations under the License. */ + #ifndef __DEF_MSG_UI_SETTING_COMMON_UTIL_H__ #define __DEF_MSG_UI_SETTING_COMMON_UTIL_H__ #include "msg-ui-setting-main.h" +#include "msg-ui-setting-general-setting.h" #include "msg-ui-setting-text-message.h" - +#include "msg-ui-setting-mm-message.h" #define SETTING_MAX_FIELD_COUNT 20 #define SETTING_MAX_VALUE_COUNT 10 diff --git a/setting/include/msg-ui-setting-gadget.h b/setting/include/msg-ui-setting-gadget.h index 61c3938..97b3c2e 100755 --- a/setting/include/msg-ui-setting-gadget.h +++ b/setting/include/msg-ui-setting-gadget.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __DEF_MSG_UI_SETTING_GADGET_H__ #define __DEF_MSG_UI_SETTING_GADGET_H__ diff --git a/setting/include/msg-ui-setting-general-setting.h b/setting/include/msg-ui-setting-general-setting.h new file mode 100755 index 0000000..f1136b2 --- /dev/null +++ b/setting/include/msg-ui-setting-general-setting.h @@ -0,0 +1,61 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef __DEF_MSG_UI_SETTING_GENERAL_SETTING_H__ +#define __DEF_MSG_UI_SETTING_GENERAL_SETTING_H__ + + +#include <msg.h> +#include "msg-ui-setting-main.h" + + +#define MSG_UI_SETTING_BLOCKED_DETAIL_CREATE -1 + + +typedef enum { + MSG_UI_SETTING_GENERAL_MENU_NUMBERS_TO_REJECT, + MSG_UI_SETTING_GENERAL_MENU_BLOCK_MESSAGE, + MSG_UI_SETTING_GENERAL_MENU_MAX + +} MSG_UI_SETTING_GENERAL_MENU_E; + +typedef enum { + MSG_UI_SETTING_BLOCK_DETAIL_MENU_TITLE, + MSG_UI_SETTING_BLOCK_DETAIL_MENU_DATA, + MSG_UI_SETTING_BLOCK_DETAIL_MENU_MAX + +} MSG_UI_SETTING_BLOCK_DETAIL_MENU_E; + + +/*============================================================================ + FUNCTION DEFINE +=============================================================================*/ +void msg_ui_setting_general_create_view(void *data, Evas_Object *obj, void *event_info); + + +/* + * General Setting - Block Messsage + */ +void msg_ui_setting_block_message_back_btn_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_setting_block_message_exit_edit_mode(void *data); +void msg_ui_setting_destroy_block_message(void *data); +void msg_ui_setting_show_block_message(void *data); +void msg_ui_setting_block_filter_update_view(void *data); +void msg_ui_setting_general_block_message_main(void *data, Evas_Object *obj, void *event_info); + + +#endif diff --git a/setting/include/msg-ui-setting-main.h b/setting/include/msg-ui-setting-main.h index 14f73e8..2dcaa7d 100755 --- a/setting/include/msg-ui-setting-main.h +++ b/setting/include/msg-ui-setting-main.h @@ -17,9 +17,6 @@ #ifndef __DEF_MSG_UI_MAIN_SETTING_H__ #define __DEF_MSG_UI_MAIN_SETTING_H__ - -#include <MapiControl.h> -#include <MapiSetting.h> #include <vconf.h> #include "message.h" #include "msg-ui-util.h" @@ -38,6 +35,11 @@ typedef enum { MSG_UI_SETTING_MAIN_MENU_TEXT_MESSAGES, + MSG_UI_SETTING_MAIN_MENU_MULTIMEDIA_MESSAGES, + MSG_UI_SETTING_MAIN_MENU_SPAM_MESSAGES, + MSG_UI_SETTING_MAIN_MENU_CB_MESSAGES, + MSG_UI_SETTING_MAIN_MENU_SUB_TITLE, + MSG_UI_SETTING_MAIN_MENU_FONT_SIZE, MSG_UI_SETTING_MAIN_MENU_MAX @@ -55,9 +57,11 @@ Evas_Object *msg_ui_setting_create_navigation_layout(Evas_Object *parent); Evas_Object *msg_ui_setting_create_layout_main(Evas_Object *parent); void msg_ui_setting_launch(PMSG_SETTING_DATA settingData); +void msg_ui_setting_launch_spam_setting(PMSG_SETTING_DATA settingData); void msg_ui_setting_create_main_view(PMSG_SETTING_DATA settingData); +void msg_ui_setting_font_size_create_view(void *data, Evas_Object *obj, void *event_info); #endif /* __DEF_MSG_UI_MAIN_SETTING_H__ */ diff --git a/setting/include/msg-ui-setting-mm-message.h b/setting/include/msg-ui-setting-mm-message.h new file mode 100755 index 0000000..956bfd1 --- /dev/null +++ b/setting/include/msg-ui-setting-mm-message.h @@ -0,0 +1,76 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef __DEF_MSG_UI_SETTING_MM_MESSAGE_H__ +#define __DEF_MSG_UI_SETTING_MM_MESSAGE_H__ + + +#include "msg-ui-setting-main.h" + + +#define MSG_UI_SETTING_MM_STYLE_FONT_VERY_SMALL 28 +#define MSG_UI_SETTING_MM_STYLE_FONT_SMALL 32 +#define MSG_UI_SETTING_MM_STYLE_FONT_NORMAL 44 +#define MSG_UI_SETTING_MM_STYLE_FONT_LARGE 56 + + +/*============================================================================ + ENUMS +=============================================================================*/ + +typedef enum { + MSG_UI_SETTING_MM_MENU_RECEIVING_OPTION, + MSG_UI_SETTING_MM_MENU_DELIVERY_REPORT, + MSG_UI_SETTING_MM_MENU_READ_REPORT, + MSG_UI_SETTING_MM_MENU_CREATE_MODE, + MSG_UI_SETTING_MM_MENU_MAX + +} MSG_UI_SETTING_MM_MENU_E; + +typedef enum { + MSG_UI_SETTING_MM_RECV_OPT_MENU_HOME, + MSG_UI_SETTING_MM_RECV_OPT_MENU_FOREIGN, + MSG_UI_SETTING_MM_RECV_OPT_MENU_MAX + +} MSG_UI_SETTING_MM_RECV_OPT_MENU_E; + +typedef enum { + MSG_UI_SETTING_MM_READ_REP_MENU_REQUEST, + MSG_UI_SETTING_MM_READ_REP_MENU_SEND, + MSG_UI_SETTING_MM_READ_REP_MENU_MAX + +} MSG_UI_SETTING_MM_READ_REP_MENU_E; + + +/*============================================================================ + FUNCTION DEFINE +=============================================================================*/ +void msg_ui_setting_mm_create_view(void *data, Evas_Object *obj, void *event_info); + +/* + * Receiving Option API + */ +void msg_ui_setting_mm_recv_opt_main(void *data, Evas_Object *obj, void *event_info); + +/* + * Read Report API + */ +void msg_ui_setting_mm_read_rep_main(void *data, Evas_Object *obj, void *event_info); + + +#endif + diff --git a/setting/include/msg-ui-setting-msg-service-wrapper.h b/setting/include/msg-ui-setting-msg-service-wrapper.h index c330502..972dbbd 100755 --- a/setting/include/msg-ui-setting-msg-service-wrapper.h +++ b/setting/include/msg-ui-setting-msg-service-wrapper.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __DEF_MSG_UI_SETTING_MSG_SERVICE_WRAPPER_H__ #define __DEF_MSG_UI_SETTING_MSG_SERVICE_WRAPPER_H__ diff --git a/setting/include/msg-ui-setting-text-message.h b/setting/include/msg-ui-setting-text-message.h index cd63e3b..fa1d621 100755 --- a/setting/include/msg-ui-setting-text-message.h +++ b/setting/include/msg-ui-setting-text-message.h @@ -14,6 +14,7 @@ * limitations under the License. */ + #ifndef __DEF_MSG_UI_SETTING_TEXT_MESSAGE_H__ #define __DEF_MSG_UI_SETTING_TEXT_MESSAGE_H__ @@ -26,10 +27,18 @@ =============================================================================*/ typedef enum { MSG_UI_SETTING_TEXT_MENU_REQ_DELIVERY_REPORT, + MSG_UI_SETTING_TEXT_MENU_SMSC, MSG_UI_SETTING_TEXT_MENU_MAX } MSG_UI_SETTING_TEXT_MENU_E; +typedef enum { + MSG_UI_SETTING_SMSC_MENU_ADDRESS_TITLE, + MSG_UI_SETTING_SMSC_MENU_ADDRESS, + MSG_UI_SETTING_SMSC_MENU_MAX + +} MSG_UI_SETTING_SMSC_MENU_E; + /*============================================================================ FUNCTION DEFINE @@ -37,5 +46,12 @@ typedef enum { void msg_ui_setting_text_create_view(void *data, Evas_Object *obj, void *event_info); +/* + * text message - service centre + */ +void msg_ui_setting_service_center_selected_main(void *data, int index); +void msg_ui_setting_create_service_center_list(void *data, Evas_Object *obj, void *event_info); + + #endif diff --git a/setting/include/msg-ui-setting-types.h b/setting/include/msg-ui-setting-types.h index d52c8ec..2968e33 100755 --- a/setting/include/msg-ui-setting-types.h +++ b/setting/include/msg-ui-setting-types.h @@ -14,22 +14,26 @@ * limitations under the License. */ + #ifndef __DEF_MSG_UI_SETTING_TYPES_H__ #define __DEF_MSG_UI_SETTING_TYPES_H__ -#include <MsgTypes.h> -#include <MsgSettingTypes.h> #include "message.h" +#include <msg.h> #define MSG_SETTING_THEME EDJDIR"/setting_theme.edj" #define MSG_SETTING_THEME_BLACK EDJDIR"/setting_theme_black.edj" #define MAX_SETTING_CTRLBAR_BUTTON 4 +#define MAX_FILTER_LIST 100 #define MAX_SMSC_LIST SMSC_LIST_MAX #define MAX_SMSC_NAME_LEN SMSC_NAME_MAX #define MAX_SMSC_ADDR_LEN SMSC_ADDR_MAX +#define MAX_MY_CH_LIST CB_CHANNEL_MAX +#define MAX_CH_NAME_LEN CB_CHANNEL_NAME_MAX +#define MAX_CBLANG_COUNT MSG_CBLANG_TYPE_MAX /*============================================================================ TYPES @@ -41,6 +45,11 @@ typedef unsigned int MSG_UI_SETTING_TYPE_T; +/** + * The values for this type SHOULD be in _MSG_UI_GENERAL_TYPE_E. + */ +typedef unsigned int MSG_UI_GENERAL_TYPE_T; + /*============================================================================ ENUMS @@ -50,32 +59,139 @@ typedef unsigned int MSG_UI_SETTING_TYPE_T; * This enum is used as the value of MSG_UI_SETTING_TYPE_T. */ enum _MSG_UI_SETTING_TYPE_E { + MSG_UI_SETTING_TYPE_GENERAL = MSG_GENERAL_OPT, MSG_UI_SETTING_TYPE_SMS_SEND = MSG_SMS_SENDOPT, + MSG_UI_SETTING_TYPE_SMSC_LIST = MSG_SMSC_LIST, + MSG_UI_SETTING_TYPE_MMS_SEND = MSG_MMS_SENDOPT, + MSG_UI_SETTING_TYPE_MMS_RECEIVE = MSG_MMS_RECVOPT, + MSG_UI_SETTING_TYPE_MMS_CLASS = MSG_MMS_CLASSOPT, + MSG_UI_SETTING_TYPE_CBMSG = MSG_CBMSG_OPT, }; +typedef enum { + MSG_UI_SETTING_BLOCK_FILTER_VIEW, + MSG_UI_SETTING_BLOCK_FILTER_DELETE_VIEW, + MSG_UI_SETTING_BLOCK_FILTER_DETAIL_VIEW, + MSG_UI_SETTING_BLOCK_LIST_VIEW, + MSG_UI_SETTING_BLOCK_LIST_DELETE_VIEW, + +} MSG_UI_SETTING_BLOCK_VIEW_MODE_E; + /*============================================================================ STRUCT DEFINE =============================================================================*/ typedef struct { + Evas_Object *general_genlist; + Elm_Genlist_Item_Class general_itc; + +} MSG_UI_SETTING_GENERAL_S; + +typedef struct { Evas_Object *text_genlist; + Elm_Genlist_Item_Class text_2line_itc; Elm_Genlist_Item_Class text_1line_1icon_itc; + Evas_Object *req_delivery_rep_check; + Elm_Object_Item *service_centre_item; + Evas_Object *smsc_all_genlist; + Elm_Genlist_Item_Class text_1line_2icon_itc; + Evas_Object *service_centre_radio_group; + Evas_Object *service_centre_btn_reveal; + + Evas_Object *smsc_genlist; + Elm_Genlist_Item_Class smsc_title_itc; + Elm_Genlist_Item_Class smsc_1icon_itc; + + /* Service Center */ + int center_index; + Evas_Object *smsc_addr_entry; + } MSG_UI_SETTING_TEXT_S; +typedef struct { + Evas_Object *mm_genlist; + Elm_Genlist_Item_Class mm_itc; + Elm_Genlist_Item_Class mm_1line_1icon_itc; + Elm_Genlist_Item_Class mm_2line_1icon_itc; + Evas_Object *mm_delivery_report_check; + + /* Creation mode */ + Elm_Genlist_Item_Class mm_creation_mode_itc; + Elm_Object_Item *creation_mode_item; + Evas_Object *creation_radio_group; + + /* Receiving Option */ + Evas_Object *mm_recv_genlist; + Elm_Genlist_Item_Class mm_recv_2line_expand_itc; + + Elm_Genlist_Item_Class mm_recv_home_network_itc; + Elm_Genlist_Item_Class mm_recv_foreign_network_itc; + + Elm_Object_Item *mm_recv_home_network_item; + Evas_Object *mm_recv_home_network_radio_group; + + Elm_Object_Item *mm_recv_foreign_network_item; + Evas_Object *mm_recv_foreign_network_radio_group; + + /* Read report Menu */ + Evas_Object *mm_read_rep_genlist; + Elm_Genlist_Item_Class mm_read_rep_1line_1icon_itc; + Evas_Object *mm_read_rep_request_check; + Evas_Object *mm_read_rep_send_check; + +} MSG_UI_SETTING_MM_S; + typedef struct _MSG_UI_SETTING_S { MSG_UI_SETTING_TYPE_T type; - MSG_SETTING_S sms_send_opt; + msg_struct_t setting_opt; + msg_struct_list_s *smsc_list; } MSG_UI_SETTING_S; +typedef struct _MSG_UI_SETTING_FILTER_S { + Evas_Object *block_layout; + + msg_struct_list_s filterList; + + Evas_Object *block_filter_nocontents; + Evas_Object *block_filter_box; + + Elm_Object_Item *ctrl_btn[MAX_SETTING_CTRLBAR_BUTTON]; + Elm_Object_Item *block_left_btn; + Elm_Object_Item *block_right_btn; + + Evas_Object *block_ctrl_bar; + + /* Filter list */ + Evas_Object *block_filter_genlist; + Elm_Genlist_Item_Class block_filter_itc; + + Evas_Object *block_filter_sel_all_layout; + Evas_Object *block_filter_chk_sel_all; + Eina_Bool block_filter_chk_sel_all_state; + Evas_Object *block_filter_chk[MAX_FILTER_LIST]; + Eina_Bool block_filter_chk_state[MAX_FILTER_LIST]; + + /* Filter detail view. */ + int block_filter_sel_index; + Evas_Object *block_filter_detail_layout; + Evas_Object *block_filter_detail_genlist; + Elm_Genlist_Item_Class block_filter_detail_title_itc; + Elm_Genlist_Item_Class block_filter_detail_1icon_itc; + Evas_Object *block_filter_detail_done_btn; + Evas_Object *block_filter_detail_entry_ly; + Evas_Object *block_filter_detail_entry; + +} MSG_UI_SETTING_FILTER_S; + typedef struct _MSG_SETTING_DATA { - struct ui_gadget *ug; + ui_gadget_h ug; struct ug_cbs cbs; - struct ui_gadget *loaded_ug; + ui_gadget_h loaded_ug; Evas_Object *layout_main; Evas_Object *bg; @@ -84,20 +200,28 @@ typedef struct _MSG_SETTING_DATA { Evas_Object *selectioninfo; Evas_Object *selectioninfo_layout; - MSG_HANDLE_T msgHandle; + msg_handle_t msgHandle; MSG_UI_SETTING_S msg_setting; - const char *locale; - int time_format; - Elm_Genlist_Item_Class grp_sep_itc; Evas_Object *main_genlist; + Evas_Object *cb_activate_check; Elm_Genlist_Item_Class main_itc; + Elm_Genlist_Item_Class cb_msg_itc; + Elm_Genlist_Item_Class sub_title_itc; + + MSG_UI_SETTING_FILTER_S block_msg; + + Evas_Object *font_size_genlist; + Elm_Genlist_Item_Class font_size_itc; + Evas_Object *font_size_radio_group; + int font_size_index; union { + MSG_UI_SETTING_GENERAL_S general_setting; MSG_UI_SETTING_TEXT_S text_msg; - + MSG_UI_SETTING_MM_S mm_msg; } list; } MSG_SETTING_DATA, *PMSG_SETTING_DATA; diff --git a/setting/src/general/msg-ui-setting-general-block-message.c b/setting/src/general/msg-ui-setting-general-block-message.c new file mode 100755 index 0000000..bc0784b --- /dev/null +++ b/setting/src/general/msg-ui-setting-general-block-message.c @@ -0,0 +1,1129 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "msg-ui-setting-general-setting.h" + + +/*============================================================================ + STATIC FUNCTION DEFINE +=============================================================================*/ +static void __msg_ui_setting_block_filter_detail_entry_changed_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_filter_detail_entry_focus_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_filter_detail_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_filter_detail_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source); +static char *__msg_ui_setting_block_filter_detail_gl_text_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object *__msg_ui_setting_block_filter_detail_gl_content_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object *__msg_ui_setting_block_filter_create_detail_view(Evas_Object *parent, PMSG_SETTING_DATA settingData); +static void __msg_ui_setting_block_filter_detail_save(void *data); +static void __msg_ui_setting_block_filter_detail_popup_yes_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_filter_detail_popup_no_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_filter_detail_done_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_filter_detail_cancel_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_general_block_filter_detail_trans_finished(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_filter_detail_main(void *data, int index); + +static char *__msg_ui_setting_block_filter_gl_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_block_filter_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_block_filter_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_block_filter_gl_sel(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_create_block_filter_genlist(Evas_Object *parent, PMSG_SETTING_DATA settingData); +static void __msg_ui_setting_block_filter_check_select_all(void *data); +static void __msg_ui_setting_block_filter_sel_all_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_filter_sel_all_chk_changed_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_filter_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_filter_delete_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_filter_delete_view_update_controlbar(void *data); +static void __msg_ui_setting_block_filter_delete_view(void *data); +static void __msg_ui_setting_init_block_message(void *data); +static void __msg_ui_setting_block_message_delete_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_message_add_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_block_message_update_controlbar(void *data); + + +/*============================================================================ + FUNCTION IMPLEMENT +=============================================================================*/ + +/********************************** + *** Block filter detail view *** + **********************************/ + +static void __msg_ui_setting_block_filter_detail_entry_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + char *buf = NULL; + + if (elm_object_focus_get(settingData->block_msg.block_filter_detail_entry_ly)) { + if (elm_entry_is_empty(obj)) + elm_object_signal_emit(data, "elm,state,eraser,hide", "elm"); + else + elm_object_signal_emit(data, "elm,state,eraser,show", "elm"); + } + + buf = elm_entry_markup_to_utf8(elm_entry_entry_get(settingData->block_msg.block_filter_detail_entry)); + + /* If input strings are composed of only space or empty, Done button should be disabled. */ + if (!buf || strlen(g_strstrip(buf)) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "No value"); + if (elm_object_disabled_get(settingData->block_msg.block_filter_detail_done_btn) == EINA_FALSE) + elm_object_disabled_set(settingData->block_msg.block_filter_detail_done_btn, EINA_TRUE); + } else { + if (elm_object_disabled_get(settingData->block_msg.block_filter_detail_done_btn) == EINA_TRUE) + elm_object_disabled_set(settingData->block_msg.block_filter_detail_done_btn, EINA_FALSE); + } + + if (buf != NULL) + free(buf); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_setting_block_filter_detail_entry_focus_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *layout = (Evas_Object *)data; + + if (!elm_entry_is_empty(obj)) + elm_object_signal_emit(layout, "elm,state,eraser,show", "elm"); + + elm_object_signal_emit(layout, "elm,state,guidetext,hide", "elm"); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_setting_block_filter_detail_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *layout = (Evas_Object *)data; + + if (elm_entry_is_empty(obj)) + elm_object_signal_emit(layout, "elm,state,guidetext,show", "elm"); + + elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm"); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_setting_block_filter_detail_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *entry = (Evas_Object *)data; + + elm_entry_entry_set(entry, ""); + elm_object_signal_emit(obj, "elm,state,eraser,hide", "elm"); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static char *__msg_ui_setting_block_filter_detail_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + if (index == MSG_UI_SETTING_BLOCK_DETAIL_MENU_TITLE) { + return strdup(dgettext(MESSAGE_PKGNAME, "Word")); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static Evas_Object *__msg_ui_setting_block_filter_detail_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + + int sel_index = settingData->block_msg.block_filter_sel_index; + char filter_val[MAX_FILTER_VALUE_LEN+1] = {0,}; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ch_index = %d", sel_index); + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) { + if (index == MSG_UI_SETTING_BLOCK_DETAIL_MENU_DATA) { + char *buf = NULL; + static Elm_Entry_Filter_Limit_Size block_filter_limit_filter_data; + + Evas_Object *block_filter_ly; + Evas_Object *block_filter_entry; + + block_filter_ly = elm_layout_add(obj); + elm_layout_theme_set(block_filter_ly, "layout", "editfield", "default"); + elm_object_part_text_set(block_filter_ly, "elm.guidetext", dgettext("sys_string", "IDS_COM_BODY_TAP_TO_ADD_TEXT")); + settingData->block_msg.block_filter_detail_entry_ly = block_filter_ly; + + block_filter_entry = elm_entry_add(block_filter_ly); + elm_entry_single_line_set(block_filter_entry, EINA_TRUE); + elm_entry_scrollable_set(block_filter_entry, EINA_TRUE); + elm_entry_autocapital_type_set(block_filter_entry, ELM_AUTOCAPITAL_TYPE_NONE); + elm_entry_input_panel_layout_set(block_filter_entry, ELM_INPUT_PANEL_LAYOUT_NORMAL); + settingData->block_msg.block_filter_detail_entry = block_filter_entry; + + evas_object_smart_callback_add(block_filter_entry, "changed", __msg_ui_setting_block_filter_detail_entry_changed_cb, (void *)settingData); + evas_object_smart_callback_add(block_filter_entry, "focused", __msg_ui_setting_block_filter_detail_entry_focus_cb, (void *)block_filter_ly); + evas_object_smart_callback_add(block_filter_entry, "unfocused", __msg_ui_setting_block_filter_detail_entry_unfocus_cb, (void *)block_filter_ly); + elm_object_signal_callback_add(block_filter_ly, "elm,eraser,clicked", "elm", __msg_ui_setting_block_filter_detail_eraser_clicked_cb, (void *)block_filter_entry); + + /* Before giving focus to the entry object, the entry object should be shown. */ + evas_object_show(block_filter_entry); + elm_object_part_content_set(block_filter_ly, "elm.swallow.content", block_filter_entry); + + block_filter_limit_filter_data.max_char_count = 0; + block_filter_limit_filter_data.max_byte_count = MAX_FILTER_VALUE_LEN; + elm_entry_markup_filter_append(block_filter_entry, elm_entry_filter_limit_size, &block_filter_limit_filter_data); + + /* Set data only in edit case. */ + if (sel_index != MSG_UI_SETTING_BLOCKED_DETAIL_CREATE) { + msg_get_str_value(settingData->block_msg.filterList.msg_struct_info[sel_index], MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val)); + if (strlen(filter_val) > 0) { + buf = elm_entry_utf8_to_markup(filter_val); + elm_entry_entry_set(block_filter_entry, buf); + if (buf != NULL) { + free(buf); + buf = NULL; + } + } + } + + if (settingData->block_msg.block_filter_detail_entry != NULL) + elm_object_focus_set(settingData->block_msg.block_filter_detail_entry, EINA_TRUE); + + return block_filter_ly; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Nothing to do."); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static Evas_Object *__msg_ui_setting_block_filter_create_detail_view(Evas_Object *parent, PMSG_SETTING_DATA settingData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *block_filter_detail_genlist; + + int index = 0; + + block_filter_detail_genlist = msg_ui_setting_common_create_genlist(parent); + settingData->block_msg.block_filter_detail_genlist = block_filter_detail_genlist; + + settingData->block_msg.block_filter_detail_title_itc.item_style = "dialogue/title"; + settingData->block_msg.block_filter_detail_title_itc.func.text_get = __msg_ui_setting_block_filter_detail_gl_text_get; + settingData->block_msg.block_filter_detail_title_itc.func.content_get = NULL; + settingData->block_msg.block_filter_detail_title_itc.func.state_get = NULL; + settingData->block_msg.block_filter_detail_title_itc.func.del = NULL; + + settingData->block_msg.block_filter_detail_1icon_itc.item_style = "dialogue/1icon"; + settingData->block_msg.block_filter_detail_1icon_itc.func.text_get = NULL; + settingData->block_msg.block_filter_detail_1icon_itc.func.content_get = __msg_ui_setting_block_filter_detail_gl_content_get; + settingData->block_msg.block_filter_detail_1icon_itc.func.state_get = NULL; + settingData->block_msg.block_filter_detail_1icon_itc.func.del = NULL; + + elm_genlist_item_append(block_filter_detail_genlist, &settingData->block_msg.block_filter_detail_title_itc, + (void *)index, NULL, ELM_GENLIST_ITEM_NONE, + NULL, (void *)index); + index++; + + elm_genlist_item_append(block_filter_detail_genlist, &settingData->block_msg.block_filter_detail_1icon_itc, + (void *)index, NULL, ELM_GENLIST_ITEM_NONE, + NULL, (void *)index); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return block_filter_detail_genlist; +} + +static void __msg_ui_setting_block_filter_detail_save(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + char *buf = NULL; + int index; + msg_error_t err = MSG_SUCCESS; + int filter_id = 0; + char filter_val[MAX_FILTER_VALUE_LEN+1] = {0,}; + + msg_struct_t filter = msg_create_struct(MSG_STRUCT_FILTER); + index = settingData->block_msg.block_filter_sel_index; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + buf = elm_entry_markup_to_utf8(elm_entry_entry_get(settingData->block_msg.block_filter_detail_entry)); + + /* If input strings are composed of only space, it isn't saved. */ + if (!buf || strlen(g_strstrip(buf)) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "No value"); + goto block_filter_detail_exit; + } + + /* Check whether value is changed or not. */ + if (index != MSG_UI_SETTING_BLOCKED_DETAIL_CREATE) { + err = msg_get_str_value(settingData->block_msg.filterList.msg_struct_info[index], MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val)); + if (strlen(filter_val) > 0) { + if (strcmp(filter_val, buf) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Value is not changed."); + goto block_filter_detail_exit; + } + } + } + + memset(filter_val, 0x0, sizeof(filter_val)); + strncpy(filter_val, buf, MAX_FILTER_VALUE_LEN); + + err = msg_set_int_value(filter, MSG_FILTER_TYPE_INT, MSG_FILTER_BY_SUBJECT); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_int_value(MSG_FILTER_TYPE_INT) is failed : err = %d", err); + goto block_filter_detail_exit; + } + + err = msg_set_str_value(filter, MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val)); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_str_value(MSG_FILTER_VALUE_STR) is failed : err = %d", err); + goto block_filter_detail_exit; + } + + if (index == MSG_UI_SETTING_BLOCKED_DETAIL_CREATE) { + err = msg_add_filter(settingData->msgHandle, filter); + if (err != MSG_SUCCESS) + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_add_filter() is failed : err = %d", err); + } else { + msg_get_int_value(settingData->block_msg.filterList.msg_struct_info[index], MSG_FILTER_ID_INT, &filter_id); + if (err != MSG_SUCCESS) + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_int_value() (filter_id) is failed : err = %d", err); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "filterID = %d", filter_id); + msg_set_int_value(filter, MSG_FILTER_ID_INT, filter_id); + + err = msg_update_filter(settingData->msgHandle, filter); + if (err != MSG_SUCCESS) + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_update_filter() is failed : err = %d", err); + } + + if (err == MSG_ERR_FILTER_DUPLICATED) { + msg_ui_setting_common_show_popup(settingData, dgettext(MESSAGE_PKGNAME, "Word is duplicated.")); + } + + msg_ui_setting_block_filter_update_view(settingData); + +block_filter_detail_exit: + if (buf) + free(buf); + + if (filter) + msg_release_struct(&filter); + + elm_naviframe_item_pop(settingData->navi_frame); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_setting_block_filter_detail_popup_yes_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + if (settingData->popup) { + evas_object_del(settingData->popup); + settingData->popup = NULL; + } + + __msg_ui_setting_block_filter_detail_save(settingData); +} + +static void __msg_ui_setting_block_filter_detail_popup_no_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + if (settingData->popup) { + evas_object_del(settingData->popup); + settingData->popup = NULL; + } + + elm_naviframe_item_pop(settingData->navi_frame); +} + +static void __msg_ui_setting_block_filter_detail_done_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + Evas_Object *btn1; + Evas_Object *btn2; + + /* Create a popup. */ + settingData->popup = elm_popup_add(settingData->layout_main); + evas_object_size_hint_weight_set(settingData->popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(settingData->popup, dgettext(MESSAGE_PKGNAME, "If added words are contained to received message from a person in my phonebook, the message will not be blocked. \n Continue?")); + + btn1 = elm_button_add(settingData->popup); + elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_YES")); + elm_object_part_content_set(settingData->popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", __msg_ui_setting_block_filter_detail_popup_yes_btn_cb, settingData); + + btn2 = elm_button_add(settingData->popup); + elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_NO")); + elm_object_part_content_set(settingData->popup, "button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", __msg_ui_setting_block_filter_detail_popup_no_btn_cb, settingData); + + evas_object_show(settingData->popup); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_setting_block_filter_detail_cancel_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + elm_naviframe_item_pop(settingData->navi_frame); +} + +static void __msg_ui_setting_general_block_filter_detail_trans_finished(void *data, Evas_Object *obj, void *event_info) +{ + /* Enable pushing the prev button. */ + elm_naviframe_prev_btn_auto_pushed_set(obj, EINA_TRUE); + + evas_object_smart_callback_del(obj, "transition,finished", \ + __msg_ui_setting_general_block_filter_detail_trans_finished); +} + +static void __msg_ui_setting_block_filter_detail_main(void *data, int index) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Evas_Object *block_filter_detail_layout; + Evas_Object *block_filter_detail_genlist; + + Elm_Object_Item *navi_it; + + char title[DEF_BUF_LEN_S] = {0, }; + + Evas_Object *title_left_btn; + Evas_Object *title_right_btn; + + settingData->block_msg.block_filter_sel_index = index; + + block_filter_detail_layout = msg_ui_setting_common_create_layout(settingData->navi_frame); + + block_filter_detail_genlist = __msg_ui_setting_block_filter_create_detail_view(settingData->navi_frame, settingData); + elm_object_part_content_set(block_filter_detail_layout, "elm.swallow.content", block_filter_detail_genlist); + + if (index == MSG_UI_SETTING_BLOCKED_DETAIL_CREATE) + strncpy(title, dgettext(MESSAGE_PKGNAME, "Add words"), sizeof(title)-1); + else + strncpy(title, dgettext(MESSAGE_PKGNAME, "Edit words"), sizeof(title)-1); + + /* Disable pushing the prev button automatically. */ + elm_naviframe_prev_btn_auto_pushed_set(settingData->navi_frame, EINA_FALSE); + evas_object_smart_callback_add(settingData->navi_frame, "transition,finished", \ + __msg_ui_setting_general_block_filter_detail_trans_finished, NULL); + + navi_it = elm_naviframe_item_push(settingData->navi_frame, title, NULL, NULL, block_filter_detail_layout, NULL); + + title_left_btn = msg_ui_setting_common_create_title_btn(settingData->navi_frame, \ + dgettext("sys_string", "IDS_COM_SK_DONE"), \ + __msg_ui_setting_block_filter_detail_done_btn_cb, (void *)settingData); + elm_object_item_part_content_set(navi_it, "title_left_btn", title_left_btn); + settingData->block_msg.block_filter_detail_done_btn = title_left_btn; + + title_right_btn = msg_ui_setting_common_create_title_btn(settingData->navi_frame, \ + dgettext("sys_string", "IDS_COM_SK_CANCEL"), \ + __msg_ui_setting_block_filter_detail_cancel_btn_cb, (void *)settingData); + elm_object_item_part_content_set(navi_it, "title_right_btn", title_right_btn); + + if (index == MSG_UI_SETTING_BLOCKED_DETAIL_CREATE) + elm_object_disabled_set(title_left_btn, EINA_TRUE); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + + +/******************************** + *** Block filter main view *** + ********************************/ + +static char *__msg_ui_setting_block_filter_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + msg_error_t err = MSG_SUCCESS; + char filter_val[MAX_FILTER_VALUE_LEN] = {0,}; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + err = msg_get_str_value(settingData->block_msg.filterList.msg_struct_info[index], MSG_FILTER_VALUE_STR, filter_val, sizeof(filter_val)); + if (strlen(filter_val) > 0) + return strdup(filter_val); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void __msg_ui_setting_block_filter_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + int i = 0; + int count = 0; + int total_cnt = 0; + + total_cnt = settingData->block_msg.filterList.nCount; + + for (i = 0; i < total_cnt; i++) { + if (settingData->block_msg.block_filter_chk_state[i] == EINA_TRUE) + count++; + } + + if (count == total_cnt) { + if (settingData->block_msg.block_filter_chk_sel_all_state != EINA_TRUE) { + settingData->block_msg.block_filter_chk_sel_all_state = EINA_TRUE; + elm_check_state_pointer_set(settingData->block_msg.block_filter_chk_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state); + } + } else { + if (settingData->block_msg.block_filter_chk_sel_all_state != EINA_FALSE) { + settingData->block_msg.block_filter_chk_sel_all_state = EINA_FALSE; + elm_check_state_pointer_set(settingData->block_msg.block_filter_chk_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state); + } + } + + if (count == 0) { + msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, NULL, settingData); + } else { + char str[DEF_BUF_LEN_S] = {0, }; + + snprintf(str, sizeof(str), dgettext("sys_string", "IDS_COM_BODY_PD_SELECTED"), count); + msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, str, settingData); + } + + if (count == 0) + elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE); + else + elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_FALSE); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static Evas_Object *__msg_ui_setting_block_filter_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + Evas_Object *check; + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (elm_genlist_decorate_mode_get(obj)) { + if (!strcmp(part, "elm.edit.icon.1")) { + check = elm_check_add(obj); + elm_check_state_pointer_set(check, &settingData->block_msg.block_filter_chk_state[index]); + + evas_object_propagate_events_set(check, EINA_FALSE); + evas_object_smart_callback_add(check, "changed", __msg_ui_setting_block_filter_gl_check_clicked_cb, settingData); + + return check; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + } + + return NULL; +} + +static void __msg_ui_setting_block_filter_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int index = (int)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL"); + + int i = 0; + int count = 0; + int total_cnt = 0; + + total_cnt = settingData->block_msg.filterList.nCount; + + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); + + if (elm_genlist_decorate_mode_get(obj)) { + settingData->block_msg.block_filter_chk_state[index] = !settingData->block_msg.block_filter_chk_state[index]; + + for (i = 0; i < total_cnt; i++) { + if (settingData->block_msg.block_filter_chk_state[i] == EINA_TRUE) + count++; + } + + if (count == total_cnt) { + if (settingData->block_msg.block_filter_chk_sel_all_state != EINA_TRUE) { + settingData->block_msg.block_filter_chk_sel_all_state = EINA_TRUE; + elm_check_state_pointer_set(settingData->block_msg.block_filter_chk_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state); + } + } else { + if (settingData->block_msg.block_filter_chk_sel_all_state != EINA_FALSE) { + settingData->block_msg.block_filter_chk_sel_all_state = EINA_FALSE; + elm_check_state_pointer_set(settingData->block_msg.block_filter_chk_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state); + } + } + + elm_genlist_item_fields_update((Elm_Object_Item *)event_info, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT); + + if (count == 0) { + msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, NULL, settingData); + } else { + char str[DEF_BUF_LEN_S] = {0, }; + + snprintf(str, sizeof(str), dgettext("sys_string", "IDS_COM_BODY_PD_SELECTED"), count); + msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, str, settingData); + } + + if (count == 0) + elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE); + else + elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_FALSE); + + } else { + __msg_ui_setting_block_filter_detail_main(settingData, index); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static Evas_Object *__msg_ui_setting_create_block_filter_genlist(Evas_Object *parent, PMSG_SETTING_DATA settingData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *block_filter_genlist; + + int index = 0; + int total_cnt = 0; + + total_cnt = settingData->block_msg.filterList.nCount; + + block_filter_genlist = msg_ui_setting_common_create_genlist(parent); + settingData->block_msg.block_filter_genlist = block_filter_genlist; + + msg_ui_setting_common_append_genlist_separator(block_filter_genlist, settingData); + + settingData->block_msg.block_filter_itc.item_style = "dialogue/1text"; + settingData->block_msg.block_filter_itc.func.text_get = __msg_ui_setting_block_filter_gl_text_get; + settingData->block_msg.block_filter_itc.func.content_get = __msg_ui_setting_block_filter_gl_content_get; + settingData->block_msg.block_filter_itc.func.state_get = NULL; + settingData->block_msg.block_filter_itc.func.del = NULL; + settingData->block_msg.block_filter_itc.decorate_all_item_style = "dialogue/edit"; + + for (index = 0; index < total_cnt; index++) { + elm_genlist_item_append(block_filter_genlist, &settingData->block_msg.block_filter_itc, (void *)index, + NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_setting_block_filter_gl_sel, (void *)index); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return block_filter_genlist; +} + +static void __msg_ui_setting_block_filter_check_select_all(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Eina_Bool sel_all_state = EINA_FALSE; + int i = 0; + int total_cnt = 0; + + Elm_Object_Item *it; + + total_cnt = settingData->block_msg.filterList.nCount; + + sel_all_state = settingData->block_msg.block_filter_chk_sel_all_state; + + for (i = 0; i < total_cnt; i++) { + settingData->block_msg.block_filter_chk_state[i] = sel_all_state; + } + + /* Update all realized items. */ + it = elm_genlist_first_item_get(settingData->block_msg.block_filter_genlist); + for (i = 0; i < total_cnt; i++) { + elm_genlist_item_fields_update(it, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT); + it = elm_genlist_item_next_get(it); + } + + if (sel_all_state == EINA_TRUE) { + char str[DEF_BUF_LEN_S] = {0, }; + + snprintf(str, sizeof(str), dgettext("sys_string", "IDS_COM_BODY_PD_SELECTED"), total_cnt); + msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, str, settingData); + } else { + msg_ui_setting_common_show_selectioninfo(settingData->block_msg.block_layout, NULL, settingData); + } + + if (sel_all_state == EINA_TRUE) + elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_FALSE); + else + elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE); +} + +static void __msg_ui_setting_block_filter_sel_all_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + settingData->block_msg.block_filter_chk_sel_all_state = !settingData->block_msg.block_filter_chk_sel_all_state; + elm_check_state_pointer_set(settingData->block_msg.block_filter_chk_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state); + + __msg_ui_setting_block_filter_check_select_all(settingData); +} + +static void __msg_ui_setting_block_filter_sel_all_chk_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "sel_all_chk_state = [%d]", settingData->block_msg.block_filter_chk_sel_all_state); + + __msg_ui_setting_block_filter_check_select_all(data); +} + +static void __msg_ui_setting_block_filter_cancel_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + /* Cancel block filter deletion. */ + msg_ui_setting_block_message_exit_edit_mode(settingData); + +} + +static void __msg_ui_setting_block_filter_delete_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + int i = 0; + int total_cnt = 0; + int filter_id = 0; + msg_error_t err = MSG_SUCCESS; + + total_cnt = settingData->block_msg.filterList.nCount; + + /* Delete selected filter item. */ + for (i = 0; i < total_cnt; i++) { + if (settingData->block_msg.block_filter_chk_state[i] == EINA_TRUE) { + err = msg_get_int_value(settingData->block_msg.filterList.msg_struct_info[i], MSG_FILTER_ID_INT, &filter_id); + msg_delete_filter(settingData->msgHandle, (msg_filter_id_t)filter_id); + } + } + + msg_ui_setting_block_message_exit_edit_mode(settingData); + +} + +static void __msg_ui_setting_block_filter_delete_view_update_controlbar(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL"); + + Elm_Object_Item *ctrl_btn[MAX_SETTING_CTRLBAR_BUTTON]; + int i = 0; + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + for (i = 0; i < MAX_SETTING_CTRLBAR_BUTTON; i++) { + if (settingData->block_msg.ctrl_btn[i] != NULL) { + elm_object_item_del(settingData->block_msg.ctrl_btn[i]); + settingData->block_msg.ctrl_btn[i] = NULL; + } + } + + ctrl_btn[0] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, \ + MSG_CONTROLBAR_ICON_DELETE, NULL, \ + __msg_ui_setting_block_filter_delete_btn_clicked_cb, \ + (void *)settingData); + settingData->block_msg.ctrl_btn[0] = ctrl_btn[0]; + + ctrl_btn[1] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, NULL, NULL, NULL, NULL); + settingData->block_msg.ctrl_btn[1] = ctrl_btn[1]; + elm_object_item_disabled_set(ctrl_btn[1], EINA_TRUE); + + ctrl_btn[2] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, NULL, NULL, NULL, NULL); + settingData->block_msg.ctrl_btn[2] = ctrl_btn[2]; + elm_object_item_disabled_set(ctrl_btn[2], EINA_TRUE); + + ctrl_btn[3] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, \ + MSG_CONTROLBAR_ICON_CANCEL, NULL, \ + __msg_ui_setting_block_filter_cancel_btn_clicked_cb, \ + (void *)settingData); + settingData->block_msg.ctrl_btn[3] = ctrl_btn[3]; + +} + +static void __msg_ui_setting_block_filter_delete_view(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Evas_Object *filter_layout_sel_all; + Evas_Object *filter_check_sel_all; + + Elm_Object_Item *it = NULL; + + if (elm_genlist_decorate_mode_get(settingData->block_msg.block_filter_genlist)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid state : block_filter_genlist is in edit mode!!"); + return; + } + + /* Disable back_button */ + Elm_Object_Item *navi_it = elm_naviframe_top_item_get(settingData->navi_frame); + elm_object_item_part_content_set(navi_it, "prev_btn", NULL); + + __msg_ui_setting_block_filter_delete_view_update_controlbar(settingData); + + /* Remove dialogue separator. */ + it = elm_genlist_first_item_get(settingData->block_msg.block_filter_genlist); + if (it) + elm_object_item_del(it); + + /* Append 'Select All' layout. */ + filter_layout_sel_all = elm_layout_add(settingData->block_msg.block_filter_box); + settingData->block_msg.block_filter_sel_all_layout = filter_layout_sel_all; + elm_layout_theme_set(filter_layout_sel_all, "genlist", "item", "select_all/default"); + evas_object_size_hint_weight_set(filter_layout_sel_all, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_size_hint_align_set(filter_layout_sel_all, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_event_callback_add(filter_layout_sel_all, EVAS_CALLBACK_MOUSE_DOWN, __msg_ui_setting_block_filter_sel_all_mouse_down_cb, settingData); + + filter_check_sel_all = elm_check_add(filter_layout_sel_all); + settingData->block_msg.block_filter_chk_sel_all = filter_check_sel_all; + elm_check_state_pointer_set(filter_check_sel_all, &settingData->block_msg.block_filter_chk_sel_all_state); + evas_object_smart_callback_add(filter_check_sel_all, "changed", __msg_ui_setting_block_filter_sel_all_chk_changed_cb, settingData); + evas_object_propagate_events_set(filter_check_sel_all, EINA_FALSE); + elm_object_part_content_set(filter_layout_sel_all, "elm.icon", filter_check_sel_all); + + elm_object_part_text_set(filter_layout_sel_all, "elm.text", dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL")); + elm_box_pack_start(settingData->block_msg.block_filter_box, filter_layout_sel_all); + evas_object_show(filter_layout_sel_all); + + elm_genlist_decorate_mode_set(settingData->block_msg.block_filter_genlist, EINA_TRUE); + elm_genlist_select_mode_set(settingData->block_msg.block_filter_genlist, ELM_OBJECT_SELECT_MODE_ALWAYS); + + /* Default state of "Delete" button is disable. */ + elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE); +} + +static void __msg_ui_setting_init_block_message(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + int i = 0; + int total_cnt = 0; + msg_error_t err = MSG_SUCCESS; + + msg_release_list_struct(&settingData->block_msg.filterList); + err = msg_get_filter_list(settingData->msgHandle, &(settingData->block_msg.filterList)); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_get_filter_list() fail - err [%d]", err); + return; + } + + total_cnt = settingData->block_msg.filterList.nCount; + + settingData->block_msg.block_filter_chk_sel_all_state = EINA_FALSE; + + for (i = 0; i < total_cnt; i++) + settingData->block_msg.block_filter_chk_state[i] = EINA_FALSE; +} + +void msg_ui_setting_block_message_back_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL"); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + elm_naviframe_item_pop(settingData->navi_frame); + + msg_release_list_struct(&settingData->block_msg.filterList); + memset(&settingData->block_msg, 0x0, sizeof(MSG_UI_SETTING_FILTER_S)); +} + +void msg_ui_setting_block_message_exit_edit_mode(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL"); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + if (!elm_genlist_decorate_mode_get(settingData->block_msg.block_filter_genlist)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Block filter list isn't in edit mode!!"); + return; + } + + /* Create back button. */ + msg_ui_setting_common_create_back_btn(settingData->navi_frame, \ + msg_ui_setting_block_message_back_btn_cb, settingData); + + /*************************/ + /* Update option header. */ + /*************************/ + __msg_ui_setting_block_message_update_controlbar(settingData); + + /* Unset edit mode */ + elm_genlist_decorate_mode_set(settingData->block_msg.block_filter_genlist, EINA_FALSE); + elm_genlist_select_mode_set(settingData->block_msg.block_filter_genlist, ELM_OBJECT_SELECT_MODE_DEFAULT); + + /* Update view. */ + msg_ui_setting_block_filter_update_view(settingData); + +} + +static void __msg_ui_setting_block_message_delete_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + /* Go to block filter delete view. */ + __msg_ui_setting_block_filter_delete_view(settingData); + +} + +static void __msg_ui_setting_block_message_add_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + /* Go to detail view. */ + __msg_ui_setting_block_filter_detail_main(settingData, MSG_UI_SETTING_BLOCKED_DETAIL_CREATE); + +} + +void msg_ui_setting_destroy_block_message(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL"); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + msg_ui_setting_common_destroy_selectioninfo(settingData); + + /* Remove 'Select All' layout. */ + if (settingData->block_msg.block_filter_sel_all_layout) { + elm_box_unpack(settingData->block_msg.block_filter_box, settingData->block_msg.block_filter_sel_all_layout); + evas_object_del(settingData->block_msg.block_filter_sel_all_layout); + settingData->block_msg.block_filter_sel_all_layout = NULL; + } + + if (settingData->block_msg.block_filter_genlist) { + evas_object_del(settingData->block_msg.block_filter_genlist); + settingData->block_msg.block_filter_genlist = NULL; + } + + if (settingData->block_msg.block_filter_box) { + evas_object_del(settingData->block_msg.block_filter_box); + settingData->block_msg.block_filter_box = NULL; + } + + if (settingData->block_msg.block_filter_nocontents) { + evas_object_del(settingData->block_msg.block_filter_nocontents); + settingData->block_msg.block_filter_nocontents = NULL; + } + +} + +void msg_ui_setting_show_block_message(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL"); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Evas_Object *block_filter_box; + Evas_Object *block_filter_nocontents; + Evas_Object *block_filter_list; + + if (settingData->block_msg.filterList.nCount == 0) { + block_filter_nocontents = msg_ui_setting_common_create_no_content_view(settingData->block_msg.block_layout, NULL); + settingData->block_msg.block_filter_nocontents = block_filter_nocontents; + elm_object_part_content_set(settingData->block_msg.block_layout, "elm.swallow.content", block_filter_nocontents); + } else { + block_filter_box = elm_box_add(settingData->navi_frame); + settingData->block_msg.block_filter_box = block_filter_box; + evas_object_size_hint_weight_set(block_filter_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(block_filter_box); + elm_object_part_content_set(settingData->block_msg.block_layout, "elm.swallow.content", block_filter_box); + + block_filter_list = __msg_ui_setting_create_block_filter_genlist(settingData->navi_frame, settingData); + elm_box_pack_end(block_filter_box, block_filter_list); + evas_object_show(block_filter_list); + } +} + +static void __msg_ui_setting_block_message_update_controlbar(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL"); + + Elm_Object_Item *ctrl_btn[MAX_SETTING_CTRLBAR_BUTTON]; + int i = 0; + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + for (i = 0; i < MAX_SETTING_CTRLBAR_BUTTON; i++) { + if (settingData->block_msg.ctrl_btn[i] != NULL) { + elm_object_item_del(settingData->block_msg.ctrl_btn[i]); + settingData->block_msg.ctrl_btn[i] = NULL; + } + } + + ctrl_btn[0] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, \ + MSG_CONTROLBAR_ICON_DELETE, NULL, \ + __msg_ui_setting_block_message_delete_btn_clicked_cb, \ + (void *)settingData); + settingData->block_msg.ctrl_btn[0] = ctrl_btn[0]; + + /* Add NULL button */ + ctrl_btn[1] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, NULL, NULL, NULL, NULL); + settingData->block_msg.ctrl_btn[1] = ctrl_btn[1]; + elm_object_item_disabled_set(ctrl_btn[1], EINA_TRUE); + + ctrl_btn[2] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, \ + MSG_CONTROLBAR_ICON_CREATE, NULL, \ + __msg_ui_setting_block_message_add_btn_clicked_cb, \ + (void *)settingData); + settingData->block_msg.ctrl_btn[2] = ctrl_btn[2]; + + /* Add NULL button */ + ctrl_btn[3] = elm_toolbar_item_append(settingData->block_msg.block_ctrl_bar, NULL, NULL, NULL, NULL); + settingData->block_msg.ctrl_btn[3] = ctrl_btn[3]; + elm_object_item_disabled_set(ctrl_btn[3], EINA_TRUE); + +} + +void msg_ui_setting_block_filter_update_view(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL"); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + msg_ui_setting_destroy_block_message(settingData); + + __msg_ui_setting_init_block_message(settingData); + + msg_ui_setting_show_block_message(settingData); + + __msg_ui_setting_block_message_update_controlbar(settingData); + + if (settingData->block_msg.filterList.nCount == 0) { + /* If no item exist in block filter, delete button should be disabled. */ + elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE); + } else { + elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_FALSE); + } +} + +void msg_ui_setting_general_block_message_main(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL"); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Evas_Object *block_layout; + Elm_Object_Item *navi_it; + + bool filter_set = EINA_FALSE; + + Evas_Object *ctrl_bar; + + /* Init block message data. */ + __msg_ui_setting_init_block_message(settingData); + + block_layout = msg_ui_setting_common_create_layout(settingData->navi_frame); + settingData->block_msg.block_layout = block_layout; + + /* Block should be always enabled. */ + msg_get_filter_operation(settingData->msgHandle, (bool *)&filter_set); + if (filter_set == EINA_FALSE) { + if (msg_set_filter_operation(settingData->msgHandle, EINA_TRUE) == MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Block is enabled !!"); + } + else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_set_filter_operation() is failed !!"); + } + } + + msg_ui_setting_show_block_message(settingData); + + navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "Blocked word"), NULL, NULL, block_layout, NULL); + + msg_ui_setting_common_create_back_btn(settingData->navi_frame, \ + msg_ui_setting_block_message_back_btn_cb, settingData); + + ctrl_bar = msg_ui_setting_common_create_controlbar(settingData->navi_frame); + settingData->block_msg.block_ctrl_bar = ctrl_bar; + MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, ctrl_bar == NULL, "ctrl_bar is NULL !!"); + + __msg_ui_setting_block_message_update_controlbar(settingData); + + elm_object_item_part_content_set(navi_it, "controlbar", ctrl_bar); + + /* If no item exist in block filter, delete button should be disabled. */ + if (settingData->block_msg.filterList.nCount == 0) + elm_object_item_disabled_set(settingData->block_msg.ctrl_btn[0], EINA_TRUE); +} diff --git a/setting/src/general/msg-ui-setting-general-setting.c b/setting/src/general/msg-ui-setting-general-setting.c new file mode 100755 index 0000000..6828b44 --- /dev/null +++ b/setting/src/general/msg-ui-setting-general-setting.c @@ -0,0 +1,243 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "msg-ui-setting-main.h" +#include "msg-ui-setting-general-setting.h" + + +static struct _msg_ui_setting_mixed_list_item general_menu_its[] = { + { 1, "Numbers to reject", NULL, ELM_GENLIST_ITEM_NONE }, + { 1, "Blocked word", msg_ui_setting_general_block_message_main, ELM_GENLIST_ITEM_NONE }, + /* do not delete below */ + { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE } +}; + + +/*============================================================================ + STATIC FUNCTION DEFINE +=============================================================================*/ +static char *__msg_ui_setting_general_gl_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_general_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv); +static void __msg_ui_setting_general_destroy_cb(ui_gadget_h ug, void *priv); +static void __msg_ui_setting_general_gl_sel(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_general_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData); +static void __msg_ui_setting_general_back_btn_cb(void *data, Evas_Object *obj, void *event_info); + + +/*============================================================================ + FUNCTION IMPLEMENT +=============================================================================*/ + +static char * +__msg_ui_setting_general_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + if (general_menu_its[index].name) { + if (strstr(general_menu_its[index].name, "IDS_COM") != NULL) + return strdup(dgettext("sys_string", general_menu_its[index].name)); + else + return strdup(dgettext(MESSAGE_PKGNAME, general_menu_its[index].name)); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void +__msg_ui_setting_general_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ug); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !priv); + + Evas_Object *base; + + base = ug_get_layout(ug); + + if (!base) + return; + + switch (mode) { + case UG_MODE_FULLVIEW: + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(ug_get_window(), base); + evas_object_show(base); + break; + case UG_MODE_FRAMEVIEW: + default: + break; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void +__msg_ui_setting_general_destroy_cb(ui_gadget_h ug, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ug); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !priv); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA) priv; + + settingData->loaded_ug = ug; + + if (settingData->loaded_ug) { + ug_destroy(settingData->loaded_ug); + settingData->loaded_ug = NULL; + } + + evas_object_show(settingData->layout_main); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void +__msg_ui_setting_general_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int index = (int)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL"); + + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); + + if (index == MSG_UI_SETTING_GENERAL_MENU_NUMBERS_TO_REJECT) { + settingData->cbs.layout_cb = __msg_ui_setting_general_layout_cb; + settingData->cbs.result_cb = NULL; + settingData->cbs.destroy_cb = __msg_ui_setting_general_destroy_cb; + settingData->cbs.priv = (void *)settingData; + + if (settingData->loaded_ug != NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "other ug already exist"); + return; + } + + /* Call auto reject list UG. */ + service_h svc_handle; + service_error_e scv_error = service_create(&svc_handle); + + if (scv_error == SERVICE_ERROR_NONE) { + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_AUTO_REJECT_LIST); + settingData->loaded_ug = ug_create(settingData->ug, CALL_SETTING_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &settingData->cbs); + service_destroy(svc_handle); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed!!"); + return; + } + } else { + if (general_menu_its[index].func != NULL) + general_menu_its[index].func(settingData, obj, event_info); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static Evas_Object * +__msg_ui_setting_general_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *general_genlist; + int index = 0; + + general_genlist = msg_ui_setting_common_create_genlist(parent); + settingData->list.general_setting.general_genlist = general_genlist; + + msg_ui_setting_common_append_genlist_separator(general_genlist, settingData); + + settingData->list.general_setting.general_itc.item_style = "dialogue/1text"; + settingData->list.general_setting.general_itc.func.text_get = __msg_ui_setting_general_gl_text_get; + settingData->list.general_setting.general_itc.func.content_get = NULL; + settingData->list.general_setting.general_itc.func.state_get = NULL; + settingData->list.general_setting.general_itc.func.del = NULL; + + for (index = 0; general_menu_its[index].name; index++) { + elm_genlist_item_append(general_genlist, &settingData->list.general_setting.general_itc, (void *)index, + NULL, general_menu_its[index].type, __msg_ui_setting_general_gl_sel, (void *)index); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return general_genlist; +} + +static void __msg_ui_setting_general_back_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + elm_naviframe_item_pop(settingData->navi_frame); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_setting_general_create_view(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "PMSG_SETTING_DATA is NULL"); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Evas_Object *general_layout; + Evas_Object *general_genlist; + Evas_Object *l_button; + Elm_Object_Item *navi_it; + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_GENERAL; + msg_ui_setting_msg_get_config(settingData); + + /* Initialize global variable. */ + memset(&settingData->list.general_setting, 0x0, sizeof(settingData->list.general_setting)); + + if (obj == NULL) { + /* Change background color from transparent to group_list. */ + elm_object_style_set(settingData->bg, "group_list"); + } + + general_layout = msg_ui_setting_common_create_layout(settingData->navi_frame); + + general_genlist = __msg_ui_setting_general_create_menu(settingData->navi_frame, settingData); + elm_object_part_content_set(general_layout, "elm.swallow.content", general_genlist); + + /* Create Left Button */ + l_button = elm_button_add(settingData->navi_frame); + + navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SPAM_MESSAGES"), l_button, NULL, general_layout, NULL); + + /* Style set should be called after elm_naviframe_item_push(). */ + elm_object_style_set(l_button, "naviframe/back_btn/default"); + if (obj == NULL) + evas_object_smart_callback_add(l_button, "clicked", msg_ui_setting_quit_cb, (void *)settingData); + else + evas_object_smart_callback_add(l_button, "clicked", __msg_ui_setting_general_back_btn_cb, (void *)settingData); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + +} diff --git a/setting/src/main/msg-ui-setting-callback.c b/setting/src/main/msg-ui-setting-callback.c index b54db78..4f279b2 100755 --- a/setting/src/main/msg-ui-setting-callback.c +++ b/setting/src/main/msg-ui-setting-callback.c @@ -14,6 +14,7 @@ * limitations under the License. */ + #include "msg-ui-setting-main.h" @@ -26,6 +27,33 @@ void msg_ui_setting_text_msg_cb(void *data, Evas_Object *obj, void *event_info) MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } +void msg_ui_setting_mm_msg_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + msg_ui_setting_mm_create_view(data, obj, event_info); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_setting_spam_msg_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + msg_ui_setting_general_create_view(data, obj, event_info); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_setting_font_size_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + msg_ui_setting_font_size_create_view(data, obj, event_info); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + void msg_ui_setting_quit_cb(void *data, Evas_Object *obj, void *event_info) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); diff --git a/setting/src/main/msg-ui-setting-common-util.c b/setting/src/main/msg-ui-setting-common-util.c index 7bd217d..4d6bc53 100755 --- a/setting/src/main/msg-ui-setting-common-util.c +++ b/setting/src/main/msg-ui-setting-common-util.c @@ -14,6 +14,7 @@ * limitations under the License. */ + #include "msg-ui-setting-main.h" #include "msg-ui-setting-common-util.h" @@ -201,6 +202,7 @@ Evas_Object *msg_ui_setting_common_create_genlist(Evas_Object *parent) Evas_Object *genlist; genlist = elm_genlist_add(parent); + elm_object_style_set(genlist, "dialogue"); evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); diff --git a/setting/src/main/msg-ui-setting-font-size.c b/setting/src/main/msg-ui-setting-font-size.c new file mode 100755 index 0000000..c288c79 --- /dev/null +++ b/setting/src/main/msg-ui-setting-font-size.c @@ -0,0 +1,240 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "msg-ui-setting-main.h" + + +static struct _msg_ui_setting_mixed_list_item font_size_menu_its[] = { + { 1, "Follow system font size", NULL, ELM_GENLIST_ITEM_NONE }, + { 1, "Huge", NULL, ELM_GENLIST_ITEM_NONE }, + { 1, "IDS_MSGF_BODY_LARGE", NULL, ELM_GENLIST_ITEM_NONE }, + { 1, "IDS_MSGF_BODY_DEFAULTSTYLE_NORMAL", NULL, ELM_GENLIST_ITEM_NONE }, + { 1, "IDS_MSGF_BODY_SMALL", NULL, ELM_GENLIST_ITEM_NONE }, + { 1, "IDS_MSGF_BODY_TINY", NULL, ELM_GENLIST_ITEM_NONE }, + /* do not delete below */ + { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE } +}; + + +/*============================================================================ + STATIC FUNCTION DEFINE +=============================================================================*/ +static char *__msg_ui_setting_font_size_gl_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_save_font_size(void *data); +static void __msg_ui_setting_font_size_radio_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_font_size_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_font_size_gl_sel(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_font_size_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData); + + +/*============================================================================ + FUNCTION IMPLEMENT +=============================================================================*/ + +static char * +__msg_ui_setting_font_size_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + char tmp_str[DEF_BUF_LEN_S] = {0, }; + char font_size_string[DEF_BUF_LEN_S] = {0, }; + int font_size = 0; + + if (font_size_menu_its[index].name) { + if (strstr(font_size_menu_its[index].name, "IDS_COM") != NULL) + strncpy(tmp_str, dgettext("sys_string", font_size_menu_its[index].name), sizeof(tmp_str)-1); + else + strncpy(tmp_str, dgettext(MESSAGE_PKGNAME, font_size_menu_its[index].name), sizeof(tmp_str)-1); + + switch(index) { + case MSG_APP_FONT_SIZE_INDEX_HUGE : + font_size = MSG_APP_FONT_SIZE_HUGE; + break; + case MSG_APP_FONT_SIZE_INDEX_LARGE : + font_size = MSG_APP_FONT_SIZE_LARGE; + break; + case MSG_APP_FONT_SIZE_INDEX_NORMAL : + font_size = MSG_APP_FONT_SIZE_NORMAL; + break; + case MSG_APP_FONT_SIZE_INDEX_SMALL : + font_size = MSG_APP_FONT_SIZE_SMALL; + break; + case MSG_APP_FONT_SIZE_INDEX_TINY : + font_size = MSG_APP_FONT_SIZE_TINY; + break; + case MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT : + default : + break; + } + + if (font_size > 0) { + snprintf(font_size_string, sizeof(font_size_string), "<font_size=%d>%s</font_size>", font_size, tmp_str); + return strdup(font_size_string); + } else { + return strdup(tmp_str); + } + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void +__msg_ui_setting_save_font_size(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + int selection; + MSG_BOOL ret = FALSE; + + selection = elm_radio_value_get(settingData->font_size_radio_group); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected value is %d", selection); + + /* Save selected value. */ + ret = msg_common_set_font_size(selection); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ret is %d", (int)ret); +} + +static void +__msg_ui_setting_font_size_radio_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + __msg_ui_setting_save_font_size(settingData); +} + +static Evas_Object * +__msg_ui_setting_font_size_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + Evas_Object *radio; + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) { + radio = elm_radio_add(obj); + elm_radio_state_value_set(radio, index); + evas_object_propagate_events_set(radio, EINA_FALSE); + evas_object_smart_callback_add(radio, "changed", __msg_ui_setting_font_size_radio_cb, (void *)settingData); + + if (index == 0) + settingData->font_size_radio_group = radio; + else + elm_radio_group_add(radio, settingData->font_size_radio_group); + + /* Set font size current value */ + if (index == settingData->font_size_index) + elm_radio_value_set(settingData->font_size_radio_group, settingData->font_size_index); + + return radio; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void +__msg_ui_setting_font_size_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int index = (int)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL"); + + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); + + /* Change radio selection. */ + elm_radio_value_set(settingData->font_size_radio_group, index); + + __msg_ui_setting_save_font_size((void *)settingData); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static Evas_Object * +__msg_ui_setting_font_size_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *font_size_genlist; + int index = 0; + + font_size_genlist = msg_ui_setting_common_create_genlist(parent); + settingData->font_size_genlist = font_size_genlist; + + msg_ui_setting_common_append_genlist_separator(font_size_genlist, settingData); + + // elm_object_theme_set(font_size_genlist, settingData->th); + + settingData->font_size_itc.item_style = "dialogue/1text.1icon.6"; + settingData->font_size_itc.func.text_get = __msg_ui_setting_font_size_gl_text_get; + settingData->font_size_itc.func.content_get = __msg_ui_setting_font_size_gl_content_get; + settingData->font_size_itc.func.state_get = NULL; + settingData->font_size_itc.func.del = NULL; + + for (index = 0; font_size_menu_its[index].name; index++) { + elm_genlist_item_append(font_size_genlist, &settingData->font_size_itc, (void *)index, + NULL, font_size_menu_its[index].type, __msg_ui_setting_font_size_gl_sel, (void *)index); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return font_size_genlist; +} + +void msg_ui_setting_font_size_create_view(void *data, Evas_Object *obj, void *event_info) +{ + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Evas_Object *font_size_layout; + Evas_Object *font_size_genlist; + Elm_Object_Item *navi_it; + + MSG_BOOL ret = FALSE; + int font_size = 0; + + /* Initialize global variable. */ + ret = msg_common_get_font_size(&settingData->font_size_index, &font_size); + if (ret == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ret is FALSE"); + settingData->font_size_index = MSG_APP_FONT_SIZE_INDEX_SYSTEM_FONT; + } + + font_size_layout = msg_ui_setting_common_create_layout(settingData->navi_frame); + + font_size_genlist = __msg_ui_setting_font_size_create_menu(settingData->navi_frame, settingData); + elm_object_part_content_set(font_size_layout, "elm.swallow.content", font_size_genlist); + + navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE"), NULL, NULL, font_size_layout, NULL); + +} diff --git a/setting/src/main/msg-ui-setting-gadget.c b/setting/src/main/msg-ui-setting-gadget.c index 4e40389..b768614 100755 --- a/setting/src/main/msg-ui-setting-gadget.c +++ b/setting/src/main/msg-ui-setting-gadget.c @@ -30,15 +30,14 @@ static int __msg_ui_setting_check_msg_server_ready(void); static void __msg_ui_setting_gadget_popup(PMSG_SETTING_DATA settingData, char *str); static Evas_Object *__msg_ui_setting_create_fullview(Evas_Object *parent, void *ugd); static Evas_Object *__msg_ui_setting_create_frameview(Evas_Object *parent, void *ugd); -static void *__msg_ui_setting_on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, void *priv); -static void __msg_ui_setting_on_start(struct ui_gadget *ug, bundle *data, void *priv); -static void __msg_ui_setting_on_pause(struct ui_gadget *ug, bundle *data, void *priv); -static void __msg_ui_setting_on_resume(struct ui_gadget *ug, bundle *data, void *priv); -static void __msg_ui_setting_on_destroy(struct ui_gadget *ug, bundle *data, void *priv); -static void __msg_ui_setting_on_message(struct ui_gadget *ug, bundle *msg, bundle *data, void *priv); -static void __msg_ui_setting_on_event(struct ui_gadget *ug, enum ug_event event, bundle *data, void *priv); -static void __msg_ui_setting_on_key_event(struct ui_gadget *ug, enum ug_key_event event, bundle *data, void *priv); - +static void *__msg_ui_setting_on_create(ui_gadget_h ug, enum ug_mode mode, service_h data, void *priv); +static void __msg_ui_setting_on_start(ui_gadget_h ug, service_h data, void *priv); +static void __msg_ui_setting_on_pause(ui_gadget_h ug, service_h data, void *priv); +static void __msg_ui_setting_on_resume(ui_gadget_h ug, service_h data, void *priv); +static void __msg_ui_setting_on_destroy(ui_gadget_h ug, service_h data, void *priv); +static void __msg_ui_setting_on_message(ui_gadget_h ug, service_h msg, service_h data, void *priv); +static void __msg_ui_setting_on_event(ui_gadget_h ug, enum ug_event event, service_h data, void *priv); +static void __msg_ui_setting_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h data, void *priv); static void __msg_ui_setting_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info) { @@ -134,7 +133,7 @@ static Evas_Object *__msg_ui_setting_create_frameview(Evas_Object *parent, void return base; } -static void *__msg_ui_setting_on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, void *priv) +static void *__msg_ui_setting_on_create(ui_gadget_h ug, enum ug_mode mode, service_h data, void *priv) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); @@ -167,18 +166,14 @@ static void *__msg_ui_setting_on_create(struct ui_gadget *ug, enum ug_mode mode, return ugd->layout_main; } -static void __msg_ui_setting_on_start(struct ui_gadget *ug, bundle *data, void *priv) +static void __msg_ui_setting_on_start(ui_gadget_h ug, service_h data, void *priv) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); PMSG_SETTING_DATA ugd = (PMSG_SETTING_DATA)priv; - MSG_ERROR_T err = MSG_SUCCESS; - MSG_HANDLE_T msgHandle; - - if (!__msg_ui_setting_check_msg_server_ready()) { - __msg_ui_setting_gadget_popup(ugd, dgettext(MESSAGE_PKGNAME, "Message server is not ready")); - return; - } + msg_error_t err = MSG_SUCCESS; + msg_handle_t msgHandle; + char *svc_value = NULL; /*Set Message Handler*/ err = msg_open_msg_handle(&msgHandle); @@ -190,35 +185,36 @@ static void __msg_ui_setting_on_start(struct ui_gadget *ug, bundle *data, void * ugd->msgHandle = msgHandle; - ugd->locale = msg_common_get_default_locale(); - - if (appcore_get_timeformat((enum appcore_time_format *)&ugd->time_format) < 0) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "appcore_get_timeformat() is failed!!"); - } + if (data != NULL) + service_get_extra_data(data, MSG_BUNDLE_KEY_TYPE, &svc_value); - if (ugd->layout_main) - msg_ui_setting_launch(ugd); - else + if (ugd->layout_main) { + if (svc_value != NULL && strcmp(svc_value, MSG_BUNDLE_VALUE_SPAM_SETTING) == 0) + msg_ui_setting_launch_spam_setting(ugd); + else + msg_ui_setting_launch(ugd); + } else { MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "layout_main is NULL !!"); + } } -static void __msg_ui_setting_on_pause(struct ui_gadget *ug, bundle *data, void *priv) +static void __msg_ui_setting_on_pause(ui_gadget_h ug, service_h data, void *priv) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); } -static void __msg_ui_setting_on_resume(struct ui_gadget *ug, bundle *data, void *priv) +static void __msg_ui_setting_on_resume(ui_gadget_h ug, service_h data, void *priv) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); } -static void __msg_ui_setting_on_destroy(struct ui_gadget *ug, bundle *data, void *priv) +static void __msg_ui_setting_on_destroy(ui_gadget_h ug, service_h data, void *priv) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); PMSG_SETTING_DATA ugd; - MSG_ERROR_T err = MSG_SUCCESS; + msg_error_t err = MSG_SUCCESS; if (!ug || !priv) return; @@ -242,12 +238,12 @@ static void __msg_ui_setting_on_destroy(struct ui_gadget *ug, bundle *data, void } -static void __msg_ui_setting_on_message(struct ui_gadget *ug, bundle *msg, bundle *data, void *priv) +static void __msg_ui_setting_on_message(ui_gadget_h ug, service_h msg, service_h data, void *priv) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); } -static void __msg_ui_setting_on_event(struct ui_gadget *ug, enum ug_event event, bundle *data, void *priv) +static void __msg_ui_setting_on_event(ui_gadget_h ug, enum ug_event event, service_h data, void *priv) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); @@ -265,22 +261,22 @@ static void __msg_ui_setting_on_event(struct ui_gadget *ug, enum ug_event event, break; case UG_EVENT_LANG_CHANGE: break; + case UG_EVENT_ROTATE_PORTRAIT: + break; + case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN: + break; + case UG_EVENT_ROTATE_LANDSCAPE: + break; + case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN: + break; case UG_EVENT_REGION_CHANGE: - - ugd->locale = msg_common_get_default_locale(); - - if (appcore_get_timeformat((enum appcore_time_format *)&ugd->time_format) < 0) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "appcore_get_timeformat() is failed!!"); - ugd->time_format = APPCORE_TIME_FORMAT_UNKNOWN; - } - break; default: break; } } -static void __msg_ui_setting_on_key_event(struct ui_gadget *ug, enum ug_key_event event, bundle *data, void *priv) +static void __msg_ui_setting_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h data, void *priv) { D_ENTER; D_LEAVE; @@ -342,7 +338,7 @@ UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops) } -UG_MODULE_API int setting_plugin_reset(bundle *data, void *priv) +UG_MODULE_API int setting_plugin_reset(service_h data, void *priv) { /* To Do : Reset message settings. */ diff --git a/setting/src/main/msg-ui-setting-main.c b/setting/src/main/msg-ui-setting-main.c index 1d99403..78b9f25 100755 --- a/setting/src/main/msg-ui-setting-main.c +++ b/setting/src/main/msg-ui-setting-main.c @@ -14,17 +14,26 @@ * limitations under the License. */ + #include "msg-ui-setting-main.h" static struct _msg_ui_setting_list_item main_menu_its[] = { { "IDS_MSGF_BODY_TEXT_MESSAGES", msg_ui_setting_text_msg_cb }, + { "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE", msg_ui_setting_mm_msg_cb }, + { "IDS_MSGF_BODY_SPAM_MESSAGES", msg_ui_setting_spam_msg_cb }, + { "IDS_MSGF_BODY_BROADCASTMESSAGES", NULL }, + { "IDS_COM_BODY_DISPLAY", NULL }, + { "IDS_MSGF_BODY_DEFUALTSTYLE_FONT_SIZE", msg_ui_setting_font_size_cb }, /* do not delete below */ { NULL, NULL } }; static char *__msg_ui_setting_main_gl_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_main_save_cb_activation(void *data); +static void __msg_ui_setting_main_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_main_gl_content_get(void *data, Evas_Object *obj, const char *part); static void __msg_ui_setting_main_gl_sel(void *data, Evas_Object *obj, void *event_info); static Evas_Object *__msg_ui_setting_create_main_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData); @@ -51,6 +60,74 @@ __msg_ui_setting_main_gl_text_get(void *data, Evas_Object *obj, const char *part } static void +__msg_ui_setting_main_save_cb_activation(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + Eina_Bool set_val = EINA_FALSE; + + set_val = elm_check_state_get(settingData->cb_activate_check); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val); + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_CBMSG; + msg_ui_setting_msg_get_config(settingData); + msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_CB_RECEIVE_BOOL, set_val); + msg_ui_setting_msg_set_config(settingData); +} + +static void +__msg_ui_setting_main_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + __msg_ui_setting_main_save_cb_activation(settingData); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static Evas_Object * +__msg_ui_setting_main_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + Evas_Object *check; + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + bool bReceive = false; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) { + check = elm_check_add(obj); + settingData->cb_activate_check = check; + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_CBMSG; + msg_ui_setting_msg_get_config(settingData); + msg_get_bool_value(settingData->msg_setting.setting_opt, MSG_CB_RECEIVE_BOOL, &bReceive); + + if (bReceive == true) + elm_check_state_set(check, EINA_TRUE); + else + elm_check_state_set(check, EINA_FALSE); + + elm_object_style_set(check, "on&off"); + + evas_object_propagate_events_set(check, EINA_FALSE); + evas_object_smart_callback_add(check, "changed", __msg_ui_setting_main_gl_check_clicked_cb, settingData); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + return check; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void __msg_ui_setting_main_gl_sel(void *data, Evas_Object *obj, void *event_info) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); @@ -63,8 +140,20 @@ __msg_ui_setting_main_gl_sel(void *data, Evas_Object *obj, void *event_info) elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); - if (main_menu_its[index].func != NULL) - main_menu_its[index].func(settingData, obj, event_info); + if (index == MSG_UI_SETTING_MAIN_MENU_CB_MESSAGES) { + Eina_Bool set_val = EINA_FALSE; + + set_val = elm_check_state_get(settingData->cb_activate_check); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val); + + elm_check_state_set(settingData->cb_activate_check, !set_val); + + __msg_ui_setting_main_save_cb_activation((void *)settingData); + + } else { + if (main_menu_its[index].func != NULL) + main_menu_its[index].func(settingData, obj, event_info); + } MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } @@ -88,9 +177,29 @@ __msg_ui_setting_create_main_menu(Evas_Object *parent, PMSG_SETTING_DATA setting settingData->main_itc.func.state_get = NULL; settingData->main_itc.func.del = NULL; + settingData->cb_msg_itc.item_style = "dialogue/1text.1icon"; + settingData->cb_msg_itc.func.text_get = __msg_ui_setting_main_gl_text_get; + settingData->cb_msg_itc.func.content_get = __msg_ui_setting_main_gl_content_get; + settingData->cb_msg_itc.func.state_get = NULL; + settingData->cb_msg_itc.func.del = NULL; + + settingData->sub_title_itc.item_style = "dialogue/title"; + settingData->sub_title_itc.func.text_get = __msg_ui_setting_main_gl_text_get; + settingData->sub_title_itc.func.content_get = NULL; + settingData->sub_title_itc.func.state_get = NULL; + settingData->sub_title_itc.func.del = NULL; + for (index = 0; main_menu_its[index].name; index++) { - elm_genlist_item_append(main_genlist, &settingData->main_itc, (void *)index, NULL, - ELM_GENLIST_ITEM_NONE, __msg_ui_setting_main_gl_sel, (void *)index); + if (index == MSG_UI_SETTING_MAIN_MENU_CB_MESSAGES) { + elm_genlist_item_append(main_genlist, &settingData->cb_msg_itc, (void *)index, NULL, + ELM_GENLIST_ITEM_NONE, __msg_ui_setting_main_gl_sel, (void *)index); + } else if (index == MSG_UI_SETTING_MAIN_MENU_SUB_TITLE) { + elm_genlist_item_append(main_genlist, &settingData->sub_title_itc, (void *)index, NULL, + ELM_GENLIST_ITEM_NONE, NULL, (void *)index); + } else { + elm_genlist_item_append(main_genlist, &settingData->main_itc, (void *)index, NULL, + ELM_GENLIST_ITEM_NONE, __msg_ui_setting_main_gl_sel, (void *)index); + } } MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); @@ -134,6 +243,10 @@ void msg_ui_setting_create_main_view(PMSG_SETTING_DATA settingData) Evas_Object *l_button; + /* Get CB activation setting. */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_CBMSG; + msg_ui_setting_msg_get_config(settingData); + /* Change background color from transparent to group_list. */ elm_object_style_set(settingData->bg, "group_list"); @@ -187,3 +300,18 @@ Evas_Object *msg_ui_setting_create_layout_main(Evas_Object *parent) return layout; } + +void msg_ui_setting_launch_spam_setting(PMSG_SETTING_DATA settingData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + /* Set global data. */ + g_settingData = settingData; + + /* Navigation Frame */ + settingData->navi_frame = msg_ui_setting_create_navigation_layout(settingData->layout_main); + + msg_ui_setting_general_create_view(settingData, NULL, NULL); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} diff --git a/setting/src/main/msg-ui-setting-msg-service-wrapper.c b/setting/src/main/msg-ui-setting-msg-service-wrapper.c index 73a8823..5b1e0c1 100755 --- a/setting/src/main/msg-ui-setting-msg-service-wrapper.c +++ b/setting/src/main/msg-ui-setting-msg-service-wrapper.c @@ -14,6 +14,7 @@ * limitations under the License. */ + #include "msg-ui-setting-msg-service-wrapper.h" @@ -21,21 +22,33 @@ int msg_ui_setting_msg_set_config(PMSG_SETTING_DATA settingData) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - MSG_ERROR_T err = MSG_SUCCESS; - - MSG_SETTING_S setting_option; + msg_error_t err = MSG_SUCCESS; switch (settingData->msg_setting.type) { + case MSG_UI_SETTING_TYPE_GENERAL: + err = msg_set_general_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); + break; case MSG_UI_SETTING_TYPE_SMS_SEND: - setting_option = settingData->msg_setting.sms_send_opt; - setting_option.type = MSG_SMS_SENDOPT; + err = msg_set_sms_send_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); + break; + case MSG_UI_SETTING_TYPE_SMSC_LIST: + err = msg_set_smsc_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); + break; + case MSG_UI_SETTING_TYPE_MMS_SEND: + err = msg_set_mms_send_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); + break; + case MSG_UI_SETTING_TYPE_MMS_RECEIVE: + err = msg_set_mms_recv_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); + break; + case MSG_UI_SETTING_TYPE_CBMSG: + err = msg_set_cb_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); break; default: MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[FAIL] TYPE err %d \n", settingData->msg_setting.type); return MSG_UI_RET_ERR; } - err = msg_set_config(settingData->msgHandle, &setting_option); + msg_release_struct(&(settingData->msg_setting.setting_opt)); MSG_UI_RETVM_IF(MSG_UI_LEVEL_ASSERT, err != MSG_SUCCESS, -1, "[FAIL] msg_set_config of MSG FW : err %d \n", err); @@ -48,23 +61,38 @@ int msg_ui_setting_msg_get_config(PMSG_SETTING_DATA settingData) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - MSG_ERROR_T err = MSG_SUCCESS; - - MSG_SETTING_S *setting_option; + msg_error_t err = MSG_SUCCESS; switch (settingData->msg_setting.type) { + case MSG_UI_SETTING_TYPE_GENERAL: + settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_GENERAL_OPT); + err = msg_get_general_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); + break; case MSG_UI_SETTING_TYPE_SMS_SEND: - memset(&(settingData->msg_setting.sms_send_opt), 0x00, sizeof(MSG_OPTION_TYPE_T)+sizeof(MSG_SMS_SENDOPT_S)); - settingData->msg_setting.sms_send_opt.type = MSG_SMS_SENDOPT; - setting_option = &settingData->msg_setting.sms_send_opt; + settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_SMS_SEND_OPT); + err = msg_get_sms_send_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); + break; + case MSG_UI_SETTING_TYPE_SMSC_LIST: + settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_SMSC_OPT); + err = msg_get_smsc_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); + break; + case MSG_UI_SETTING_TYPE_MMS_SEND: + settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_MMS_SEND_OPT); + err = msg_get_mms_send_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); + break; + case MSG_UI_SETTING_TYPE_MMS_RECEIVE: + settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_MMS_RECV_OPT); + err = msg_get_mms_recv_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); + break; + case MSG_UI_SETTING_TYPE_CBMSG: + settingData->msg_setting.setting_opt = msg_create_struct(MSG_STRUCT_SETTING_CB_OPT); + err = msg_get_cb_opt(settingData->msgHandle, settingData->msg_setting.setting_opt); break; default: MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT, "[FAIL] TYPE err %d \n", settingData->msg_setting.type); return MSG_UI_RET_ERR; } - err = msg_get_config(settingData->msgHandle, setting_option); - MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); return err; diff --git a/setting/src/multimedia/msg-ui-setting-mm-message.c b/setting/src/multimedia/msg-ui-setting-mm-message.c new file mode 100755 index 0000000..40e1707 --- /dev/null +++ b/setting/src/multimedia/msg-ui-setting-mm-message.c @@ -0,0 +1,734 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "msg-ui-setting-main.h" +#include "msg-ui-setting-mm-message.h" + + +static struct _msg_ui_setting_mixed_list_item mm_menu_its[] = { + { 1, "IDS_MSGF_BODY_RECEIVINGOPTIONS", msg_ui_setting_mm_recv_opt_main, ELM_GENLIST_ITEM_NONE }, + { 1, "IDS_MSGF_BODY_DELIVERY_REPORT", NULL, ELM_GENLIST_ITEM_NONE }, + { 1, "IDS_MSGF_BODY_READ_REPORT", msg_ui_setting_mm_read_rep_main, ELM_GENLIST_ITEM_NONE }, + { 1, "IDS_MSGF_BODY_MMSCREATIONMODE", NULL, ELM_GENLIST_ITEM_TREE }, + /* do not delete below */ + { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE } +}; + +static struct _msg_ui_setting_mixed_list_item mm_creation_mode_menu_its[] = { + { 2, "IDS_MSGF_BODY_MMSCCCREATIONMODEFREE", NULL, ELM_GENLIST_ITEM_NONE }, + { 2, "IDS_MSGF_BODY_MMSCCCREATIONMODEWARNING", NULL, ELM_GENLIST_ITEM_NONE }, + { 2, "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED", NULL, ELM_GENLIST_ITEM_NONE }, + /* do not delete below */ + { 2, NULL, NULL, ELM_GENLIST_ITEM_NONE } +}; + +static struct _msg_ui_setting_mixed_list_item mm_read_rep_menu_its[] = { + { 1, "IDS_MSGF_BODY_REQUEST_READ_REPORT", NULL, ELM_GENLIST_ITEM_NONE }, + { 1, "IDS_MSGF_BODY_SEND_READ_REPORT", NULL, ELM_GENLIST_ITEM_NONE }, + /* do not delete below */ + { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE } +}; + + +/*============================================================================ + STATIC FUNCTION DEFINE +=============================================================================*/ +static void __msg_ui_setting_mm_save_creation_mode(void *data); +static char *__msg_ui_setting_mm_creation_mode_gl_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_mm_creation_mode_radio_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_mm_creation_mode_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_mm_creation_mode_gl_sel(void *data, Evas_Object *obj, void *event_info); + +static char *__msg_ui_setting_mm_read_rep_gl_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_mm_save_read_rep_request(void *data); +static void __msg_ui_setting_mm_save_read_rep_send(void *data); +static void __msg_ui_setting_mm_read_rep_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_mm_read_rep_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_mm_read_rep_gl_sel(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_mm_read_rep_create_view(Evas_Object *parent, PMSG_SETTING_DATA settingData); + +static char *__msg_ui_setting_mm_gl_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_mm_save_delivery_rep(void *data); +static void __msg_ui_setting_mm_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_mm_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_mm_gl_sel(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_mm_gl_exp(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_mm_gl_con(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_mm_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData); + + +/*============================================================================ + FUNCTION IMPLEMENT +=============================================================================*/ + +/************************** + *** Create mode menu *** + **************************/ + +static void __msg_ui_setting_mm_save_creation_mode(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + int selection; + msg_error_t err = MSG_SUCCESS; + + selection = elm_radio_value_get(settingData->list.mm_msg.creation_radio_group); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected value is %d", selection); + + /* Save selected value. */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND; + msg_ui_setting_msg_get_config(settingData); + if (selection == 1) + msg_set_int_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_CREATION_MODE_INT, MSG_CREATION_MODE_WARNING); + else if (selection == 2) + msg_set_int_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_CREATION_MODE_INT, MSG_CREATION_MODE_RESTRICTED); + else + msg_set_int_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_CREATION_MODE_INT, MSG_CREATION_MODE_FREE); + + err = msg_ui_setting_msg_set_config(settingData); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_setting_msg_set_config(creation_mode) is %d", err); +} + +static char *__msg_ui_setting_mm_creation_mode_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + if (mm_creation_mode_menu_its[index].name) { + if (strstr(mm_creation_mode_menu_its[index].name, "IDS_COM") != NULL) + return strdup(dgettext("sys_string", mm_creation_mode_menu_its[index].name)); + else + return strdup(dgettext(MESSAGE_PKGNAME, mm_creation_mode_menu_its[index].name)); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void __msg_ui_setting_mm_creation_mode_radio_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + __msg_ui_setting_mm_save_creation_mode(data); + + elm_genlist_item_update(settingData->list.mm_msg.creation_mode_item); +} + +static Evas_Object *__msg_ui_setting_mm_creation_mode_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *radio; + + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int index = (int)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) { + radio = elm_radio_add(obj); + elm_radio_state_value_set(radio, index); + evas_object_propagate_events_set(radio, EINA_FALSE); + evas_object_smart_callback_add(radio, "changed", __msg_ui_setting_mm_creation_mode_radio_cb, (void *)settingData); + + if (index == 0) + settingData->list.mm_msg.creation_radio_group = radio; + else + elm_radio_group_add(radio, settingData->list.mm_msg.creation_radio_group); + + return radio; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void __msg_ui_setting_mm_creation_mode_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = NULL; + int index = (int)data; + + settingData = msg_ui_setting_get_data(); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL"); + + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); + + /* Change radio selection. */ + elm_radio_value_set(settingData->list.mm_msg.creation_radio_group, index); + + __msg_ui_setting_mm_save_creation_mode((void *)settingData); + + elm_genlist_item_update(settingData->list.mm_msg.creation_mode_item); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return; +} + +/************************** + *** Read Report menu *** + **************************/ + +static char *__msg_ui_setting_mm_read_rep_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + if (mm_menu_its[index].name) { + if (strstr(mm_read_rep_menu_its[index].name, "IDS_COM") != NULL) + return strdup(dgettext("sys_string", mm_read_rep_menu_its[index].name)); + else + return strdup(dgettext(MESSAGE_PKGNAME, mm_read_rep_menu_its[index].name)); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void __msg_ui_setting_mm_save_read_rep_request(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + Eina_Bool set_val = EINA_FALSE; + + set_val = elm_check_state_get(settingData->list.mm_msg.mm_read_rep_request_check); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val); + + /* Set requesting read report in sending option. */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND; + msg_ui_setting_msg_get_config(settingData); + msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_READ_REPLY_BOOL, set_val); + msg_ui_setting_msg_set_config(settingData); +} + +static void __msg_ui_setting_mm_save_read_rep_send(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + Eina_Bool set_val = EINA_FALSE; + + set_val = elm_check_state_get(settingData->list.mm_msg.mm_read_rep_send_check); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val); + + /* Set sending read report in receiving option. */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_READ_REPORT_BOOL, set_val); + msg_ui_setting_msg_set_config(settingData); +} + +static void __msg_ui_setting_mm_read_rep_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + if (obj == settingData->list.mm_msg.mm_read_rep_request_check) + __msg_ui_setting_mm_save_read_rep_request(settingData); + else if (obj == settingData->list.mm_msg.mm_read_rep_send_check) + __msg_ui_setting_mm_save_read_rep_send(settingData); + else + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid obj = 0x%x", obj); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static Evas_Object *__msg_ui_setting_mm_read_rep_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + Evas_Object *check; + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + bool bReadValue = false; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) { + if (index == MSG_UI_SETTING_MM_READ_REP_MENU_REQUEST) { + check = elm_check_add(obj); + settingData->list.mm_msg.mm_read_rep_request_check = check; + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND; + msg_ui_setting_msg_get_config(settingData); + msg_get_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_READ_REPLY_BOOL, &bReadValue); + if (bReadValue == true) + elm_check_state_set(check, EINA_TRUE); + else + elm_check_state_set(check, EINA_FALSE); + + elm_object_style_set(check, "on&off"); + + evas_object_propagate_events_set(check, EINA_FALSE); + evas_object_smart_callback_add(check, "changed", __msg_ui_setting_mm_read_rep_gl_check_clicked_cb, settingData); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + + return check; + } else if (index == MSG_UI_SETTING_MM_READ_REP_MENU_SEND) { + check = elm_check_add(obj); + settingData->list.mm_msg.mm_read_rep_send_check = check; + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + msg_get_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_READ_REPORT_BOOL, &bReadValue); + if (bReadValue == true) + elm_check_state_set(check, EINA_TRUE); + else + elm_check_state_set(check, EINA_FALSE); + + elm_object_style_set(check, "on&off"); + + evas_object_propagate_events_set(check, EINA_FALSE); + evas_object_smart_callback_add(check, "changed", __msg_ui_setting_mm_read_rep_gl_check_clicked_cb, settingData); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + + return check; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void __msg_ui_setting_mm_read_rep_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int index = (int)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL"); + + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); + + if (index == MSG_UI_SETTING_MM_READ_REP_MENU_REQUEST) { + Eina_Bool set_val = EINA_FALSE; + + set_val = elm_check_state_get(settingData->list.mm_msg.mm_read_rep_request_check); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val); + + elm_check_state_set(settingData->list.mm_msg.mm_read_rep_request_check, !set_val); + + __msg_ui_setting_mm_save_read_rep_request((void *)settingData); + } else if (index == MSG_UI_SETTING_MM_READ_REP_MENU_SEND) { + Eina_Bool set_val = EINA_FALSE; + + set_val = elm_check_state_get(settingData->list.mm_msg.mm_read_rep_send_check); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val); + + elm_check_state_set(settingData->list.mm_msg.mm_read_rep_send_check, !set_val); + + __msg_ui_setting_mm_save_read_rep_send((void *)settingData); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static Evas_Object *__msg_ui_setting_mm_read_rep_create_view(Evas_Object *parent, PMSG_SETTING_DATA settingData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !settingData, NULL); + + Evas_Object *mm_read_rep_genlist; + + int index = 0; + + mm_read_rep_genlist = msg_ui_setting_common_create_genlist(parent); + settingData->list.mm_msg.mm_read_rep_genlist = mm_read_rep_genlist; + + msg_ui_setting_common_append_genlist_separator(mm_read_rep_genlist, settingData); + + settingData->list.mm_msg.mm_read_rep_1line_1icon_itc.item_style = "dialogue/1text.1icon"; + settingData->list.mm_msg.mm_read_rep_1line_1icon_itc.func.text_get = __msg_ui_setting_mm_read_rep_gl_text_get; + settingData->list.mm_msg.mm_read_rep_1line_1icon_itc.func.content_get = __msg_ui_setting_mm_read_rep_gl_content_get; + settingData->list.mm_msg.mm_read_rep_1line_1icon_itc.func.state_get = NULL; + settingData->list.mm_msg.mm_read_rep_1line_1icon_itc.func.del = NULL; + + for (index = 0; mm_read_rep_menu_its[index].name; index++) { + if (index == MSG_UI_SETTING_MM_READ_REP_MENU_REQUEST || + index == MSG_UI_SETTING_MM_READ_REP_MENU_SEND) { + elm_genlist_item_append(mm_read_rep_genlist, &settingData->list.mm_msg.mm_read_rep_1line_1icon_itc, + (void *)index, NULL, mm_read_rep_menu_its[index].type, + __msg_ui_setting_mm_read_rep_gl_sel, (void *)index); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index); + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return mm_read_rep_genlist; +} + +void msg_ui_setting_mm_read_rep_main(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Evas_Object *read_rep_layout; + Evas_Object *mm_read_rep_genlist; + Elm_Object_Item *navi_it; + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND; + msg_ui_setting_msg_get_config(settingData); + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + + read_rep_layout = msg_ui_setting_common_create_layout(settingData->navi_frame); + + mm_read_rep_genlist = __msg_ui_setting_mm_read_rep_create_view(settingData->navi_frame, settingData); + elm_object_part_content_set(read_rep_layout, "elm.swallow.content", mm_read_rep_genlist); + + navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_READ_REPORT"), NULL, NULL, read_rep_layout, NULL); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + + +/********************************* + *** Multimedia message menu *** + *********************************/ + +static char *__msg_ui_setting_mm_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int creationMode = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + if (mm_menu_its[index].name) { + if (strstr(mm_menu_its[index].name, "IDS_COM") != NULL) + return strdup(dgettext("sys_string", mm_menu_its[index].name)); + else + return strdup(dgettext(MESSAGE_PKGNAME, mm_menu_its[index].name)); + } + } else if (!strcmp(part, "elm.text.sub") || !strcmp(part, "elm.text.2")) { + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND; + msg_ui_setting_msg_get_config(settingData); + msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_CREATION_MODE_INT, &creationMode); + if (creationMode == MSG_CREATION_MODE_FREE) + return strdup(dgettext(MESSAGE_PKGNAME, mm_creation_mode_menu_its[0].name)); + else if (creationMode == MSG_CREATION_MODE_WARNING) + return strdup(dgettext(MESSAGE_PKGNAME, mm_creation_mode_menu_its[1].name)); + else if (creationMode == MSG_CREATION_MODE_RESTRICTED) + return strdup(dgettext(MESSAGE_PKGNAME, mm_creation_mode_menu_its[2].name)); + else + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid mode = %d", creationMode); + msg_release_struct(&(settingData->msg_setting.setting_opt)); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void __msg_ui_setting_mm_save_delivery_rep(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + Eina_Bool set_val = EINA_FALSE; + + set_val = elm_check_state_get(settingData->list.mm_msg.mm_delivery_report_check); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val); + + /* Set requesting delivery report in sending option. */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND; + msg_ui_setting_msg_get_config(settingData); + msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_DELIVERY_REPORT_BOOL, set_val); + msg_ui_setting_msg_set_config(settingData); + + /* Set sending delivery report in receiving option. */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_DELIVERY_REPORT_BOOL, set_val); + msg_ui_setting_msg_set_config(settingData); +} + +static void __msg_ui_setting_mm_gl_check_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + if (obj == settingData->list.mm_msg.mm_delivery_report_check) + __msg_ui_setting_mm_save_delivery_rep(settingData); + else + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid obj = 0x%x", obj); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static Evas_Object *__msg_ui_setting_mm_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + Evas_Object *check; + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + bool bReadReply = false; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) { + if (index == MSG_UI_SETTING_MM_MENU_DELIVERY_REPORT) { + check = elm_check_add(obj); + settingData->list.mm_msg.mm_delivery_report_check = check; + + /* We decide delivery report setting based on sending option setting. */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND; + msg_ui_setting_msg_get_config(settingData); + msg_get_bool_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_READ_REPLY_BOOL, &bReadReply); + if (bReadReply == true) + elm_check_state_set(check, EINA_TRUE); + else + elm_check_state_set(check, EINA_FALSE); + + elm_object_style_set(check, "on&off"); + + evas_object_propagate_events_set(check, EINA_FALSE); + evas_object_smart_callback_add(check, "changed", __msg_ui_setting_mm_gl_check_clicked_cb, settingData); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + + return check; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void __msg_ui_setting_mm_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int index = (int)data; + Eina_Bool expand_state = EINA_FALSE; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL"); + + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); + + if (index == MSG_UI_SETTING_MM_MENU_CREATE_MODE) { + expand_state = elm_genlist_item_expanded_get(settingData->list.mm_msg.creation_mode_item); + if (expand_state == EINA_FALSE) + elm_genlist_item_expanded_set(settingData->list.mm_msg.creation_mode_item, EINA_TRUE); + else + elm_genlist_item_expanded_set(settingData->list.mm_msg.creation_mode_item, EINA_FALSE); + } else if (index == MSG_UI_SETTING_MM_MENU_DELIVERY_REPORT) { + Eina_Bool set_val = EINA_FALSE; + + set_val = elm_check_state_get(settingData->list.mm_msg.mm_delivery_report_check); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val); + + elm_check_state_set(settingData->list.mm_msg.mm_delivery_report_check, !set_val); + + __msg_ui_setting_mm_save_delivery_rep((void *)settingData); + } else { + if (mm_menu_its[index].func != NULL) { + mm_menu_its[index].func(settingData, obj, event_info); + + /* If expandable genlist item is expanded, it should be contracted. + * Because, wrong radio button is selected when it is back from other sub menu. + */ + expand_state = elm_genlist_item_expanded_get(settingData->list.mm_msg.creation_mode_item); + if (expand_state == EINA_TRUE) + elm_genlist_item_expanded_set(settingData->list.mm_msg.creation_mode_item, EINA_FALSE); + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_setting_mm_gl_exp(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Elm_Object_Item *it = event_info; + int index = 0; + int depth = 0; + int creationMode = 0; + + depth = elm_genlist_item_expanded_depth_get(it); + + if (depth == 0) { + settingData->list.mm_msg.mm_creation_mode_itc.item_style = "dialogue/1text.1icon.2/expandable2"; + settingData->list.mm_msg.mm_creation_mode_itc.func.text_get = __msg_ui_setting_mm_creation_mode_gl_text_get; + settingData->list.mm_msg.mm_creation_mode_itc.func.content_get = __msg_ui_setting_mm_creation_mode_gl_content_get; + settingData->list.mm_msg.mm_creation_mode_itc.func.state_get = NULL; + settingData->list.mm_msg.mm_creation_mode_itc.func.del = NULL; + + for (index = 0; mm_creation_mode_menu_its[index].name; index++) { + elm_genlist_item_append(settingData->list.mm_msg.mm_genlist, + &settingData->list.mm_msg.mm_creation_mode_itc, + (void *)index, it, mm_creation_mode_menu_its[index].type, + __msg_ui_setting_mm_creation_mode_gl_sel, (void *)index); + } + + if (settingData->list.mm_msg.creation_radio_group) { + /* Set creation mode current value */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND; + msg_ui_setting_msg_get_config(settingData); + msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_SENDOPT_CREATION_MODE_INT, &creationMode); + if (creationMode == MSG_CREATION_MODE_WARNING) + elm_radio_value_set(settingData->list.mm_msg.creation_radio_group, 1); + else if (creationMode == MSG_CREATION_MODE_RESTRICTED) + elm_radio_value_set(settingData->list.mm_msg.creation_radio_group, 2); + else + elm_radio_value_set(settingData->list.mm_msg.creation_radio_group, 0); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + } + } +} + +static void __msg_ui_setting_mm_gl_con(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Elm_Object_Item *item = event_info; + elm_genlist_item_subitems_clear(item); +} + +static Evas_Object *__msg_ui_setting_mm_create_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *mm_genlist; + Elm_Object_Item *it = NULL; + + int index = 0; + + mm_genlist = msg_ui_setting_common_create_genlist(parent); + settingData->list.mm_msg.mm_genlist = mm_genlist; + + msg_ui_setting_common_append_genlist_separator(mm_genlist, settingData); + + settingData->list.mm_msg.mm_itc.item_style = "dialogue/1text"; + settingData->list.mm_msg.mm_itc.func.text_get = __msg_ui_setting_mm_gl_text_get; + settingData->list.mm_msg.mm_itc.func.content_get = NULL; + settingData->list.mm_msg.mm_itc.func.state_get = NULL; + settingData->list.mm_msg.mm_itc.func.del = NULL; + + settingData->list.mm_msg.mm_1line_1icon_itc.item_style = "dialogue/1text.1icon"; + settingData->list.mm_msg.mm_1line_1icon_itc.func.text_get = __msg_ui_setting_mm_gl_text_get; + settingData->list.mm_msg.mm_1line_1icon_itc.func.content_get = __msg_ui_setting_mm_gl_content_get; + settingData->list.mm_msg.mm_1line_1icon_itc.func.state_get = NULL; + settingData->list.mm_msg.mm_1line_1icon_itc.func.del = NULL; + + settingData->list.mm_msg.mm_2line_1icon_itc.item_style = "dialogue/2text.3/expandable"; + settingData->list.mm_msg.mm_2line_1icon_itc.func.text_get = __msg_ui_setting_mm_gl_text_get; + settingData->list.mm_msg.mm_2line_1icon_itc.func.content_get = NULL; + settingData->list.mm_msg.mm_2line_1icon_itc.func.state_get = NULL; + settingData->list.mm_msg.mm_2line_1icon_itc.func.del = NULL; + + for (index = 0; mm_menu_its[index].name; index++) { + if (index == MSG_UI_SETTING_MM_MENU_CREATE_MODE) { + /* In case of creation mode. */ + it = elm_genlist_item_append(mm_genlist, &settingData->list.mm_msg.mm_2line_1icon_itc, + (void *)index, NULL, mm_menu_its[index].type, + __msg_ui_setting_mm_gl_sel, (void *)index); + settingData->list.mm_msg.creation_mode_item = it; + } else if (index == MSG_UI_SETTING_MM_MENU_DELIVERY_REPORT) { + elm_genlist_item_append(mm_genlist, &settingData->list.mm_msg.mm_1line_1icon_itc, (void *)index, + NULL, mm_menu_its[index].type, __msg_ui_setting_mm_gl_sel, (void *)index); + } else { + elm_genlist_item_append(mm_genlist, &settingData->list.mm_msg.mm_itc, (void *)index, + NULL, mm_menu_its[index].type, __msg_ui_setting_mm_gl_sel, (void *)index); + } + } + + evas_object_smart_callback_add(mm_genlist, "expanded", __msg_ui_setting_mm_gl_exp, settingData); + evas_object_smart_callback_add(mm_genlist, "contracted", __msg_ui_setting_mm_gl_con, settingData); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return mm_genlist; +} + +void msg_ui_setting_mm_create_view(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Evas_Object *mm_layout; + Evas_Object *mm_genlist; + Elm_Object_Item *navi_it; + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_SEND; + msg_ui_setting_msg_get_config(settingData); + + /* Initialize global variable. */ + memset(&settingData->list.mm_msg, 0x0, sizeof(settingData->list.mm_msg)); + + mm_layout = msg_ui_setting_common_create_layout(settingData->navi_frame); + + mm_genlist = __msg_ui_setting_mm_create_menu(settingData->navi_frame, settingData); + elm_object_part_content_set(mm_layout, "elm.swallow.content", mm_genlist); + + navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SETTINGS_MULTIMEDIAMESSAGE"), NULL, NULL, mm_layout, NULL); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + diff --git a/setting/src/multimedia/msg-ui-setting-mm-recv-option.c b/setting/src/multimedia/msg-ui-setting-mm-recv-option.c new file mode 100755 index 0000000..379cc69 --- /dev/null +++ b/setting/src/multimedia/msg-ui-setting-mm-recv-option.c @@ -0,0 +1,638 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "msg-ui-setting-mm-message.h" + + +static struct _msg_ui_setting_mixed_list_item mm_recv_menu_its[] = { + { 1, "IDS_MSGF_OPT_HOME_NETWORK", NULL, ELM_GENLIST_ITEM_TREE }, + { 1, "IDS_MSGF_OPT_ROAM_NETWORK", NULL, ELM_GENLIST_ITEM_TREE }, + /* do not delete below */ + { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE } +}; + +static struct _msg_ui_setting_mixed_list_item mm_recv_home_network_menu_its[] = { + { 2, "IDS_MSGF_BODY_AUTODOWNLOAD", NULL, ELM_GENLIST_ITEM_NONE }, + { 2, "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL", NULL, ELM_GENLIST_ITEM_NONE }, + { 2, "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT", NULL, ELM_GENLIST_ITEM_NONE }, + /* do not delete below */ + { 2, NULL, NULL, ELM_GENLIST_ITEM_NONE } +}; + +static struct _msg_ui_setting_mixed_list_item mm_recv_foreign_network_menu_its[] = { + { 2, "IDS_MSGF_BODY_AUTODOWNLOAD", NULL, ELM_GENLIST_ITEM_NONE }, + { 2, "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_MANUAL", NULL, ELM_GENLIST_ITEM_NONE }, + { 2, "IDS_MSGF_BODY_ROAMINGRECEPTION_RESTRICTED", NULL, ELM_GENLIST_ITEM_NONE }, + { 2, "IDS_MSGF_BODY_RECEIVINGOPTIONNETWORK_REJECT", NULL, ELM_GENLIST_ITEM_NONE }, + /* do not delete below */ + { 2, NULL, NULL, ELM_GENLIST_ITEM_NONE } +}; + + +/*============================================================================ + STATIC FUNCTION DEFINE +=============================================================================*/ +static void __msg_ui_setting_mm_recv_save_home_network(void *data); +static char *__msg_ui_setting_mm_recv_home_network_gl_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_mm_recv_home_network_radio_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_mm_recv_home_network_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_mm_recv_home_network_gl_sel(void *data, Evas_Object *obj, void *event_info); + +static void __msg_ui_setting_mm_recv_save_foreign_network(void *data); +static char *__msg_ui_setting_mm_recv_foreign_network_gl_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_mm_recv_foreign_network_radio_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_mm_recv_foreign_network_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_mm_recv_foreign_network_gl_sel(void *data, Evas_Object *obj, void *event_info); + +static char *__msg_ui_setting_mm_recv_gl_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_mm_recv_gl_sel(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_mm_recv_gl_exp(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_mm_recv_gl_con(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_mm_recv_create_view(Evas_Object *parent, PMSG_SETTING_DATA settingData); + + +/*============================================================================ + FUNCTION IMPLEMENT +=============================================================================*/ + +/********************** + *** Home network *** + **********************/ + +static void +__msg_ui_setting_mm_recv_save_home_network(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + int selection = 0; + int set_val = 0; + msg_error_t err = MSG_SUCCESS; + + selection = elm_radio_value_get(settingData->list.mm_msg.mm_recv_home_network_radio_group); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected value is %d", selection); + + switch (selection) { + case 0: + set_val = MSG_HOME_AUTO_DOWNLOAD; + break; + + case 1: + set_val = MSG_HOME_MANUAL; + break; + + case 2: + set_val = MSG_HOME_REJECT; + break; + + default: + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid selection = %d", selection); + set_val = MSG_HOME_AUTO_DOWNLOAD; + break; + } + + /* Save selected value. */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + msg_set_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_HOME_RETRIEVE_TYPE_INT, set_val); + err = msg_ui_setting_msg_set_config(settingData); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_setting_msg_set_config(home network) is %d", err); + +} + +static char * +__msg_ui_setting_mm_recv_home_network_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + if (mm_recv_home_network_menu_its[index].name) { + if (strstr(mm_recv_home_network_menu_its[index].name, "IDS_COM") != NULL) + return strdup(dgettext("sys_string", mm_recv_home_network_menu_its[index].name)); + else + return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_home_network_menu_its[index].name)); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void +__msg_ui_setting_mm_recv_home_network_radio_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + __msg_ui_setting_mm_recv_save_home_network(data); + + elm_genlist_item_update(settingData->list.mm_msg.mm_recv_home_network_item); +} + +static Evas_Object * +__msg_ui_setting_mm_recv_home_network_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *radio; + + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int index = (int)data; + int retrieveType = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) { + radio = elm_radio_add(obj); + elm_radio_state_value_set(radio, index); + evas_object_propagate_events_set(radio, EINA_FALSE); + evas_object_smart_callback_add(radio, "changed", __msg_ui_setting_mm_recv_home_network_radio_cb, (void *)settingData); + + if (index == 0) + settingData->list.mm_msg.mm_recv_home_network_radio_group = radio; + else + elm_radio_group_add(radio, settingData->list.mm_msg.mm_recv_home_network_radio_group); + + /* When user contract expanded genlist item, genlist is updated. + * In this case, radio button is set to first item. + * Therefore, we should check and set radio value when last item is redrawn. + */ + if (index == 2) { + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_HOME_RETRIEVE_TYPE_INT, &retrieveType); + if (retrieveType == MSG_HOME_MANUAL) + elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 1); + else if (retrieveType == MSG_HOME_REJECT) + elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 2); + else + elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 0); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + } + + return radio; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void +__msg_ui_setting_mm_recv_home_network_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = NULL; + int index = (int)data; + + settingData = msg_ui_setting_get_data(); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL"); + + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); + + /* Change radio selection. */ + elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, index); + + __msg_ui_setting_mm_recv_save_home_network((void *)settingData); + + elm_genlist_item_update(settingData->list.mm_msg.mm_recv_home_network_item); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return; +} + + +/************************* + *** Foreign network *** + *************************/ + +static void +__msg_ui_setting_mm_recv_save_foreign_network(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + int selection; + msg_error_t err = MSG_SUCCESS; + + selection = elm_radio_value_get(settingData->list.mm_msg.mm_recv_foreign_network_radio_group); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected value is %d", selection); + + /* Save selected value. */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + msg_set_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_ABROAD_RETRIEVE_TYPE_INT, selection); + err = msg_ui_setting_msg_set_config(settingData); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_setting_msg_set_config(Foreign network) is %d", err); + +} + +static char * +__msg_ui_setting_mm_recv_foreign_network_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + if (mm_recv_foreign_network_menu_its[index].name) { + if (strstr(mm_recv_foreign_network_menu_its[index].name, "IDS_COM") != NULL) + return strdup(dgettext("sys_string", mm_recv_foreign_network_menu_its[index].name)); + else + return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_foreign_network_menu_its[index].name)); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void +__msg_ui_setting_mm_recv_foreign_network_radio_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + __msg_ui_setting_mm_recv_save_foreign_network(data); + + elm_genlist_item_update(settingData->list.mm_msg.mm_recv_foreign_network_item); +} + +static Evas_Object * +__msg_ui_setting_mm_recv_foreign_network_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *radio; + + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int index = (int)data; + int retrieveType = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) { + radio = elm_radio_add(obj); + elm_radio_state_value_set(radio, index); + evas_object_propagate_events_set(radio, EINA_FALSE); + evas_object_smart_callback_add(radio, "changed", __msg_ui_setting_mm_recv_foreign_network_radio_cb, (void *)settingData); + + if (index == 0) + settingData->list.mm_msg.mm_recv_foreign_network_radio_group = radio; + else + elm_radio_group_add(radio, settingData->list.mm_msg.mm_recv_foreign_network_radio_group); + + /* When user contract expanded genlist item, genlist is updated. + * In this case, radio button is set to first item. + * Therefore, we should check and set radio value when last item is redrawn. + */ + if (index == 3) { + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_ABROAD_RETRIEVE_TYPE_INT, &retrieveType); + if (retrieveType == MSG_ABROAD_MANUAL) + elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 1); + else if (retrieveType == MSG_ABROAD_RESTRICTED) + elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 2); + else if (retrieveType == MSG_ABROAD_REJECT) + elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 3); + else + elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 0); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + } + + return radio; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void +__msg_ui_setting_mm_recv_foreign_network_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = NULL; + int index = (int)data; + + settingData = msg_ui_setting_get_data(); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL"); + + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); + + /* Change radio selection. */ + elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, index); + + __msg_ui_setting_mm_recv_save_foreign_network((void *)settingData); + + elm_genlist_item_update(settingData->list.mm_msg.mm_recv_foreign_network_item); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return; +} + + +/************************************ + *** Receiving option main menu *** + ************************************/ + +static char * +__msg_ui_setting_mm_recv_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int set_val = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + if (mm_recv_menu_its[index].name) { + if (strstr(mm_recv_menu_its[index].name, "IDS_COM") != NULL) + return strdup(dgettext("sys_string", mm_recv_menu_its[index].name)); + else + return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_menu_its[index].name)); + } + } else if (!strcmp(part, "elm.text.sub") || !strcmp(part, "elm.text.2")) { + if (index == MSG_UI_SETTING_MM_RECV_OPT_MENU_HOME) { + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_HOME_RETRIEVE_TYPE_INT, &set_val); + msg_release_struct(&(settingData->msg_setting.setting_opt)); + + switch (set_val) { + case MSG_HOME_AUTO_DOWNLOAD: + return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_home_network_menu_its[0].name)); + break; + + case MSG_HOME_MANUAL: + return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_home_network_menu_its[1].name)); + break; + + case MSG_HOME_REJECT: + return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_home_network_menu_its[2].name)); + break; + + default: + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid value = %d", set_val); + break; + } + } else if (index == MSG_UI_SETTING_MM_RECV_OPT_MENU_FOREIGN) { + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_ABROAD_RETRIEVE_TYPE_INT, &set_val); + msg_release_struct(&(settingData->msg_setting.setting_opt)); + + switch (set_val) { + case MSG_ABROAD_AUTO_DOWNLOAD: + return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_foreign_network_menu_its[0].name)); + break; + + case MSG_ABROAD_MANUAL: + return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_foreign_network_menu_its[1].name)); + break; + + case MSG_ABROAD_RESTRICTED: + return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_foreign_network_menu_its[2].name)); + break; + + case MSG_ABROAD_REJECT: + return strdup(dgettext(MESSAGE_PKGNAME, mm_recv_foreign_network_menu_its[3].name)); + break; + + default: + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid value = %d", set_val); + break; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void +__msg_ui_setting_mm_recv_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int index = (int)data; + Eina_Bool expand_state = EINA_FALSE; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL"); + + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); + + if (index == MSG_UI_SETTING_MM_RECV_OPT_MENU_HOME) { + expand_state = elm_genlist_item_expanded_get(settingData->list.mm_msg.mm_recv_home_network_item); + if (expand_state == EINA_FALSE) + elm_genlist_item_expanded_set(settingData->list.mm_msg.mm_recv_home_network_item, EINA_TRUE); + else + elm_genlist_item_expanded_set(settingData->list.mm_msg.mm_recv_home_network_item, EINA_FALSE); + } else if (index == MSG_UI_SETTING_MM_RECV_OPT_MENU_FOREIGN) { + expand_state = elm_genlist_item_expanded_get(settingData->list.mm_msg.mm_recv_foreign_network_item); + if (expand_state == EINA_FALSE) + elm_genlist_item_expanded_set(settingData->list.mm_msg.mm_recv_foreign_network_item, EINA_TRUE); + else + elm_genlist_item_expanded_set(settingData->list.mm_msg.mm_recv_foreign_network_item, EINA_FALSE); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void +__msg_ui_setting_mm_recv_gl_exp(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Elm_Object_Item *it = event_info; + int index = 0; + int depth = 0; + int retrieveType = 0; + + depth = elm_genlist_item_expanded_depth_get(it); + + if (depth == 0) { + if (it == settingData->list.mm_msg.mm_recv_home_network_item) { + settingData->list.mm_msg.mm_recv_home_network_itc.item_style = "dialogue/1text.1icon.2/expandable2"; + settingData->list.mm_msg.mm_recv_home_network_itc.func.text_get = __msg_ui_setting_mm_recv_home_network_gl_text_get; + settingData->list.mm_msg.mm_recv_home_network_itc.func.content_get = __msg_ui_setting_mm_recv_home_network_gl_content_get; + settingData->list.mm_msg.mm_recv_home_network_itc.func.state_get = NULL; + settingData->list.mm_msg.mm_recv_home_network_itc.func.del = NULL; + + for (index = 0; mm_recv_home_network_menu_its[index].name; index++) { + elm_genlist_item_append(settingData->list.mm_msg.mm_recv_genlist, + &settingData->list.mm_msg.mm_recv_home_network_itc, + (void *)index, it, mm_recv_home_network_menu_its[index].type, + __msg_ui_setting_mm_recv_home_network_gl_sel, (void *)index); + } + + if (settingData->list.mm_msg.mm_recv_home_network_radio_group) { + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_HOME_RETRIEVE_TYPE_INT, &retrieveType); + + if (retrieveType == MSG_HOME_MANUAL) + elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 1); + else if (retrieveType == MSG_HOME_REJECT) + elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 2); + else + elm_radio_value_set(settingData->list.mm_msg.mm_recv_home_network_radio_group, 0); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + } + } else if (it == settingData->list.mm_msg.mm_recv_foreign_network_item) { + settingData->list.mm_msg.mm_recv_foreign_network_itc.item_style = "dialogue/1text.1icon.2/expandable2"; + settingData->list.mm_msg.mm_recv_foreign_network_itc.func.text_get = __msg_ui_setting_mm_recv_foreign_network_gl_text_get; + settingData->list.mm_msg.mm_recv_foreign_network_itc.func.content_get = __msg_ui_setting_mm_recv_foreign_network_gl_content_get; + settingData->list.mm_msg.mm_recv_foreign_network_itc.func.state_get = NULL; + settingData->list.mm_msg.mm_recv_foreign_network_itc.func.del = NULL; + + for (index = 0; mm_recv_foreign_network_menu_its[index].name; index++) { + elm_genlist_item_append(settingData->list.mm_msg.mm_recv_genlist, + &settingData->list.mm_msg.mm_recv_foreign_network_itc, + (void *)index, it, mm_recv_foreign_network_menu_its[index].type, + __msg_ui_setting_mm_recv_foreign_network_gl_sel, (void *)index); + } + + if (settingData->list.mm_msg.mm_recv_foreign_network_radio_group) { + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + msg_get_int_value(settingData->msg_setting.setting_opt, MSG_MMS_RECVOPT_ABROAD_RETRIEVE_TYPE_INT, &retrieveType); + + if (retrieveType == MSG_ABROAD_MANUAL) + elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 1); + else if (retrieveType == MSG_ABROAD_RESTRICTED) + elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 2); + else if (retrieveType == MSG_ABROAD_REJECT) + elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 3); + else + elm_radio_value_set(settingData->list.mm_msg.mm_recv_foreign_network_radio_group, 0); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid it = 0x%x", it); + } + } +} + +static void +__msg_ui_setting_mm_recv_gl_con(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Elm_Object_Item *item = event_info; + elm_genlist_item_subitems_clear(item); +} + +static Evas_Object * +__msg_ui_setting_mm_recv_create_view(Evas_Object *parent, PMSG_SETTING_DATA settingData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !settingData, NULL); + + Evas_Object *mm_recv_genlist; + Elm_Object_Item *it = NULL; + + int index = 0; + + mm_recv_genlist = msg_ui_setting_common_create_genlist(parent); + settingData->list.mm_msg.mm_recv_genlist = mm_recv_genlist; + + msg_ui_setting_common_append_genlist_separator(mm_recv_genlist, settingData); + + settingData->list.mm_msg.mm_recv_2line_expand_itc.item_style = "dialogue/2text.3/expandable"; + settingData->list.mm_msg.mm_recv_2line_expand_itc.func.text_get = __msg_ui_setting_mm_recv_gl_text_get; + settingData->list.mm_msg.mm_recv_2line_expand_itc.func.content_get = NULL; + settingData->list.mm_msg.mm_recv_2line_expand_itc.func.state_get = NULL; + settingData->list.mm_msg.mm_recv_2line_expand_itc.func.del = NULL; + + for (index = 0; mm_recv_menu_its[index].name; index++) { + if (index == MSG_UI_SETTING_MM_RECV_OPT_MENU_HOME) { + it = elm_genlist_item_append(mm_recv_genlist, &settingData->list.mm_msg.mm_recv_2line_expand_itc, + (void *)index, NULL, mm_recv_menu_its[index].type, + __msg_ui_setting_mm_recv_gl_sel, (void *)index); + settingData->list.mm_msg.mm_recv_home_network_item = it; + } else if (index == MSG_UI_SETTING_MM_RECV_OPT_MENU_FOREIGN) { + it = elm_genlist_item_append(mm_recv_genlist, &settingData->list.mm_msg.mm_recv_2line_expand_itc, + (void *)index, NULL, mm_recv_menu_its[index].type, + __msg_ui_setting_mm_recv_gl_sel, (void *)index); + settingData->list.mm_msg.mm_recv_foreign_network_item = it; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index); + } + } + + evas_object_smart_callback_add(mm_recv_genlist, "expanded", __msg_ui_setting_mm_recv_gl_exp, settingData); + evas_object_smart_callback_add(mm_recv_genlist, "contracted", __msg_ui_setting_mm_recv_gl_con, settingData); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return mm_recv_genlist; +} + +void msg_ui_setting_mm_recv_opt_main(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Evas_Object *recv_layout; + Evas_Object *mm_recv_genlist; + Elm_Object_Item *navi_it; + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_MMS_RECEIVE; + msg_ui_setting_msg_get_config(settingData); + + recv_layout = msg_ui_setting_common_create_layout(settingData->navi_frame); + + mm_recv_genlist = __msg_ui_setting_mm_recv_create_view(settingData->navi_frame, settingData); + elm_object_part_content_set(recv_layout, "elm.swallow.content", mm_recv_genlist); + + navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_RECEIVINGOPTIONS"), NULL, NULL, recv_layout, NULL); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + diff --git a/setting/src/text/msg-ui-setting-text-message.c b/setting/src/text/msg-ui-setting-text-message.c index 4d48d0b..44c9eef 100755 --- a/setting/src/text/msg-ui-setting-text-message.c +++ b/setting/src/text/msg-ui-setting-text-message.c @@ -14,12 +14,14 @@ * limitations under the License. */ + #include "msg-ui-setting-main.h" #include "msg-ui-setting-text-message.h" static struct _msg_ui_setting_mixed_list_item text_menu_its[] = { { 1, "IDS_MSGF_BODY_REQUEST_DELIVERY_REPORT", NULL, ELM_GENLIST_ITEM_NONE }, + { 1, "IDS_MSGF_BODY_SERVICECENTRE", msg_ui_setting_create_service_center_list, ELM_GENLIST_ITEM_NONE }, /* do not delete below */ { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE } }; @@ -50,6 +52,9 @@ __msg_ui_setting_text_gl_text_get(void *data, Evas_Object *obj, const char *part MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); int index = (int)data; + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + + msg_error_t err = MSG_SUCCESS; MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); @@ -60,6 +65,22 @@ __msg_ui_setting_text_gl_text_get(void *data, Evas_Object *obj, const char *part else return strdup(dgettext(MESSAGE_PKGNAME, text_menu_its[index].name)); } + } else if (!strcmp(part, "elm.text.sub") || !strcmp(part, "elm.text.2")) { + if (index == MSG_UI_SETTING_TEXT_MENU_SMSC) { + char smsc_name[MAX_SMSC_NAME_LEN + 1] = {0, }; + int cur_index = 0; + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST; + msg_ui_setting_msg_get_config(settingData); + err = msg_get_int_value(settingData->msg_setting.setting_opt, MSG_SMSC_SELECTED_ID_INT, &cur_index); + msg_release_struct(&(settingData->msg_setting.setting_opt)); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "__msg_ui_setting_text_gl_text_get is %d", err); + + snprintf(smsc_name, sizeof(smsc_name), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CENTRE_PD"), cur_index+1); + return strdup(smsc_name); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %s", index); + } } else { MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); } @@ -79,8 +100,8 @@ __msg_ui_setting_text_save_req_delivery_report(void *data) MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "set_val = %d", (int)set_val); settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMS_SEND; - settingData->msg_setting.sms_send_opt.option.smsSendOpt.bDeliveryReport = (unsigned char)set_val; - + msg_ui_setting_msg_get_config(settingData); + msg_set_bool_value(settingData->msg_setting.setting_opt, MSG_SMS_SENDOPT_DELIVERY_REPORT_BOOL, set_val); msg_ui_setting_msg_set_config(settingData); } @@ -107,6 +128,7 @@ __msg_ui_setting_text_gl_content_get(void *data, Evas_Object *obj, const char *p int index = (int)data; Evas_Object *check; PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + bool bReport = false; MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); @@ -115,7 +137,11 @@ __msg_ui_setting_text_gl_content_get(void *data, Evas_Object *obj, const char *p check = elm_check_add(obj); settingData->list.text_msg.req_delivery_rep_check = check; - if (settingData->msg_setting.sms_send_opt.option.smsSendOpt.bDeliveryReport == EINA_TRUE) + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMS_SEND; + msg_ui_setting_msg_get_config(settingData); + msg_get_bool_value(settingData->msg_setting.setting_opt, MSG_SMS_SENDOPT_DELIVERY_REPORT_BOOL, &bReport); + + if (bReport == true) elm_check_state_set(check, EINA_TRUE); else elm_check_state_set(check, EINA_FALSE); @@ -158,6 +184,9 @@ __msg_ui_setting_text_gl_sel(void *data, Evas_Object *obj, void *event_info) elm_check_state_set(settingData->list.text_msg.req_delivery_rep_check, !set_val); __msg_ui_setting_text_save_req_delivery_report((void *)settingData); + } else if (index == MSG_UI_SETTING_TEXT_MENU_SMSC) { + if (text_menu_its[index].func != NULL) + text_menu_its[index].func(settingData, obj, event_info); } else { MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid data : index = %d", index); } @@ -171,6 +200,7 @@ __msg_ui_setting_text_create_menu(Evas_Object *parent, PMSG_SETTING_DATA setting MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); Evas_Object *text_genlist; + Elm_Object_Item *it = NULL; int index = 0; @@ -179,6 +209,12 @@ __msg_ui_setting_text_create_menu(Evas_Object *parent, PMSG_SETTING_DATA setting msg_ui_setting_common_append_genlist_separator(text_genlist, settingData); + settingData->list.text_msg.text_2line_itc.item_style = "dialogue/2text.3"; + settingData->list.text_msg.text_2line_itc.func.text_get = __msg_ui_setting_text_gl_text_get; + settingData->list.text_msg.text_2line_itc.func.content_get = NULL; + settingData->list.text_msg.text_2line_itc.func.state_get = NULL; + settingData->list.text_msg.text_2line_itc.func.del = NULL; + settingData->list.text_msg.text_1line_1icon_itc.item_style = "dialogue/1text.1icon"; settingData->list.text_msg.text_1line_1icon_itc.func.text_get = __msg_ui_setting_text_gl_text_get; settingData->list.text_msg.text_1line_1icon_itc.func.content_get = __msg_ui_setting_text_gl_content_get; @@ -186,8 +222,15 @@ __msg_ui_setting_text_create_menu(Evas_Object *parent, PMSG_SETTING_DATA setting settingData->list.text_msg.text_1line_1icon_itc.func.del = NULL; for (index = 0; text_menu_its[index].name; index++) { - elm_genlist_item_append(text_genlist, &settingData->list.text_msg.text_1line_1icon_itc, (void *)index, - NULL, text_menu_its[index].type, __msg_ui_setting_text_gl_sel, (void *)index); + if (index == MSG_UI_SETTING_TEXT_MENU_SMSC) { + it = elm_genlist_item_append(text_genlist, &settingData->list.text_msg.text_2line_itc, + (void *)index, NULL, text_menu_its[index].type, + __msg_ui_setting_text_gl_sel, (void *)index); + settingData->list.text_msg.service_centre_item = it; + } else { + elm_genlist_item_append(text_genlist, &settingData->list.text_msg.text_1line_1icon_itc, (void *)index, + NULL, text_menu_its[index].type, __msg_ui_setting_text_gl_sel, (void *)index); + } } MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); @@ -203,9 +246,6 @@ void msg_ui_setting_text_create_view(void *data, Evas_Object *obj, void *event_i Evas_Object *text_genlist; Elm_Object_Item *navi_it; - settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMS_SEND; - msg_ui_setting_msg_get_config(settingData); - /* Initialize global variable. */ memset(&settingData->list.text_msg, 0x0, sizeof(settingData->list.text_msg)); diff --git a/setting/src/text/msg-ui-setting-text-service-center.c b/setting/src/text/msg-ui-setting-text-service-center.c new file mode 100755 index 0000000..29584b8 --- /dev/null +++ b/setting/src/text/msg-ui-setting-text-service-center.c @@ -0,0 +1,601 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "msg-ui-setting-text-message.h" + + +static struct _msg_ui_setting_mixed_list_item smsc_menu_its[] = { + { 1, "IDS_MSGF_BODY_PUSHADDRESS", NULL, ELM_GENLIST_ITEM_NONE }, + { 1, "Editfield", NULL, ELM_GENLIST_ITEM_NONE }, + /* do not delete below */ + { 1, NULL, NULL, ELM_GENLIST_ITEM_NONE } +}; + + +/*============================================================================ + STATIC FUNCTION DEFINE +=============================================================================*/ +static char *__msg_ui_setting_smsc_gl_text_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object *__msg_ui_setting_smsc_gl_content_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object *__msg_ui_setting_text_create_smsc_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData); +static Eina_Bool __msg_ui_setting_smsc_is_changed(void *data); +static void __msg_ui_setting_smsc_done_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_smsc_cancel_btn_cb(void *data, Evas_Object *obj, void *event_info); + +static void __msg_ui_setting_text_save_service_centre(void *data); +static char *__msg_ui_setting_text_service_centre_gl_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_text_service_centre_radio_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_setting_text_service_centre_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_setting_text_service_centre_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_setting_text_service_centre_gl_sel(void *data, Evas_Object *obj, void *event_info); + + +/*============================================================================ + FUNCTION IMPLEMENT +=============================================================================*/ + +/****************** + *** SMSC menu *** + *******************/ + +static void +__msg_ui_setting_smsc_entry_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *layout = (Evas_Object *)data; + + if (elm_object_focus_get(layout)) { + if (elm_entry_is_empty(obj)) + elm_object_signal_emit(data, "elm,state,eraser,hide", "elm"); + else + elm_object_signal_emit(data, "elm,state,eraser,show", "elm"); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void +__msg_ui_setting_smsc_entry_focus_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *layout = (Evas_Object *)data; + + if (!elm_entry_is_empty(obj)) + elm_object_signal_emit(layout, "elm,state,eraser,show", "elm"); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void +__msg_ui_setting_smsc_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *layout = (Evas_Object *)data; + + elm_object_signal_emit(layout, "elm,state,eraser,hide", "elm"); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void +__msg_ui_setting_smsc_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *entry = (Evas_Object *)data; + + elm_entry_entry_set(entry, ""); + elm_object_signal_emit(obj, "elm,state,eraser,hide", "elm"); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static char * +__msg_ui_setting_smsc_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + if (smsc_menu_its[index].name) { + if (strstr(smsc_menu_its[index].name, "IDS_COM") != NULL) + return strdup(dgettext("sys_string", smsc_menu_its[index].name)); + else + return strdup(dgettext(MESSAGE_PKGNAME, smsc_menu_its[index].name)); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static Evas_Object * +__msg_ui_setting_smsc_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + + int center_index = settingData->list.text_msg.center_index; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) { + if (index == MSG_UI_SETTING_SMSC_MENU_ADDRESS) { + Evas_Object *smsc_addr_ly; + Evas_Object *smsc_addr_entry; + char *buf = NULL; + char address[SMSC_NAME_MAX+1] = {0,}; + + static Elm_Entry_Filter_Limit_Size smsc_addr_limit_filter_data; + static Elm_Entry_Filter_Accept_Set smsc_addr_accept_filter_data; + + smsc_addr_ly = elm_layout_add(obj); + elm_layout_theme_set(smsc_addr_ly, "layout", "editfield", "default"); + + smsc_addr_entry = elm_entry_add(smsc_addr_ly); + elm_entry_single_line_set(smsc_addr_entry, EINA_TRUE); + elm_entry_autocapital_type_set(smsc_addr_entry, ELM_AUTOCAPITAL_TYPE_NONE); + elm_entry_input_panel_layout_set(smsc_addr_entry, ELM_INPUT_PANEL_LAYOUT_PHONENUMBER); + settingData->list.text_msg.smsc_addr_entry = smsc_addr_entry; + + evas_object_smart_callback_add(smsc_addr_entry, "changed", __msg_ui_setting_smsc_entry_changed_cb, (void *)smsc_addr_ly); + evas_object_smart_callback_add(smsc_addr_entry, "focused", __msg_ui_setting_smsc_entry_focus_cb, (void *)smsc_addr_ly); + evas_object_smart_callback_add(smsc_addr_entry, "unfocused", __msg_ui_setting_smsc_entry_unfocus_cb, (void *)smsc_addr_ly); + elm_object_signal_callback_add(smsc_addr_ly, "elm,eraser,clicked", "elm", __msg_ui_setting_smsc_eraser_clicked_cb, (void *)smsc_addr_entry); + + /* Before giving focus to the entry object, the entry object should be shown. */ + evas_object_show(smsc_addr_entry); + elm_object_part_content_set(smsc_addr_ly, "elm.swallow.content", smsc_addr_entry); + + smsc_addr_limit_filter_data.max_char_count = 0; + smsc_addr_limit_filter_data.max_byte_count = MAX_SMSC_ADDR_LEN; + elm_entry_markup_filter_append(smsc_addr_entry, elm_entry_filter_limit_size, &smsc_addr_limit_filter_data); + + /* If '*', '#', 'P' are inputted, it will be ignored. */ + smsc_addr_accept_filter_data.accepted = "+0123456789"; + smsc_addr_accept_filter_data.rejected = NULL; + elm_entry_markup_filter_append(smsc_addr_entry, elm_entry_filter_accept_set, &smsc_addr_accept_filter_data); + elm_entry_cnp_mode_set(smsc_addr_entry, ELM_CNP_MODE_PLAINTEXT); + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST; + msg_ui_setting_msg_get_config(settingData); + msg_get_list_handle(settingData->msg_setting.setting_opt, MSG_SMSC_LIST_STRUCT, (void **)&(settingData->msg_setting.smsc_list)); + msg_get_str_value(settingData->msg_setting.smsc_list->msg_struct_info[center_index], MSG_SMSC_ADDR_STR, address, SMSC_ADDR_MAX); + if (strlen(address) > 0) { + buf = elm_entry_utf8_to_markup(address); + elm_entry_entry_set(smsc_addr_entry, buf); + + if (buf != NULL) + free(buf); + } + + if (settingData->list.text_msg.smsc_addr_entry != NULL) + elm_object_focus_set(settingData->list.text_msg.smsc_addr_entry, EINA_TRUE); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + + return smsc_addr_ly; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Nothing to do."); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static Evas_Object * +__msg_ui_setting_text_create_smsc_menu(Evas_Object *parent, PMSG_SETTING_DATA settingData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !settingData, NULL); + + Evas_Object *smsc_genlist; + int index = 0; + + smsc_genlist = msg_ui_setting_common_create_genlist(parent); + settingData->list.text_msg.smsc_genlist = smsc_genlist; + + settingData->list.text_msg.smsc_title_itc.item_style = "dialogue/title"; + settingData->list.text_msg.smsc_title_itc.func.text_get = __msg_ui_setting_smsc_gl_text_get; + settingData->list.text_msg.smsc_title_itc.func.content_get = NULL; + settingData->list.text_msg.smsc_title_itc.func.state_get = NULL; + settingData->list.text_msg.smsc_title_itc.func.del = NULL; + + settingData->list.text_msg.smsc_1icon_itc.item_style = "dialogue/1icon"; + settingData->list.text_msg.smsc_1icon_itc.func.text_get = NULL; + settingData->list.text_msg.smsc_1icon_itc.func.content_get = __msg_ui_setting_smsc_gl_content_get; + settingData->list.text_msg.smsc_1icon_itc.func.state_get = NULL; + settingData->list.text_msg.smsc_1icon_itc.func.del = NULL; + + for (index = 0; smsc_menu_its[index].name; index++) { + if (index == MSG_UI_SETTING_SMSC_MENU_ADDRESS_TITLE) { + elm_genlist_item_append(smsc_genlist, &settingData->list.text_msg.smsc_title_itc, + (void *)index, NULL, smsc_menu_its[index].type, + NULL, (void *)index); + } else if (index == MSG_UI_SETTING_SMSC_MENU_ADDRESS) { + elm_genlist_item_append(smsc_genlist, &settingData->list.text_msg.smsc_1icon_itc, + (void *)index, NULL, smsc_menu_its[index].type, + NULL, (void *)index); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid index = %d", index); + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return smsc_genlist; +} + +static Eina_Bool +__msg_ui_setting_smsc_is_changed(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + char *addr_buf = NULL; + int index = 0; + char address[SMSC_NAME_MAX+1] = {0,}; + + index = settingData->list.text_msg.center_index; + + addr_buf = elm_entry_markup_to_utf8(elm_entry_entry_get(settingData->list.text_msg.smsc_addr_entry)); + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST; + msg_ui_setting_msg_get_config(settingData); + msg_get_list_handle(settingData->msg_setting.setting_opt, MSG_SMSC_LIST_STRUCT, (void **)&(settingData->msg_setting.smsc_list)); + msg_get_str_value(settingData->msg_setting.smsc_list->msg_struct_info[index], MSG_SMSC_ADDR_STR, address, SMSC_ADDR_MAX); + msg_release_struct(&(settingData->msg_setting.setting_opt)); + + /* It will check whether value is changed or not. */ + if (addr_buf != NULL) { + if (strcmp(addr_buf, address) != 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is different."); + return EINA_TRUE; + } + } + + return EINA_FALSE; +} + +static void +__msg_ui_setting_smsc_done_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + char *addr_buf = NULL; + int index, ret; + char address[SMSC_NAME_MAX+1] = {0,}; + + index = settingData->list.text_msg.center_index; + + addr_buf = elm_entry_markup_to_utf8(elm_entry_entry_get(settingData->list.text_msg.smsc_addr_entry)); + if (!addr_buf || strlen(addr_buf) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "No value"); + goto smsc_exit; + } + + if (__msg_ui_setting_smsc_is_changed(settingData) != EINA_TRUE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Nothing is changed."); + goto smsc_exit; + } + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST; + msg_ui_setting_msg_get_config(settingData); + msg_get_list_handle(settingData->msg_setting.setting_opt, MSG_SMSC_LIST_STRUCT, (void **)&(settingData->msg_setting.smsc_list)); + msg_get_str_value(settingData->msg_setting.smsc_list->msg_struct_info[index], MSG_SMSC_ADDR_STR, address, SMSC_ADDR_MAX); + + strncpy(address, addr_buf, SMSC_ADDR_MAX); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMSC Addr = %s", address); + + ret = msg_ui_setting_msg_set_config(settingData); + + if (ret == 0) { + /* Update smsc_all_genlist */ + elm_genlist_realized_items_update(settingData->list.text_msg.smsc_all_genlist); + + /* Update text message genlist. */ + elm_genlist_item_update(settingData->list.text_msg.service_centre_item); + } + +smsc_exit: + if (addr_buf != NULL) + free(addr_buf); + + elm_naviframe_item_pop(settingData->navi_frame); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void +__msg_ui_setting_smsc_cancel_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + elm_naviframe_item_pop(settingData->navi_frame); +} + +void msg_ui_setting_service_center_selected_main(void *data, int index) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Evas_Object *center_layout; + Evas_Object *smsc_genlist; + Evas_Object *title_left_btn; + Evas_Object *title_right_btn; + + Elm_Object_Item *navi_it; + + char title[DEF_BUF_LEN_S] = {0, }; + + settingData->list.text_msg.center_index = index; + + center_layout = msg_ui_setting_common_create_layout(settingData->navi_frame); + + smsc_genlist = __msg_ui_setting_text_create_smsc_menu(settingData->navi_frame, settingData); + elm_object_part_content_set(center_layout, "elm.swallow.content", smsc_genlist); + + snprintf(title, sizeof(title), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CENTRE_PD"), index+1); + + navi_it = elm_naviframe_item_push(settingData->navi_frame, title, NULL, NULL, center_layout, NULL); + + /* Create title button. */ + title_left_btn = msg_ui_setting_common_create_title_btn(settingData->navi_frame, \ + dgettext("sys_string", "IDS_COM_SK_DONE"), \ + __msg_ui_setting_smsc_done_btn_cb, settingData); + elm_object_item_part_content_set(navi_it, "title_left_btn", title_left_btn); + + title_right_btn = msg_ui_setting_common_create_title_btn(settingData->navi_frame, \ + dgettext("sys_string", "IDS_COM_SK_CANCEL"), \ + __msg_ui_setting_smsc_cancel_btn_cb, settingData); + elm_object_item_part_content_set(navi_it, "title_right_btn", title_right_btn); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + + +/*********************** + *** Service centre list *** + ***********************/ + +static void +__msg_ui_setting_text_save_service_centre(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + int selection; + msg_error_t err = MSG_SUCCESS; + + selection = elm_radio_value_get(settingData->list.text_msg.service_centre_radio_group); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected value is %d", selection); + + /* Save selected value. */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST; + msg_ui_setting_msg_get_config(settingData); + msg_set_int_value(settingData->msg_setting.setting_opt, MSG_SMSC_SELECTED_ID_INT, selection); + + err = msg_ui_setting_msg_set_config(settingData); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_setting_msg_set_config(service centre) is %d", err); + +} + +static char * +__msg_ui_setting_text_service_centre_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int index = (int)data; + char smsc_name[MAX_SMSC_NAME_LEN + 1] = {0, }; + + if (!strcmp(part, "elm.text") || !strcmp(part, "elm.text.1")) { + snprintf(smsc_name, sizeof(smsc_name), dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CENTRE_PD"), index+1); + return strdup(smsc_name); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void +__msg_ui_setting_text_service_centre_radio_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + __msg_ui_setting_text_save_service_centre(data); + + elm_genlist_item_update(settingData->list.text_msg.service_centre_item); +} + +static void +__msg_ui_setting_text_service_centre_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int index = (int)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + msg_ui_setting_service_center_selected_main(settingData, index); + +} + +static Evas_Object * +__msg_ui_setting_text_service_centre_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *radio; + Evas_Object *button; + + PMSG_SETTING_DATA settingData = msg_ui_setting_get_data(); + int index = (int)data; + int selected = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.icon.1")) { + radio = elm_radio_add(obj); + elm_radio_state_value_set(radio, index); + evas_object_propagate_events_set(radio, EINA_FALSE); + evas_object_smart_callback_add(radio, "changed", __msg_ui_setting_text_service_centre_radio_cb, (void *)settingData); + + if (index == 0) + settingData->list.text_msg.service_centre_radio_group = radio; + else + elm_radio_group_add(radio, settingData->list.text_msg.service_centre_radio_group); + + /* Radio value should be updated when user back from service centre setting. + * If it is omitted, radio will be set to first item. + */ + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST; + msg_ui_setting_msg_get_config(settingData); + msg_get_int_value(settingData->msg_setting.setting_opt, MSG_SMSC_SELECTED_ID_INT, &selected); + if (index == selected) + elm_radio_value_set(settingData->list.text_msg.service_centre_radio_group, index); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + + return radio; + } else if (!strcmp(part, "elm.icon.2")) { + button = elm_button_add(obj); + settingData->list.text_msg.service_centre_btn_reveal = button; + elm_object_style_set(button, "reveal"); + + evas_object_propagate_events_set(button, EINA_FALSE); + evas_object_smart_callback_add(button, "clicked", __msg_ui_setting_text_service_centre_btn_clicked_cb, (void *)index); + return button; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + } + + return NULL; +} + +static void +__msg_ui_setting_text_service_centre_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_SETTING_DATA settingData = NULL; + int index = (int)data; + + settingData = msg_ui_setting_get_data(); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, settingData == NULL, "PMSG_THREAD_DATA is NULL"); + + elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE); + + /* Change radio selection. */ + elm_radio_value_set(settingData->list.text_msg.service_centre_radio_group, index); + + __msg_ui_setting_text_save_service_centre((void *)settingData); + + elm_genlist_item_update(settingData->list.text_msg.service_centre_item); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return; +} + + +void msg_ui_setting_create_service_center_list(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_SETTING_DATA settingData = (PMSG_SETTING_DATA)data; + + Evas_Object *smsc_layout; + Evas_Object *smsc_all_genlist; + + Elm_Object_Item *navi_it; + + int smsc_cnt; + int selected_smsc; + + int index = 0; + + /* SIM status check */ + if(msg_common_is_sim_inserted() == FALSE) { + msg_ui_setting_common_show_notify(settingData, dgettext(MESSAGE_PKGNAME, "SIM not inserted")); + return; + } + + smsc_layout = msg_ui_setting_common_create_layout(settingData->navi_frame); + + smsc_all_genlist = msg_ui_setting_common_create_genlist(smsc_layout); + settingData->list.text_msg.smsc_all_genlist = smsc_all_genlist; + elm_object_part_content_set(smsc_layout, "elm.swallow.content", smsc_all_genlist); + + msg_ui_setting_common_append_genlist_separator(smsc_all_genlist, settingData); + + settingData->msg_setting.type = MSG_UI_SETTING_TYPE_SMSC_LIST; + msg_ui_setting_msg_get_config(settingData); + msg_get_list_handle(settingData->msg_setting.setting_opt, MSG_SMSC_LIST_STRUCT, (void **)&(settingData->msg_setting.smsc_list)); + msg_get_int_value(settingData->msg_setting.setting_opt, MSG_SMSC_SELECTED_ID_INT, &selected_smsc); + smsc_cnt = settingData->msg_setting.smsc_list->nCount; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "smsc_cnt = %d, selected_smsc = %d", smsc_cnt, selected_smsc); + + if (smsc_cnt <= 0 || smsc_cnt > MAX_SMSC_LIST) + smsc_cnt = MAX_SMSC_LIST; + + settingData->list.text_msg.text_1line_2icon_itc.item_style = "dialogue/1text.2icon"; + settingData->list.text_msg.text_1line_2icon_itc.func.text_get = __msg_ui_setting_text_service_centre_gl_text_get; + settingData->list.text_msg.text_1line_2icon_itc.func.content_get = __msg_ui_setting_text_service_centre_gl_content_get; + settingData->list.text_msg.text_1line_2icon_itc.func.state_get = NULL; + settingData->list.text_msg.text_1line_2icon_itc.func.del = NULL; + + for (index = 0; index < smsc_cnt; index++) { + elm_genlist_item_append(settingData->list.text_msg.smsc_all_genlist, + &settingData->list.text_msg.text_1line_2icon_itc, + (void *)index, NULL, ELM_GENLIST_ITEM_NONE, + __msg_ui_setting_text_service_centre_gl_sel, (void *)index); + } + + elm_radio_value_set(settingData->list.text_msg.service_centre_radio_group, selected_smsc); + + navi_it = elm_naviframe_item_push(settingData->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SERVICECENTRE"), NULL, NULL, smsc_layout, NULL); + + msg_release_struct(&(settingData->msg_setting.setting_opt)); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + diff --git a/thread/include/msg-ui-thread-main.h b/thread/include/msg-ui-thread-main.h index b37a8e4..1245b02 100755 --- a/thread/include/msg-ui-thread-main.h +++ b/thread/include/msg-ui-thread-main.h @@ -18,19 +18,16 @@ #define __DEF_MSG_UI_THREAD_MAIN_H__ #include <stdio.h> - -#include <MsgStorageTypes.h> -#include <MapiTransport.h> -#include <MapiControl.h> -#include <MapiStorage.h> -#include <MapiMessage.h> +#include <msg.h> +#include <msg_storage.h> +#include <msg_transport.h> #include <libintl.h> #include <bundle.h> -#include <appcore-efl.h> #include <Ecore.h> #include <Ecore_IMF.h> #include <Elementary.h> +#include <aul.h> #include <ui-gadget-module.h> #include <utilX.h> #include <time.h> @@ -42,151 +39,247 @@ #define MSG_THREAD_THEME EDJDIR"/thread_genlist.edj" #define MSG_THREAD_CONTROLBAR_ITEM_NUM (4) +#define MSG_THREAD_DELETE_NOTI_TIME 1.5 +#define MSG_THREAD_LIST_MAX_COUNT 10 +#define MSG_THREAD_LIST_LAUNCH_LOAD_MAX_CNT 20 + + +typedef struct _MSG_THREAD_LIST_DATA MSG_THREAD_LIST_DATA, *PMSG_THREAD_LIST_DATA; +typedef struct _MSG_APP_THREAD_DATA_S MSG_APP_THREAD_DATA_S, *PMSG_APP_THREAD_DATA_S; +typedef struct _MSG_APP_THREAD_MSG_DATA_S MSG_APP_THREAD_MSG_DATA_S, *PMSG_APP_THREAD_MSG_DATA_S; +typedef struct _MSG_APP_THREAD_DATELINE_DATA_S MSG_APP_THREAD_DATELINE_DATA_S, *PMSG_APP_THREAD_DATELINE_DATA_S; +typedef struct _THREAD_MORE_VIEW_DATA THREAD_MORE_VIEW_DATA, *PTHREAD_MORE_VIEW_DATA; typedef enum { THREAD_NORMAL_VIEW = 0, - THREAD_EDIT_VIEW, + THREAD_EDIT_VIEW, /** Edit viw mode*/ THREAD_UNLOAD_VIEW, /* when it calls other gadgets or views. */ } ThreadViewMode; typedef enum { + THREAD_NORMAL_LIST_TYPE, /** Normal converstaion THREAD list */ + THREAD_SPAM_LIST_TYPE, /** <More - spam messages list> */ + THREAD_SIM_LIST_TYPE, /** <More -Sim messages list> */ + THREAD_CBMSG_LIST_TYPE, /** <More -CB Message list> */ + THREAD_DRAFT_LIST_TYPE, /** <More -Draft Message list> */ + THREAD_LOCKED_LIST_TYPE, /** <More -Locked Message list> */ + THREAD_SCHEDULED_LIST_TYPE, /** <More -Scheduled Message list> */ +} ThreadMsgListType; + +typedef enum { + THREAD_LIST_APP_DATA_THREAD = 0, + THREAD_LIST_APP_DATA_MSG, +} ThreadMsgListAppDataType; + +typedef enum { THREAD_SEARCH_OFF = 0, THREAD_SEARCH_ON, } ThreadSearchMode; -typedef struct { - MSG_THREAD_ID_T threadId; - char threadAddr[DEF_THREAD_ADDR_LEN+1]; - char threadName[DEF_THREAD_NAME_LEN+1]; - char threadData[DEF_BUF_LEN_S+1]; - time_t *threadTime; - MSG_DIRECTION_TYPE_T direction; - MSG_CONTACT_ID_T contactId; - int unreadCnt; - int smsCnt; - int msgType; - - Evas_Object *chk; - Eina_Bool isCheck; -} MSG_APP_THREAD_DATA_S, *PMSG_APP_THREAD_DATA_S; +typedef enum { + THREAD_ITC_EMPTY = 0, + THREAD_ITC_SEARCH, + THREAD_ITC_SEARCH_UNREAD, + THREAD_ITC_BLANK, + THREAD_ITC_POPUP, + THREAD_ITC_DATE, +} ThreadItcType; + + +enum { + THREAD_ROTATE_ANGLE_PORTRAIT = 0, + THREAD_ROTATE_ANGLE_PORTRAIT_UPSIDEDOWN = 180, + THREAD_ROTATE_ANGLE_LANDSCAPE = 270, + THREAD_ROTATE_ANGLE_LANDSCAPE_UPSIDEDOWN = 90, + THREAD_ROTATE_ANGLE_UNKNOWN = -1, +}; typedef struct _MSG_THREAD_DATA { - Elm_Theme *th; + msg_handle_t msgHandle; + int app_state; + + Elm_Theme *th; Evas_Object *win_main; Evas_Object *navi_frame; + + Elm_Genlist_Item_Class itc_empty; + Elm_Genlist_Item_Class itc_search; + Elm_Genlist_Item_Class itc_search_unread; + Elm_Genlist_Item_Class itc_blank; + Elm_Genlist_Item_Class itc_popup; + Elm_Genlist_Item_Class itc_date; + + char *time_12h_ptn; + char *time_24h_ptn; + char *date_ptn; + msg_time_format time_fmt; + char locale[DEF_BUF_LEN]; + int noti_fd; + + bool isRotate; /* Rotation state */ + bool isIncomingMsg; /* Check there is new incoming message when it back from edit mode to normal. */ + + PMSG_THREAD_LIST_DATA list_data[MSG_THREAD_LIST_MAX_COUNT]; + +} MSG_THREAD_DATA, *PMSG_THREAD_DATA; + +typedef struct _MSG_THREAD_LIST_DATA { + + Evas_Object *genlist; Evas_Object *conform; - Elm_Object_Item *nf_it; - Evas_Object *toolbar; Evas_Object *content_ly; Evas_Object *noc_ly; - Evas_Object *sel_all_ly; + Elm_Object_Item *nf_it; //title, control bar naviframe item + Evas_Object *toolbar; + Elm_Object_Item *toolbar_item[MSG_THREAD_CONTROLBAR_ITEM_NUM]; Evas_Object *back_btn; + Evas_Object *searchbar; + Ecore_Timer *search_timer; - Evas_Object *sel_all_box; - Eina_Bool sel_all_checked; + Elm_Genlist_Item_Class itc_default; + Elm_Genlist_Item_Class itc_unread; - Ecore_IMF_Context *imf_ctx; + ThreadViewMode view_mode; + ThreadMsgListType list_type; + ThreadMsgListAppDataType app_data_type; + ThreadSearchMode search_mode; - Elm_Object_Item *toolbar_item[MSG_THREAD_CONTROLBAR_ITEM_NUM]; + Elm_Object_Item *sel_gen_item; + int sel_thread_id; + int sel_msg_id; - Evas_Object *genlist; - Evas_Object *noc; + struct ug_cbs cbs; + ui_gadget_h loaded_ug; - Evas_Object *searchbar; + Evas_Object *select_info; //%d item selected + Evas_Object *delete_info; //deleted + Evas_Object *selectioninfo_layout; - Evas_Object *tickernoti; - Ecore_Timer *e_timer; + Evas_Object *sel_all_ly; + Evas_Object *sel_all_box; + Eina_Bool sel_all_checked; + Eina_List *chk_list; + Ecore_Thread *del_thread; + int del_index; + int item_cnt; + int check_cnt; Evas_Object *popup; Evas_Object *progressbar; Evas_Object *progresslabel; - Evas_Object *select_info; - Evas_Object *selectioninfo_layout; - - Elm_Genlist_Item_Class *itc; - - Elm_Genlist_Item_Class itc_thread; - Elm_Genlist_Item_Class itc_empty; - - MSG_HANDLE_T msgHandle; - ThreadViewMode viewmode; - ThreadSearchMode search_mode; - int app_state; + Ecore_Idler *launch_idler; + int loaded_cnt; +} _MSG_THREAD_LIST_DATA; + +typedef struct _MSG_APP_THREAD_DATA_S { + msg_thread_id_t thread_id; + char thread_name[DEF_THREAD_NAME_LEN+1]; + char thread_data[DEF_BUF_LEN_S+1]; + time_t *thread_time; + msg_direction_type_t direction; + int unread_cnt; + int sms_cnt; + int mms_cnt; + int msg_type; - Elm_Object_Item *sel_gen_item; - int sel_thread_id; + Evas_Object *chk; + Eina_Bool is_check; +} _MSG_APP_THREAD_DATA_S; - Ecore_Thread *del_thread; +typedef struct _MSG_APP_THREAD_MSG_DATA_S { + int msg_id; + int msg_type; + bool is_read; + msg_contact_id_t contact_id; - bundle *msg_b; + char display_name[MAX_DISPLAY_NAME_LEN]; + char address[MAX_ADDRESS_VAL_LEN+1]; + char msg_body[MAX_MSG_TEXT_LEN+1]; + time_t *msg_time; - char *time_12h_ptn; - char *time_24h_ptn; - char *date_ptn; - msg_time_format time_fmt; - char locale[DEF_BUF_LEN]; - int noti_fd; + Evas_Object *chk; + Eina_Bool is_check; +} _MSG_APP_THREAD_MSG_DATA_S; - Eina_List *chk_list; - int del_index; - int thread_cnt; - int check_cnt; +typedef struct _MSG_APP_THREAD_DATELINE_DATA_S { + Elm_Object_Item *date_it; + time_t *thread_time; + int subitem_cnt; +} _MSG_APP_THREAD_DATELINE_DATA_S; - bool isIncomingMsg; /* Check there is new incoming message when it back from edit mode to normal. */ -} MSG_THREAD_DATA, *PMSG_THREAD_DATA; -/* MAIN */ -#define MSG_THREAD_UNREAD_BADGE \ - IMGDIR"/M01_btn_Unread_message.png" -#define MSG_THREAD_OTA_BADGE \ - IMGDIR"/M01_icon_OTA.png" -#define MSG_THREAD_PUSH_BADGE \ - IMGDIR"/M01_icon_Push.png" -#define MSG_THREAD_BROADCAST_BADGE \ - IMGDIR"/M01_icon_broadcasting.png" #define MSG_THREAD_POPUP_DATA "popup_data" #define MSG_THREAD_DEL_CONFIRM "del_confirm" + +PMSG_THREAD_DATA msg_ui_thread_get_data(void); +msg_handle_t msg_ui_thread_get_data_handle(void); +Elm_Genlist_Item_Class* msg_ui_thread_get_itc_type(ThreadItcType type); + void *msg_ui_thread_init_thread_data(struct appdata *ad); void msg_ui_thread_deinit_thread_data(void *data); -void msg_ui_thread_load_thread_view(void *data, bundle *b); -void msg_ui_thread_reset_thread_view(void *data, bundle *b); +PMSG_THREAD_LIST_DATA msg_ui_thread_create_thread_list_data(ThreadMsgListType list_type, ThreadMsgListAppDataType app_data_type); +void msg_ui_thread_destroy_thread_list_data(PMSG_THREAD_LIST_DATA pListData); +PMSG_THREAD_LIST_DATA msg_ui_thread_get_default_list(void); +PMSG_THREAD_LIST_DATA msg_ui_thread_get_current_list(void); +PMSG_THREAD_LIST_DATA msg_ui_thread_get_prev_list(PMSG_THREAD_LIST_DATA pListData); -void msg_ui_thread_fullview_launch(PMSG_THREAD_DATA pData); -Evas_Object *msg_ui_thread_create_content_layout(PMSG_THREAD_DATA pData); -Evas_Object *msg_ui_thread_create_nocontent_layout(PMSG_THREAD_DATA pData); -Evas_Object *msg_ui_thread_create_layout_main(Evas_Object *parent); -Evas_Object *msg_ui_thread_create_genlist(PMSG_THREAD_DATA pData); -Evas_Object *msg_ui_thread_create_searchbar_layout(PMSG_THREAD_DATA pDatat); +void msg_ui_thread_load_thread_view(void *data, service_h service); +void msg_ui_thread_load_message_box(int list_type); +void msg_ui_thread_reset_thread_view(void *data, service_h service); +void msg_ui_thread_rotation_set(void *data, int rot); -void msg_ui_thread_reg_msg_cb_func(PMSG_THREAD_DATA pData); +void msg_ui_thread_fullview_launch(PMSG_THREAD_DATA pData, PMSG_THREAD_LIST_DATA pListData); +Evas_Object *msg_ui_thread_create_content_layout(Evas_Object *parent); +Evas_Object *msg_ui_thread_create_nocontent_layout(Evas_Object *parent); +Evas_Object *msg_ui_thread_create_layout_main(PMSG_THREAD_DATA pData); +Evas_Object *msg_ui_thread_create_genlist(Evas_Object *parent, PMSG_THREAD_LIST_DATA pListData); +Evas_Object *msg_ui_thread_create_searchbar_layout(Evas_Object *parent, PMSG_THREAD_LIST_DATA pListData); -PMSG_THREAD_DATA msg_ui_thread_get_data(void); -void msg_ui_thread_add_navi_controlbar_item(PMSG_THREAD_DATA pData); +void msg_ui_thread_reg_msg_cb_func(PMSG_THREAD_DATA pData); +Evas_Object *msg_ui_thread_create_toolbar(Evas_Object *parent); +void msg_ui_thread_set_navi_controlbar_item(PMSG_THREAD_LIST_DATA pListData); /* THREAD LIST */ -void msg_ui_thread_set_msg_data(PMSG_APP_THREAD_DATA_S thread_data, msg_thread_view_t msgThreadInfo); -void msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_info); +void msg_ui_thread_set_thread_data(PMSG_THREAD_LIST_DATA pListData, PMSG_APP_THREAD_DATA_S thread_data, msg_struct_t msgThreadInfo); +void msg_ui_thread_set_msg_data(PMSG_APP_THREAD_MSG_DATA_S msg_data, msg_struct_t msgInfo); +char *msg_ui_thread_msg_gl_text_get(void *data, Evas_Object *obj, const char *part); +char *msg_ui_thread_search_msg_gl_text_get(void *data, Evas_Object *obj, const char *part); +Evas_Object *msg_ui_thread_msg_gl_content_get(void *data, Evas_Object *obj, const char *part); +void msg_ui_thread_msg_gl_del(void *data, Evas_Object *obj); +void msg_ui_thread_msg_gl_sel(void *data, Evas_Object *obj, void *event_info); +char *msg_ui_thread_gl_empty_get(void *data, Evas_Object *obj, const char *part); void msg_ui_thread_gl_empty_sel(void *data, Evas_Object *obj, void *event_info); -void msg_ui_thread_list_load(PMSG_THREAD_DATA ThreadData); -void msg_ui_thread_list_update(PMSG_THREAD_DATA ThreadData); -void msg_ui_thread_list_item_update(PMSG_THREAD_DATA ThreadData, MSG_THREAD_ID_T threadId); -void msg_ui_thread_genlist_style_set(PMSG_THREAD_DATA ThreadData); -void msg_ui_thread_genlist_frame_style_set(PMSG_THREAD_DATA ThreadData); -void msg_ui_thread_gl_mode_right(void *data, Evas_Object *obj, void *event_info); -void msg_ui_thread_gl_mode_left(void *data, Evas_Object *obj, void *event_info); +char *msg_ui_thread_date_gl_text_get(void *data, Evas_Object *obj, const char *part); +void msg_ui_thread_date_gl_del(void *data, Evas_Object *obj); +PMSG_APP_THREAD_DATELINE_DATA_S msg_ui_thread_list_insert_dateline(PMSG_THREAD_LIST_DATA pListData, time_t* cur_time, time_t* prev_time); +void msg_ui_thread_list_load(PMSG_THREAD_LIST_DATA pListData, Eina_Bool bLaunch); +void msg_ui_thread_list_update(PMSG_THREAD_LIST_DATA pListData); +void msg_ui_thread_list_item_update(PMSG_THREAD_LIST_DATA pListData, msg_thread_id_t thread_id); +void msg_ui_thread_list_item_delete(PMSG_THREAD_LIST_DATA pListData, msg_thread_id_t thread_id); + +void msg_ui_thread_msg_list_load(PMSG_THREAD_LIST_DATA pListData, int listType); +void msg_ui_thread_list_msg_list_update(PMSG_THREAD_LIST_DATA pListData); +void msg_ui_thread_list_msg_item_delete(PMSG_THREAD_LIST_DATA pListData, msg_message_id_t msg_id); +void msg_ui_thread_list_msg_item_update(PMSG_THREAD_LIST_DATA pListData, msg_message_id_t msg_id); +Eina_Bool msg_ui_thread_search_msg_list_load(void *data); + +void msg_ui_thread_common_style_set(PMSG_THREAD_DATA pData); +void msg_ui_thread_genlist_style_set(PMSG_THREAD_LIST_DATA pListData); /* THREAD CALLBACK */ -void msg_ui_thread_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE_TYPE_T storageChangeType, MSG_MSGID_LIST_S *pMsgIdList, void *user_param); +void msg_ui_thread_storage_change_cb(msg_handle_t handle, msg_storage_change_type_t storageChangeType, msg_id_list_s *pMsgIdList, void *user_param); void msg_ui_thread_ctlbar_del_cb(void *data, Evas_Object *obj, void *event_info); -void msg_ui_thread_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_thread_ctlbar_checkbox_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_thread_ctlbar_spam_setting_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_thread_ctlbar_compose_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_thread_ctlbar_cancel_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_thread_ctlbar_message_box_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_thread_sel_all_clicked_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_thread_list_checked_cb(void *data, Evas_Object *obj, void *event_info); @@ -197,24 +290,36 @@ 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_cancel_click_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_thread_searchbar_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source); +void msg_ui_thread_sweep_btn_cb(void *data, Evas_Object *obj, void *event_info); void msg_ui_thread_timezone_change_cb(void *data); +void msg_ui_thread_gl_mode_right(void *data, Evas_Object *obj, void *event_info); +void msg_ui_thread_gl_mode_left(void *data, Evas_Object *obj, void *event_info); /* THREAD UTILS */ +int msg_ui_thread_launch_voice_call(const char *call_num); +int msg_ui_thread_launch_video_call(const char *call_num); +void msg_ui_thread_launch_spam_setting(PMSG_THREAD_LIST_DATA pListData); +void msg_ui_thread_launch_viewer_ug(PMSG_THREAD_LIST_DATA pListData, int nMsgId); +void msg_ui_thread_launch_msg_detail_view(PMSG_THREAD_LIST_DATA pListData, PMSG_APP_THREAD_MSG_DATA_S item_data); + void msg_ui_thread_get_time_format(PMSG_THREAD_DATA pData); void msg_ui_thread_get_locale(PMSG_THREAD_DATA pData); -bundle *msg_ui_thread_get_bubble_data(PMSG_APP_THREAD_DATA_S item_data); - -void msg_ui_thread_cancel_edit_mode(PMSG_THREAD_DATA pData); -void msg_ui_thread_show_normal_mode(PMSG_THREAD_DATA pData); -void msg_ui_thread_show_split_view(PMSG_THREAD_DATA pData); -void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_DATA pData, int thread_id); -void msg_ui_thread_show_notify(PMSG_THREAD_DATA threadData, const char *msg); -void msg_ui_thread_show_del_popup(PMSG_THREAD_DATA threadData, const char *msg); -Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_DATA threadData, int count); -void msg_ui_thread_show_select_info(PMSG_THREAD_DATA pData); +void msg_ui_thread_get_bubble_data(PMSG_APP_THREAD_DATA_S item_data, service_h svc_handle); +void msg_ui_thread_cancel_edit_mode(PMSG_THREAD_LIST_DATA pListData); +void msg_ui_thread_show_normal_mode(PMSG_THREAD_LIST_DATA pListData); +void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_LIST_DATA pListData, int thread_id); +void msg_ui_thread_select_item_by_msg_id(PMSG_THREAD_LIST_DATA pListData, int msg_id); +void msg_ui_thread_show_notify(PMSG_THREAD_LIST_DATA pListData, const char *msg); +void msg_ui_thread_show_del_popup(PMSG_THREAD_LIST_DATA pListData, const char *msg); +Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_LIST_DATA pListData, int count); +void msg_ui_thread_show_select_info(PMSG_THREAD_LIST_DATA pListData); +void msg_ui_thread_show_deleted_info(PMSG_THREAD_LIST_DATA pListData); void msg_ui_thread_set_app_state(int app_state); int msg_ui_thread_get_app_state(PMSG_THREAD_DATA pData); +const char *msg_ui_thread_make_search_result_string(const char *string, char *searchword, bool *result); +void msg_ui_thread_make_time_string(time_t *msg_t, char *buf, int buf_len); + #endif /* __DEF_MSG_UI_THREAD_MAIN_H__ */ diff --git a/thread/src/msg-ui-thread-callback.c b/thread/src/msg-ui-thread-callback.c index 3a2dc7d..0e408a8 100755 --- a/thread/src/msg-ui-thread-callback.c +++ b/thread/src/msg-ui-thread-callback.c @@ -14,139 +14,199 @@ * limitations under the License. */ + #include "msg-ui-thread-main.h" -static Eina_Bool _search_list_load(void *data); +static void __msg_ui_thread_insert_and_select_gen_item(PMSG_THREAD_LIST_DATA pListData); +static void __msg_ui_thread_add_navi_select_all_ly(PMSG_THREAD_LIST_DATA pListData); +static void __msg_ui_thread_sel_all_ly_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info); +static void __msg_ui_thread_del_finish(PMSG_THREAD_LIST_DATA pListData); +static void __msg_ui_thread_del_thread_fn(void *data, Ecore_Thread *thread); +static void __msg_ui_thread_del_thread_feedback_fn(void *data, Ecore_Thread *thread, void *msg_data); +static Eina_Bool __msg_ui_thread_searchbar_entry_timer_cb(void *data); + +static void __msg_ui_thread_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_thread_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_thread_addr_select_popup(PMSG_THREAD_LIST_DATA pListData, const char *title, int thread_id); +void __msg_ui_thread_popup_gl_sel(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_thread_close_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_thread_popup_gl_del(void *data, Evas_Object *obj); +static char *__msg_ui_thread_popup_gl_text_get(void *data, Evas_Object *obj, const char *part); -static void _sel_all_ly_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) +void msg_ui_thread_storage_change_cb(msg_handle_t handle, msg_storage_change_type_t type, msg_id_list_s *pMsgIdList, void *user_param) { MSG_UI_ENTER(); - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; - - pData->sel_all_checked = !pData->sel_all_checked; - elm_check_state_pointer_set(pData->sel_all_box, &pData->sel_all_checked); - - msg_ui_thread_sel_all_clicked_cb(data, NULL, NULL); - - MSG_UI_LEAVE(); -} + int i = 0; + if (!user_param || !pMsgIdList) + return; -static void __add_navi_edit_controlbar(PMSG_THREAD_DATA pData) -{ - MSG_UI_ENTER(); + PMSG_THREAD_DATA pData = user_param; + PMSG_THREAD_LIST_DATA pListData = NULL; - if (!pData) + if (msg_ui_thread_get_app_state(pData) == MSG_UI_STATE_DESTROY) return; - int i; + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "type is %d", type); - for (i = 0; i < MSG_THREAD_CONTROLBAR_ITEM_NUM; i++) { - if (pData->toolbar_item[i]) - elm_object_item_del(pData->toolbar_item[i]); + for (i = 0; i < MSG_THREAD_LIST_MAX_COUNT; i++) { + if (pData->list_data[i] != NULL) + pListData = pData->list_data[i]; + else + break; + + if (type == MSG_STORAGE_CHANGE_CONTACT) { + if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) + msg_ui_thread_list_update(pListData); + else + msg_ui_thread_list_msg_list_update(pListData); + } else if (type == MSG_STORAGE_CHANGE_INSERT) { + if (pListData->view_mode == THREAD_EDIT_VIEW) { + pData->isIncomingMsg = true; + D_MSG("Current mode is EDIT."); + return; + } + __msg_ui_thread_insert_and_select_gen_item(pListData); + } else if (type == MSG_STORAGE_CHANGE_DELETE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete count is %d", pMsgIdList->nCount); + if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG) { + for (i = 0; i < pMsgIdList->nCount; i++) { + msg_ui_thread_list_msg_item_delete(pListData, pMsgIdList->msgIdList[i]); + } + } + } else if (type == MSG_STORAGE_CHANGE_UPDATE) { + for (i = 0; i < pMsgIdList->nCount; i++) { + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + msg_error_t err = MSG_SUCCESS; + + err = msg_get_message(pData->msgHandle, pMsgIdList->msgIdList[i], msgInfo, sendOpt); + + if (err != MSG_SUCCESS) { + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } + + msg_folder_id_t folder_id = 0; + msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, (int *)&folder_id); + + if (folder_id != MSG_SPAMBOX_ID) { + if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) { + int thread_id = 0; + msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id); + msg_ui_thread_list_item_update(pListData, thread_id); + } else { + int msg_id = 0; + msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, &msg_id); + msg_ui_thread_list_msg_item_update(pListData, msg_id); + } + } + + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + } + } } - pData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \ - msg_ui_thread_ctlbar_del_cb, (void *)pData); - pData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL); - pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL); - pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_CANCEL, NULL, \ - msg_ui_thread_ctlbar_cancel_cb, (void *)pData); - elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); - elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); - elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE); - MSG_UI_LEAVE(); } -static void __add_navi_select_all_ly(PMSG_THREAD_DATA pData) +static void __msg_ui_thread_insert_and_select_gen_item(PMSG_THREAD_LIST_DATA pListData) { - if (!pData->sel_all_ly) { - pData->sel_all_ly = elm_layout_add(pData->navi_frame); - elm_layout_theme_set(pData->sel_all_ly, "genlist", "item", "select_all/default"); - evas_object_size_hint_weight_set(pData->sel_all_ly, EVAS_HINT_EXPAND, EVAS_HINT_FILL); - evas_object_size_hint_align_set(pData->sel_all_ly, EVAS_HINT_FILL, EVAS_HINT_FILL); - evas_object_event_callback_add(pData->sel_all_ly, EVAS_CALLBACK_MOUSE_DOWN, _sel_all_ly_mouse_down_cb, pData); + MSG_UI_ENTER(); - pData->sel_all_box = elm_check_add(pData->sel_all_ly); - elm_check_state_pointer_set(pData->sel_all_box, &pData->sel_all_checked); - evas_object_propagate_events_set(pData->sel_all_box, EINA_FALSE); - evas_object_smart_callback_add(pData->sel_all_box, "changed", msg_ui_thread_sel_all_clicked_cb, pData); - evas_object_show(pData->sel_all_box); + int sel_thread_id = 0, sel_msg_id = 0; - elm_object_part_content_set(pData->sel_all_ly, "elm.icon", pData->sel_all_box); - elm_object_part_text_set(pData->sel_all_ly, "elm.text", dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL")); + if (pListData->sel_gen_item) { + sel_thread_id = pListData->sel_thread_id; + sel_msg_id = pListData->sel_msg_id; } - evas_object_show(pData->sel_all_ly); - elm_object_part_content_unset(pData->content_ly, "sel_all"); - evas_object_hide(pData->searchbar); - elm_object_part_content_set(pData->content_ly, "sel_all", pData->sel_all_ly); + if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG) { + msg_ui_thread_search_msg_list_load(pListData); + msg_ui_thread_select_item_by_msg_id(pListData, sel_msg_id); + } else { + msg_ui_thread_list_load(pListData, FALSE); + msg_ui_thread_select_item_by_thread_id(pListData, sel_thread_id); + } + MSG_UI_LEAVE(); } -static void _del_finish(PMSG_THREAD_DATA ThreadData) + void msg_ui_thread_ctlbar_del_cb(void *data, Evas_Object *obj, void *event_info) { + D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); - if (ThreadData->popup) { - evas_object_del(ThreadData->popup); - ThreadData->popup = NULL; - } - - ThreadData->del_thread = NULL; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, pListData->del_thread); - msg_ui_thread_show_normal_mode(ThreadData); - msg_ui_thread_list_load(ThreadData); + if (pListData->popup) { + evas_object_del(pListData->popup); + pListData->popup = NULL; + } + pListData->popup = msg_ui_thread_show_notify_with_progressbar(pListData, pListData->check_cnt); + pListData->del_thread = ecore_thread_feedback_run(__msg_ui_thread_del_thread_fn, __msg_ui_thread_del_thread_feedback_fn, NULL, NULL, (void *)pListData, EINA_TRUE); } -static void _del_thread_feedback_fn(void *data, Ecore_Thread *thread, void *msg_data) +static void __msg_ui_thread_del_thread_feedback_fn(void *data, Ecore_Thread *thread, void *msg_data) { MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !thread || !data || !msg_data); - PMSG_THREAD_DATA ThreadData = (PMSG_THREAD_DATA)data; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; char buf[DEF_BUF_LEN_S] = {0,}; int *ret = msg_data; if (*ret == MSG_SUCCESS) { - if (ThreadData->progressbar) { - snprintf(buf, sizeof(buf), "%d/%d %s", ThreadData->del_index+1, ThreadData->check_cnt, dgettext("sys_string", "IDS_COM_POP_DELETED")); - elm_object_text_set(ThreadData->progresslabel, buf); - elm_progressbar_value_set(ThreadData->progressbar, (double)(ThreadData->del_index+1)/ThreadData->check_cnt); + if (pListData->progressbar) { + snprintf(buf, sizeof(buf), "%d/%d %s", pListData->del_index+1, pListData->check_cnt, dgettext("sys_string", "IDS_COM_POP_DELETED")); + elm_object_text_set(pListData->progresslabel, buf); + elm_progressbar_value_set(pListData->progressbar, (double)(pListData->del_index+1)/pListData->check_cnt); } } else { - msg_ui_thread_show_notify(ThreadData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE")); - _del_finish(ThreadData); + + /** __msg_ui_thread_del_finish function contains evas_object_del(thread_data->popup), */ + /** so, call __msg_ui_thread_del_finish() first, after that make "unable to delete" popup */ + __msg_ui_thread_del_finish(pListData); + msg_ui_thread_show_notify(pListData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE")); return; } - if (ThreadData->del_index + 1 == ThreadData->check_cnt) - _del_finish(ThreadData); - else - ThreadData->del_index++; + if (pListData->del_index + 1 == pListData->check_cnt) { + msg_ui_thread_show_deleted_info(pListData); + __msg_ui_thread_del_finish(pListData); + } else { + pListData->del_index++; + } if (ret) free(ret); - } -static void _del_thread_fn(void *data, Ecore_Thread *thread) +static void __msg_ui_thread_del_thread_fn(void *data, Ecore_Thread *thread) { D_ENTER; MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); - PMSG_THREAD_DATA ThreadData = (PMSG_THREAD_DATA)data; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + Eina_List *list; - Eina_List *l; - PMSG_APP_THREAD_DATA_S item_data = NULL; + void* item_data = NULL; - EINA_LIST_FOREACH(ThreadData->chk_list, l, item_data) { + EINA_LIST_FOREACH(pListData->chk_list, list, item_data) { int *ret = calloc(1, sizeof(int)); if (item_data) { - *ret = msg_delete_thread_message_list(ThreadData->msgHandle, item_data->threadId); - + if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) { + PMSG_APP_THREAD_DATA_S data = (PMSG_APP_THREAD_DATA_S)item_data; + *ret = msg_delete_thread_message_list(msg_ui_thread_get_data_handle(), data->thread_id); + } else { + PMSG_APP_THREAD_MSG_DATA_S data = (PMSG_APP_THREAD_MSG_DATA_S)item_data; + *ret = msg_delete_message(msg_ui_thread_get_data_handle(), data->msg_id); + } ecore_thread_feedback(thread, (void *)ret); if (*ret != MSG_SUCCESS) @@ -157,136 +217,235 @@ static void _del_thread_fn(void *data, Ecore_Thread *thread) return; } } +} + +static void __msg_ui_thread_del_finish(PMSG_THREAD_LIST_DATA pListData) +{ + if (pListData->popup) { + evas_object_del(pListData->popup); + pListData->popup = NULL; + } + + pListData->del_thread = NULL; + msg_ui_thread_show_normal_mode(pListData); + + if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) + msg_ui_thread_list_load(pListData, FALSE); + else + msg_ui_thread_msg_list_load(pListData, pListData->list_type); } -static void _insert_and_select_gen_item(PMSG_THREAD_DATA ThreadData) +void msg_ui_thread_ctlbar_checkbox_cb(void *data, Evas_Object *obj, void *event_info) { - int sel_thread_id = 0; + MSG_UI_ENTER(); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); - if (ThreadData->sel_gen_item) - sel_thread_id = ThreadData->sel_thread_id; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + Elm_Object_Item* it_sweep = NULL; + char buf[DEF_BUF_LEN_S] = {0}; + + pListData->view_mode = THREAD_EDIT_VIEW; + pListData->check_cnt = 0; + pListData->del_index = 0; + + elm_object_item_part_content_unset(pListData->nf_it, "prev_btn"); + if (pListData->back_btn) { + evas_object_del(pListData->back_btn); + pListData->back_btn = NULL; + } + + it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist); - if (ThreadData->search_mode == THREAD_SEARCH_ON) - _search_list_load(ThreadData); + if (it_sweep) { + elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT); + elm_genlist_item_update(it_sweep); + } + + elm_genlist_decorate_mode_set(pListData->genlist, EINA_TRUE); + elm_genlist_select_mode_set(pListData->genlist, ELM_OBJECT_SELECT_MODE_ALWAYS); + + if (pListData->list_type == THREAD_LOCKED_LIST_TYPE || pListData->list_type == THREAD_SIM_LIST_TYPE || pListData->list_type == THREAD_SCHEDULED_LIST_TYPE) + snprintf(buf, sizeof(buf), "%s", dgettext("sys_string", "IDS_COM_SK_EDIT")); else - msg_ui_thread_list_load(ThreadData); + snprintf(buf, sizeof(buf), "%s", dgettext("sys_string", "IDS_COM_SK_DELETE")); + + elm_object_item_text_set(pListData->nf_it, buf); - msg_ui_thread_select_item_by_thread_id(ThreadData, sel_thread_id); + msg_ui_thread_set_navi_controlbar_item(pListData); + __msg_ui_thread_add_navi_select_all_ly(pListData); + MSG_UI_LEAVE(); } -void msg_ui_thread_storage_change_cb(MSG_HANDLE_T handle, MSG_STORAGE_CHANGE_TYPE_T type, MSG_MSGID_LIST_S *pMsgIdList, void *user_param) +static void __msg_ui_thread_add_navi_select_all_ly(PMSG_THREAD_LIST_DATA pListData) { - MSG_UI_ENTER(); + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); - if (!user_param || !pMsgIdList) + if (!pListData) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ASSERT,"[ASSERT] pListData is NULL"); return; + } - PMSG_THREAD_DATA ThreadData = user_param; - if (msg_ui_thread_get_app_state(ThreadData) == MSG_UI_STATE_DESTROY) - return; + if (!pListData->sel_all_ly) { + pListData->sel_all_ly = elm_layout_add(pData->navi_frame); + elm_layout_theme_set(pListData->sel_all_ly, "genlist", "item", "select_all/default"); + evas_object_size_hint_weight_set(pListData->sel_all_ly, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_size_hint_align_set(pListData->sel_all_ly, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_event_callback_add(pListData->sel_all_ly, EVAS_CALLBACK_MOUSE_DOWN, __msg_ui_thread_sel_all_ly_mouse_down_cb, pListData); + + pListData->sel_all_box = elm_check_add(pListData->sel_all_ly); + elm_check_state_pointer_set(pListData->sel_all_box, &pListData->sel_all_checked); + evas_object_propagate_events_set(pListData->sel_all_box, EINA_FALSE); + evas_object_smart_callback_add(pListData->sel_all_box, "changed", msg_ui_thread_sel_all_clicked_cb, pListData); + evas_object_show(pListData->sel_all_box); + + elm_object_part_content_set(pListData->sel_all_ly, "elm.icon", pListData->sel_all_box); + elm_object_part_text_set(pListData->sel_all_ly, "elm.text", dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL")); + } - if (type == MSG_STORAGE_CHANGE_CONTACT) { - msg_ui_thread_list_update(ThreadData); - } else if (type == MSG_STORAGE_CHANGE_INSERT) { - if(ThreadData->viewmode == THREAD_EDIT_VIEW) { - ThreadData->isIncomingMsg = true; - D_MSG("Current mode is EDIT."); - return; - } - _insert_and_select_gen_item(ThreadData); - } else if (type == MSG_STORAGE_CHANGE_UPDATE) { - int i; + evas_object_show(pListData->sel_all_ly); + elm_object_part_content_unset(pListData->content_ly, "sel_all"); + evas_object_hide(pListData->searchbar); + elm_object_part_content_set(pListData->content_ly, "sel_all", pListData->sel_all_ly); +} - for (i = 0; i < pMsgIdList->nCount; i++) { - msg_message_t msg = msg_new_message(); - MSG_SENDINGOPT_S sendOpt = {0}; - MSG_ERROR_T err = MSG_SUCCESS; +static void __msg_ui_thread_sel_all_ly_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(); - err = msg_get_message(ThreadData->msgHandle, pMsgIdList->msgIdList[i], msg, &sendOpt); + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; - if (err != MSG_SUCCESS) { - msg_release_message(&msg); - return; - } + pListData->sel_all_checked = !pListData->sel_all_checked; + elm_check_state_pointer_set(pListData->sel_all_box, &pListData->sel_all_checked); - msg_ui_thread_list_item_update(ThreadData, msg_get_ith_thread_id(msg, 0)); + msg_ui_thread_sel_all_clicked_cb(pListData, NULL, NULL); - msg_release_message(&msg); - } + MSG_UI_LEAVE(); +} + +void msg_ui_thread_ctlbar_spam_setting_cb(void *data, Evas_Object *obj, void *event_info) +{ + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + Elm_Object_Item* it_sweep = NULL; + + it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist); + if (it_sweep) { + elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT); } - MSG_UI_LEAVE(); + msg_ui_thread_launch_spam_setting(pListData); } -void msg_ui_thread_ctlbar_del_cb(void *data, Evas_Object *obj, void *event_info) +void msg_ui_thread_ctlbar_compose_cb(void *data, Evas_Object *obj, void *event_info) { - D_ENTER; + MSG_UI_ENTER(); MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; - + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + Elm_Object_Item* it_sweep = NULL; + service_h svc_handle = NULL; - MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, pData->del_thread); + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + return; + } - if (pData->popup) { - evas_object_del(pData->popup); - pData->popup = NULL; + it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist); + if (it_sweep) { + elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT); } - pData->popup = msg_ui_thread_show_notify_with_progressbar(pData, pData->check_cnt); + if (msg_ui_load_composer_ug(svc_handle) == MSG_UI_RET_ERR) + D_MSG("Failed to load composer ug"); - pData->del_thread = ecore_thread_feedback_run(_del_thread_fn, _del_thread_feedback_fn, NULL, NULL, (void *)pData, EINA_TRUE); + service_destroy(svc_handle); + MSG_UI_LEAVE(); } -void msg_ui_thread_ctlbar_edit_cb(void *data, Evas_Object *obj, void *event_info) +void msg_ui_thread_ctlbar_message_box_cb(void *data, Evas_Object *obj, void *event_info) { MSG_UI_ENTER(); MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + Elm_Object_Item* it_sweep = NULL; - char buf[DEF_BUF_LEN_S] = {0}; - pData->viewmode = THREAD_EDIT_VIEW; - pData->check_cnt = 0; - pData->del_index = 0; + if (pListData->popup) { + evas_object_del(pListData->popup); + pListData->popup = NULL; + } + + it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist); + if (it_sweep) { + elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT); + } + + // Create pop-up ( Spam / SIM (it will be extended) ) + Evas_Object *ctx_popup = NULL; + ctx_popup = elm_ctxpopup_add(pListData->content_ly); + evas_object_smart_callback_add(ctx_popup, "dismissed", __msg_ui_thread_ctxpopup_dismissed_cb, pListData); - elm_genlist_decorate_mode_set(pData->genlist, EINA_TRUE); - elm_genlist_select_mode_set(pData->genlist, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SPAM_MESSAGES"), NULL, __msg_ui_thread_ctxpopup_clicked_cb, pListData); + elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SIM_CARD_MESSAGES"), NULL, __msg_ui_thread_ctxpopup_clicked_cb, pListData); + elm_ctxpopup_item_append(ctx_popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CB_MESSAGES"), NULL, __msg_ui_thread_ctxpopup_clicked_cb, pListData); - snprintf(buf, sizeof(buf), "%s %s", dgettext("sys_string", "IDS_COM_SK_SELECT"), dgettext("sys_string", "IDS_COM_BODY_MESSAGES")); - elm_object_item_text_set(pData->nf_it, buf); + // move ctx popup + Evas_Coord x, y, w, h; + evas_object_geometry_get(pListData->toolbar, &x, &y, &w, &h); + evas_object_move(ctx_popup, ((w-x)*5)/6 , y); + evas_object_show(ctx_popup); - __add_navi_edit_controlbar(pData); - __add_navi_select_all_ly(pData); + pListData->popup = ctx_popup; - elm_object_item_part_content_unset(pData->nf_it, "prev_btn"); - if (pData->back_btn) { - evas_object_del(pData->back_btn); - pData->back_btn = NULL; + MSG_UI_LEAVE(); +} + +static void __msg_ui_thread_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(); + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + + if (pListData->popup) { + evas_object_del(pListData->popup); + pListData->popup = NULL; } MSG_UI_LEAVE(); } -void msg_ui_thread_ctlbar_compose_cb(void *data, Evas_Object *obj, void *event_info) +static void __msg_ui_thread_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info) { MSG_UI_ENTER(); - MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); - bundle *b = bundle_create(); + ThreadMsgListType list_type = THREAD_NORMAL_LIST_TYPE; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; - if (!b) - return; + const char *label = elm_object_item_text_get((Elm_Object_Item *)event_info); - if (msg_ui_load_composer_ug(b) == MSG_UI_RET_ERR) - D_MSG("Failed to load composer ug"); + if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SPAM_MESSAGES")) == 0) { + list_type = THREAD_SPAM_LIST_TYPE; + } else if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SIM_CARD_MESSAGES")) == 0) { + list_type = THREAD_SIM_LIST_TYPE; + } else if (strcmp(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CB_MESSAGES")) == 0) { + list_type = THREAD_CBMSG_LIST_TYPE; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ERROR] invalid list type"); + return; + } - bundle_free(b); + if (pListData->popup) { + evas_object_del(pListData->popup); + pListData->popup = NULL; + } + msg_ui_thread_load_message_box(list_type); MSG_UI_LEAVE(); } @@ -295,15 +454,18 @@ void msg_ui_thread_ctlbar_cancel_cb(void *data, Evas_Object *obj, void *event_in MSG_UI_ENTER(); MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); if (pData->isIncomingMsg == true) { - msg_ui_thread_list_load(pData); + if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG) + msg_ui_thread_msg_list_load(pListData, pListData->list_type); + else + msg_ui_thread_list_load(pListData, FALSE); pData->isIncomingMsg = false; } - msg_ui_thread_show_normal_mode(pData); - + msg_ui_thread_show_normal_mode(pListData); MSG_UI_LEAVE(); } @@ -311,33 +473,45 @@ void msg_ui_thread_sel_all_clicked_cb(void *data, Evas_Object *obj, void *event_ { MSG_UI_ENTER(); - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; - PMSG_APP_THREAD_DATA_S item_data = NULL; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; Elm_Object_Item *it; - if (pData->sel_all_checked) - pData->check_cnt = pData->thread_cnt; - else { - pData->check_cnt = 0; - pData->chk_list = eina_list_free(pData->chk_list); + void* item_data = NULL; + + if (pListData->sel_all_checked) { + pListData->check_cnt = pListData->item_cnt; + } else { + pListData->check_cnt = 0; + pListData->chk_list = eina_list_free(pListData->chk_list); } - it = elm_genlist_first_item_get(pData->genlist); + it = elm_genlist_first_item_get(pListData->genlist); while (it) { + if (elm_genlist_item_parent_get(it) == NULL) { + it = elm_genlist_item_next_get(it); + continue; + } + item_data = elm_object_item_data_get(it); - if (item_data) - item_data->isCheck = pData->sel_all_checked; + if (item_data) { + if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) { + PMSG_APP_THREAD_DATA_S data = (PMSG_APP_THREAD_DATA_S)item_data; + data->is_check = pListData->sel_all_checked; + } else { + PMSG_APP_THREAD_MSG_DATA_S data = (PMSG_APP_THREAD_MSG_DATA_S)item_data; + data->is_check = pListData->sel_all_checked; + } + } - if (pData->sel_all_checked && !eina_list_data_find(pData->chk_list, item_data)) - pData->chk_list = eina_list_append(pData->chk_list, item_data); + if (pListData->sel_all_checked && !eina_list_data_find(pListData->chk_list, item_data)) + pListData->chk_list = eina_list_append(pListData->chk_list, item_data); it = elm_genlist_item_next_get(it); } - elm_genlist_realized_items_update(pData->genlist); - - msg_ui_thread_show_select_info(pData); + elm_genlist_realized_items_update(pListData->genlist); + msg_ui_thread_show_select_info(pListData); MSG_UI_LEAVE(); } @@ -346,27 +520,35 @@ void msg_ui_thread_list_checked_cb(void *data, Evas_Object *obj, void *event_inf { MSG_UI_ENTER(); - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; - PMSG_APP_THREAD_DATA_S item_data = NULL; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + void* item_data = NULL; + Eina_Bool is_check = EINA_FALSE; item_data = evas_object_data_get(obj, "item_data"); - if (item_data->isCheck) { - pData->check_cnt++; - if (!eina_list_data_find(pData->chk_list, item_data)) - pData->chk_list = eina_list_append(pData->chk_list, item_data); + if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) { + PMSG_APP_THREAD_DATA_S data = (PMSG_APP_THREAD_DATA_S)item_data; + is_check = data->is_check; } else { - pData->check_cnt--; - pData->chk_list = eina_list_remove(pData->chk_list, item_data); + PMSG_APP_THREAD_MSG_DATA_S data = (PMSG_APP_THREAD_MSG_DATA_S)item_data; + is_check = data->is_check; } - if (pData->thread_cnt == pData->check_cnt) - elm_check_state_set(pData->sel_all_box, EINA_TRUE); - else - elm_check_state_set(pData->sel_all_box, EINA_FALSE); + if (is_check) { + pListData->check_cnt++; + if (!eina_list_data_find(pListData->chk_list, item_data)) + pListData->chk_list = eina_list_append(pListData->chk_list, item_data); + } else { + pListData->check_cnt--; + pListData->chk_list = eina_list_remove(pListData->chk_list, item_data); + } - msg_ui_thread_show_select_info(pData); + if (pListData->item_cnt == pListData->check_cnt) + elm_check_state_set(pListData->sel_all_box, EINA_TRUE); + else + elm_check_state_set(pListData->sel_all_box, EINA_FALSE); + msg_ui_thread_show_select_info(pListData); MSG_UI_LEAVE(); } @@ -377,192 +559,383 @@ void msg_ui_thread_back_btn_clicked_cb(void *data, Evas_Object *obj, void *event if (!data) return; - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + + if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) { + elm_win_lower(pData->win_main); + } else { + PMSG_THREAD_LIST_DATA pPrevList = msg_ui_thread_get_prev_list(pListData); - elm_win_lower(pData->win_main); + msg_ui_thread_set_navi_controlbar_item(pPrevList); + elm_naviframe_item_pop(pData->navi_frame); + elm_genlist_clear(pListData->genlist); + msg_ui_thread_destroy_thread_list_data(pListData); + } MSG_UI_LEAVE(); } -static Eina_Bool _search_list_load(void *data) +void msg_ui_thread_searchbar_entry_focus_cb(void *data, Evas_Object *obj, void *event_info) { - MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !data, EINA_FALSE); + D_ENTER; - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ASSERT, !data, "[ASSERT] data is NULL"); - Evas_Object *entry = NULL; - char *search_str = NULL; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + Elm_Object_Item* it_sweep = NULL; - MSG_THREAD_VIEW_LIST_S search_list; - PMSG_APP_THREAD_DATA_S item_data = NULL; - int idx = 0; - MSG_ERROR_T err = MSG_SUCCESS; + pListData->search_mode = THREAD_SEARCH_ON; + elm_genlist_mode_set(pListData->genlist, ELM_LIST_COMPRESS); - if (pData->searchbar) { - entry = elm_object_part_content_get(pData->searchbar, "elm.swallow.content"); - search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry)); + it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist); + if (it_sweep) { + elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT); } - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search string word = [%s] ", search_str); + if (!elm_entry_is_empty(obj)) + elm_object_signal_emit(pListData->searchbar, "elm,state,eraser,show", "elm"); - err = msg_search_message_for_thread_view(pData->msgHandle, search_str, &search_list); + elm_object_signal_emit(pListData->searchbar, "elm,state,guidetext,hide", "elm"); + elm_object_signal_emit(pListData->searchbar, "cancel,in", ""); - if (search_str) - free(search_str); + evas_object_smart_callback_add(obj, "changed", msg_ui_thread_searchbar_entry_change_cb, pListData); + evas_object_smart_callback_add(obj, "preedit,changed", msg_ui_thread_searchbar_entry_change_cb, pListData); + D_LEAVE; +} - if (err != MSG_SUCCESS) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_search_message failed!!"); - msg_ui_thread_list_load(pData); - return EINA_FALSE; - } +void msg_ui_thread_searchbar_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + + evas_object_smart_callback_del(obj, "changed", msg_ui_thread_searchbar_entry_change_cb); + + if (!data) + return; - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search result [ count = %d ] ", search_list.nCount); + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; - Evas_Object *swl_ly = elm_object_part_content_get(pData->content_ly, "thread_list"); + elm_object_signal_emit(pListData->searchbar, "cancel,out", ""); + elm_object_signal_emit(pListData->searchbar, "elm,state,eraser,hide", "elm"); - if (swl_ly != pData->genlist) { - evas_object_hide(swl_ly); - elm_object_part_content_unset(pData->content_ly, "thread_list"); - elm_object_part_content_set(pData->content_ly, "thread_list", pData->genlist); + if (elm_entry_is_empty(obj)) { + elm_object_signal_emit(pListData->searchbar, "elm,state,guidetext,show", "elm"); + pListData->search_mode = THREAD_SEARCH_OFF; + elm_genlist_mode_set(pListData->genlist, ELM_LIST_SCROLL); } + D_LEAVE; +} - if (search_list.nCount > 0) { - elm_genlist_clear(pData->genlist); +void msg_ui_thread_searchbar_entry_change_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; - while (idx < search_list.nCount) { - item_data = (PMSG_APP_THREAD_DATA_S)calloc(1, sizeof(MSG_APP_THREAD_DATA_S)); - msg_ui_thread_set_msg_data(item_data, search_list.msgThreadInfo[idx]); + if (!data) + return; - elm_genlist_item_append(pData->genlist, pData->itc, item_data, \ - NULL, ELM_GENLIST_ITEM_NONE, \ - msg_ui_thread_gl_sel, pData); - idx++; - } - } else { - elm_genlist_clear(pData->genlist); + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; - elm_genlist_item_append(pData->genlist, &pData->itc_empty, NULL, \ - NULL, ELM_GENLIST_ITEM_NONE, \ - msg_ui_thread_gl_empty_sel, NULL); + /* Make timer for check user's input */ + if (pListData->search_timer) { + ecore_timer_del(pListData->search_timer); + pListData->search_timer = NULL; } - msg_release_thread_view_list(&search_list); + pListData->search_timer = ecore_timer_add(0.2, __msg_ui_thread_searchbar_entry_timer_cb, pListData); - return EINA_FALSE; + if (elm_object_focus_get(obj)) { + if (elm_entry_is_empty(obj)) + elm_object_signal_emit(pListData->searchbar, "elm,state,eraser,hide", "elm"); + else + elm_object_signal_emit(pListData->searchbar, "elm,state,eraser,show", "elm"); + } + D_LEAVE; } -void msg_ui_thread_searchbar_entry_focus_cb(void *data, Evas_Object *obj, void *event_info) +static Eina_Bool __msg_ui_thread_searchbar_entry_timer_cb(void *data) +{ + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + + msg_ui_thread_search_msg_list_load(pListData); + pListData->search_timer = NULL; + + return ECORE_CALLBACK_CANCEL; +} + +void msg_ui_thread_searchbar_cancel_click_cb(void *data, Evas_Object *obj, void *event_info) { D_ENTER; - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; - pData->search_mode = THREAD_SEARCH_ON; + if (!data) + return; - if (!elm_entry_is_empty(obj)) - elm_object_signal_emit(pData->searchbar, "elm,state,eraser,show", "elm"); + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + Evas_Object *entry = NULL; - elm_object_signal_emit(pData->searchbar, "elm,state,guidetext,hide", "elm"); - elm_object_signal_emit(pData->searchbar, "cancel,in", ""); + pListData->search_mode = THREAD_SEARCH_OFF; + elm_genlist_mode_set(pListData->genlist, ELM_LIST_SCROLL); - evas_object_smart_callback_add(obj, "changed", msg_ui_thread_searchbar_entry_change_cb, data); + if (pListData->search_timer) { + ecore_timer_del(pListData->search_timer); + pListData->search_timer = NULL; + } + + entry = elm_object_part_content_get(pListData->searchbar, "elm.swallow.content"); + elm_object_text_set(entry, ""); + + elm_object_focus_set(pListData->back_btn, EINA_TRUE); + evas_object_hide(obj); + elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,open", ""); + + if (pListData->list_type== THREAD_NORMAL_LIST_TYPE) + msg_ui_thread_list_load(pListData, FALSE); + else + msg_ui_thread_msg_list_load(pListData, pListData->list_type); D_LEAVE; } -void msg_ui_thread_searchbar_entry_unfocus_cb(void *data, Evas_Object *obj, void *event_info) +void msg_ui_thread_searchbar_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) { D_ENTER; - evas_object_smart_callback_del(obj, "changed", msg_ui_thread_searchbar_entry_change_cb); - if (!data) return; - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; - - elm_object_signal_emit(pData->searchbar, "cancel,out", ""); - elm_object_signal_emit(pData->searchbar, "elm,state,eraser,hide", "elm"); + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + Evas_Object *entry = NULL; - if (elm_entry_is_empty(obj)) { - elm_object_signal_emit(pData->searchbar, "elm,state,guidetext,show", "elm"); - pData->search_mode = THREAD_SEARCH_OFF; + if (pListData->search_timer) { + ecore_timer_del(pListData->search_timer); + pListData->search_timer = NULL; } + entry = elm_object_part_content_get(pListData->searchbar, "elm.swallow.content"); + elm_object_text_set(entry, ""); + + elm_object_signal_emit(pListData->searchbar, "elm,state,eraser,hide", "elm"); + D_LEAVE; } -void msg_ui_thread_searchbar_entry_change_cb(void *data, Evas_Object *obj, void *event_info) +void msg_ui_thread_sweep_btn_cb(void *data, Evas_Object *obj, void *event_info) { - D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !obj || !data); - if (!data) + PMSG_THREAD_LIST_DATA pListData = data; + char address[DEF_THREAD_ADDR_LEN+1] = {0,}; + Elm_Object_Item *it = NULL; + + const char *label = elm_object_text_get(obj); + + if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_SK_DELETE")) == 0) { + msg_ui_thread_show_del_popup(pListData, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_DELETE_Q")); return; + } else { + PMSG_APP_THREAD_DATA_S sel_peer_item = NULL; + sel_peer_item = (PMSG_APP_THREAD_DATA_S)evas_object_data_get(obj, "sel_peer_data"); - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; + msg_struct_list_s addrList; - if (elm_object_focus_get(obj)) { - if (elm_entry_is_empty(obj)) - elm_object_signal_emit(pData->searchbar, "elm,state,eraser,hide", "elm"); - else - elm_object_signal_emit(pData->searchbar, "elm,state,eraser,show", "elm"); + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + msg_get_address_list(msg_ui_thread_get_data_handle(), sel_peer_item->thread_id, &addrList); + + if (addrList.nCount == 1) { + char strNumber[DEF_THREAD_ADDR_LEN + 1] = {0,}; + + msg_get_str_value(addrList.msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN); + strncpy(address, strNumber, DEF_THREAD_ADDR_LEN); + + if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) + msg_ui_thread_launch_voice_call(address); + else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) + msg_ui_thread_launch_video_call(address); + + } else if (addrList.nCount > 1) { + __msg_ui_thread_addr_select_popup(pListData, label, sel_peer_item->thread_id); + } + + msg_release_list_struct(&addrList); } - _search_list_load(data); + it = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist); - D_LEAVE; + if (it) { + elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT); + } } -void msg_ui_thread_searchbar_cancel_click_cb(void *data, Evas_Object *obj, void *event_info) +static void __msg_ui_thread_addr_select_popup(PMSG_THREAD_LIST_DATA pListData, const char *title, int thread_id) { - D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pListData || !title); + + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + Evas_Object *popup = NULL; + Evas_Object *genlist = NULL; + int i = 0; + msg_struct_list_s addrList; + + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + msg_get_address_list(pData->msgHandle, thread_id, &addrList); + + /** create popup */ + popup = elm_popup_add(pData->win_main); + if (!popup) { + D_EMSG("elm_popup_add returns NULL"); + msg_release_list_struct(&addrList); + return; + } - if (!data) + elm_object_style_set(popup, "menustyle"); + + /** create menu genlist */ + genlist = elm_genlist_add(popup); + if (!genlist) { + D_EMSG("elm_genlist_add failed"); + msg_release_list_struct(&addrList); return; + } - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; - pData->search_mode = THREAD_SEARCH_OFF; + evas_object_data_set(genlist, "title", title); + memset(&pData->itc_popup, 0x00, sizeof(Elm_Genlist_Item_Class)); - Evas_Object *entry = NULL; - entry = elm_object_part_content_get(pData->searchbar, "elm.swallow.content"); - elm_object_text_set(entry, ""); + pData->itc_popup.item_style = "1text"; + pData->itc_popup.func.text_get = __msg_ui_thread_popup_gl_text_get; + pData->itc_popup.func.content_get = NULL; + pData->itc_popup.func.state_get = NULL; + pData->itc_popup.func.del = __msg_ui_thread_popup_gl_del; - evas_object_hide(obj); + /** append addresses to genlist */ + for (i=0; i<addrList.nCount; i++) { + int contact_id = 0; + char strNumber[MAX_ADDRESS_VAL_LEN + 1] = {0,}; + char strName[MAX_DISPLAY_NAME_LEN + 1] = {0,}; + msg_struct_t addrInfo = msg_create_struct(MSG_STRUCT_ADDRESS_INFO); - elm_object_focus_set(pData->back_btn, EINA_TRUE); + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, MAX_ADDRESS_VAL_LEN); + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, strName, MAX_DISPLAY_NAME_LEN); + msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id); - msg_ui_thread_list_load(pData); + msg_set_int_value(addrInfo, MSG_ADDRESS_INFO_CONTACT_ID_INT, contact_id); + msg_set_str_value(addrInfo, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, MAX_ADDRESS_VAL_LEN); + msg_set_str_value(addrInfo, MSG_ADDRESS_INFO_DISPLAYNAME_STR, strName, MAX_DISPLAY_NAME_LEN); - D_LEAVE; + elm_genlist_item_append(genlist, &pData->itc_popup, addrInfo, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_thread_popup_gl_sel, pListData); + } + + msg_release_list_struct(&addrList); + + elm_object_part_text_set(popup, "title,text", dgettext(MESSAGE_PKGNAME, "IDS_MSG_HEADER_SELECT_RECIPIENT")); + elm_object_content_set(popup, genlist); + + /** close button */ + Evas_Object * btn1 = elm_button_add(popup); + elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_BODY_CLOSE")); + evas_object_smart_callback_add(btn1, "clicked", __msg_ui_thread_close_clicked_cb, pListData); + + elm_object_part_content_set(popup, "button1", btn1); + evas_object_show(genlist); + evas_object_show(popup); + + pListData->popup = popup; } -void msg_ui_thread_searchbar_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +static char *__msg_ui_thread_popup_gl_text_get(void *data, Evas_Object *obj, const char *part) { D_ENTER; + msg_struct_t addr_info = (msg_struct_t)data; + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, NULL); - if (!data) - return; + char strNumber[DEF_THREAD_ADDR_LEN + 1] = {0,}; + char strName[DEF_THREAD_NAME_LEN + 1] = {0,}; + int contact_id = 0; - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; + msg_get_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN); + msg_get_str_value(addr_info, MSG_ADDRESS_INFO_DISPLAYNAME_STR, strName, DEF_THREAD_NAME_LEN); + msg_get_int_value(addr_info, MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id); - Evas_Object *entry = NULL; - entry = elm_object_part_content_get(pData->searchbar, "elm.swallow.content"); - elm_object_text_set(entry, ""); + if (contact_id > 0 && strlen(strName) > 0) { + return strdup(strName); + } else { + if (strlen(strNumber) > 0) + return strdup(strNumber); + else + return strdup(dgettext("sys_string","IDS_COM_BODY_UNKNOWN")); + } +} - elm_object_signal_emit(pData->searchbar, "elm,state,eraser,hide", "elm"); +static void __msg_ui_thread_popup_gl_del(void *data, Evas_Object *obj) +{ + msg_struct_t del_data = (msg_struct_t)data; - D_LEAVE; + if (del_data) { + msg_release_struct(&del_data); + del_data = NULL; + } +} + +static void __msg_ui_thread_close_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data); + + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + + if (pListData->popup) { + evas_object_del(pListData->popup); + pListData->popup = NULL; + memset(&pData->itc_popup, 0x00, sizeof(Elm_Genlist_Item_Class)); + } +} + +void __msg_ui_thread_popup_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj || !event_info); + + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + Elm_Object_Item *item = (Elm_Object_Item *)event_info; + msg_struct_t addr_info = (msg_struct_t)elm_object_item_data_get(item); + char strNumber[DEF_THREAD_ADDR_LEN + 1] = {0,}; + + if (pListData->popup) { + evas_object_del(pListData->popup); + pListData->popup = NULL; + memset(&pData->itc_popup, 0x00, sizeof(Elm_Genlist_Item_Class)); + } + + char *title = (char *)evas_object_data_get(obj, "title"); + if (!title) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] title is NULL"); + return; + } + + msg_get_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN); + + if (strncmp(title, dgettext("sys_string", "IDS_COM_BODY_CALL"), strlen(title)) == 0) + msg_ui_thread_launch_voice_call(strNumber); + else if (strncmp(title, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL"), strlen(title)) == 0) + msg_ui_thread_launch_video_call(strNumber); + else + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[ERROR] invalid title"); } void msg_ui_thread_timezone_change_cb(void *data) { D_ENTER; - PMSG_THREAD_DATA ThreadData = (PMSG_THREAD_DATA)data; + PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; + PMSG_THREAD_LIST_DATA pListData = NULL; char *timezone_id = NULL; UChar utimezone_id[DEF_BUF_LEN] = {0,}; UErrorCode status = U_ZERO_ERROR; + int i = 0; timezone_id = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID); @@ -576,14 +949,58 @@ void msg_ui_thread_timezone_change_cb(void *data) if (U_FAILURE(status)) return; - msg_ui_thread_get_locale(ThreadData); - msg_ui_thread_get_time_format(ThreadData); - ThreadData->time_12h_ptn = msg_common_get_date_best_pattern(ThreadData->locale, MSG_UI_TIME_PATTERN_12H); - ThreadData->time_24h_ptn = msg_common_get_date_best_pattern(ThreadData->locale, MSG_UI_TIME_PATTERN_24H); - ThreadData->date_ptn = msg_common_get_date_best_pattern(ThreadData->locale, UDAT_YEAR_NUM_MONTH_DAY); + msg_ui_thread_get_locale(pData); + msg_ui_thread_get_time_format(pData); + pData->time_12h_ptn = msg_common_get_date_best_pattern(pData->locale, MSG_UI_TIME_PATTERN_12H); + pData->time_24h_ptn = msg_common_get_date_best_pattern(pData->locale, MSG_UI_TIME_PATTERN_24H); + pData->date_ptn = msg_common_get_date_best_pattern(pData->locale, UDAT_YEAR_NUM_MONTH_DAY); + - elm_genlist_realized_items_update(ThreadData->genlist); + for (i = 0; i < MSG_THREAD_LIST_MAX_COUNT; i++) { + if (pData->list_data[i] != NULL) { + pListData = pData->list_data[i]; + elm_genlist_realized_items_update(pListData->genlist); + } + } D_LEAVE; } +void msg_ui_thread_gl_mode_right(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(); + + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !data || !event_info); + + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, pListData->view_mode != THREAD_NORMAL_VIEW); + + Elm_Object_Item *it = (Elm_Object_Item *)elm_genlist_decorated_item_get(obj); + if (it) + elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT); + + if (pListData->search_mode == THREAD_SEARCH_OFF) { + elm_genlist_item_decorate_mode_set(event_info, "slide", EINA_TRUE); + elm_genlist_item_select_mode_set(event_info, ELM_OBJECT_SELECT_MODE_NONE); + } + + MSG_UI_LEAVE(); +} + +void msg_ui_thread_gl_mode_left(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(); + + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !data || !event_info); + + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, pListData->view_mode != THREAD_NORMAL_VIEW); + + if (pListData->search_mode == THREAD_SEARCH_OFF) { + elm_genlist_item_decorate_mode_set(event_info, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(event_info, ELM_OBJECT_SELECT_MODE_DEFAULT); + } + + MSG_UI_LEAVE(); +} + diff --git a/thread/src/msg-ui-thread-list.c b/thread/src/msg-ui-thread-list.c index ccaf24d..c904821 100755 --- a/thread/src/msg-ui-thread-list.c +++ b/thread/src/msg-ui-thread-list.c @@ -14,182 +14,293 @@ * limitations under the License. */ +#include "msg-ui-image-resource.h" #include "msg-ui-thread-main.h" -int msg_ui_thread_init_genlist(PMSG_THREAD_DATA ThreadData); -char *msg_ui_thread_gl_text_get(void *data, Evas_Object *obj, const char *part); -Evas_Object *msg_ui_thread_gl_content_get(void *data, Evas_Object *obj, const char *part); -void msg_ui_thread_gl_del(void *data, Evas_Object *obj); -char *msg_ui_thread_gl_empty_get(void *data, Evas_Object *obj, const char *part); +static int __msg_ui_thread_init_genlist(PMSG_THREAD_LIST_DATA pListData); +static char *__msg_ui_thread_gl_text_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object *__msg_ui_thread_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_thread_gl_del(void *data, Evas_Object *obj); +static void __msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_info); +Eina_Bool __msg_ui_thread_msg_list_load_remain_item(void *data); -int msg_ui_thread_init_genlist(PMSG_THREAD_DATA ThreadData) + +static int __msg_ui_thread_init_genlist(PMSG_THREAD_LIST_DATA pListData) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - if (ThreadData->genlist) - elm_genlist_clear(ThreadData->genlist); + if (pListData->genlist) + elm_genlist_clear(pListData->genlist); MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); return MSG_UI_RET_SUCCESS; } -void msg_ui_thread_set_msg_data(PMSG_APP_THREAD_DATA_S thread_data, msg_thread_view_t msgThreadInfo) +void msg_ui_thread_set_thread_data(PMSG_THREAD_LIST_DATA pListData, PMSG_APP_THREAD_DATA_S thread_data, msg_struct_t msgThreadInfo) { if (thread_data == NULL || msgThreadInfo == NULL) return; - thread_data->threadId = msg_thread_view_get_thread_id(msgThreadInfo); + int thread_id = 0, unreadCnt = 0, msgType = 0, direction = 0, smsCnt = 0, mmsCnt = 0; + char name[DEF_THREAD_NAME_LEN+1] = {0,}; + char threadData[DEF_BUF_LEN_S+1] = {0,}; - bzero(thread_data->threadAddr, sizeof(thread_data->threadAddr)); - strncpy(thread_data->threadAddr, msg_thread_view_get_address(msgThreadInfo), DEF_THREAD_ADDR_LEN); + msg_get_int_value(msgThreadInfo, MSG_THREAD_ID_INT, &thread_id); + thread_data->thread_id = thread_id; - bzero(thread_data->threadName, sizeof(thread_data->threadName)); - strncpy(thread_data->threadName, msg_thread_view_get_name(msgThreadInfo), DEF_THREAD_NAME_LEN); + msg_get_str_value(msgThreadInfo, MSG_THREAD_NAME_STR, name, DEF_THREAD_NAME_LEN); + bzero(thread_data->thread_name, sizeof(thread_data->thread_name)); + strncpy(thread_data->thread_name, name, DEF_THREAD_NAME_LEN); - bzero(thread_data->threadData, sizeof(thread_data->threadData)); - strncpy(thread_data->threadData, msg_thread_view_get_data(msgThreadInfo), DEF_BUF_LEN_S); + msg_get_str_value(msgThreadInfo, MSG_THREAD_MSG_DATA_STR, threadData, DEF_BUF_LEN_S); + bzero(thread_data->thread_data, sizeof(thread_data->thread_data)); + strncpy(thread_data->thread_data, threadData, DEF_BUF_LEN_S); - if (thread_data->threadTime == NULL) - thread_data->threadTime = (time_t *) calloc(1, sizeof(time_t)); + if (thread_data->thread_time == NULL) + thread_data->thread_time = (time_t *) calloc(1, sizeof(time_t)); - if (thread_data->threadTime) { - bzero(thread_data->threadTime, sizeof(time_t)); - memcpy(thread_data->threadTime, msg_thread_view_get_time(msgThreadInfo), sizeof(time_t)); + if (thread_data->thread_time) { + int msgTime = 0; + msg_get_int_value(msgThreadInfo, MSG_THREAD_MSG_TIME_INT, &msgTime); + bzero(thread_data->thread_time, sizeof(time_t)); + memcpy(thread_data->thread_time, &msgTime, sizeof(time_t)); } - thread_data->direction = msg_thread_view_get_direction(msgThreadInfo); - thread_data->contactId = msg_thread_view_get_contact_id(msgThreadInfo); - thread_data->smsCnt = msg_thread_view_get_sms_cnt(msgThreadInfo); - thread_data->msgType = msg_thread_view_get_message_type(msgThreadInfo); + msg_get_int_value(msgThreadInfo, MSG_THREAD_MSG_TYPE_INT, &msgType); + thread_data->msg_type = msgType; + msg_get_int_value(msgThreadInfo, MSG_THREAD_MMS_COUNT_INT, &mmsCnt); + thread_data->mms_cnt = mmsCnt; + msg_get_int_value(msgThreadInfo, MSG_THREAD_SMS_COUNT_INT, &smsCnt); + thread_data->sms_cnt = smsCnt; + msg_get_int_value(msgThreadInfo, MSG_THREAD_DIRECTION_INT, &direction); + thread_data->direction = direction; + + if (pListData && pListData->sel_thread_id == thread_data->thread_id) { + thread_data->unread_cnt = 0; + } else { + msg_get_int_value(msgThreadInfo, MSG_THREAD_UNREAD_COUNT_INT, &unreadCnt); + thread_data->unread_cnt = unreadCnt; + } +} - PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); +void msg_ui_thread_set_msg_data(PMSG_APP_THREAD_MSG_DATA_S msg_data, msg_struct_t msgInfo) +{ + if (msg_data == NULL || msgInfo == NULL) + return; + + int msgId = 0; + int msgType = 0; + bool read_status = 0; + msg_struct_list_s *addr_list = NULL; + char strNumber[DEF_THREAD_ADDR_LEN+1] = {0,}; + char strName[DEF_THREAD_NAME_LEN+1] = {0,}; + int contact_id = 0; + + /* msg_id */ + msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, &msgId); + msg_data->msg_id = msgId; + /* msg_type */ + msg_get_int_value(msgInfo, MSG_MESSAGE_TYPE_INT, &msgType); + msg_data->msg_type = msgType; + /* read status */ + msg_get_bool_value(msgInfo, MSG_MESSAGE_READ_BOOL, &read_status); + msg_data->is_read = read_status; + + /* contact ID, display name */ + msg_get_list_handle(msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list); + msg_get_str_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, strNumber, DEF_THREAD_ADDR_LEN); + msg_get_str_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_DISPLAYNAME_STR, strName, DEF_THREAD_NAME_LEN); + msg_get_int_value(addr_list->msg_struct_info[0], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id); + + msg_data->contact_id = contact_id; + + if (strlen(strName) > 0) + strncpy(msg_data->display_name, strName, sizeof(msg_data->display_name) -1); + else + strncpy(msg_data->display_name, "", sizeof(msg_data->display_name)-1); - if (pData && pData->sel_thread_id == thread_data->threadId) - thread_data->unreadCnt = 0; + if (strlen(strNumber) > 0) + strncpy(msg_data->address, strNumber, sizeof(msg_data->address)-1); else - thread_data->unreadCnt = msg_thread_view_get_unread_cnt(msgThreadInfo); + strncpy(msg_data->address, "", sizeof(msg_data->address)-1); + + /*body*/ + const char *pContent = NULL; + int msgSize = 0; + msg_get_int_value(msgInfo, MSG_MESSAGE_DATA_SIZE_INT, &msgSize); + char msgText[msgSize + 1]; + char subject[DEF_BUF_LEN_S+1] = {0,}; + memset(msgText, 0, msgSize + 1); + + msg_get_str_value(msgInfo, MSG_MESSAGE_SMS_DATA_STR, msgText, msgSize); + msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, subject, DEF_BUF_LEN_S); + + if (msg_data->msg_type == MSG_TYPE_MMS_NOTI) + pContent = subject; + else + pContent = msgText; + + if (strlen(pContent) > 0) + strncpy(msg_data->msg_body, pContent, sizeof(msg_data->msg_body)-1); + else + strncpy(msg_data->msg_body, "", sizeof(msg_data->msg_body)-1); + + msg_data->msg_time = (time_t *)calloc(1, sizeof(time_t)); + if (msg_data->msg_time != NULL) { + int msgTime = 0; + msg_get_int_value(msgInfo, MSG_MESSAGE_DISPLAY_TIME_INT, &msgTime); + memcpy(msg_data->msg_time, &msgTime, sizeof(time_t)); + } } -char *msg_ui_thread_gl_text_get(void *data, Evas_Object *obj, const char *part) +static char *__msg_ui_thread_gl_text_get(void *data, Evas_Object *obj, const char *part) { - - PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); PMSG_APP_THREAD_DATA_S item_data = (PMSG_APP_THREAD_DATA_S) data; - MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !pData || !item_data, NULL); + char buf[DEF_BUF_LEN] = { 0, }; - time_t *msg_t; - time_t cur_t; - unsigned long int msg_day, cur_day; - int diffday; - struct tm msg_time; - struct tm cur_time; - char buf[DEF_BUF_LEN] = { 0, }; + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL); if (g_strcmp0(part, "elm.text.1") == 0) { - if (item_data->contactId > 0) { - if (item_data->threadName[0] != '\0') - snprintf(buf, sizeof(buf), "%s", item_data->threadName); - else - snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_NO_NAME")); - } - - else { - if (item_data->threadAddr[0] != '\0') - snprintf(buf, sizeof(buf), "%s", item_data->threadAddr); - else - snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); - } + if (item_data->thread_name[0] != '\0') + snprintf(buf, sizeof(buf), "%s", item_data->thread_name); + else + snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); } else if (g_strcmp0(part, "elm.text.2") == 0) { + msg_ui_thread_make_time_string(item_data->thread_time, buf, sizeof(buf)); + } else if (g_strcmp0(part, "elm.text.3") == 0) { int idx = 0; char msg[DEF_BUF_LEN] = { 0, }; - if (item_data->threadData[0] != '\0') { - strncpy(msg, item_data->threadData, sizeof(msg) - 1); + if (item_data->thread_data[0] != '\0') { + strncpy(msg, item_data->thread_data, sizeof(msg) - 1); while (msg[idx]) { if (g_ascii_iscntrl(msg[idx])) msg[idx] = ' '; idx++; } snprintf(buf, sizeof(buf), "%s", msg); - } - } else if (g_strcmp0(part, "elm.text.3") == 0) { - char *date_str = NULL; - - msg_t = item_data->threadTime; - cur_t = time(NULL); - - localtime_r(msg_t, &msg_time); - localtime_r(&cur_t, &cur_time); - - msg_day = (msg_time.tm_year - 1900) * 365 + msg_time.tm_yday + (msg_time.tm_year - 1900 - 1) / 4; - cur_day = (cur_time.tm_year - 1900) * 365 + cur_time.tm_yday + (cur_time.tm_year - 1900 - 1) / 4; - - diffday = cur_day - msg_day; - - if (diffday == 1) - snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_YESTERDAY")); - else if (diffday > 1) { - date_str = msg_common_get_formatted_date(pData->locale, pData->date_ptn, msg_t); - snprintf(buf, sizeof(buf), " %s ", date_str); } else { - if (pData->time_fmt == MSG_TIME_FORMAT_24H) { - date_str = msg_common_get_formatted_date(pData->locale, pData->time_24h_ptn, msg_t); - snprintf(buf, sizeof(buf), " %s ", date_str); - } else { /* MSG_TIME_FORMAT_12H */ - date_str = msg_common_get_formatted_date(pData->locale, pData->time_12h_ptn, msg_t); - snprintf(buf, sizeof(buf), " %s ", date_str); - } + if (item_data->msg_type >= MSG_TYPE_MMS && item_data->msg_type <= MSG_TYPE_MMS_NOTI) + snprintf(buf, sizeof(buf), "(%s)", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_NO_SUBJECT")); } - - if (date_str) - free(date_str); - } else if (g_strcmp0(part, "elm.badge.text") == 0) { - if (item_data->unreadCnt > 0) { - snprintf(buf, sizeof(buf), "%d", item_data->unreadCnt); - } - } else if (g_strcmp0(part, "elm.slide.text.1") == 0) { - if (item_data->contactId > 0) { - if (item_data->threadName[0] != '\0') - snprintf(buf, sizeof(buf), "%s", item_data->threadName); + } else if (g_strcmp0(part, "elm.text.4") == 0) { + if (item_data->unread_cnt > 0) { + if (item_data->unread_cnt > 999) + snprintf(buf, sizeof(buf), "..."); else - snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_NO_NAME")); + snprintf(buf, sizeof(buf), "%d", item_data->unread_cnt); } else { - if (item_data->threadAddr[0] != '\0') - snprintf(buf, sizeof(buf), "%s", item_data->threadAddr); - else - snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + msg_struct_list_s draft_list; + msg_get_message_list(msg_ui_thread_get_data_handle(), MSG_DRAFT_ID, item_data->thread_id, 0, MSG_STORAGE_PHONE, &draft_list); + + if (draft_list.nCount > 0) + snprintf(buf, sizeof(buf), "%s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_DRAFT_ABB")); + + msg_release_list_struct(&draft_list); } } return strdup(buf); } -Evas_Object *msg_ui_thread_gl_content_get(void *data, Evas_Object *obj, const char *part) +static Evas_Object *__msg_ui_thread_gl_content_get(void *data, Evas_Object *obj, const char *part) { PMSG_APP_THREAD_DATA_S item_data = (PMSG_APP_THREAD_DATA_S) data; - PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); - MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !pData || !item_data, NULL); + PMSG_THREAD_LIST_DATA pListData = NULL; + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL); Evas_Object *ic = NULL; - if (g_strcmp0(part, "elm.icon") == 0) { - if (item_data->unreadCnt) { - char unreadCnt[DEF_BUF_LEN_L] = { 0, }; - ic = elm_layout_add(obj); - elm_layout_file_set(ic, MSG_THREAD_THEME, "msg_frame_badge_ly"); - snprintf(unreadCnt, sizeof(unreadCnt), "%d", item_data->unreadCnt); - edje_object_part_text_set(_EDJ(ic), "elm.badge.text", unreadCnt); + pListData = msg_ui_thread_get_current_list(); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !pListData, NULL); + + if (g_strcmp0(part, "elm.icon.1") == 0) { + if (item_data->msg_type == MSG_TYPE_SMS_CB) { + ic = elm_icon_add(obj); + elm_icon_file_set(ic, MSG_UI_THREAD_LIST_CB_ICON, NULL); + } else if (item_data->msg_type == MSG_TYPE_SMS_WAPPUSH) { + ic = elm_icon_add(obj); + elm_icon_file_set(ic, MSG_UI_THREAD_LIST_PUSH_ICON, NULL); + } else if (item_data->msg_type == MSG_TYPE_SMS_SYNCML) { + ic = elm_icon_add(obj); + elm_icon_file_set(ic, MSG_UI_THREAD_LIST_OTA_ICON, NULL); + } + + if (ic) { + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + evas_object_show(ic); + } + } else if (g_strcmp0(part, "elm.slide.swallow.1") == 0) { + int i = 0; + bool bNumExist = false; + + ic = elm_button_add(obj); + elm_object_style_set(ic, "text_only/sweep"); + elm_object_text_set(ic, dgettext("sys_string", "IDS_COM_BODY_CALL")); + evas_object_data_set(ic, "sel_peer_data", (void *) item_data); + evas_object_smart_callback_add(ic, "clicked", msg_ui_thread_sweep_btn_cb, (void *) pListData); + + msg_struct_list_s addrList; + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + msg_get_address_list(msg_ui_thread_get_data_handle(), item_data->thread_id, &addrList); + + for (i=0; i<addrList.nCount; i++) { + int addressType = 0; + + msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, &addressType); + if (addressType == MSG_ADDRESS_TYPE_PLMN) { + bNumExist = true; + break; + } } + + msg_release_list_struct(&addrList); + + if (bNumExist == false) + elm_object_disabled_set(ic, EINA_TRUE); + } else if (g_strcmp0(part, "elm.slide.swallow.2") == 0) { + int i = 0; + bool bNumExist = false; + + ic = elm_button_add(obj); + elm_object_style_set(ic, "text_only/sweep"); + elm_object_text_set(ic, dgettext("sys_string", "IDS_COM_SK_VIDEO_CALL")); + evas_object_data_set(ic, "sel_peer_data", (void *) item_data); + evas_object_smart_callback_add(ic, "clicked", msg_ui_thread_sweep_btn_cb, (void *) pListData); + + msg_struct_list_s addrList; + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + msg_get_address_list(msg_ui_thread_get_data_handle(), item_data->thread_id, &addrList); + + for (i=0; i<addrList.nCount; i++) { + int addressType = 0; + msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, &addressType); + if (addressType == MSG_ADDRESS_TYPE_PLMN) { + bNumExist = true; + break; + } + } + + msg_release_list_struct(&addrList); + + if (bNumExist == false) + elm_object_disabled_set(ic, EINA_TRUE); + } else if (g_strcmp0(part, "elm.slide.swallow.3") == 0) { + ic = elm_button_add(obj); + elm_object_style_set(ic, "sweep/delete"); + elm_object_text_set(ic, dgettext("sys_string", "IDS_COM_SK_DELETE")); + evas_object_data_set(ic, "sel_peer_data", (void *) item_data); + evas_object_smart_callback_add(ic, "clicked", msg_ui_thread_sweep_btn_cb, (void *) pListData); } if (elm_genlist_decorate_mode_get(obj)) { if (!strcmp(part, "elm.edit.icon.1")) { ic = elm_check_add(obj); - elm_check_state_pointer_set(ic, &item_data->isCheck); + elm_check_state_pointer_set(ic, &item_data->is_check); evas_object_data_set(ic, "item_data", item_data); - evas_object_smart_callback_add(ic, "changed", msg_ui_thread_list_checked_cb, pData); + evas_object_smart_callback_add(ic, "changed", msg_ui_thread_list_checked_cb, pListData); item_data->chk = ic; } } @@ -197,71 +308,349 @@ Evas_Object *msg_ui_thread_gl_content_get(void *data, Evas_Object *obj, const ch return ic; } -void msg_ui_thread_gl_del(void *data, Evas_Object *obj) +static void __msg_ui_thread_gl_del(void *data, Evas_Object *obj) { PMSG_APP_THREAD_DATA_S del_data = (PMSG_APP_THREAD_DATA_S) data; if (del_data) { - if (del_data->threadTime) { - free(del_data->threadTime); - del_data->threadTime = NULL; + if (del_data->thread_time) { + free(del_data->thread_time); + del_data->thread_time = NULL; } free(del_data); del_data = NULL; } } -char *msg_ui_thread_gl_empty_get(void *data, Evas_Object *obj, const char *part) +static void __msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_info) { - char buf[DEF_BUF_LEN] = { '0', }; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA) data; + Elm_Object_Item *item = NULL; + Elm_Object_Item* it_sweep = NULL; + PMSG_APP_THREAD_DATA_S item_data = NULL; + service_h svc_handle = NULL; - PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + item = (Elm_Object_Item *) event_info; + MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, !item, "Item is NULL or Item is not Message item\n"); - if (pData && pData->search_mode == THREAD_SEARCH_ON) - snprintf(buf, sizeof(buf), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_SEARCH_RESULTS")); - else - snprintf(buf, sizeof(buf), "%s", dgettext("sys_string", "IDS_COM_POP_EMPTY")); + item_data = (PMSG_APP_THREAD_DATA_S) elm_object_item_data_get(item); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, item_data == NULL, "item_data is NULL"); + + MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, pListData->sel_thread_id == item_data->thread_id, "Already selected item."); + + elm_genlist_item_selected_set(item, 0); + + it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist); + if (it_sweep) { + elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT); + } + + switch (pListData->view_mode) { + case THREAD_NORMAL_VIEW: + case THREAD_UNLOAD_VIEW: + pListData->sel_gen_item = item; + pListData->sel_thread_id = item_data->thread_id; + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + msg_ui_thread_get_bubble_data(item_data, svc_handle); + + if (msg_ui_load_composer_ug(svc_handle) == MSG_UI_RET_ERR) + D_MSG("Failed to load composer ug"); + + service_destroy(svc_handle); + } + + item_data->unread_cnt = 0; + //elm_genlist_item_update(item); + break; + case THREAD_EDIT_VIEW: + item_data->is_check = !item_data->is_check; + elm_genlist_item_fields_update(item, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT); + evas_object_smart_callback_call(item_data->chk, "changed", NULL); + break; + default: + break; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +char *msg_ui_thread_msg_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + PMSG_APP_THREAD_MSG_DATA_S item_data = (PMSG_APP_THREAD_MSG_DATA_S)data; + char buf[DEF_BUF_LEN+1] = { 0, }; + + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL); + + if (!strcmp(part, "elm.text.1")) { + if (item_data->contact_id > 0 && item_data->display_name[0] != '\0') { + snprintf(buf, sizeof(buf), "%s", item_data->display_name); + } else { + if (item_data->address[0] != '\0') + snprintf(buf, sizeof(buf), "%s", item_data->address); + else + snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + } + } else if (g_strcmp0(part, "elm.text.2") == 0) { + msg_ui_thread_make_time_string(item_data->msg_time, buf, sizeof(buf)); + } else if (g_strcmp0(part, "elm.text.3") == 0) { + char msg[DEF_BUF_LEN] = { 0, }; + int idx = 0; + + if (item_data->msg_body[0] != '\0') { + strncpy(msg, item_data->msg_body, sizeof(msg) - 1); + while (msg[idx]) { + if (g_ascii_iscntrl(msg[idx])) + msg[idx] = ' '; + idx++; + } + } else if ((item_data->msg_type >= MSG_TYPE_MMS && item_data->msg_type <= MSG_TYPE_MMS_NOTI)) { + snprintf(msg, sizeof(msg), "(%s)", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_NO_SUBJECT")); + } + snprintf(buf, sizeof(buf), "%s", msg); + } else if (g_strcmp0(part, "elm.text.4") == 0) { + if (item_data->is_read == 0) + snprintf(buf, sizeof(buf), "1"); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + return NULL; + } return strdup(buf); } -void msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_info) +char *msg_ui_thread_search_msg_gl_text_get(void *data, Evas_Object *obj, const char *part) { - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + PMSG_THREAD_LIST_DATA pListData = NULL; + PMSG_APP_THREAD_MSG_DATA_S item_data = (PMSG_APP_THREAD_MSG_DATA_S)data; + char buf[DEF_BUF_LEN+1] = { 0, }; + bool result = false; + + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL); + + pListData = msg_ui_thread_get_current_list(); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !pListData, NULL); + + if (!strcmp(part, "elm.text.1")) { + bool search = true; + if (item_data->contact_id > 0 && item_data->display_name[0] != '\0') { + snprintf(buf, sizeof(buf), "%s", item_data->display_name); + } else { + if (item_data->address[0] != '\0') { + snprintf(buf, sizeof(buf), "%s", item_data->address); + } else { + snprintf(buf, sizeof(buf), dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + search =false; + } + } + + if (search == true) { + Evas_Object *entry = elm_object_part_content_get( pListData->searchbar, "elm.swallow.content"); + char *search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry)); + if (strlen(search_str) > 0) { + const char *str = msg_ui_thread_make_search_result_string(buf, search_str, &result); + free(search_str); + return strdup(str); + } + } + } else if (g_strcmp0(part, "elm.text.2") == 0) { + msg_ui_thread_make_time_string(item_data->msg_time, buf, sizeof(buf)); + } else if (g_strcmp0(part, "elm.text.3") == 0) { + char msg[DEF_BUF_LEN] = { 0, }; + int idx = 0; - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA) data; + if (item_data->msg_body[0] != '\0') { + strncpy(msg, item_data->msg_body, sizeof(msg) - 1); + while (msg[idx]) { + if (g_ascii_iscntrl(msg[idx])) + msg[idx] = ' '; + idx++; + } + } else if ((item_data->msg_type >= MSG_TYPE_MMS && item_data->msg_type <= MSG_TYPE_MMS_NOTI)) { + snprintf(msg, sizeof(msg), "(%s)", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_NO_SUBJECT")); + } + snprintf(buf, sizeof(buf), "%s", msg); + + if (item_data->msg_type < MSG_TYPE_MMS) { + Evas_Object *entry = elm_object_part_content_get( pListData->searchbar, "elm.swallow.content"); + char *search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry)); + if (strlen(search_str) > 0) { + const char *str = msg_ui_thread_make_search_result_string(buf, search_str, &result); + free(search_str); + return strdup(str); + } + } + } else if (g_strcmp0(part, "elm.text.4") == 0) { + if (item_data->is_read == 0) + snprintf(buf, sizeof(buf), "1"); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part = %s", part); + return NULL; + } + + return strdup(buf); +} + +Evas_Object *msg_ui_thread_msg_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + PMSG_THREAD_LIST_DATA pListData = msg_ui_thread_get_current_list(); + PMSG_APP_THREAD_MSG_DATA_S item_data = (PMSG_APP_THREAD_MSG_DATA_S)data; + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL); + + Evas_Object *ic = NULL; + + if (g_strcmp0(part, "elm.icon.1") == 0) { + if (item_data->msg_type == MSG_TYPE_SMS_CB) { + ic = elm_icon_add(obj); + elm_icon_file_set(ic, MSG_UI_THREAD_LIST_CB_ICON, NULL); + } else if (item_data->msg_type == MSG_TYPE_SMS_WAPPUSH) { + ic = elm_icon_add(obj); + elm_icon_file_set(ic, MSG_UI_THREAD_LIST_PUSH_ICON, NULL); + } else if (item_data->msg_type == MSG_TYPE_SMS_SYNCML) { + ic = elm_icon_add(obj); + elm_icon_file_set(ic, MSG_UI_THREAD_LIST_OTA_ICON, NULL); + } + + if (ic) { + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + evas_object_show(ic); + } + } else if (g_strcmp0(part, "elm.slide.swallow.1") == 0) { + ic = elm_button_add(obj); + elm_object_style_set(ic, "sweep/delete"); + elm_object_text_set(ic, dgettext("sys_string", "IDS_COM_SK_DELETE")); + evas_object_data_set(ic, "sel_peer_data", (void *) item_data); + evas_object_smart_callback_add(ic, "clicked", msg_ui_thread_sweep_btn_cb, (void *) pListData); + } + + if (elm_genlist_decorate_mode_get(obj)) { + if (!strcmp(part, "elm.edit.icon.1")) { + ic = elm_check_add(obj); + elm_check_state_pointer_set(ic, &item_data->is_check); + evas_object_data_set(ic, "item_data", item_data); + evas_object_smart_callback_add(ic, "changed", msg_ui_thread_list_checked_cb, (void *) pListData); + item_data->chk = ic; + } + } + + return ic; +} + +void msg_ui_thread_msg_gl_del(void *data, Evas_Object *obj) +{ + PMSG_APP_THREAD_MSG_DATA_S del_data = (PMSG_APP_THREAD_MSG_DATA_S) data; + if (del_data) { + if (del_data->msg_time) { + free(del_data->msg_time); + del_data->msg_time = NULL; + } + free(del_data); + del_data = NULL; + } +} + +void msg_ui_thread_msg_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA) data; Elm_Object_Item *item = NULL; - PMSG_APP_THREAD_DATA_S item_data = NULL; - bundle *b = NULL; + Elm_Object_Item* it_sweep = NULL; + + PMSG_APP_THREAD_MSG_DATA_S item_data = NULL; + service_h svc_handle = NULL; item = (Elm_Object_Item *) event_info; MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, !item, "Item is NULL or Item is not Message item\n"); - item_data = (PMSG_APP_THREAD_DATA_S) elm_object_item_data_get(item); + item_data = (PMSG_APP_THREAD_MSG_DATA_S) elm_object_item_data_get(item); MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, item_data == NULL, "item_data is NULL"); - - MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, pData->sel_thread_id == item_data->threadId, "Already selected item."); + MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, pListData->sel_msg_id == item_data->msg_id, "Already selected item"); elm_genlist_item_selected_set(item, 0); - switch (pData->viewmode) { + it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist); + if (it_sweep) { + elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT); + } + + switch (pListData->view_mode) { case THREAD_NORMAL_VIEW: case THREAD_UNLOAD_VIEW: - pData->sel_gen_item = item; - pData->sel_thread_id = item_data->threadId; - - b = msg_ui_thread_get_bubble_data(item_data); - - if (msg_ui_load_composer_ug(b) == MSG_UI_RET_ERR) - D_MSG("Failed to load composer ug"); - - if (b) - bundle_free(b); + if (pListData->list_type >= THREAD_SPAM_LIST_TYPE) { + pListData->sel_gen_item = item; + pListData->sel_msg_id = item_data->msg_id; + + /** update read status */ + msg_update_read_status(msg_ui_thread_get_data_handle(), item_data->msg_id, true); + + if (item_data->msg_type == MSG_TYPE_MMS) { + /** in case of MMS launch MMS viewer UG */ + msg_ui_thread_launch_viewer_ug(pListData, pListData->sel_msg_id); + } else { + /** in case of sms, its own SMS viewer view */ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "type SMS"); + msg_ui_thread_launch_msg_detail_view(pListData, item_data); + } + } else { + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + msg_struct_t threadInfo = NULL; + PMSG_APP_THREAD_DATA_S thread_data = NULL; + msg_error_t err = MSG_SUCCESS; + int thread_id = 0; + + err = msg_get_message(msg_ui_thread_get_data_handle(), (msg_message_id_t)item_data->msg_id, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message() is failed : err = %d", err); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } + msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id); + + pListData->sel_gen_item = item; + pListData->sel_msg_id = item_data->msg_id; + + threadInfo = msg_create_struct(MSG_STRUCT_THREAD_INFO); + err = msg_get_thread(msg_ui_thread_get_data_handle(), thread_id, threadInfo); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message() is failed : err = %d", err); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + msg_release_struct(&threadInfo); + return; + } + + thread_data = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S)); + msg_ui_thread_set_thread_data(pListData, thread_data, threadInfo); + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + msg_ui_thread_get_bubble_data(thread_data, svc_handle); + + if (msg_ui_load_composer_ug(svc_handle) == MSG_UI_RET_ERR) + D_MSG("Failed to load composer ug"); + + + service_destroy(svc_handle); + } + + if (thread_data) + free(thread_data); + + msg_release_struct(&threadInfo); + msg_release_struct(&sendOpt); + msg_release_struct(&msgInfo); + } - item_data->unreadCnt = 0; - elm_genlist_item_update(item); + item_data->is_read = true; + //elm_genlist_item_update(item); break; case THREAD_EDIT_VIEW: - item_data->isCheck = !item_data->isCheck; + item_data->is_check = !item_data->is_check; elm_genlist_item_fields_update(item, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT); evas_object_smart_callback_call(item_data->chk, "changed", NULL); break; @@ -272,6 +661,20 @@ void msg_ui_thread_gl_sel(void *data, Evas_Object *obj, void *event_info) MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } +char *msg_ui_thread_gl_empty_get(void *data, Evas_Object *obj, const char *part) +{ + char buf[DEF_BUF_LEN] = { '0', }; + + PMSG_THREAD_LIST_DATA pListData = msg_ui_thread_get_current_list(); + + if (pListData && pListData->search_mode == THREAD_SEARCH_ON) + snprintf(buf, sizeof(buf), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_SEARCH_RESULTS")); + else + snprintf(buf, sizeof(buf), "%s", dgettext("sys_string", "IDS_COM_POP_EMPTY")); + + return strdup(buf); +} + void msg_ui_thread_gl_empty_sel(void *data, Evas_Object *obj, void *event_info) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); @@ -286,212 +689,1178 @@ void msg_ui_thread_gl_empty_sel(void *data, Evas_Object *obj, void *event_info) MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } -void msg_ui_thread_list_load(PMSG_THREAD_DATA ThreadData) +char *msg_ui_thread_date_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + PMSG_APP_THREAD_DATELINE_DATA_S item_data = (PMSG_APP_THREAD_DATELINE_DATA_S) data; + char *date_str = NULL; + char buf[DEF_BUF_LEN] = { 0, }; + + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !pData || !item_data, NULL); + + if (0 == strcmp(part, "elm.text")) { + date_str = msg_common_get_display_date(pData->locale, pData->date_ptn, item_data->thread_time); + + if (date_str) { + snprintf(buf, sizeof(buf), " %s ", date_str); + free(date_str); + } + return strdup(buf); + } else { + return NULL; + } +} + +void msg_ui_thread_date_gl_del(void *data, Evas_Object *obj) +{ + PMSG_APP_THREAD_DATELINE_DATA_S del_data = (PMSG_APP_THREAD_DATELINE_DATA_S) data; + + if (del_data) { + if (del_data->thread_time) { + free(del_data->thread_time); + del_data->thread_time = NULL; + } + free(del_data); + del_data = NULL; + } +} + +PMSG_APP_THREAD_DATELINE_DATA_S msg_ui_thread_list_insert_dateline(PMSG_THREAD_LIST_DATA pListData, time_t* cur_time, time_t* prev_time) +{ + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL; + + char *date_str = NULL; + char cur_date_buf[DEF_BUF_LEN+1] = { 0, }; + char prev_date_buf[DEF_BUF_LEN+1] = { 0, }; + + date_str = msg_common_get_display_date(pData->locale, pData->date_ptn, cur_time); + if (date_str) { + snprintf(cur_date_buf, sizeof(cur_date_buf), " %s ", date_str); + free(date_str); + date_str = NULL; + } + + if (prev_time != NULL) { + date_str = msg_common_get_display_date(pData->locale, pData->date_ptn, prev_time); + if (date_str) { + snprintf(prev_date_buf, sizeof(prev_date_buf), " %s ", date_str); + free(date_str); + date_str = NULL; + } + } + + if (!prev_time ||g_strcmp0(cur_date_buf, prev_date_buf) != 0) { + dateline_data = (PMSG_APP_THREAD_DATELINE_DATA_S) calloc(1, sizeof(PMSG_APP_THREAD_DATELINE_DATA_S)); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !dateline_data, NULL); + bzero(dateline_data, sizeof(dateline_data)); + + dateline_data->thread_time = (time_t *) calloc(1, sizeof(time_t)); + bzero(dateline_data->thread_time, sizeof(time_t)); + memcpy(dateline_data->thread_time, cur_time, sizeof(time_t)); + + dateline_data->subitem_cnt = 0; + dateline_data->date_it = elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_DATE), dateline_data, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL); + elm_genlist_item_select_mode_set(dateline_data->date_it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + } + + return dateline_data; +} + +void msg_ui_thread_list_load(PMSG_THREAD_LIST_DATA pListData, Eina_Bool bLaunch) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - if (!ThreadData) + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + + if (!pListData){ + D_MSG("[ERROR] pListData is NULL"); return; + } - MSG_ERROR_T err = MSG_SUCCESS; - MSG_SORT_RULE_S sortRule = { 0, }; - MSG_THREAD_VIEW_LIST_S peerList = { 0, }; - PMSG_APP_THREAD_DATA_S cur_sel_thread = NULL; - int row; + msg_error_t err = MSG_SUCCESS; + msg_struct_t sort_rule_t = msg_create_struct(MSG_STRUCT_SORT_RULE); + msg_struct_list_s peerList; - msg_ui_thread_init_genlist(ThreadData); + __msg_ui_thread_init_genlist(pListData); - sortRule.sortType = MSG_SORT_BY_THREAD_DATE; - sortRule.bAscending = false; + msg_set_int_value(sort_rule_t, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE); + msg_set_bool_value(sort_rule_t, MSG_SORT_RULE_ACSCEND_BOOL, false); - err = msg_get_thread_view_list(ThreadData->msgHandle, &sortRule, &peerList); + err = msg_get_thread_view_list(pData->msgHandle, sort_rule_t, &peerList); + msg_release_struct(&sort_rule_t); MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "peercount : %d, err : %d", peerList.nCount, err); - ThreadData->thread_cnt = peerList.nCount; + pListData->item_cnt = peerList.nCount; - Evas_Object *swl_ly = elm_object_part_content_get(ThreadData->content_ly, "thread_list"); + Evas_Object *swl_ly = elm_object_part_content_get(pListData->content_ly, "thread_list"); - if (peerList.nCount <= 0 || err != MSG_SUCCESS) { - elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); + pListData->app_data_type = THREAD_LIST_APP_DATA_THREAD; + msg_ui_thread_genlist_style_set(pListData); - if (!ThreadData->noc_ly) - ThreadData->noc_ly = msg_ui_thread_create_nocontent_layout(ThreadData); + if (peerList.nCount <= 0 || err != MSG_SUCCESS) { + if (!pListData->noc_ly) + pListData->noc_ly = msg_ui_thread_create_nocontent_layout(pData->navi_frame); - if (swl_ly != ThreadData->noc_ly) { + if (swl_ly != pListData->noc_ly) { evas_object_hide(swl_ly); - elm_object_part_content_unset(ThreadData->content_ly, "thread_list"); - elm_object_part_content_set(ThreadData->content_ly, "thread_list", ThreadData->noc_ly); + elm_object_part_content_unset(pListData->content_ly, "thread_list"); + elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->noc_ly); } + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); + } else { - if (swl_ly != ThreadData->genlist) { + if (swl_ly != pListData->genlist) { evas_object_hide(swl_ly); - elm_object_part_content_unset(ThreadData->content_ly, "thread_list"); - elm_object_part_content_set(ThreadData->content_ly, "thread_list", ThreadData->genlist); + elm_object_part_content_unset(pListData->content_ly, "thread_list"); + elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist); } - elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_1], EINA_FALSE); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_FALSE); - for (row = 0; row < peerList.nCount; row++) { - cur_sel_thread = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S)); - msg_ui_thread_set_msg_data(cur_sel_thread, peerList.msgThreadInfo[row]); + PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL; + PMSG_APP_THREAD_DATA_S cur_thread = NULL; + PMSG_APP_THREAD_DATA_S prev_thread = NULL; + int row = 0; + int load_cnt = 0; - elm_genlist_item_append(ThreadData->genlist, ThreadData->itc, cur_sel_thread, NULL, ELM_GENLIST_ITEM_NONE, msg_ui_thread_gl_sel, ThreadData); + if (peerList.nCount > MSG_THREAD_LIST_LAUNCH_LOAD_MAX_CNT && bLaunch == TRUE) { + pListData->loaded_cnt = MSG_THREAD_LIST_LAUNCH_LOAD_MAX_CNT; + load_cnt = pListData->loaded_cnt; + + if (pListData->launch_idler == NULL) + pListData->launch_idler = ecore_idler_add(__msg_ui_thread_msg_list_load_remain_item, pListData); + } else { + load_cnt = peerList.nCount; } - msg_release_thread_view_list(&peerList); + for (row = 0; row < load_cnt; row++) { + PMSG_APP_THREAD_DATELINE_DATA_S tmp_date_line = NULL; + Elm_Object_Item *item = NULL; + + cur_thread = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S)); + msg_ui_thread_set_thread_data(pListData, cur_thread, peerList.msg_struct_info[row]); + + if (prev_thread) + tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_thread->thread_time, prev_thread->thread_time); + else + tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_thread->thread_time, NULL); + + if (tmp_date_line != NULL) + dateline_data = tmp_date_line; + item = dateline_data->date_it; + + if (cur_thread->unread_cnt > 0) + elm_genlist_item_append(pListData->genlist, &pListData->itc_unread, cur_thread, item, ELM_GENLIST_ITEM_NONE, __msg_ui_thread_gl_sel, pListData); + else + elm_genlist_item_append(pListData->genlist, &pListData->itc_default, cur_thread, item, ELM_GENLIST_ITEM_NONE, __msg_ui_thread_gl_sel, pListData); + + if (dateline_data != NULL) + dateline_data->subitem_cnt++; + + prev_thread = cur_thread; + } + + msg_release_list_struct(&peerList); } MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); - } -void msg_ui_thread_list_update(PMSG_THREAD_DATA ThreadData) +void msg_ui_thread_list_update(PMSG_THREAD_LIST_DATA pListData) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - if (!ThreadData) + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + + if (!pListData){ + D_MSG("[ERROR] pListData is NULL"); return; + } - MSG_ERROR_T err = MSG_SUCCESS; - MSG_SORT_RULE_S sortRule = { 0, }; - MSG_THREAD_VIEW_LIST_S peerList = { 0, }; + msg_error_t err = MSG_SUCCESS; + msg_struct_t sort_rule_t = msg_create_struct(MSG_STRUCT_SORT_RULE); + msg_struct_list_s peerList; PMSG_APP_THREAD_DATA_S cur_sel_thread = NULL; Elm_Object_Item *gen_item = NULL; int row = 0; - Evas_Object *swl_ly = elm_object_part_content_get(ThreadData->content_ly, "thread_list"); + Evas_Object *swl_ly = elm_object_part_content_get(pListData->content_ly, "thread_list"); + + msg_set_int_value(sort_rule_t, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE); + msg_set_bool_value(sort_rule_t, MSG_SORT_RULE_ACSCEND_BOOL, false); - sortRule.sortType = MSG_SORT_BY_THREAD_DATE; - sortRule.bAscending = false; + err = msg_get_thread_view_list(pData->msgHandle, sort_rule_t, &peerList); + msg_release_struct(&sort_rule_t); - err = msg_get_thread_view_list(ThreadData->msgHandle, &sortRule, &peerList); + pListData->item_cnt = peerList.nCount; if (peerList.nCount <= 0 || err != MSG_SUCCESS) { - elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); - if (!ThreadData->noc_ly) - ThreadData->noc_ly = msg_ui_thread_create_nocontent_layout(ThreadData); + if (!pListData->noc_ly) + pListData->noc_ly = msg_ui_thread_create_nocontent_layout(pData->navi_frame); - if (swl_ly != ThreadData->noc_ly) { + if (swl_ly != pListData->noc_ly) { evas_object_hide(swl_ly); - elm_object_part_content_unset(ThreadData->content_ly, "thread_list"); - elm_object_part_content_set(ThreadData->content_ly, "thread_list", ThreadData->noc_ly); + elm_object_part_content_unset(pListData->content_ly, "thread_list"); + elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->noc_ly); } } else { - if (swl_ly != ThreadData->genlist) { + if (swl_ly != pListData->genlist) { evas_object_hide(swl_ly); - elm_object_part_content_unset(ThreadData->content_ly, "thread_list"); - elm_object_part_content_set(ThreadData->content_ly, "thread_list", ThreadData->genlist); + elm_object_part_content_unset(pListData->content_ly, "thread_list"); + elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist); } - elm_object_item_disabled_set(ThreadData->toolbar_item[CONTROLBAR_ITEM_2], EINA_FALSE); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_FALSE); - gen_item = elm_genlist_first_item_get(ThreadData->genlist); + gen_item = elm_genlist_first_item_get(pListData->genlist); + + while (gen_item) { + if (elm_genlist_item_parent_get(gen_item) == NULL) { + gen_item = elm_genlist_item_next_get(gen_item); + continue; + } - while(gen_item) { cur_sel_thread = elm_object_item_data_get(gen_item); - msg_ui_thread_set_msg_data(cur_sel_thread, peerList.msgThreadInfo[row]); + msg_ui_thread_set_thread_data(pListData, cur_sel_thread, peerList.msg_struct_info[row]); + if (cur_sel_thread->unread_cnt > 0) + elm_genlist_item_item_class_update(gen_item, &pListData->itc_unread); + else + elm_genlist_item_item_class_update(gen_item, &pListData->itc_default); elm_object_item_data_set(gen_item, cur_sel_thread); gen_item = elm_genlist_item_next_get(gen_item); row++; } } - msg_release_thread_view_list(&peerList); - - elm_genlist_realized_items_update(ThreadData->genlist); + msg_release_list_struct(&peerList); + elm_genlist_realized_items_update(pListData->genlist); MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } -void msg_ui_thread_list_item_update(PMSG_THREAD_DATA ThreadData, MSG_THREAD_ID_T threadId) +void msg_ui_thread_list_item_update(PMSG_THREAD_LIST_DATA pListData, msg_thread_id_t thread_id) { MSG_UI_ENTER(); - MSG_ERROR_T err = MSG_SUCCESS; - MSG_SORT_RULE_S sortRule = { 0, }; - MSG_THREAD_VIEW_LIST_S peerList = { 0, }; - PMSG_APP_THREAD_DATA_S item_data = NULL; - PMSG_APP_THREAD_DATA_S insert_data = NULL; + msg_error_t err = MSG_SUCCESS; + msg_struct_t sort_rule_t = msg_create_struct(MSG_STRUCT_SORT_RULE); + msg_struct_list_s peerList; + PMSG_APP_THREAD_DATA_S old_data = NULL; + PMSG_APP_THREAD_DATA_S new_data = NULL; int row = 0; Elm_Object_Item *gen_item = NULL; - sortRule.sortType = MSG_SORT_BY_THREAD_DATE; - sortRule.bAscending = false; + msg_set_int_value(sort_rule_t, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE); + msg_set_bool_value(sort_rule_t, MSG_SORT_RULE_ACSCEND_BOOL, false); - err = msg_get_thread_view_list(ThreadData->msgHandle, &sortRule, &peerList); + err = msg_get_thread_view_list(msg_ui_thread_get_data_handle(), sort_rule_t, &peerList); + msg_release_struct(&sort_rule_t); MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS); - gen_item = elm_genlist_first_item_get(ThreadData->genlist); + gen_item = elm_genlist_first_item_get(pListData->genlist); /* Update genlist item */ while (gen_item) { - item_data = (PMSG_APP_THREAD_DATA_S) elm_object_item_data_get(gen_item); - if (item_data && threadId == item_data->threadId) { + if (elm_genlist_item_parent_get(gen_item) == NULL) { + gen_item = elm_genlist_item_next_get(gen_item); + continue; + } + + old_data = (PMSG_APP_THREAD_DATA_S) elm_object_item_data_get(gen_item); + if (old_data && thread_id == old_data->thread_id) { break; } gen_item = elm_genlist_item_next_get(gen_item); } - if (!gen_item) + if (!gen_item) { + D_EMSG("gen_item is NULL"); + msg_release_list_struct(&peerList); return; + } for (row = 0; row < peerList.nCount; row++) { - if (msg_thread_view_get_thread_id(peerList.msgThreadInfo[row]) == threadId) { - insert_data = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S)); - if (!insert_data) + int sel_thread_id = 0; + msg_get_int_value(peerList.msg_struct_info[row], MSG_THREAD_ID_INT, &sel_thread_id); + if (sel_thread_id == thread_id) { + new_data = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S)); + if (!new_data) + break; + + msg_ui_thread_set_thread_data(pListData, new_data, peerList.msg_struct_info[row]); + break; + } + } + + msg_release_list_struct(&peerList); + + if (!new_data) { + D_EMSG("new_data is NULL"); + return; + } + + new_data->chk = old_data->chk; + new_data->is_check = old_data->is_check; + + if (new_data->unread_cnt > 0) + elm_genlist_item_item_class_update(gen_item, &pListData->itc_unread); + else + elm_genlist_item_item_class_update(gen_item, &pListData->itc_default); + elm_object_item_data_set(gen_item, new_data); + elm_genlist_item_update(gen_item); + + if (pListData->view_mode == THREAD_EDIT_VIEW) { + if (eina_list_data_find(pListData->chk_list, old_data)) { + pListData->chk_list = eina_list_remove(pListData->chk_list, old_data); + pListData->chk_list = eina_list_append(pListData->chk_list, new_data); + } + } + + if (old_data) { + if (old_data->thread_time) { + free(old_data->thread_time); + old_data->thread_time = NULL; + } + free(old_data); + } + + MSG_UI_LEAVE(); +} + +void msg_ui_thread_list_item_delete(PMSG_THREAD_LIST_DATA pListData, msg_thread_id_t thread_id) +{ + MSG_UI_ENTER(); + + PMSG_APP_THREAD_DATA_S item_data = NULL; + Elm_Object_Item *gen_item = NULL; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "thread_id = [%d] ", thread_id); + + gen_item = elm_genlist_first_item_get(pListData->genlist); + + while (gen_item) { + if (elm_genlist_item_parent_get(gen_item) == NULL) { + gen_item = elm_genlist_item_next_get(gen_item); + continue; + } + + item_data = (PMSG_APP_THREAD_DATA_S) elm_object_item_data_get(gen_item); + if (item_data && thread_id == item_data->thread_id) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "thread_id == item_data->thread_id == [%d] ", thread_id); + break; + } + gen_item = elm_genlist_item_next_get(gen_item); + } + + if (!gen_item) { + D_EMSG("gen_item is NULL"); + return; + } + + Elm_Object_Item *it_dateline = NULL; + PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL; + + it_dateline = elm_genlist_item_parent_get(gen_item); + if (it_dateline) { + dateline_data = elm_object_item_data_get(it_dateline); + + if (dateline_data) { + dateline_data->subitem_cnt--; + if (dateline_data->subitem_cnt == 0) + elm_object_item_del((Elm_Object_Item *)it_dateline); + } + } + elm_object_item_del((Elm_Object_Item *)gen_item); + pListData->item_cnt--; + + if (pListData->item_cnt <= 0) { + msg_ui_thread_list_load(pListData, FALSE); + } + + MSG_UI_LEAVE(); +} + +void msg_ui_thread_msg_list_load(PMSG_THREAD_LIST_DATA pListData, int listType) +{ + D_ENTER; + + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + msg_error_t err = MSG_SUCCESS; + msg_struct_list_s msg_list; + + if (!pListData){ + D_MSG("[ERROR] pListData is NULL"); + return; + } + + __msg_ui_thread_init_genlist(pListData); + + switch (listType) { + case THREAD_SPAM_LIST_TYPE: + err = msg_get_message_list(pData->msgHandle, MSG_SPAMBOX_ID, 0, 0, 0, &msg_list); + break; + case THREAD_SIM_LIST_TYPE: + err = msg_get_message_list(pData->msgHandle, MSG_ALLBOX_ID, 0, MSG_TYPE_SMS, MSG_STORAGE_SIM, &msg_list); + break; + case THREAD_CBMSG_LIST_TYPE: + err = msg_get_message_list(pData->msgHandle, MSG_CBMSGBOX_ID, 0, 0, 0, &msg_list); + break; + case THREAD_DRAFT_LIST_TYPE: + case THREAD_LOCKED_LIST_TYPE: + case THREAD_SCHEDULED_LIST_TYPE: + default: + D_MSG("[WARNING] invalid view mode"); + return; + } + + if (err != MSG_SUCCESS && err != MSG_ERR_DB_NORECORD) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message_list() is failed = %d", err); + return; + } + pListData->item_cnt = msg_list.nCount; + + Evas_Object *swl_ly = elm_object_part_content_get(pListData->content_ly, "thread_list"); + + if (pListData->item_cnt == 0) { + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); + // show non cotent + if (!pListData->noc_ly) + pListData->noc_ly = msg_ui_thread_create_nocontent_layout(pData->navi_frame); + + if (swl_ly != pListData->noc_ly) { + evas_object_hide(swl_ly); + elm_object_part_content_unset(pListData->content_ly, "thread_list"); + elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->noc_ly); + } + } else { + // fill the genlist + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_FALSE); + + pListData->app_data_type = THREAD_LIST_APP_DATA_MSG; + msg_ui_thread_genlist_style_set(pListData); + + if (swl_ly != pListData->genlist) { + evas_object_hide(swl_ly); + elm_object_part_content_unset(pListData->content_ly, "thread_list"); + elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist); + } + + PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL; + PMSG_APP_THREAD_MSG_DATA_S cur_item = NULL; + PMSG_APP_THREAD_MSG_DATA_S prev_item = NULL; + int row = 0; + + for (row = 0; row < msg_list.nCount; row++) { + PMSG_APP_THREAD_DATELINE_DATA_S tmp_date_line = NULL; + Elm_Object_Item *item = NULL; + + cur_item = (PMSG_APP_THREAD_MSG_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_MSG_DATA_S)); + msg_ui_thread_set_msg_data(cur_item, msg_list.msg_struct_info[row]); + + if (prev_item) + tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_item->msg_time, prev_item->msg_time); + else + tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_item->msg_time, NULL); + + if (tmp_date_line != NULL) + dateline_data = tmp_date_line; + + item = dateline_data->date_it; + + if (cur_item->is_read == 0) + elm_genlist_item_append(pListData->genlist, &pListData->itc_unread, cur_item, item, ELM_GENLIST_ITEM_NONE, msg_ui_thread_msg_gl_sel, (void *)pListData); + else + elm_genlist_item_append(pListData->genlist, &pListData->itc_default, cur_item, item, ELM_GENLIST_ITEM_NONE, msg_ui_thread_msg_gl_sel, (void *)pListData); + + if (dateline_data != NULL) + dateline_data->subitem_cnt++; + + prev_item = cur_item; + } + } + msg_release_list_struct(&msg_list); + + D_LEAVE; +} + +void msg_ui_thread_list_msg_list_update(PMSG_THREAD_LIST_DATA pListData) +{ + MSG_UI_ENTER(); + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + + if (!pListData){ + D_MSG("[ERROR] pListData is NULL"); + return; + } + + PMSG_APP_THREAD_MSG_DATA_S item_data = NULL; + int row = 0; + Elm_Object_Item *gen_item = NULL; + Evas_Object *entry = NULL; + + msg_error_t err = MSG_SUCCESS; + msg_struct_list_s msg_list; + + Evas_Object *swl_ly = elm_object_part_content_get(pListData->content_ly, "thread_list"); + + if (pListData->search_mode == THREAD_SEARCH_ON) { + msg_struct_t search_s = msg_create_struct(MSG_STRUCT_SEARCH_CONDITION); + char *search_str = NULL; + + if (pListData->searchbar) { + entry = elm_object_part_content_get(pListData->searchbar, "elm.swallow.content"); + search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry)); + } + + if (!search_str || strlen(search_str) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "empty search_str"); + elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,open", ""); + + if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) { + msg_ui_thread_list_update(pListData); + return; + } + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search string word = [%s] ", search_str); + + switch (pListData->list_type) { + case THREAD_NORMAL_LIST_TYPE: + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID); + break; + case THREAD_SPAM_LIST_TYPE: + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_SPAMBOX_ID); + break; + case THREAD_SIM_LIST_TYPE: + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID); + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_MSGTYPE_INT, MSG_TYPE_SMS); + break; + case THREAD_CBMSG_LIST_TYPE: + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_CBMSGBOX_ID); + break; + case THREAD_DRAFT_LIST_TYPE: + case THREAD_LOCKED_LIST_TYPE: + case THREAD_SCHEDULED_LIST_TYPE: + default: + D_MSG("[WARNING] invalid view mode"); + return; + } + msg_set_str_value(search_s, MSG_SEARCH_CONDITION_SEARCH_VALUE_STR, search_str, strlen(search_str)); + + err = msg_search_message(pData->msgHandle, search_s, 0, 0, &msg_list); + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS); + } else { + switch (pListData->list_type) { + case THREAD_SPAM_LIST_TYPE: + err = msg_get_message_list(pData->msgHandle, MSG_SPAMBOX_ID, 0, 0, 0, &msg_list); + break; + case THREAD_SIM_LIST_TYPE: + err = msg_get_message_list(pData->msgHandle, MSG_ALLBOX_ID, 0, MSG_TYPE_SMS, MSG_STORAGE_SIM, &msg_list); + break; + case THREAD_CBMSG_LIST_TYPE: + err = msg_get_message_list(pData->msgHandle, MSG_CBMSGBOX_ID, 0, 0, 0, &msg_list); + break; + case THREAD_DRAFT_LIST_TYPE: + case THREAD_LOCKED_LIST_TYPE: + case THREAD_SCHEDULED_LIST_TYPE: + default: + D_MSG("[WARNING] invalid view mode"); return; + } + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS); + } + pListData->item_cnt = msg_list.nCount; + + if (msg_list.nCount <= 0 || err != MSG_SUCCESS) { + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); + + if (!pListData->noc_ly) + pListData->noc_ly = msg_ui_thread_create_nocontent_layout(pData->navi_frame); + + if (swl_ly != pListData->noc_ly) { + evas_object_hide(swl_ly); + elm_object_part_content_unset(pListData->content_ly, "thread_list"); + elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->noc_ly); + } + } else { + if (swl_ly != pListData->genlist) { + evas_object_hide(swl_ly); + elm_object_part_content_unset(pListData->content_ly, "thread_list"); + elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist); + } + + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_FALSE); + + gen_item = elm_genlist_first_item_get(pListData->genlist); + + while (gen_item) { + if (elm_genlist_item_parent_get(gen_item) == NULL) { + gen_item = elm_genlist_item_next_get(gen_item); + continue; + } + + item_data = elm_object_item_data_get(gen_item); + msg_ui_thread_set_msg_data(item_data, msg_list.msg_struct_info[row]); + if (pListData->search_mode == THREAD_SEARCH_ON) { + if (item_data->is_read == 0) + elm_genlist_item_item_class_update(gen_item, &pData->itc_search_unread); + else + elm_genlist_item_item_class_update(gen_item, &pData->itc_search); + } else { + if (item_data->is_read == 0) + elm_genlist_item_item_class_update(gen_item, &pListData->itc_unread); + else + elm_genlist_item_item_class_update(gen_item, &pListData->itc_default); + } + + elm_object_item_data_set(gen_item, item_data); + gen_item = elm_genlist_item_next_get(gen_item); + row++; + } + } + + msg_release_list_struct(&msg_list); + elm_genlist_realized_items_update(pListData->genlist); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_thread_list_msg_item_update(PMSG_THREAD_LIST_DATA pListData, msg_message_id_t msg_id) +{ + MSG_UI_ENTER(); + + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + PMSG_APP_THREAD_MSG_DATA_S old_data = NULL; + PMSG_APP_THREAD_MSG_DATA_S new_data = NULL; + int row = 0; + Elm_Object_Item *gen_item = NULL; + Evas_Object *entry = NULL; + + msg_error_t err = MSG_SUCCESS; + msg_struct_list_s msg_list; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_id = [%d] ", msg_id); - msg_ui_thread_set_msg_data(insert_data, peerList.msgThreadInfo[row]); + if (pListData->search_mode == THREAD_SEARCH_ON) { + msg_struct_t search_s = msg_create_struct(MSG_STRUCT_SEARCH_CONDITION); + char *search_str = NULL; + + if (pListData->searchbar) { + entry = elm_object_part_content_get(pListData->searchbar, "elm.swallow.content"); + search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry)); + } + + if (!search_str || strlen(search_str) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "empty search_str"); + elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,open", ""); + + if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) { + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + int thread_id = 0; + + err = msg_get_message(pData->msgHandle, msg_id, msgInfo, sendOpt); + msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + + msg_ui_thread_list_item_update(pListData, thread_id); + return; + } + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search string word = [%s] ", search_str); + + switch (pListData->list_type) { + case THREAD_NORMAL_LIST_TYPE: + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID); + break; + case THREAD_SPAM_LIST_TYPE: + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_SPAMBOX_ID); + break; + case THREAD_SIM_LIST_TYPE: + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID); + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_MSGTYPE_INT, MSG_TYPE_SMS); + break; + case THREAD_CBMSG_LIST_TYPE: + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_CBMSGBOX_ID); + break; + case THREAD_DRAFT_LIST_TYPE: + case THREAD_LOCKED_LIST_TYPE: + case THREAD_SCHEDULED_LIST_TYPE: + default: + D_MSG("[WARNING] invalid view mode"); + return; + } + msg_set_str_value(search_s, MSG_SEARCH_CONDITION_SEARCH_VALUE_STR, search_str, strlen(search_str)); + + err = msg_search_message(pData->msgHandle, search_s, 0, 0, &msg_list); + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS); + } else { + switch (pListData->list_type) { + case THREAD_SPAM_LIST_TYPE: + err = msg_get_message_list(pData->msgHandle, MSG_SPAMBOX_ID, 0, 0, 0, &msg_list); + break; + case THREAD_SIM_LIST_TYPE: + err = msg_get_message_list(pData->msgHandle, MSG_ALLBOX_ID, 0, MSG_TYPE_SMS, MSG_STORAGE_SIM, &msg_list); + break; + case THREAD_CBMSG_LIST_TYPE: + err = msg_get_message_list(pData->msgHandle, MSG_CBMSGBOX_ID, 0, 0, 0, &msg_list); + break; + case THREAD_DRAFT_LIST_TYPE: + case THREAD_LOCKED_LIST_TYPE: + case THREAD_SCHEDULED_LIST_TYPE: + default: + D_MSG("[WARNING] invalid view mode"); + return; + } + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, err != MSG_SUCCESS); + } + + gen_item = elm_genlist_first_item_get(pListData->genlist); + + /* Update genlist item */ + while (gen_item) { + if (elm_genlist_item_parent_get(gen_item) == NULL) { + gen_item = elm_genlist_item_next_get(gen_item); + continue; + } + + old_data = (PMSG_APP_THREAD_MSG_DATA_S) elm_object_item_data_get(gen_item); + if (old_data && msg_id == old_data->msg_id) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_id == item_data->msg_id == [%d] ", msg_id); break; } + gen_item = elm_genlist_item_next_get(gen_item); } - msg_release_thread_view_list(&peerList); + if (!gen_item) { + D_EMSG("gen_item is NULL"); + msg_release_list_struct(&msg_list); + return; + } - insert_data->chk = item_data->chk; - insert_data->isCheck = item_data->isCheck; + for (row = 0; row <msg_list.nCount; row++) { + int row_msg_id = 0; + msg_get_int_value(msg_list.msg_struct_info[row], MSG_MESSAGE_ID_INT, &row_msg_id); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_list.msgInfo[row]'s msgID = [%d] row = %d ", row_msg_id, row); + if (row_msg_id == msg_id) { + new_data = (PMSG_APP_THREAD_MSG_DATA_S)calloc(1, sizeof(MSG_APP_THREAD_MSG_DATA_S)); + if (!new_data) + break; + + msg_ui_thread_set_msg_data(new_data, msg_list.msg_struct_info[row]); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "find row = %d ", row); + break; + } + } + msg_release_list_struct(&msg_list); + + if (!new_data) { + D_EMSG("new_data is NULL"); + return; + } - elm_object_item_data_set(gen_item, insert_data); + new_data->chk = old_data->chk; + new_data->is_check = old_data->is_check; + + if (pListData->search_mode == THREAD_SEARCH_ON) { + if (new_data->is_read == 0) + elm_genlist_item_item_class_update(gen_item, &pData->itc_search_unread); + else + elm_genlist_item_item_class_update(gen_item, &pData->itc_search); + } else { + if (new_data->is_read == 0) + elm_genlist_item_item_class_update(gen_item, &pListData->itc_unread); + else + elm_genlist_item_item_class_update(gen_item, &pListData->itc_default); + } + elm_object_item_data_set(gen_item, new_data); elm_genlist_item_update(gen_item); - if (ThreadData->viewmode == THREAD_EDIT_VIEW) { - if (eina_list_data_find(ThreadData->chk_list, item_data)) { - ThreadData->chk_list = eina_list_remove(ThreadData->chk_list, item_data); - ThreadData->chk_list = eina_list_append(ThreadData->chk_list, insert_data); + if (pListData->view_mode == THREAD_EDIT_VIEW) { + if (eina_list_data_find(pListData->chk_list, old_data)) { + pListData->chk_list = eina_list_remove(pListData->chk_list, old_data); + pListData->chk_list = eina_list_append(pListData->chk_list, new_data); } } - if (item_data) { - if (item_data->threadTime) { - free(item_data->threadTime); + if (old_data) { + if (old_data->msg_time) { + free(old_data->msg_time); + old_data->msg_time = NULL; + } + free(old_data); + } + + MSG_UI_LEAVE(); +} + +void msg_ui_thread_list_msg_item_delete(PMSG_THREAD_LIST_DATA pListData, msg_message_id_t msg_id) +{ + MSG_UI_ENTER(); + + PMSG_APP_THREAD_MSG_DATA_S item_data = NULL; + Elm_Object_Item *gen_item = NULL; + Elm_Object_Item *del_item = NULL; + Elm_Object_Item *it_dateline = NULL; + PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_id = [%d] ", msg_id); + + gen_item = elm_genlist_first_item_get(pListData->genlist); + + while (gen_item) { + if (elm_genlist_item_parent_get(gen_item) == NULL) { + gen_item = elm_genlist_item_next_get(gen_item); + continue; + } + + //120803 - can exist multiple message with the same address in search result list + item_data = (PMSG_APP_THREAD_MSG_DATA_S) elm_object_item_data_get(gen_item); + if (item_data && msg_id == item_data->msg_id) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_id == item_data->msg_id == [%d] ", msg_id); + + del_item = gen_item; + + it_dateline = elm_genlist_item_parent_get(gen_item); + if (it_dateline) { + dateline_data = elm_object_item_data_get(it_dateline); + + if (dateline_data) { + dateline_data->subitem_cnt--; + if (dateline_data->subitem_cnt == 0) + elm_object_item_del((Elm_Object_Item *)it_dateline); + } + } + } + gen_item = elm_genlist_item_next_get(gen_item); + + if (del_item) { + elm_object_item_del(del_item); + pListData->item_cnt--; + del_item = NULL; } - free(item_data); + } + + if (pListData->item_cnt <= 0) { + elm_genlist_clear(pListData->genlist); + elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_EMPTY), NULL, NULL, ELM_GENLIST_ITEM_NONE, msg_ui_thread_gl_empty_sel, NULL); } MSG_UI_LEAVE(); } -void msg_ui_thread_genlist_style_set(PMSG_THREAD_DATA ThreadData) + +Eina_Bool msg_ui_thread_search_msg_list_load(void *data) +{ + MSG_UI_ENTER(); + MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !data, EINA_FALSE); + + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + + Evas_Object *entry = NULL; + char *search_str = NULL; + + msg_struct_list_s search_msg_list; + msg_struct_t search_s = msg_create_struct(MSG_STRUCT_SEARCH_CONDITION); + msg_error_t err = MSG_SUCCESS; + int idx = 0; + + if (pListData->searchbar) { + entry = elm_object_part_content_get(pListData->searchbar, "elm.swallow.content"); + search_str = elm_entry_markup_to_utf8(elm_entry_entry_get(entry)); + } + + if (pListData->search_timer) { + ecore_timer_del(pListData->search_timer); + pListData->search_timer = NULL; + } + + if (!search_str || strlen(search_str) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "empty search_str"); + elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,open", ""); + + if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) + msg_ui_thread_list_load(pListData, FALSE); + else + msg_ui_thread_msg_list_load(pListData, pListData->list_type); + msg_release_struct(&search_s); + return EINA_FALSE; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search string word = [%s] ", search_str); + + if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) { + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID); + } else if (pListData->list_type == THREAD_SPAM_LIST_TYPE) { + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_SPAMBOX_ID); + } else if (pListData->list_type == THREAD_SIM_LIST_TYPE) { + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_ALLBOX_ID); + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_MSGTYPE_INT, MSG_TYPE_SMS); + } else if (pListData->list_type == THREAD_CBMSG_LIST_TYPE) { + msg_set_int_value(search_s, MSG_SEARCH_CONDITION_FOLDERID_INT, MSG_CBMSGBOX_ID); + } + msg_set_str_value(search_s, MSG_SEARCH_CONDITION_SEARCH_VALUE_STR, search_str, strlen(search_str)); + err = msg_search_message(msg_ui_thread_get_data_handle(), search_s, 0, 0, &search_msg_list); + pListData->item_cnt = search_msg_list.nCount; + + if (search_str) + free(search_str); + + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_search_message failed!! [%d]", err); + elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,open", ""); + + if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) + msg_ui_thread_list_load(pListData, FALSE); + else + msg_ui_thread_msg_list_load(pListData, pListData->list_type); + + msg_release_struct(&search_s); + return EINA_FALSE; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Search result [ count = %d ] ", search_msg_list.nCount); + + Evas_Object *swl_ly = elm_object_part_content_get(pListData->content_ly, "thread_list"); + + if (swl_ly != pListData->genlist) { + evas_object_hide(swl_ly); + elm_object_part_content_unset(pListData->content_ly, "thread_list"); + elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist); + } + + /** hide control bar */ + elm_genlist_clear(pListData->genlist); + elm_object_item_signal_emit(pListData->nf_it, "elm,state,controlbar,close", ""); + + if (search_msg_list.nCount > 0) { + PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL; + PMSG_APP_THREAD_MSG_DATA_S item_data = NULL; + PMSG_APP_THREAD_MSG_DATA_S prev_data = NULL; + int sim_msg_count = 0; + + pListData->app_data_type = THREAD_LIST_APP_DATA_MSG; + msg_ui_thread_genlist_style_set(pListData); + + while (idx < search_msg_list.nCount) { + PMSG_APP_THREAD_DATELINE_DATA_S tmp_date_line = NULL; + Elm_Object_Item *item = NULL; + + if (pListData->list_type == THREAD_SIM_LIST_TYPE) { + int storage_id = 0; + msg_get_int_value(search_msg_list.msg_struct_info[idx], MSG_MESSAGE_STORAGE_ID_INT, &storage_id); + + if (storage_id != MSG_STORAGE_SIM) { + idx++; + continue; + } else { + sim_msg_count++; + } + } + + item_data = (PMSG_APP_THREAD_MSG_DATA_S)calloc(1, sizeof(MSG_APP_THREAD_MSG_DATA_S)); + msg_ui_thread_set_msg_data(item_data, search_msg_list.msg_struct_info[idx]); + + if (prev_data) + tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, item_data->msg_time, prev_data->msg_time); + else + tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, item_data->msg_time, NULL); + + if (tmp_date_line != NULL) + dateline_data = tmp_date_line; + + item = dateline_data->date_it; + + if (item_data->is_read == 0) + elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_SEARCH_UNREAD), item_data, item, ELM_GENLIST_ITEM_NONE, msg_ui_thread_msg_gl_sel, pListData); + else + elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_SEARCH), item_data, item, ELM_GENLIST_ITEM_NONE, msg_ui_thread_msg_gl_sel, pListData); + + if (dateline_data != NULL) + dateline_data->subitem_cnt++; + + prev_data = item_data; + idx++; + } + + if (pListData->list_type == THREAD_SIM_LIST_TYPE && sim_msg_count == 0) + elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_EMPTY), NULL, NULL, ELM_GENLIST_ITEM_NONE, msg_ui_thread_gl_empty_sel, NULL); + } else { + elm_genlist_item_append(pListData->genlist, msg_ui_thread_get_itc_type(THREAD_ITC_EMPTY), NULL, NULL, ELM_GENLIST_ITEM_NONE, msg_ui_thread_gl_empty_sel, NULL); + } + + msg_release_struct(&search_s); + msg_release_list_struct(&search_msg_list); + + return EINA_TRUE; +} + +Eina_Bool __msg_ui_thread_msg_list_load_remain_item(void *data) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ThreadData); + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + + if (pListData->app_data_type == THREAD_LIST_APP_DATA_MSG) + return FALSE; + + msg_error_t err = MSG_SUCCESS; + msg_struct_t sort_rule_t = msg_create_struct(MSG_STRUCT_SORT_RULE); + msg_struct_list_s peerList; + + msg_set_int_value(sort_rule_t, MSG_SORT_RULE_SORT_TYPE_INT, MSG_SORT_BY_THREAD_DATE); + msg_set_bool_value(sort_rule_t, MSG_SORT_RULE_ACSCEND_BOOL, false); + + err = msg_get_thread_view_list(msg_ui_thread_get_data_handle(), sort_rule_t, &peerList); + msg_release_struct(&sort_rule_t); + + PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL; + PMSG_APP_THREAD_DATA_S cur_thread = NULL; + PMSG_APP_THREAD_DATA_S prev_thread = NULL; + Elm_Object_Item *gen_item = NULL; + Elm_Object_Item *it_dateline = NULL; + int row = 0, start = pListData->loaded_cnt; + + gen_item = elm_genlist_last_item_get(pListData->genlist); + if (gen_item) + prev_thread = elm_object_item_data_get(gen_item); + + for (row = start; row < peerList.nCount; row++) { + PMSG_APP_THREAD_DATELINE_DATA_S tmp_date_line = NULL; + Elm_Object_Item *item = NULL; + + cur_thread = (PMSG_APP_THREAD_DATA_S) calloc(1, sizeof(MSG_APP_THREAD_DATA_S)); + msg_ui_thread_set_thread_data(pListData, cur_thread, peerList.msg_struct_info[row]); + + if (prev_thread) { + tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_thread->thread_time, prev_thread->thread_time); + if (tmp_date_line == NULL) { + it_dateline = elm_genlist_item_parent_get(gen_item); + if (it_dateline) + tmp_date_line = elm_object_item_data_get(it_dateline); + } + } else { + tmp_date_line = msg_ui_thread_list_insert_dateline(pListData, cur_thread->thread_time, NULL); + } + + if (tmp_date_line != NULL) + dateline_data = tmp_date_line; + + item = dateline_data->date_it; + + if (cur_thread->unread_cnt > 0) + elm_genlist_item_append(pListData->genlist, &pListData->itc_unread, cur_thread, item, ELM_GENLIST_ITEM_NONE, __msg_ui_thread_gl_sel, pListData); + else + elm_genlist_item_append(pListData->genlist, &pListData->itc_default, cur_thread, item, ELM_GENLIST_ITEM_NONE, __msg_ui_thread_gl_sel, pListData); + + if (dateline_data != NULL) + dateline_data->subitem_cnt++; + + prev_thread = cur_thread; + pListData->loaded_cnt++; + + if (pListData->loaded_cnt == peerList.nCount) { + ecore_idler_del(pListData->launch_idler); + pListData->launch_idler = NULL; + } + } + + msg_release_list_struct(&peerList); - ThreadData->itc_thread.item_style = "3text.1icon.custom"; - ThreadData->itc_thread.func.text_get = msg_ui_thread_gl_text_get; - ThreadData->itc_thread.func.content_get = msg_ui_thread_gl_content_get; - ThreadData->itc_thread.func.state_get = NULL; - ThreadData->itc_thread.func.del = msg_ui_thread_gl_del; - ThreadData->itc_thread.decorate_all_item_style = "edit_default"; + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return TRUE; +} - ThreadData->itc_empty.item_style = "1text"; - ThreadData->itc_empty.func.text_get = msg_ui_thread_gl_empty_get; - ThreadData->itc_empty.func.content_get = NULL; - ThreadData->itc_empty.func.state_get = NULL; - ThreadData->itc_empty.func.del = NULL; +void msg_ui_thread_common_style_set(PMSG_THREAD_DATA pData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pData); + + pData->itc_empty.item_style = "1text"; + pData->itc_empty.func.text_get = msg_ui_thread_gl_empty_get; + pData->itc_empty.func.content_get = NULL; + pData->itc_empty.func.state_get = NULL; + pData->itc_empty.func.del = NULL; + + pData->itc_blank.item_style = "thread_list_blank"; + pData->itc_blank.func.text_get = NULL; + pData->itc_blank.func.content_get = NULL; + pData->itc_blank.func.state_get = NULL; + pData->itc_blank.func.del = NULL; + + pData->itc_date.item_style = "grouptitle"; + pData->itc_date.func.text_get = msg_ui_thread_date_gl_text_get; + pData->itc_date.func.content_get = NULL; + pData->itc_date.func.state_get = NULL; + pData->itc_date.func.del = msg_ui_thread_date_gl_del; + + pData->itc_search.item_style = "4text.1icon.2"; + pData->itc_search.func.text_get = msg_ui_thread_msg_gl_text_get; + pData->itc_search.func.content_get = NULL; + pData->itc_search.func.state_get = NULL; + pData->itc_search.func.del = msg_ui_thread_msg_gl_del; + + pData->itc_search_unread.item_style = "4text.1icon.1"; + pData->itc_search_unread.func.text_get = msg_ui_thread_msg_gl_text_get; + pData->itc_search_unread.func.content_get = NULL; + pData->itc_search_unread.func.state_get = NULL; + pData->itc_search_unread.func.del = msg_ui_thread_msg_gl_del; + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_thread_genlist_style_set(PMSG_THREAD_LIST_DATA pListData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !pListData); + + if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) { + pListData->itc_default.item_style = "4text.1icon.2"; + pListData->itc_default.decorate_item_style = "mode/slide3"; + pListData->itc_default.func.text_get = __msg_ui_thread_gl_text_get; + pListData->itc_default.func.content_get = __msg_ui_thread_gl_content_get; + pListData->itc_default.func.state_get = NULL; + pListData->itc_default.func.del = __msg_ui_thread_gl_del; + pListData->itc_default.decorate_all_item_style = "edit_default"; + + pListData->itc_unread.item_style = "4text.1icon.1"; + pListData->itc_unread.decorate_item_style = "mode/slide3"; + pListData->itc_unread.func.text_get = __msg_ui_thread_gl_text_get; + pListData->itc_unread.func.content_get = __msg_ui_thread_gl_content_get; + pListData->itc_unread.func.state_get = NULL; + pListData->itc_unread.func.del = __msg_ui_thread_gl_del; + pListData->itc_unread.decorate_all_item_style = "edit_default"; + } else { + pListData->itc_default.item_style = "4text.1icon.2"; + pListData->itc_default.func.text_get = msg_ui_thread_msg_gl_text_get; + pListData->itc_default.func.content_get = msg_ui_thread_msg_gl_content_get; + pListData->itc_default.func.state_get = NULL; + pListData->itc_default.func.del = msg_ui_thread_msg_gl_del; + pListData->itc_default.decorate_all_item_style = "edit_default"; + + pListData->itc_unread.item_style = "4text.1icon.1"; + pListData->itc_unread.func.text_get = msg_ui_thread_msg_gl_text_get; + pListData->itc_unread.func.content_get = msg_ui_thread_msg_gl_content_get; + pListData->itc_unread.func.state_get = NULL; + pListData->itc_unread.func.del = msg_ui_thread_msg_gl_del; + pListData->itc_unread.decorate_all_item_style = "edit_default"; + + if (pListData->list_type == THREAD_LOCKED_LIST_TYPE) { + pListData->itc_default.decorate_item_style = "mode/slide4"; + pListData->itc_unread.decorate_item_style = "mode/slide4"; + } else { + pListData->itc_default.decorate_item_style = "mode/slide"; + pListData->itc_unread.decorate_item_style = "mode/slide"; + } + } MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } diff --git a/thread/src/msg-ui-thread-main.c b/thread/src/msg-ui-thread-main.c index a39bf68..fefb63b 100755 --- a/thread/src/msg-ui-thread-main.c +++ b/thread/src/msg-ui-thread-main.c @@ -14,103 +14,104 @@ * limitations under the License. */ + #include "msg-ui-thread-main.h" PMSG_THREAD_DATA g_data = NULL; - -void msg_ui_thread_fullview_launch(PMSG_THREAD_DATA pData) +PMSG_THREAD_DATA msg_ui_thread_get_data(void) { - MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - - MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pData == NULL, "pData is NULL"); - - Evas_Object *back_btn = NULL; - - pData->toolbar = elm_toolbar_add(pData->navi_frame); - elm_toolbar_shrink_mode_set(pData->toolbar, ELM_TOOLBAR_SHRINK_EXPAND); - MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pData->toolbar == NULL, "Navigation controlbar is NULL"); - - msg_ui_thread_add_navi_controlbar_item(pData); - - pData->content_ly = msg_ui_thread_create_content_layout(pData); - pData->noc_ly = msg_ui_thread_create_nocontent_layout(pData); - - pData->searchbar = msg_ui_thread_create_searchbar_layout(pData); - elm_object_part_content_set(pData->content_ly, "sel_all", pData->searchbar); - - pData->genlist = msg_ui_thread_create_genlist(pData); - elm_object_part_content_set(pData->content_ly, "thread_list", pData->genlist); + if (g_data) + return g_data; + else + return NULL; +} - back_btn = elm_button_add(pData->navi_frame); - elm_object_style_set(back_btn, "naviframe/back_btn/default"); - evas_object_smart_callback_add(back_btn, "clicked", msg_ui_thread_back_btn_clicked_cb, (void *)pData); - pData->back_btn = back_btn; +msg_handle_t msg_ui_thread_get_data_handle(void) +{ + if (g_data) + return g_data->msgHandle; + else + return NULL; +} - elm_win_conformant_set(pData->win_main, 1); - pData->conform = elm_conformant_add(pData->navi_frame); - elm_object_style_set(pData->conform, "internal_layout"); +Elm_Genlist_Item_Class* msg_ui_thread_get_itc_type(ThreadItcType type) +{ + if (g_data == NULL) + return NULL; - evas_object_size_hint_weight_set(pData->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - evas_object_show(pData->conform); - elm_object_content_set(pData->conform, pData->content_ly); + if (type == THREAD_ITC_EMPTY) + return &g_data->itc_empty; + else if (type == THREAD_ITC_SEARCH) + return &g_data->itc_search; + else if (type == THREAD_ITC_SEARCH_UNREAD) + return &g_data->itc_search_unread; + else if (type == THREAD_ITC_BLANK) + return &g_data->itc_blank; + else if (type == THREAD_ITC_POPUP) + return &g_data->itc_popup; + else if (type == THREAD_ITC_DATE) + return &g_data->itc_date; + else + return NULL; +} - pData->nf_it = elm_naviframe_item_push(pData->navi_frame, dgettext("sys_string", "IDS_COM_BODY_MESSAGES"), back_btn, NULL, pData->conform, NULL); - elm_object_item_part_content_set(pData->nf_it, "controlbar", pData->toolbar); - MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +/* Launching Time Check */ +static void __main_layout_flush_post_cb(void *data, Evas *e, void *event_info) +{ + evas_event_callback_del(e, EVAS_CALLBACK_RENDER_FLUSH_POST, __main_layout_flush_post_cb); } void *msg_ui_thread_init_thread_data(struct appdata *ad) { - PMSG_THREAD_DATA thread_data = NULL; + PMSG_THREAD_DATA pData = NULL; - thread_data = (PMSG_THREAD_DATA)calloc(1, sizeof(MSG_THREAD_DATA)); + pData = (PMSG_THREAD_DATA)calloc(1, sizeof(MSG_THREAD_DATA)); - if (!thread_data) + if (!pData) { + D_MSG("calloc error"); return NULL; + } + bzero(pData, sizeof(PMSG_THREAD_DATA)); - thread_data->msgHandle = ad->msgHandle; - - thread_data->viewmode = THREAD_NORMAL_VIEW; - - thread_data->win_main = ad->win_main; - - thread_data->th = elm_theme_new(); - elm_theme_ref_set(thread_data->th, NULL); - elm_theme_extension_add(thread_data->th, MSG_THREAD_THEME); + g_data = pData; - g_data = thread_data; + pData->msgHandle = ad->msgHandle; + pData->win_main = ad->win_main; + pData->th = elm_theme_new(); + elm_theme_ref_set(pData->th, NULL); + elm_theme_extension_add(pData->th, MSG_THREAD_THEME); - msg_ui_thread_reg_msg_cb_func(thread_data); - msg_ui_thread_get_locale(thread_data); - msg_ui_thread_get_time_format(thread_data); - thread_data->time_12h_ptn = msg_common_get_date_best_pattern(thread_data->locale, MSG_UI_TIME_PATTERN_12H); - thread_data->time_24h_ptn = msg_common_get_date_best_pattern(thread_data->locale, MSG_UI_TIME_PATTERN_24H); - thread_data->date_ptn = msg_common_get_date_best_pattern(thread_data->locale, UDAT_YEAR_NUM_MONTH_DAY); + msg_ui_thread_common_style_set(pData); + msg_ui_thread_reg_msg_cb_func(pData); + msg_ui_thread_get_locale(pData); + msg_ui_thread_get_time_format(pData); + pData->time_12h_ptn = msg_common_get_date_best_pattern(pData->locale, MSG_UI_TIME_PATTERN_12H); + pData->time_24h_ptn = msg_common_get_date_best_pattern(pData->locale, MSG_UI_TIME_PATTERN_24H); + pData->date_ptn = msg_common_get_date_best_pattern(pData->locale, UDAT_YEAR_NUM_MONTH_DAY); /* Register callback to apply time change. */ - thread_data->noti_fd = heynoti_init(); - if (thread_data->noti_fd == -1) { + pData->noti_fd = heynoti_init(); + if (pData->noti_fd == -1) { MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_init() is failed!!"); - } - else { - MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_init() is success : fd = %d\n", thread_data->noti_fd); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_init() is success : fd = %d\n", pData->noti_fd); - if (heynoti_subscribe(thread_data->noti_fd, "setting_time_changed", msg_ui_thread_timezone_change_cb, (void *)thread_data) == -1) { + if (heynoti_subscribe(pData->noti_fd, "setting_time_changed", msg_ui_thread_timezone_change_cb, (void *)pData) == -1) { MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_subscribe(setting_time_changed) is failed!!"); } else { MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_subscribe(setting_time_changed) is success !!"); } - if (heynoti_attach_handler(thread_data->noti_fd) == -1) { + if (heynoti_attach_handler(pData->noti_fd) == -1) { MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_attach_handler() is failed !!"); } else { MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "heynoti_attach_handler() is success."); } } - return (void *)thread_data; + return (void *)pData; } void msg_ui_thread_deinit_thread_data(void *data) @@ -118,73 +119,179 @@ void msg_ui_thread_deinit_thread_data(void *data) if (!data) return; - PMSG_THREAD_DATA thread_data = data; + PMSG_THREAD_DATA pData = data; + int i = 0; + + for (i = MSG_THREAD_LIST_MAX_COUNT-1; i >= 0; i--) { + if (pData->list_data[i] != NULL) { + msg_ui_thread_destroy_thread_list_data(pData->list_data[i]); + } + } + + if (pData->date_ptn) { + free(pData->date_ptn); + pData->date_ptn = NULL; + } - if (thread_data->date_ptn) { - free(thread_data->date_ptn); - thread_data->date_ptn = NULL; + if (pData->time_12h_ptn) { + free(pData->time_12h_ptn); + pData->time_12h_ptn = NULL; } - if (thread_data->time_12h_ptn) { - free(thread_data->time_12h_ptn); - thread_data->time_12h_ptn = NULL; + if (pData->time_24h_ptn) { + free(pData->time_24h_ptn); + pData->time_24h_ptn = NULL; } - if (thread_data->time_24h_ptn) { - free(thread_data->time_24h_ptn); - thread_data->time_24h_ptn = NULL; + if (pData->th) { + elm_theme_extension_del(pData->th, MSG_THREAD_THEME); + elm_theme_free(pData->th); + pData->th = NULL; } - if (thread_data->del_thread) { - if (ecore_thread_cancel(thread_data->del_thread) == EINA_FALSE) { + if (pData->noti_fd) { + if (heynoti_unsubscribe(pData->noti_fd, "setting_time_changed", msg_ui_thread_timezone_change_cb) == -1) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_unsubscribe() is failed !!"); + } + heynoti_close(pData->noti_fd); + } + +} + +PMSG_THREAD_LIST_DATA msg_ui_thread_create_thread_list_data(ThreadMsgListType list_type, ThreadMsgListAppDataType app_data_type) +{ + int i = 0; + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)calloc(1, sizeof(MSG_THREAD_LIST_DATA)); + + if (!pListData) { + D_MSG("calloc error"); + return NULL; + } + bzero(pListData, sizeof(MSG_THREAD_LIST_DATA)); + + pListData->view_mode = THREAD_NORMAL_VIEW; + pListData->list_type = list_type; + pListData->app_data_type = app_data_type; + pListData->search_mode = THREAD_SEARCH_OFF; + + for (i = 0; i < MSG_THREAD_LIST_MAX_COUNT; i++) { + if (pData->list_data[i] == NULL) { + pData->list_data[i] = pListData; + break; + } + } + return pListData; +} + +void msg_ui_thread_destroy_thread_list_data(PMSG_THREAD_LIST_DATA pListData) +{ + int i = 0, j = 0; + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + + if (!pListData) + return; + + if (pListData->del_thread) { + if (ecore_thread_cancel(pListData->del_thread) == EINA_FALSE) { D_MSG("ecore_thread_cancel is done."); } else { D_MSG("ecore_thread_cancel is failed."); } - thread_data->del_thread = NULL; + pListData->del_thread = NULL; } - if (thread_data->e_timer) { - ecore_timer_del(thread_data->e_timer); - thread_data->e_timer = NULL; + for (i = MSG_THREAD_LIST_MAX_COUNT-1; i >= 0; i--) { + if (pData->list_data[i] != NULL && pData->list_data[i] == pListData) { + free(pListData); + pData->list_data[i] = NULL; + + for (j = i; j < MSG_THREAD_LIST_MAX_COUNT-2; j++) { + pData->list_data[j] = pData->list_data[j+1]; + pData->list_data[j+1] = NULL; + } + break; + } } +} + +PMSG_THREAD_LIST_DATA msg_ui_thread_get_default_list(void) +{ + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + PMSG_THREAD_LIST_DATA pListData = NULL; + int i = 0; + + if (pData == NULL) + return NULL; - if (thread_data->th) { - elm_theme_extension_del(thread_data->th, MSG_THREAD_THEME); - elm_theme_free(thread_data->th); - thread_data->th = NULL; + for (i = 0; i < MSG_THREAD_LIST_MAX_COUNT; i++) { + if (pData->list_data[i] != NULL && pData->list_data[i]->list_type == THREAD_NORMAL_LIST_TYPE) { + pListData = pData->list_data[i]; + break; + } } - if (thread_data->noti_fd) { - if (heynoti_unsubscribe(thread_data->noti_fd, "setting_time_changed", msg_ui_thread_timezone_change_cb) == -1) { - MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "heynoti_unsubscribe() is failed !!"); + return pListData; +} + +PMSG_THREAD_LIST_DATA msg_ui_thread_get_current_list(void) +{ + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + PMSG_THREAD_LIST_DATA pListData = NULL; + int i = 0; + + if (pData == NULL) + return NULL; + + for (i = MSG_THREAD_LIST_MAX_COUNT-1; i >= 0; i--) { + if (pData->list_data[i] != NULL) { + pListData = pData->list_data[i]; + break; } - heynoti_close(thread_data->noti_fd); } + + return pListData; } -Evas_Object *msg_ui_thread_create_layout_main(Evas_Object *parent) +PMSG_THREAD_LIST_DATA msg_ui_thread_get_prev_list(PMSG_THREAD_LIST_DATA pListData) +{ + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + PMSG_THREAD_LIST_DATA pPrevList = NULL; + int i = 0; + + for (i = MSG_THREAD_LIST_MAX_COUNT-1; i > 0; i--) { + if (pData->list_data[i] == pListData) { + pPrevList = pData->list_data[i-1]; + break; + } + } + + return pPrevList; +} + +Evas_Object *msg_ui_thread_create_layout_main(PMSG_THREAD_DATA pData) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL, "parent object is NULL"); + MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, pData == NULL || pData->win_main == NULL, NULL, "pData is NULL"); - PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); Evas_Object *bg; Evas_Object *layout; - bg = elm_bg_add(parent); + bg = elm_bg_add(pData->win_main); evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(bg); - layout = elm_layout_add(parent); + layout = elm_layout_add(pData->win_main); MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, layout == NULL, NULL, "Failed elm_layout_add.\n"); elm_layout_theme_set(layout, "layout", "application", "default"); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(parent, bg); + elm_win_resize_object_add(pData->win_main, bg); elm_object_part_content_set(layout, "elm.swallow.bg", bg); evas_object_show(layout); + evas_event_callback_add(evas_object_evas_get(layout), EVAS_CALLBACK_RENDER_FLUSH_POST, __main_layout_flush_post_cb, NULL); + pData->navi_frame = elm_naviframe_add(layout); elm_object_part_content_set(layout, "elm.swallow.content", pData->navi_frame); @@ -193,15 +300,117 @@ Evas_Object *msg_ui_thread_create_layout_main(Evas_Object *parent) return layout; } -Evas_Object *msg_ui_thread_create_searchbar_layout(PMSG_THREAD_DATA pData) +void msg_ui_thread_load_thread_view(void *data, service_h service) { + if (!data) + return; + + PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; + PMSG_THREAD_LIST_DATA pListData = NULL; + + pListData = msg_ui_thread_create_thread_list_data(THREAD_NORMAL_LIST_TYPE, THREAD_LIST_APP_DATA_THREAD); + msg_ui_thread_fullview_launch(pData, pListData); + msg_ui_thread_list_load(pListData, TRUE); + + /* Search mode from live-box */ + char *key_type = NULL; + + service_get_extra_data(service, MSG_BUNDLE_KEY_TYPE, &key_type); + if (g_strcmp0(key_type, MSG_BUNDLE_VALUE_SEARCH_MODE) == 0) { + if (pListData->searchbar) + elm_object_focus_set(pListData->searchbar, EINA_TRUE); + } +} + +void msg_ui_thread_load_message_box(int list_type) +{ + D_ENTER; + + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + PMSG_THREAD_LIST_DATA pListData = NULL; + + pListData = msg_ui_thread_create_thread_list_data(list_type, THREAD_LIST_APP_DATA_MSG); + msg_ui_thread_fullview_launch(pData, pListData); + msg_ui_thread_msg_list_load(pListData, list_type); + + D_LEAVE; +} + +void msg_ui_thread_fullview_launch(PMSG_THREAD_DATA pData, PMSG_THREAD_LIST_DATA pListData) +{ + char label[DEF_BUF_LEN_S+1] = {0,}; + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !pData || !pListData, "pData or pListData is NULL"); + + pListData->toolbar = msg_ui_thread_create_toolbar(pData->navi_frame); + msg_ui_thread_set_navi_controlbar_item(pListData); + + pListData->content_ly = msg_ui_thread_create_content_layout(pData->navi_frame); + pListData->noc_ly = msg_ui_thread_create_nocontent_layout(pData->navi_frame); + + pListData->searchbar = msg_ui_thread_create_searchbar_layout(pListData->content_ly, pListData); + elm_object_part_content_set(pListData->content_ly, "sel_all", pListData->searchbar); + + pListData->genlist = msg_ui_thread_create_genlist(pListData->content_ly, pListData); + elm_object_part_content_set(pListData->content_ly, "thread_list", pListData->genlist); + //evas_object_data_set(pListData->genlist, "pData", pListData); + + if (msg_ui_thread_get_prev_list(pListData) == NULL) + elm_win_conformant_set(pData->win_main, 1); + pListData->conform = elm_conformant_add(pData->navi_frame); + elm_object_style_set(pListData->conform, "internal_layout"); + evas_object_size_hint_weight_set(pListData->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(pListData->conform); + elm_object_content_set(pListData->conform, pListData->content_ly); + + pListData->back_btn = elm_button_add(pData->navi_frame); + elm_object_style_set(pListData->back_btn, "naviframe/back_btn/default"); + //evas_object_data_set(pListData->back_btn, "more_data", pListData); + evas_object_smart_callback_add(pListData->back_btn, "clicked", msg_ui_thread_back_btn_clicked_cb, (void *)pListData); + + switch (pListData->list_type) { + case THREAD_NORMAL_LIST_TYPE: + strncpy(label, dgettext("sys_string", "IDS_COM_BODY_MESSAGES"), sizeof(label)); + break; + case THREAD_SPAM_LIST_TYPE: + strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SPAM_MESSAGES"), sizeof(label)); + break; + case THREAD_SIM_LIST_TYPE: + strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SIM_CARD_MESSAGES"), sizeof(label)); + break; + case THREAD_CBMSG_LIST_TYPE: + strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CB_MESSAGES"), sizeof(label)); + break; + case THREAD_SCHEDULED_LIST_TYPE: + strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_HEADER_SCHEDULED_MESSAGE"), sizeof(label)); + break; + case THREAD_DRAFT_LIST_TYPE: + strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_DRAFT_ABB"), sizeof(label)); + break; + case THREAD_LOCKED_LIST_TYPE: + strncpy(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CB_MESSAGES"), sizeof(label)); + break; + default: + D_MSG("[ERROR] invalid viewmode"); + return; + } - if (!pData) + pListData->nf_it = elm_naviframe_item_push(pData->navi_frame, label, pListData->back_btn, NULL, pListData->conform, NULL); + elm_object_item_part_content_set(pListData->nf_it, "controlbar", pListData->toolbar); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +Evas_Object *msg_ui_thread_create_searchbar_layout(Evas_Object *parent, PMSG_THREAD_LIST_DATA pListData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + if (!pListData) return NULL; Evas_Object *layout = NULL; - layout = elm_layout_add(pData->content_ly); + layout = elm_layout_add(parent); elm_layout_theme_set(layout, "layout", "searchbar", "cancel_button"); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -215,8 +424,6 @@ Evas_Object *msg_ui_thread_create_searchbar_layout(PMSG_THREAD_DATA pData) elm_object_part_content_set(layout, "elm.swallow.content", entry); elm_object_part_text_set(layout, "elm.guidetext", dgettext("sys_string", "IDS_COM_BODY_SEARCH")); - pData->imf_ctx = elm_entry_imf_context_get(entry); - Evas_Object *cancel_button = NULL; cancel_button = elm_button_add(layout); elm_object_part_content_set(layout, "button_cancel", cancel_button); @@ -229,10 +436,10 @@ Evas_Object *msg_ui_thread_create_searchbar_layout(PMSG_THREAD_DATA pData) limit_filter_data.max_byte_count = DEF_MAX_MSG_TEXT_LEN; elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter_data); - evas_object_smart_callback_add(entry, "focused", msg_ui_thread_searchbar_entry_focus_cb, (void *)pData); - evas_object_smart_callback_add(entry, "unfocused", msg_ui_thread_searchbar_entry_unfocus_cb, (void *)pData); - evas_object_smart_callback_add(cancel_button, "clicked", msg_ui_thread_searchbar_cancel_click_cb, (void *)pData); - elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", msg_ui_thread_searchbar_eraser_clicked_cb, (void *)pData); + evas_object_smart_callback_add(entry, "focused", msg_ui_thread_searchbar_entry_focus_cb, (void *)pListData); + evas_object_smart_callback_add(entry, "unfocused", msg_ui_thread_searchbar_entry_unfocus_cb, (void *)pListData); + evas_object_smart_callback_add(cancel_button, "clicked", msg_ui_thread_searchbar_cancel_click_cb, (void *)pListData); + elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", msg_ui_thread_searchbar_eraser_clicked_cb, (void *)pListData); evas_object_show(layout); @@ -241,35 +448,38 @@ Evas_Object *msg_ui_thread_create_searchbar_layout(PMSG_THREAD_DATA pData) return layout; } -Evas_Object *msg_ui_thread_create_genlist(PMSG_THREAD_DATA pData) +Evas_Object *msg_ui_thread_create_genlist(Evas_Object *parent, PMSG_THREAD_LIST_DATA pListData) { D_ENTER; - if (!pData) + if (!pListData) return NULL; Evas_Object *genlist = NULL; - genlist = elm_genlist_add(pData->content_ly); + genlist = elm_genlist_add(parent); elm_genlist_homogeneous_set(genlist, EINA_TRUE); - elm_object_theme_set(genlist, pData->th); - msg_ui_thread_genlist_style_set(pData); + evas_object_smart_callback_add(genlist, "drag,start,right", msg_ui_thread_gl_mode_right, (void *)pListData); + evas_object_smart_callback_add(genlist, "drag,start,left", msg_ui_thread_gl_mode_left, (void *)pListData); - pData->itc = &(pData->itc_thread); /* default setting */ + /** "3text.tb" style is only supported COMPRESS MODE */ + /** "3text.1icon" and "1text" are suported COMPRESS MODE also */ + elm_genlist_mode_set(genlist, ELM_LIST_SCROLL); + msg_ui_thread_genlist_style_set(pListData); D_LEAVE; return genlist; } -Evas_Object *msg_ui_thread_create_content_layout(PMSG_THREAD_DATA pData) +Evas_Object *msg_ui_thread_create_content_layout(Evas_Object *parent) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); /* Content layout */ Evas_Object *layout; - layout = elm_layout_add(pData->navi_frame); + layout = elm_layout_add(parent); elm_layout_file_set(layout, MSG_THREAD_THEME, "thread_content"); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); @@ -279,14 +489,13 @@ Evas_Object *msg_ui_thread_create_content_layout(PMSG_THREAD_DATA pData) return layout; } - -Evas_Object *msg_ui_thread_create_nocontent_layout(PMSG_THREAD_DATA pData) +Evas_Object *msg_ui_thread_create_nocontent_layout(Evas_Object *parent) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); Evas_Object *noc_layout = NULL; - noc_layout = elm_layout_add(pData->navi_frame); + noc_layout = elm_layout_add(parent); elm_layout_theme_set(noc_layout, "layout", "nocontents", "text"); elm_object_part_text_set(noc_layout, "elm.text", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_NOMESSAGES")); @@ -295,6 +504,18 @@ Evas_Object *msg_ui_thread_create_nocontent_layout(PMSG_THREAD_DATA pData) return noc_layout; } +Evas_Object *msg_ui_thread_create_toolbar(Evas_Object *parent) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + Evas_Object *toolbar = NULL; + + toolbar = elm_toolbar_add(parent); + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + + return toolbar; +} + void msg_ui_thread_reg_msg_cb_func(PMSG_THREAD_DATA pData) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); @@ -305,68 +526,137 @@ void msg_ui_thread_reg_msg_cb_func(PMSG_THREAD_DATA pData) MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } -void msg_ui_thread_load_thread_view(void *data, bundle *b) +void msg_ui_thread_reset_thread_view(void *data, service_h service) { if (!data) return; - PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; + PMSG_THREAD_LIST_DATA pListData = NULL; - msg_ui_thread_fullview_launch(pData); + pListData = msg_ui_thread_get_current_list(); + if (pListData == NULL) + return; - msg_ui_thread_list_load(pData); + if (pListData->search_mode == THREAD_SEARCH_ON) + elm_object_focus_set(pListData->searchbar, EINA_TRUE); - /* Search mode from live-box */ - if (g_strcmp0(bundle_get_val(b, MSG_BUNDLE_KEY_TYPE), MSG_BUNDLE_VALUE_SEARCH_MODE) == 0) { - if (pData->searchbar) - elm_object_focus_set(pData->searchbar, EINA_TRUE); - } + if (pListData->sel_thread_id > 0) + msg_ui_thread_list_item_update(pListData, pListData->sel_thread_id); -} + if (pListData->sel_msg_id > 0) + msg_ui_thread_list_msg_item_update(pListData, pListData->sel_msg_id); -void msg_ui_thread_reset_thread_view(void *data, bundle *b) -{ - if (!data) - return; + pListData->sel_gen_item = NULL; + pListData->sel_thread_id = 0; + pListData->sel_msg_id = 0; + + pListData->view_mode = THREAD_NORMAL_VIEW; } -PMSG_THREAD_DATA msg_ui_thread_get_data(void) +void msg_ui_thread_rotation_set(void *data, int rot) { + PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; - if (g_data) - return g_data; - else - return NULL; + if (!pData) + return; + if (rot == THREAD_ROTATE_ANGLE_LANDSCAPE || rot == THREAD_ROTATE_ANGLE_LANDSCAPE_UPSIDEDOWN) + pData->isRotate = true; + else + pData->isRotate = false; } -void msg_ui_thread_add_navi_controlbar_item(PMSG_THREAD_DATA pData) +void msg_ui_thread_set_navi_controlbar_item(PMSG_THREAD_LIST_DATA pListData) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - if (!pData) + if (!pListData) return; - int i; + Evas_Object *toolbar = pListData->toolbar; + int i = 0; for (i = 0; i < MSG_THREAD_CONTROLBAR_ITEM_NUM; i++) { - if (pData->toolbar_item[i]) - elm_object_item_del(pData->toolbar_item[i]); + if (pListData->toolbar_item[i]) + elm_object_item_del(pListData->toolbar_item[i]); } - pData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_EDIT, NULL, \ - msg_ui_thread_ctlbar_edit_cb, (void *)pData); - pData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL); - pData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(pData->toolbar, MSG_CONTROLBAR_ICON_COMPOSE, NULL, \ - msg_ui_thread_ctlbar_compose_cb, (void *)pData); - pData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(pData->toolbar, NULL, NULL, NULL, NULL); - - if (pData->thread_cnt <= 0) - elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); - - elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); - elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_4], EINA_TRUE); + if (pListData->view_mode == THREAD_EDIT_VIEW) { + pListData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \ + msg_ui_thread_ctlbar_del_cb, (void *)pListData); + pListData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + pListData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + pListData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_CANCEL, NULL, \ + msg_ui_thread_ctlbar_cancel_cb, (void *)pListData); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE); + } else { + switch (pListData->list_type) { + case THREAD_NORMAL_LIST_TYPE: + pListData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_COMPOSE, NULL, \ + msg_ui_thread_ctlbar_compose_cb, (void *)pListData); + pListData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \ + msg_ui_thread_ctlbar_checkbox_cb, (void *)pListData); + pListData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_MORE, NULL, \ + msg_ui_thread_ctlbar_message_box_cb, pListData); + + if (pListData->item_cnt <= 0) + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); + break; + + case THREAD_SPAM_LIST_TYPE: + pListData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \ + msg_ui_thread_ctlbar_checkbox_cb, (void *)pListData); + pListData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + pListData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_SETTINGS, NULL, \ + msg_ui_thread_ctlbar_spam_setting_cb, (void *)pListData); + pListData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + + if (pListData->item_cnt <=0) + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); + + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_4], EINA_TRUE); + break; + + case THREAD_CBMSG_LIST_TYPE: + case THREAD_DRAFT_LIST_TYPE: + pListData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, \ + msg_ui_thread_ctlbar_checkbox_cb, (void *)pListData); + pListData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + pListData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + pListData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + + if (pListData->item_cnt <=0) + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); + + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_4], EINA_TRUE); + break; + + case THREAD_LOCKED_LIST_TYPE: + case THREAD_SIM_LIST_TYPE: + case THREAD_SCHEDULED_LIST_TYPE: + pListData->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_EDIT, NULL, \ + msg_ui_thread_ctlbar_checkbox_cb, (void *)pListData); + pListData->toolbar_item[CONTROLBAR_ITEM_2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + pListData->toolbar_item[CONTROLBAR_ITEM_3] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + pListData->toolbar_item[CONTROLBAR_ITEM_4] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + + if (pListData->item_cnt <=0) + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); + + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_2], EINA_TRUE); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_3], EINA_TRUE); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_4], EINA_TRUE); + break; + default: + D_MSG("[ERROR] invalid viewmode"); + return; + } + } MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } - diff --git a/thread/src/msg-ui-thread-util.c b/thread/src/msg-ui-thread-util.c index 0de6db4..1ed004f 100755 --- a/thread/src/msg-ui-thread-util.c +++ b/thread/src/msg-ui-thread-util.c @@ -16,20 +16,329 @@ #include "msg-ui-thread-main.h" #include "appsvc.h" +#include <status.h> -void msg_ui_thread_get_time_format(PMSG_THREAD_DATA pData) +static void __msg_ui_thread_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv); +static void __msg_ui_thread_ug_destroy_cb(ui_gadget_h ug, void *priv); +static Evas_Object *__msg_ui_thread_create_msg_detail_layout(Evas_Object* parent); +static Evas_Object* __msg_ui_thread_create_msg_detail_content(Evas_Object *parent, void *data, int msg_id); +static void __msg_ui_thread_popup_response_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_thread_del_popup_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_thread_del_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info); + + +int msg_ui_thread_launch_voice_call(const char *call_num) { - int r; - enum appcore_time_format timeformat; + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - r = appcore_get_timeformat(&timeformat); - if (r == MSG_UI_RET_ERR) - timeformat = APPCORE_TIME_FORMAT_UNKNOWN; + int ret = -1; /* negative values are error value */ + service_h svc_handle; - if (timeformat == APPCORE_TIME_FORMAT_24) - pData->time_fmt = MSG_TIME_FORMAT_24H; - else + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + char telnum[255] = {0,}; + service_set_operation(svc_handle, APPSVC_OPERATION_CALL); + snprintf(telnum, sizeof(telnum), "tel:%s", call_num); /* Number to make a call */ + service_set_uri(svc_handle, telnum); + ret = service_send_launch_request(svc_handle, NULL, NULL); + + service_destroy(svc_handle); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return ret; +} + +int msg_ui_thread_launch_video_call(const char *call_num) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + int ret = AUL_R_OK; + + bundle *b = bundle_create(); + + if (b) { + bundle_add(b, MSG_BUNDLE_KEY_VCALL_TYPE, MSG_BUNDLE_VALUE_VCALL_MO); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_HANDLE, MSG_BUNDLE_VALUE_VCALL_HANDLE); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_PARTY_NUM, call_num); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_CLI_CAUSE, MSG_BUNDLE_VALUE_VCALL_FALSE); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_FORWARDED, MSG_BUNDLE_VALUE_VCALL_FALSE); + + ret = aul_launch_app(VIDEO_CALL_PKG_NAME, b); + + bundle_free(b); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return ret; +} + +void msg_ui_thread_launch_spam_setting(PMSG_THREAD_LIST_DATA pListData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, pListData == NULL); + + pListData->cbs.layout_cb = __msg_ui_thread_ug_layout_cb; + pListData->cbs.result_cb = NULL; + pListData->cbs.destroy_cb = __msg_ui_thread_ug_destroy_cb; + pListData->cbs.priv = (void *)pListData; + + service_h svc_handle = NULL; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TYPE, MSG_BUNDLE_VALUE_SPAM_SETTING); + pListData->loaded_ug = ug_create(NULL, MSG_SETTING_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &pListData->cbs); + service_destroy(svc_handle); + } +} + +void msg_ui_thread_launch_viewer_ug(PMSG_THREAD_LIST_DATA pListData, int nMsgId) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, pListData == NULL); + + pListData->cbs.layout_cb = __msg_ui_thread_ug_layout_cb; + pListData->cbs.result_cb = NULL; + pListData->cbs.destroy_cb = __msg_ui_thread_ug_destroy_cb; + pListData->cbs.priv = (void *)pListData; + + service_h svc_handle = NULL; + char msgid[10] = {0,}; + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + snprintf(msgid, sizeof(msgid), "%d", nMsgId); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, msgid); + pListData->loaded_ug = ug_create(NULL, MSG_VIEWER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &pListData->cbs); + service_destroy(svc_handle); + } + + if (pListData->loaded_ug) { + msg_ui_thread_show_notify(pListData, "Unable to open message"); + return; + } + + D_LEAVE; +} + +static void __msg_ui_thread_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) +{ + D_ENTER; + + if (!ug || !priv) + return; + + Evas_Object *base, *win; + + base = ug_get_layout(ug); + if (!base){ + ug_destroy(ug); + return; + } + + win = ug_get_window(); + + switch (mode) { + case UG_MODE_FULLVIEW: + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, base); + evas_object_show(base); + break; + case UG_MODE_FRAMEVIEW: + default: + break; + } +} + +static void __msg_ui_thread_ug_destroy_cb(ui_gadget_h ug, void *priv) +{ + D_ENTER; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !ug || !priv); + + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)priv; + + if (ug == pListData->loaded_ug) { + ug_destroy(ug); + pListData->loaded_ug = NULL; + } + + if (pListData->search_mode == THREAD_SEARCH_ON) + elm_object_focus_set(pListData->searchbar, EINA_TRUE); + + if (pListData->sel_msg_id) { + msg_ui_thread_list_msg_item_update(pListData, pListData->sel_msg_id); + + pListData->sel_gen_item = NULL; + pListData->sel_msg_id = 0; + } +} + +void msg_ui_thread_launch_msg_detail_view(PMSG_THREAD_LIST_DATA pListData, PMSG_APP_THREAD_MSG_DATA_S item_data) +{ + D_ENTER; + + if (!pListData) { + D_EMSG("[ERROR] pListData is NULL"); + return; + } + + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + Evas_Object *detail_layout = NULL; + Evas_Object *content = NULL; + + // create layout + detail_layout = __msg_ui_thread_create_msg_detail_layout(pData->navi_frame); + + // create content layout + content = __msg_ui_thread_create_msg_detail_content(detail_layout, pData, item_data->msg_id); + elm_object_part_content_set(detail_layout, "elm.swallow.content", content); + + //push navi item + char title[DEF_BUF_LEN] = {0, }; + + if (item_data->contact_id > 0 && item_data->display_name[0] != '\0') { + strncpy(title, item_data->display_name, sizeof(title)-1); + } else { + if (item_data->address[0] != '\0') + strncpy(title, item_data->address, sizeof(title)-1); + else + strncpy(title, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"), sizeof(title)-1); + } + + elm_naviframe_item_push(pData->navi_frame, title, NULL, NULL, detail_layout, NULL); + + if (pListData->sel_msg_id) { + msg_ui_thread_list_msg_item_update(pListData, pListData->sel_msg_id); + + pListData->sel_gen_item = NULL; + pListData->sel_msg_id = 0; + } + + D_LEAVE; +} + +static Evas_Object *__msg_ui_thread_create_msg_detail_layout(Evas_Object* parent) +{ + D_ENTER; + + Evas_Object *layout = NULL; + + layout = elm_layout_add(parent); + + elm_layout_theme_set(layout, "layout", "application", "noindicator"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + return layout; +} + +static Evas_Object* __msg_ui_thread_create_msg_detail_content(Evas_Object *parent, void *data, int msg_id) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !data, NULL); + + PMSG_THREAD_DATA pData = (PMSG_THREAD_DATA)data; + + Evas_Object *scroller; + Evas_Object *entry; + + char buf[MAX_MSG_TEXT_LEN+1] = {0, }; + char *str = NULL; + msg_error_t err = MSG_SUCCESS; + + int msgSize = 0; + /** create scroller */ + scroller = elm_scroller_add(parent); + + elm_scroller_bounce_set(scroller, EINA_FALSE, EINA_TRUE); + elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + evas_object_show(scroller); + + /** create entry */ + entry = elm_entry_add(scroller); + evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0.0); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0.0); + elm_entry_editable_set(entry, EINA_FALSE); + elm_object_content_set(scroller, entry); + evas_object_show(entry); + + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + if (msgInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_create_struct(MSG_STRUCT_MESSAGE_INFO) is failed!"); + return NULL; + } + + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + if (sendOpt == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_create_struct(MSG_STRUCT_SENDOPT) is failed!"); + msg_release_struct(&msgInfo); + return NULL; + } + + err = msg_get_message(pData->msgHandle, (msg_message_id_t)msg_id, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message() is failed : err = %d", err); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return NULL; + } + + msg_get_int_value(msgInfo, MSG_MESSAGE_DATA_SIZE_INT, &msgSize); + if (msgSize > 0) { + int msgType = 0; + msg_get_int_value(msgInfo, MSG_MESSAGE_TYPE_INT, &msgType); + + if (msgType == MSG_TYPE_MMS_NOTI) { + char subject[DEF_BUF_LEN_S+1] = {0,}; + + msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, subject, DEF_BUF_LEN_S); + if (strlen(subject) > 0) { + snprintf(buf, sizeof(buf), "%s", subject); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_str_value(MSG_MESSAGE_SUBJECT_STR) is failed !!"); + snprintf(buf, sizeof(buf), "Message subject is empty !!"); + } + } else { + char msgText[msgSize + 1]; + memset(msgText, 0, msgSize + 1); + + msg_get_str_value(msgInfo, MSG_MESSAGE_SMS_DATA_STR, msgText, msgSize); + if (strlen(msgText) > 0) { + snprintf(buf, sizeof(buf), "%s", msgText); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_str_value(MSG_MESSAGE_SMS_DATA_STR) is failed !!"); + snprintf(buf, sizeof(buf), "Message is empty !!"); + } + } + } else + snprintf(buf, sizeof(buf), "Message is empty !!"); + + buf[MAX_MSG_TEXT_LEN] = '\n'; + str = elm_entry_utf8_to_markup(buf); + elm_object_text_set(entry, str); + + if (str != NULL) { + free(str); + str = NULL; + } + + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + + return scroller; +} + +void msg_ui_thread_get_time_format(PMSG_THREAD_DATA pData) +{ + int timeformat = msg_common_get_timeformat(); + + if (timeformat == MSG_TIME_FORMAT_UNKNOWN) pData->time_fmt = MSG_TIME_FORMAT_12H; + else + pData->time_fmt = timeformat; D_MSG("%s", pData->time_fmt == MSG_TIME_FORMAT_24H ? "TIME FORMAT = 24h" : "TIME FORMAT = 12h"); } @@ -47,100 +356,146 @@ void msg_ui_thread_get_locale(PMSG_THREAD_DATA pData) D_MSG("Locale = %s", pData->locale); } -bundle *msg_ui_thread_get_bubble_data(PMSG_APP_THREAD_DATA_S item_data) +void msg_ui_thread_get_bubble_data(PMSG_APP_THREAD_DATA_S item_data, service_h svc_handle) { MSG_UI_ENTER(); - MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !item_data, NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !item_data || !svc_handle); char buf[DEF_BUF_LEN_S] = {'0',}; char buf_contact[DEF_BUF_LEN_S] = {'0',}; - bundle *b = bundle_create(); - MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !b, NULL); - - snprintf(buf, DEF_BUF_LEN_S, "%d", item_data->threadId); - bundle_add(b, MSG_BUNDLE_KEY_THREAD_ID, buf); - bundle_add(b, MSG_BUNDLE_KEY_THREAD_NAME, item_data->threadName); - bundle_add(b, MSG_BUNDLE_KEY_THREAD_ADDRESS, item_data->threadAddr); - snprintf(buf_contact, DEF_BUF_LEN_S, "%d", item_data->contactId); - bundle_add(b, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact); + snprintf(buf, DEF_BUF_LEN_S, "%d", item_data->thread_id); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_ID, buf); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_THREAD_NAME, item_data->thread_name); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_CONTACT_ID, buf_contact); MSG_UI_LEAVE(); - return b; } -void msg_ui_thread_cancel_edit_mode(PMSG_THREAD_DATA pData) +void msg_ui_thread_cancel_edit_mode(PMSG_THREAD_LIST_DATA pListData) { D_ENTER; - Elm_Object_Item *it; - PMSG_APP_THREAD_DATA_S item_data = NULL; - elm_check_state_set(pData->sel_all_box, EINA_FALSE); - - it = elm_genlist_first_item_get(pData->genlist); + elm_check_state_set(pListData->sel_all_box, EINA_FALSE); + it = elm_genlist_first_item_get(pListData->genlist); while (it) { - item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(it); - if (item_data) - item_data->isCheck = EINA_FALSE; + if (elm_genlist_item_parent_get(it) == NULL) { + it = elm_genlist_item_next_get(it); + continue; + } + + if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) { + PMSG_APP_THREAD_DATA_S item_data = NULL; + + item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(it); + if (item_data) + item_data->is_check = EINA_FALSE; + } else { + PMSG_APP_THREAD_MSG_DATA_S item_data = NULL; + + item_data = (PMSG_APP_THREAD_MSG_DATA_S)elm_object_item_data_get(it); + if (item_data) + item_data->is_check = EINA_FALSE; + } it = elm_genlist_item_next_get(it); } - pData->chk_list = eina_list_free(pData->chk_list); + pListData->chk_list = eina_list_free(pListData->chk_list); - elm_object_part_content_unset(pData->content_ly, "sel_all"); - evas_object_hide(pData->sel_all_ly); - elm_object_part_content_set(pData->content_ly, "sel_all", pData->searchbar); + elm_object_part_content_unset(pListData->content_ly, "sel_all"); + evas_object_hide(pListData->sel_all_ly); + elm_object_part_content_set(pListData->content_ly, "sel_all", pListData->searchbar); - elm_genlist_decorate_mode_set(pData->genlist, EINA_FALSE); - elm_genlist_select_mode_set(pData->genlist, ELM_OBJECT_SELECT_MODE_DEFAULT); - - pData->viewmode = THREAD_NORMAL_VIEW; + elm_genlist_decorate_mode_set(pListData->genlist, EINA_FALSE); + elm_genlist_select_mode_set(pListData->genlist, ELM_OBJECT_SELECT_MODE_DEFAULT); + pListData->view_mode = THREAD_NORMAL_VIEW; } -void msg_ui_thread_show_normal_mode(PMSG_THREAD_DATA pData) + +void msg_ui_thread_show_normal_mode(PMSG_THREAD_LIST_DATA pListData) { D_ENTER; - elm_object_item_text_set(pData->nf_it, dgettext("sys_string", "IDS_COM_BODY_MESSAGES")); - elm_naviframe_item_title_visible_set(pData->nf_it, EINA_TRUE); + if (pListData->view_mode == THREAD_EDIT_VIEW) + msg_ui_thread_cancel_edit_mode(pListData); - if (pData->viewmode == THREAD_EDIT_VIEW) - msg_ui_thread_cancel_edit_mode(pData); - - if (pData->select_info) { - evas_object_del(pData->select_info); - pData->select_info = NULL; + if (pListData->select_info) { + evas_object_del(pListData->select_info); + pListData->select_info = NULL; } - msg_ui_thread_add_navi_controlbar_item(pData); + if (!pListData->back_btn) { + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); - if (!pData->back_btn) { - pData->back_btn = elm_button_add(pData->navi_frame); - evas_object_smart_callback_add(pData->back_btn, "clicked", msg_ui_thread_back_btn_clicked_cb, (void *) pData); - elm_object_style_set(pData->back_btn, "naviframe/back_btn/default"); + pListData->back_btn = elm_button_add(pData->navi_frame); + evas_object_smart_callback_add(pListData->back_btn, "clicked", msg_ui_thread_back_btn_clicked_cb, (void *)pListData); + elm_object_style_set(pListData->back_btn, "naviframe/back_btn/default"); } - elm_object_item_part_content_set(pData->nf_it, "prev_btn", pData->back_btn); + + msg_ui_thread_set_navi_controlbar_item(pListData); + + if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) + elm_object_item_text_set(pListData->nf_it, dgettext("sys_string", "IDS_COM_BODY_MESSAGES")); + else if (pListData->list_type == THREAD_SPAM_LIST_TYPE) + elm_object_item_text_set(pListData->nf_it, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SPAM_MESSAGES")); + else if (pListData->list_type == THREAD_SIM_LIST_TYPE) + elm_object_item_text_set(pListData->nf_it, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_SIM_CARD_MESSAGES")); + else if (pListData->list_type == THREAD_CBMSG_LIST_TYPE) + elm_object_item_text_set(pListData->nf_it, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_CB_MESSAGES")); + + elm_object_item_part_content_set(pListData->nf_it, "prev_btn", pListData->back_btn); + elm_naviframe_item_title_visible_set(pListData->nf_it, EINA_TRUE); D_LEAVE; } -void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_DATA pData, int thread_id) +void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_LIST_DATA pListData, int thread_id) { - if (thread_id <= 0) return; Elm_Object_Item *gen_item = NULL; - gen_item = elm_genlist_first_item_get(pData->genlist); + gen_item = elm_genlist_first_item_get(pListData->genlist); while (gen_item) { + if (elm_genlist_item_parent_get(gen_item) == NULL) { + gen_item = elm_genlist_item_next_get(gen_item); + continue; + } + PMSG_APP_THREAD_DATA_S item_data = (PMSG_APP_THREAD_DATA_S)elm_object_item_data_get(gen_item); - if (thread_id == item_data->threadId) { - pData->sel_gen_item = gen_item; + if (thread_id == item_data->thread_id) { + pListData->sel_gen_item = gen_item; + break; + } + + gen_item = elm_genlist_item_next_get(gen_item); + } + + elm_genlist_item_show(gen_item, ELM_GENLIST_ITEM_SCROLLTO_TOP); +} + +void msg_ui_thread_select_item_by_msg_id(PMSG_THREAD_LIST_DATA pListData, int msg_id) +{ + if (msg_id <= 0) + return; + + Elm_Object_Item *gen_item = NULL; + gen_item = elm_genlist_first_item_get(pListData->genlist); + + while (gen_item) { + if (elm_genlist_item_parent_get(gen_item) == NULL) { + gen_item = elm_genlist_item_next_get(gen_item); + continue; + } + + PMSG_APP_THREAD_MSG_DATA_S item_data = (PMSG_APP_THREAD_MSG_DATA_S)elm_object_item_data_get(gen_item); + if (msg_id == item_data->msg_id) { + pListData->sel_gen_item = gen_item; break; } @@ -150,57 +505,170 @@ void msg_ui_thread_select_item_by_thread_id(PMSG_THREAD_DATA pData, int thread_i elm_genlist_item_show(gen_item, ELM_GENLIST_ITEM_SCROLLTO_TOP); } -static void __popup_response_cb(void *data, Evas_Object *obj, void *event_info) +void msg_ui_thread_show_notify(PMSG_THREAD_LIST_DATA pListData, const char *msg) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData); + + Evas_Object *popup; + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + + popup = elm_popup_add(pData->navi_frame); + + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(popup, msg); + evas_object_smart_callback_add(popup, "timeout", __msg_ui_thread_popup_response_cb, pListData); + elm_popup_timeout_set(popup, 0.8); + evas_object_show(popup); + + pListData->popup = popup; +} + +static void __msg_ui_thread_popup_response_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !data); - PMSG_THREAD_DATA threadData = (PMSG_THREAD_DATA)data; + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; if ((int)event_info != 5 && obj) { evas_object_del(obj); - threadData->popup = NULL; + pListData->popup = NULL; } MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); } -void msg_ui_thread_show_notify(PMSG_THREAD_DATA threadData, const char *msg) +void msg_ui_thread_show_del_popup(PMSG_THREAD_LIST_DATA pListData, const char *msg) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); - MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !threadData); + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData); Evas_Object *popup; + Evas_Object *btn_ok; + Evas_Object *btn_cancel; - popup = elm_popup_add(threadData->navi_frame); + popup = elm_popup_add(pListData->content_ly); evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); elm_object_text_set(popup, msg); - evas_object_smart_callback_add(popup, "timeout", __popup_response_cb, threadData); - elm_popup_timeout_set(popup, 0.8); + btn_ok = elm_button_add(popup); + elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK")); + elm_object_part_content_set(popup, "button1", btn_ok); + evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_thread_del_popup_ok_clicked_cb, pListData); + + btn_cancel = elm_button_add(popup); + elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL")); + elm_object_part_content_set(popup, "button2", btn_cancel); + evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_thread_del_popup_cancel_clicked_cb, pListData); + + evas_object_data_set(popup, MSG_THREAD_POPUP_DATA, MSG_THREAD_DEL_CONFIRM); evas_object_show(popup); - threadData->popup = popup; + pListData->popup = popup; + +} + +static void __msg_ui_thread_del_popup_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; + Elm_Object_Item *it_dateline = NULL; + PMSG_APP_THREAD_DATELINE_DATA_S dateline_data = NULL; + + int err; + const Elm_Object_Item *it = NULL; + + if (pListData->popup) { + evas_object_del(pListData->popup); + pListData->popup = NULL; + } + + it = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist); + + if (!it) + goto __UNABLE_TO_DELETE; + + if (pListData->app_data_type == THREAD_LIST_APP_DATA_THREAD) { + PMSG_APP_THREAD_DATA_S item_data = elm_object_item_data_get(it); + if (!item_data) + goto __UNABLE_TO_DELETE; + + err = msg_delete_thread_message_list(msg_ui_thread_get_data_handle(), item_data->thread_id); + if (err != MSG_SUCCESS) + goto __UNABLE_TO_DELETE; + } else { + PMSG_APP_THREAD_MSG_DATA_S item_data = elm_object_item_data_get(it); + if (!item_data) + goto __UNABLE_TO_DELETE; + + err = msg_delete_message(msg_ui_thread_get_data_handle(), item_data->msg_id); + if (err != MSG_SUCCESS) + goto __UNABLE_TO_DELETE; + } + + it_dateline = elm_genlist_item_parent_get((Elm_Object_Item *)it); + if (it_dateline) { + dateline_data = elm_object_item_data_get(it_dateline); + + if (dateline_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "subitem_cnt : %d", dateline_data->subitem_cnt); + dateline_data->subitem_cnt--; + if (dateline_data->subitem_cnt == 0) + elm_object_item_del((Elm_Object_Item *)it_dateline); + } + } + elm_object_item_del((Elm_Object_Item *)it); + + msg_ui_thread_show_deleted_info(pListData); + pListData->item_cnt--; + if (pListData->item_cnt == 0) { + if (pListData->list_type == THREAD_NORMAL_LIST_TYPE) + msg_ui_thread_list_load(pListData, FALSE); + else + msg_ui_thread_msg_list_load(pListData, pListData->list_type); + } + + return; + +__UNABLE_TO_DELETE: + msg_ui_thread_show_notify(pListData, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_DELETE")); + + return; } -Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_DATA threadData, int count) +static void __msg_ui_thread_del_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + PMSG_THREAD_LIST_DATA pListData = (PMSG_THREAD_LIST_DATA)data; - MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !threadData, NULL); + if (pListData->popup) { + evas_object_del(pListData->popup); + pListData->popup = NULL; + } +} + +Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_LIST_DATA pListData, int count) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, !pListData, NULL); Evas_Object *popup, *progressbar, *box, *label; char buf[DEF_BUF_LEN_S] = {0,}; - popup = elm_popup_add(threadData->navi_frame); + popup = elm_popup_add(pListData->content_ly); label = elm_label_add(popup); snprintf(buf, sizeof(buf), "0/%d %s", count, dgettext("sys_string", "IDS_COM_POP_DELETED")); elm_object_text_set(label, buf); +// ToDo: Check More +// elm_label_text_align_set(label, "center"); evas_object_show(label); progressbar = elm_progressbar_add(popup); @@ -219,41 +687,54 @@ Evas_Object* msg_ui_thread_show_notify_with_progressbar(PMSG_THREAD_DATA threadD evas_object_show(popup); - threadData->progressbar = progressbar; - threadData->progresslabel = label; + pListData->progressbar = progressbar; + pListData->progresslabel = label; return popup; } -void msg_ui_thread_show_select_info(PMSG_THREAD_DATA pData) +void msg_ui_thread_show_select_info(PMSG_THREAD_LIST_DATA pListData) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData); - MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pData); + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); - if (!pData->select_info) { - pData->select_info = elm_notify_add(pData->navi_frame); - elm_notify_orient_set(pData->select_info, ELM_NOTIFY_ORIENT_BOTTOM); + if (!pListData->select_info) { + pListData->select_info = elm_notify_add(pData->navi_frame); + elm_notify_orient_set(pListData->select_info, ELM_NOTIFY_ORIENT_BOTTOM); - pData->selectioninfo_layout = elm_layout_add(pData->navi_frame); - elm_object_content_set(pData->select_info, pData->selectioninfo_layout); + pListData->selectioninfo_layout = elm_layout_add(pData->navi_frame); + elm_object_content_set(pListData->select_info, pListData->selectioninfo_layout); } - elm_layout_theme_set(pData->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_64"); + if (pData->isRotate) + elm_layout_theme_set(pListData->selectioninfo_layout, "standard", "selectioninfo", "horizontal/bottom_64"); + else + elm_layout_theme_set(pListData->selectioninfo_layout, "standard", "selectioninfo", "vertical/bottom_64"); - if (pData->check_cnt == 0) { - evas_object_hide(pData->select_info); - elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); + if (pListData->check_cnt == 0) { + evas_object_hide(pListData->select_info); + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_TRUE); } else { char text[DEF_BUF_LEN_S] = {'0',}; - snprintf(text, sizeof(text), "%s (%d)", dgettext(MESSAGE_PKGNAME, "IDS_MSGC_POP_SPACE_SELECTED"), pData->check_cnt); - edje_object_part_text_set(_EDJ(pData->selectioninfo_layout), "elm.text", text); - evas_object_show(pData->select_info); - elm_object_item_disabled_set(pData->toolbar_item[CONTROLBAR_ITEM_1], EINA_FALSE); + snprintf(text, sizeof(text), "%s (%d)", dgettext(MESSAGE_PKGNAME, "IDS_MSGC_POP_SPACE_SELECTED"), pListData->check_cnt); + edje_object_part_text_set(_EDJ(pListData->selectioninfo_layout), "elm.text", text); + evas_object_show(pListData->select_info); + + elm_object_item_disabled_set(pListData->toolbar_item[CONTROLBAR_ITEM_1], EINA_FALSE); } } +void msg_ui_thread_show_deleted_info(PMSG_THREAD_LIST_DATA pListData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, !pListData); + + status_message_post(dgettext("sys_string", "IDS_COM_POP_DELETED")); +} + void msg_ui_thread_set_app_state(int app_state) { if (app_state <= MSG_UI_STATE_NONE || app_state >= MSG_UI_STATE_MAX) @@ -264,6 +745,17 @@ void msg_ui_thread_set_app_state(int app_state) if (!pData) return; + if (app_state == MSG_UI_STATE_PAUSE) { + Elm_Object_Item* it_sweep = NULL; + PMSG_THREAD_LIST_DATA pListData = msg_ui_thread_get_current_list(); + + it_sweep = (Elm_Object_Item *)elm_genlist_decorated_item_get(pListData->genlist); + if (it_sweep) { + elm_genlist_item_decorate_mode_set(it_sweep, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(it_sweep, ELM_OBJECT_SELECT_MODE_DEFAULT); + } + } + pData->app_state = app_state; } @@ -274,3 +766,109 @@ int msg_ui_thread_get_app_state(PMSG_THREAD_DATA pData) return pData->app_state; } + +const char *msg_ui_thread_make_search_result_string(const char *string, char *searchword, bool *result) +{ + char pstr[DEF_BUF_LEN + 1] = {0,}; + static char return_string[DEF_BUF_LEN + 1] = { 0, }; + int word_len = 0; + int search_len = 0; + int i = 0; + bool found = false; + gchar* markup_text_start; + gchar* markup_text_end; + gchar* markup_text; + + if (!searchword) return string; + + if (g_utf8_validate(string,-1,NULL)) { + + strncpy(pstr, string, DEF_BUF_LEN); + + word_len = strlen(pstr); + search_len = strlen(searchword); + + for (i = 0; i < word_len; i++) { + if (!strncasecmp(searchword, &pstr[i], search_len)) { + found = true; + break; + } + } + + *result = found; + memset(return_string, 0x00, DEF_BUF_LEN); + + if (found) { + if (i == 0) { + markup_text = g_markup_escape_text(&pstr[i], search_len); + markup_text_end = g_markup_escape_text(&pstr[search_len], word_len-search_len); + snprintf(return_string, + DEF_BUF_LEN, + "<match>%s</match>%s", + (char*)markup_text, + (char*)markup_text_end); + g_free(markup_text); + g_free(markup_text_end); + } else { + markup_text_start = g_markup_escape_text(&pstr[0], i); + markup_text = g_markup_escape_text(&pstr[i], search_len); + markup_text_end = g_markup_escape_text(&pstr[i+search_len], word_len-(i+search_len)); + snprintf(return_string, + DEF_BUF_LEN, + "%s<match>%s</match>%s", + (char*)markup_text_start, + (char*)markup_text, + (char*)markup_text_end); + g_free(markup_text_start); + g_free(markup_text); + g_free(markup_text_end); + } + } else { + snprintf(return_string, DEF_BUF_LEN, "%s", pstr); + } + } + + return return_string; +} + + +void msg_ui_thread_make_time_string(time_t *msg_t, char *buf, int buf_len) +{ + PMSG_THREAD_DATA pData = msg_ui_thread_get_data(); + + time_t cur_t; + unsigned long int msg_day, cur_day; + int diffday; + struct tm msg_time; + struct tm cur_time; + + char *date_str = NULL; + cur_t = time(NULL); + + localtime_r(msg_t, &msg_time); + localtime_r(&cur_t, &cur_time); + + msg_day = (msg_time.tm_year - 1900) * 365 + msg_time.tm_yday + (msg_time.tm_year - 1900 - 1) / 4; + cur_day = (cur_time.tm_year - 1900) * 365 + cur_time.tm_yday + (cur_time.tm_year - 1900 - 1) / 4; + + diffday = cur_day - msg_day; + + if (diffday == 1) + snprintf(buf, buf_len, dgettext("sys_string", "IDS_COM_BODY_YESTERDAY")); + else if (diffday > 1) { + date_str = msg_common_get_formatted_date(pData->locale, pData->date_ptn, msg_t); + snprintf(buf, buf_len, " %s ", date_str); + } else { + if (pData->time_fmt == MSG_TIME_FORMAT_24H) { + date_str = msg_common_get_formatted_date(pData->locale, pData->time_24h_ptn, msg_t); + snprintf(buf, buf_len, " %s ", date_str); + } else { /* MSG_TIME_FORMAT_12H */ + date_str = msg_common_get_formatted_date(pData->locale, pData->time_12h_ptn, msg_t); + snprintf(buf, buf_len, " %s ", date_str); + } + } + + if (date_str) + free(date_str); +} + diff --git a/thread/theme/thread_genlist.edc b/thread/theme/thread_genlist.edc index 38e3f0a..d08ce90 100755 --- a/thread/theme/thread_genlist.edc +++ b/thread/theme/thread_genlist.edc @@ -1,15 +1,6 @@ -#define FONT_LIST_ITEM "HelveticaNeueRom" - -#define SLP_FONT_BOLD "SLP:style=Bold"; -#define SLP_FONT_MEDIUM "SLP:style=Medium"; -#define SLP_FONT_ROMAN "SLP:style=Roman"; - #define MSG_UI_SEL_ALL_H 90 -#define GENLIST_PART_LIST_BG_COLOR_INC 0 0 0 255 -#define GENLIST_PART_LIST_PRESS_COLOR_INC 0 140 210 255 -#define GENLIST_PART_LIST_LINE_COLOR_INC 68 68 68 255 -#define GENLIST_PART_BASE(param_item_height) \ +#define BEAT_GENLIST_PART_BASE(param_item_height) \ part \ { \ name : "base"; \ @@ -24,158 +15,6 @@ } \ } -#define GENLIST_PART_BG_IMAGE \ - part { \ - name: "bg_image"; \ - type: RECT; \ - clip_to: "disclip"; \ - mouse_events: 0; \ - description { state: "default" 0.0; \ - color: GENLIST_PART_LIST_BG_COLOR_INC; \ - } \ - description { \ - state: "selected" 0.0; \ - inherit: "default" 0.0; \ - color: GENLIST_PART_LIST_PRESS_COLOR_INC; \ - } \ -} - -#define GENLIST_PART_BOTTOM_LINE \ - part { \ - name: "bottom_line"; \ - type: RECT; \ - mouse_events: 0; \ - description { \ - state: "default" 0.0; \ - min: 0 1; \ - fixed: 0 1; \ - visible: 1; \ - color: GENLIST_PART_LIST_LINE_COLOR_INC; \ - rel1 { \ - relative: 0.0 1.0; \ - offset: 0 -1; \ - } \ - } \ - } - -#define GENLIST_PART_PADDING_TOP( param_padding_size ) \ - part { name: "elm.padding.top"; \ - type: RECT; \ - scale: 1; \ - description { \ - state: "default" 0.0; \ - min: 0 param_padding_size; \ - fixed: 0 1; \ - visible: 0; \ - rel2.relative: 1.0 0.0; \ - align: 0.0 0.0; \ - } \ - } - -#define GENLIST_PART_PADDING_BOTTOM( param_padding_size ) \ - part { name: "elm.padding.bottom"; \ - type: RECT; \ - scale: 1; \ - description { state: "default" 0.0; \ - min: 0 param_padding_size; \ - fixed: 0 1; \ - visible: 0; \ - rel1.relative: 0.0 1.0; \ - align: 0.0 1.0; \ - } \ - } - -#define GENLIST_PART_PADDING_LEFT( param_padding_size ) \ - part { name: "elm.padding.left"; \ - type: RECT; \ - scale: 1; \ - description { state: "default" 0.0; \ - min: param_padding_size 0; \ - fixed: 1 0; \ - visible: 0; \ - rel2.relative: 0.0 1.0; \ - align: 0.0 0.0; \ - } \ - } - -#define GENLIST_PART_PADDING_RIGHT( param_padding_size ) \ - part { name: "elm.padding.right"; \ - type: RECT; \ - scale: 1; \ - description { state: "default" 0.0; \ - min: param_padding_size 0; \ - fixed: 1 0; \ - visible: 0; \ - rel1.relative: 1.0 0.0; \ - align: 1.0 0.0; \ - } \ - } - - #define GENLIST_DESCRIPTION_FLIP_ENABLED \ - description { state: "flip_enabled" 0.0; \ - inherit: "default" 0.0; \ - visible: 0; \ - } - - -#define GENLIST_PROGRAM_FLIP_3TEXT_1ICON \ - program { name: "flip_enabled"; \ - signal: "elm,state,flip,enabled"; \ - source: "elm"; \ - action: STATE_SET "flip_enabled" 0.0; \ - target: "elm.text.1"; \ - target: "elm.text.2"; \ - target: "elm.text.3"; \ - target: "elm.icon"; \ - target: "elm.flip.content"; \ - } \ - program { name: "flip_disabled"; \ - signal: "elm,state,flip,disabled"; \ - source: "elm"; \ - action: STATE_SET "default" 0.0; \ - target: "elm.text.1"; \ - target: "elm.text.2"; \ - target: "elm.text.3"; \ - target: "elm.icon"; \ - target: "elm.flip.content"; \ - } - -#define GENLIST_PART_FLIP \ - part { name: "elm.flip.content"; \ - clip_to: "disclip"; \ - type: SWALLOW; \ - mouse_events: 1; \ - scale: 1; \ - description { state: "default" 0.0; \ - visible: 0; \ - fixed: 1 1; \ - rel1 { \ - relative: 1.0 0.5; \ - to_x: "elm.padding.left"; \ - } \ - rel2 { \ - relative: 0.0 0.5; \ - to_x: "elm.padding.right"; \ - } \ - } \ - description { state: "flip_enabled" 0.0; \ - inherit: "default" 0.0; \ - visible: 1; \ - } \ - } - - #define GENLIST_PART_DISCLIP \ - part { name: "disclip"; \ - type: RECT; \ - description { state: "default" 0.0; \ - } \ - description { state: "disabled" 0.0; \ - inherit: "default" 0.0; \ - color: 255 255 255 110; \ - } \ - } - - collections{ group{ @@ -230,320 +69,7 @@ collections{ data.item: "treesize" "20"; parts { - GENLIST_PART_BASE(90) - } - } - - group - { - name: "msg_frame_badge_ly"; - - images { - image : "M01_btn_Unread_message_HD.png" COMP; - image : "M01_btn_Unread_message_white_theme.png" COMP; - } - - parts { - part{ - name : "base"; - type : RECT; - scale : 1; - description{ - state : "default" 0.0; - min : 64 64; - rel1 {relative: 0.0 0.0;} - rel2 {relative: 1.0 1.0;} - color: 0 0 0 0; - } - } - part { - name: "elm.badge.bg"; - type: IMAGE; - scale: 1; - description { - state: "default" 0.0; - rel1 { relative: 0.0 0.0; to : "base"; } - rel2 { relative: 1.0 1.0; to : "base"; } - image.normal: "M01_btn_Unread_message_HD.png"; - image.border: 20 20 20 20; - image.border_scale:1; - } - description { - state: "white-theme" 0.0; - inherit : "default" 0.0; - image.normal: "M01_btn_Unread_message_white_theme.png"; - image.border: 5 5 5 5; - image.border_scale:1; - } - - } - - part { - name: "elm.badge.text"; - type: TEXT; - scale: 1; - description { - state: "default" 0.0; - fixed: 1 1; - rel1 { relative: 0.0 0.0; to: "elm.badge.bg"; } - rel2 { relative: 1.0 1.0; to: "elm.badge.bg"; } - text { - font: "SLP"; - size: 32; - min: 1 1; - align: 0.5 0.5; - } - color: 0 0 0 255; - } - description { - state: "white-theme" 0.0; - inherit : "default" 0.0; - color: 255 255 255 255; - } - } - } - programs { - program { - name: "white_theme"; - signal: "unread_icon_change"; - action: STATE_SET "white-theme" 0.0; - target: "elm.badge.bg"; - target: "elm.badge.text"; - } - } - - } - group { - name: "elm/genlist/item/3text.1icon.custom/default"; - alias: "elm/genlist/item_odd/3text.1icon.custom/default"; - alias: "elm/genlist/item_compress/3text.1icon.custom/default"; - alias: "elm/genlist/item_compress_odd/3text.1icon.custom/default"; - data.item: "stacking" "above"; - data.item: "selectraise" "on"; - data.item: "texts" "elm.text.1 elm.text.2 elm.text.3"; - data.item: "contents" "elm.icon"; - data.item: "flips" "elm.flip.content"; - images { - image: "00_list_bar_press_1x80.png" COMP; - } - parts { - GENLIST_PART_BASE(129) - GENLIST_PART_BG_IMAGE - GENLIST_PART_BOTTOM_LINE - GENLIST_PART_PADDING_TOP( 10 ) - GENLIST_PART_PADDING_BOTTOM( 10 ) - GENLIST_PART_PADDING_LEFT( 16 ) - GENLIST_PART_PADDING_RIGHT( 16 ) - part { - name: "elm.text.3"; - clip_to: "disclip"; - type: TEXT; - mouse_events: 0; - scale: 1; - description { - state: "default" 0.0; - min: 133 48; - fixed: 1 1; - rel1 { - relative: 0.0 0.0; - to_x: "elm.padding.right"; - to_y: "elm.padding.bottom"; - } - rel2 { - relative: 0.0 0.0; - to_x: "elm.padding.right"; - to_y: "elm.padding.bottom"; - } - align: 1.0 1.0; - color: 100 100 100 255; - text { - font: "SLP:style=Medium"; - size: 24; - min: 0 1; - align: 1.0 0.5; - } - } - description { - state: "selected" 0.0; - inherit: "default" 0.0; - color: 249 249 249 255; - } - GENLIST_DESCRIPTION_FLIP_ENABLED - } - - part { - name: "elm.padding.text3.left"; - clip_to: "disclip"; - type: RECT; - mouse_events: 0; - scale: 1; - description { - state: "default" 0.0; - min: 32 0; - fixed: 1 0; - rel1.to_x: "elm.text.3"; - rel2 { - relative: 0.0 1.0; - to_x: "elm.text.3"; - } - align: 1.0 0.5; - visible: 0; - } - } - part { - name: "elm.icon"; - clip_to: "disclip"; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - min: 32 32; - max: 32 32; - fixed: 1 1; - rel1 { - relative: 0.0 1.0; - to_x: "elm.padding.right"; - to_y: "elm.padding.top"; - } - rel2 { - relative: 0.0 0.0; - to_x: "elm.padding.right"; - to_y: "elm.text.3"; - } - align: 1.0 0.5; - } - GENLIST_DESCRIPTION_FLIP_ENABLED - } - part { - name: "elm.padding.icon.left"; - clip_to: "disclip"; - type: RECT; - scale: 1; - description { - state: "default" 0.0; - min: 16 0; - fixed: 1 0; - rel1.to_x: "elm.icon"; - rel2 { - relative: 0.0 1.0; - to_x: "elm.icon"; - } - align: 1.0 0.0; - visible: 0; - } - } - part { - name: "elm.text.1"; - clip_to: "disclip"; - type: TEXT; - mouse_events: 0; - scale: 1; - description { - state: "default" 0.0; - rel1 { - relative: 1.0 1.0; - to_x: "elm.padding.left"; - to_y: "elm.padding.top"; - } - rel2 { - relative: 0.0 0.0; - to_x: "elm.padding.icon.left"; - to_y: "elm.text.3"; - } - align: 0.0 0.5; - color: 249 249 249 255; - text { - font: "SLP:style=Roman"; - size: 44; - min: 0 1; - align: 0.0 0.5; - } - } - description { - state: "selected" 0.0; - inherit: "default" 0.0; - color: 249 249 249 255; - } - GENLIST_DESCRIPTION_FLIP_ENABLED - } - part { name: "elm.text.2"; - clip_to: "disclip"; - type: TEXT; - mouse_events: 0; - scale: 1; - description { - state: "default" 0.0; - rel1 { - relative: 1.0 1.0; - to_x: "elm.padding.left"; - to_y: "elm.text.1"; - } - rel2 { - relative: 0.0 0.0; - to_x: "elm.padding.text3.left"; - to_y: "elm.padding.bottom"; - } - align: 0.0 0.5; - color: 100 100 100 255; - text { - font: "SLP:style=Medium"; - size: 32; - min: 0 1; - align: 0.0 0.5; - } - } - description { - state: "selected" 0.0; - inherit: "default" 0.0; - color: 249 249 249 255; - } - GENLIST_DESCRIPTION_FLIP_ENABLED - } - GENLIST_PART_FLIP - GENLIST_PART_DISCLIP - } - programs { - // signal: elm,state,%s,active - // a "check" item named %s went active - // signal: elm,state,%s,passive - // a "check" item named %s went passive - // default is passive - program { - name: "go_active"; - signal: "elm,state,selected"; - source: "elm"; - action: STATE_SET "selected" 0.0; - target: "bg_image"; - target: "elm.text.1"; - target: "elm.text.2"; - target: "elm.text.3"; - } - program { - name: "go_passive"; - signal: "elm,state,unselected"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "bg_image"; - target: "elm.text.1"; - target: "elm.text.2"; - target: "elm.text.3"; - transition: LINEAR 0.1; - } - program { - name: "go_disabled"; - signal: "elm,state,disabled"; - source: "elm"; - action: STATE_SET "disabled" 0.0; - target: "disclip"; - } - program { - name: "go_enabled"; - signal: "elm,state,enabled"; - source: "elm"; - action: STATE_SET "default" 0.0; - target: "disclip"; - } - GENLIST_PROGRAM_FLIP_3TEXT_1ICON + BEAT_GENLIST_PART_BASE(90) } } } diff --git a/viewer/CMakeLists.txt b/viewer/CMakeLists.txt new file mode 100755 index 0000000..90f71c9 --- /dev/null +++ b/viewer/CMakeLists.txt @@ -0,0 +1,65 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(ug-msg-viewer-efl C) + +SET (MSG_VIEWER msg_viewer) + +################################# +# Message Viewer # +################################# + +SET(VIEWER_SRCS + ./src/msg-ui-viewer-gadget.c + ./src/msg-ui-viewer-main.c + ./src/msg-ui-viewer-callback.c + ./src/msg-ui-viewer-drm-list.c + ./src/msg-ui-viewer-drm-utility.c + ./src/msg-ui-viewer-play-view.c + ./src/msg-ui-viewer-play-view-callback.c + ./src/msg-ui-viewer-item-list.c + ./src/msg-ui-viewer-utility.c + ./smil-player/src/msg-smil-player.c + ./smil-player/src/msg-smil-content-manager.c + ./smil-player/src/msg-smil-event-manager.c + ./smil-player/src/msg-smil-player-interface.c + ./smil-player/src/msg-smil-render.c + ./smil-player/src/msg-smil-text-render.c + ./smil-player/src/msg-smil-media-render.c + ./smil-player/src/msg-smil-util.c +) + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_VIEWER_DIR}/include + ${CMAKE_SOURCE_MAIN_DIR} + ${CMAKE_SOURCE_COMMON_DIR} + /usr/include/msg-service/ + ${CMAKE_SOURCE_VIEWER_DIR}/smil-player/include +) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") + +ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{PREFIX}\"") +ADD_DEFINITIONS("-DDATAFS=\"$ENV{DATADIR}\"") +ADD_DEFINITIONS("-DTARGET") +ADD_DEFINITIONS("-DSLP_PROF") + +ADD_CUSTOM_TARGET(${MSG_VIEWER}.edj + COMMAND edje_cc -id + ${CMAKE_SOURCE_COMMON_DIR}/data/edc_image + ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edc ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edj + DEPENDS ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edc +) + +ADD_LIBRARY(${PROJECT_NAME} SHARED ${VIEWER_SRCS}) +ADD_DEPENDENCIES(${PROJECT_NAME} ${MSG_VIEWER}.edj) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} -L${CMAKE_SOURCE_COMMON_DIR} -lmsg-common) + +# Install executable and .edj files. +#INSTALL(DIRECTORY ${CMAKE_SOURCE_VIEWER_DIR}/data/images/ DESTINATION ${IMGDIR} FILES_MATCHING PATTERN "*.png") +INSTALL(FILES ${CMAKE_SOURCE_VIEWER_DIR}/theme/${MSG_VIEWER}.edj DESTINATION ${EDJDIR}) +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${UGDIR}) + +#i18n +#ADD_SUBDIRECTORY(po) diff --git a/viewer/include/msg-ui-viewer-drm-list.h b/viewer/include/msg-ui-viewer-drm-list.h new file mode 100755 index 0000000..64aead4 --- /dev/null +++ b/viewer/include/msg-ui-viewer-drm-list.h @@ -0,0 +1,100 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_VIEWER_DRM_LIST_H__ +#define __MSG_VIEWER_DRM_LIST_H__ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include <msg.h> +#include "msg-ui-viewer-types.h" +#include <Ecore.h> +#include <Elementary.h> + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define MSG_VIEWER_MAX_ICON_WIDTH 40 +#define MSG_VIEWER_MAX_ICON_HEIGHT 40 + +/*================================================================================================== + * ENUMERATIONS + *==================================================================================================*/ +typedef enum { + MSG_VIEWER_DRM_LIST_CMD_NONE = 0, + MSG_VIEWER_DRM_LIST_CMD_LAUNCH_BROWSER, +} MSG_VIEWER_DRM_LIST_CMD_E; + +/*================================================================================================== + * STRUCTURES + *==================================================================================================*/ + +typedef struct { + char pfile_name[MSG_VIEWER_FILENAME_MAX_LEN + 1]; + char pfile_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1]; + MmsSmilMediaType media_type; +} MSG_VIEWER_MEDIA_INFO_S; + +typedef struct { + void *viewer_main; + Evas_Object *main_window; + Evas_Object *navi_frame; + Evas_Object *genlist; + + msg_message_id_t msgID; + msg_handle_t msgHandle; + msg_struct_t mms_t; + + MSG_VIEWER_DRM_LIST_CMD_E drm_list_cmd; + Elm_Object_Item *selected_item; /*selected item of drm list*/ + MSG_VIEWER_MEDIA_INFO_S *selected_file_info;/*selected file info.*/ + Eina_List *drm_list; +} MSG_DRM_LIST_DATA_S; + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +void msg_ui_viewer_drm_list_init(void *data); +MSG_BOOL msg_ui_viewer_create_drm_list_view(void *data); +void msg_ui_viewer_destroy_drm_list_view(void *data); + +/* + *@fn msg_ui_viewer_drm_list_delete_current_list(void *data); + *@brief this function is used to delete selected list + * @param[in] data MSG_DRM_LIST_DATA_S structure + */ +void msg_ui_viewer_drm_list_delete_current_list(void *data); + +/* + *@fn msg_ui_viewer_drm_list_check_current_ro_valid(void *data); + *@brief this function is used to check whether current selected list's ro is valid or not + * @param[in] data MSG_DRM_LIST_DATA_S structure + * @return return TRUE if ro is valid, else FALSE + */ +MSG_BOOL msg_ui_viewer_drm_list_check_current_ro_valid(void *data); + +/* + *@fn msg_ui_viewer_get_invalid_ro_drm_list(msg_struct_t mms_t, Eina_List *drm_list); + *@brief this function is used to get invalid drm list(inavlid ro sd typed) + *@param[in] data MMS_MESSAGE_DATA_S structure pointer + *@param[out] drm_list invalid drm list will be added + *@return return TRUE if invalid drm_list is added, else retrun FALSE + */ +MSG_BOOL msg_ui_viewer_get_invalid_ro_drm_list(msg_struct_t mms_t, Eina_List **drm_list); + +#endif + diff --git a/viewer/include/msg-ui-viewer-drm-utility.h b/viewer/include/msg-ui-viewer-drm-utility.h new file mode 100755 index 0000000..eed71be --- /dev/null +++ b/viewer/include/msg-ui-viewer-drm-utility.h @@ -0,0 +1,127 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_VIEWER_DRM_UTILITY_H__ +#define __MSG_VIEWER_DRM_UTILITY_H__ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-ui-viewer-types.h" +#include <drm_trusted_client.h> +#include <drm_client.h> + +/*================================================================================================== + * ENUMERATIONS + *==================================================================================================*/ +typedef enum { + MSG_UI_DRM_UNDEFINED = DRM_METHOD_TYPE_UNDEFINED, + MSG_UI_DRM_TYPE_FL = DRM_METHOD_TYPE_FORWARD_LOCK, + MSG_UI_DRM_TYPE_CD = DRM_METHOD_TYPE_COMBINED_DELIVERY, + MSG_UI_DRM_TYPE_SD = DRM_METHOD_TYPE_SEPARATE_DELIVERY, +} MSG_UI_DRM_TYPE_E; + +typedef enum { + MSG_UI_DRM_RIGHT_PLAY, /*video*/ + MSG_UI_DRM_RIGHT_DISPLAY, /*image*/ +} MSG_UI_DRM_RIGHT_TYPE_E; + +/*================================================================================================== + * STRUCTURES + *==================================================================================================*/ +typedef struct { + DRM_DECRYPT_HANDLE consume_handle; +} MSG_UI_DRM_CONSUME_S; + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +MSG_BOOL msg_ui_viewer_is_drm_file(const char *filepath); + +/* + *@fn msg_ui_viewer_get_drm_type(const char *filepath); + *@brief This function is used to get drm type, msg_ui_viewer_is_drm_file should be called before calling this api to check whether filepath is drm file or not + * @param[in] filepath filepath + * @return return TRUE if ro is valid, else FALSE + */ +MSG_UI_DRM_TYPE_E msg_ui_viewer_get_drm_type(const char *filepath); + +/* + *@fn msg_ui_viewer_check_drm_ro_valid(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type); + *@brief This function is used to check ro is valid or not, msg_ui_viewer_is_drm_file should be called before calling this api to check whether filepath is drm file or not + * @param[in] filepath filepath + * @param[in] permission_type permission type to be shown/played + * @return return TRUE if ro is valid, else FALSE + */ +MSG_BOOL msg_ui_viewer_check_drm_ro_valid(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type); + +/* + *@fn msg_ui_viewer_get_drm_url(const char *filepath, char *szurl, int szurl_len); + *@brief This function is used to check ro is valid or not + * @param[in] filepath filepath + * @param[in] szurl_len buffer size of szrul + * @param[out] szurl will be got url address of ro + * @return return TRUE if caller get url address well, else FALSE + */ +MSG_BOOL msg_ui_viewer_get_drm_url(const char *filepath, char *szurl, int szurl_len); + +/* + *@fn msg_ui_viewer_consume_ro_start(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, MSG_UI_DRM_CONSUME_S *consume_t); + *@brief This function is used to start to consume ro + * @param[in] filepath filepath + * @param[in] permission_type permission type to be shown/played + * @param[out] consume_t consume handle will be set + * @return return TRUE if consume routine is started well, else FALSE + */ +MSG_BOOL msg_ui_viewer_consume_ro_start(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, MSG_UI_DRM_CONSUME_S *consume_t); + +/* + *@fn msg_ui_viewer_consume_ro_pause(MSG_UI_DRM_CONSUME_S *consume_t); + *@brief This function is used to pause consume ro, this is used for DRM 2.0(accumulated type) + * @param[in] consume_t consume handle + * @return return TRUE if consume routine is puased well, else FALSE + */ +MSG_BOOL msg_ui_viewer_consume_ro_pause(MSG_UI_DRM_CONSUME_S *consume_t); + +/* + *@fn msg_ui_viewer_consume_ro_resume(MSG_UI_DRM_CONSUME_S *consume_t); + *@brief This function is used to resume consume ro, this is used for DRM 2.0(accumulated type) + * @param[in] consume_t consume handle + * @return return TRUE if consume routine is resumed well, else FALSE + */ +MSG_BOOL msg_ui_viewer_consume_ro_resume(MSG_UI_DRM_CONSUME_S *consume_t); + +/* + *@fn msg_ui_viewer_consume_ro_stop(MSG_UI_DRM_CONSUME_S *consume_t); + *@brief This function is used to stop and close consume ro + * @param[in] consume_t consume handle + * @return return TRUE if consume routine is stopped and closed well, else FALSE + */ +MSG_BOOL msg_ui_viewer_consume_ro_stop(MSG_UI_DRM_CONSUME_S *consume_t); + +/* + *@fn msg_ui_viewer_get_buffer_from_drm_file(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, unsigned int *buffer_size) + *@brief This function is used to get raw data from drm file + *@param[in] filepath filepath of drm file + *@param[in] permission_type permission type to be shown/played + *@param[out] buffer_size buffer size of raw data + *@return return allocated raw data pointer of drm file, else NULL. + *@Caution Caller should free return pointer after using data. + */ +unsigned char *msg_ui_viewer_get_buffer_from_drm_file(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, unsigned int *buffer_size); + +#endif + diff --git a/viewer/include/msg-ui-viewer-item-list.h b/viewer/include/msg-ui-viewer-item-list.h new file mode 100755 index 0000000..8671b82 --- /dev/null +++ b/viewer/include/msg-ui-viewer-item-list.h @@ -0,0 +1,101 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_VIEWER_ITEM_LIST_H__ +#define __MSG_VIEWER_ITEM_LIST_H__ +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include <msg.h> +#include "msg-ui-viewer-types.h" + +#include <Ecore.h> +#include <Elementary.h> +#include <ui-gadget-module.h> + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define MSG_MAX_GROUP_LABEL 2 +#define MSG_BUFFER_SIZE_64 64 +/*================================================================================================== + * ENUMERATIONS + *==================================================================================================*/ +typedef enum { + MSG_MEDIA_INVALID = 0, + MSG_MEDIA_IMG, + MSG_MEDIA_AUDIO, + MSG_MEDIA_VIDEO, + MSG_MEDIA_TEXT, + MSG_MEDIA_ANIMATE, + MSG_MEDIA_IMG_OR_VIDEO, + MSG_MEDIA_ATTACH, /*for attachment*/ + MSG_MEDIA_DRM, /*for DRM content*/ +} MSG_MEDIA_TYPE_E; + +typedef enum { + ITEM_LIST_INFO_INVALID = 0, + ITEM_LIST_INFO_INSERT_FILE, + ITEM_LIST_INFO_ATTACH_FILE, +} MSG_ITEM_LIST_INFO_E; + +/*================================================================================================== + * STRUCTURES + *==================================================================================================*/ +typedef struct { + int index; + char *group_label; +} MSG_GROUP_LABEL_S; + +typedef struct { + void *viewer_main; + Evas_Object *main_window; + Evas_Object *navi_frame; + Evas_Object *popup; + Evas_Object *genlist; + + msg_handle_t msgHandle; /*ipc handler between viewer and MF*/ + msg_message_id_t msgID; + msg_struct_t mms_t; + + int insert_item_count; /*inserted content's count, image, sound, video and etc.*/ + int attach_item_count; + Eina_List *insert_list; + Eina_List *attach_list; + + Elm_Object_Item *group_item_class; + Elm_Genlist_Item_Class item_class; + Elm_Genlist_Item_Class title_class; + + MSG_GROUP_LABEL_S group_list[MSG_MAX_GROUP_LABEL]; +} MSG_ITEM_LIST_DATA_S; + +typedef struct { + char pfile_name[MSG_VIEWER_FILENAME_MAX_LEN + 1]; + char pfile_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1]; + MSG_MEDIA_TYPE_E emedia_type; + MSG_ITEM_LIST_DATA_S *item_list_data; +} MSG_MEDIA_INFO_S; + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +void msg_ui_viewer_init_item_list(void *data); +MSG_BOOL msg_ui_viewer_create_item_list_view(void *data); +void msg_ui_viewer_destroy_item_list(void *data); + +#endif + diff --git a/viewer/include/msg-ui-viewer-main.h b/viewer/include/msg-ui-viewer-main.h new file mode 100755 index 0000000..14aa7f0 --- /dev/null +++ b/viewer/include/msg-ui-viewer-main.h @@ -0,0 +1,177 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_UI_VIEWER_MAIN_H__ +#define __MSG_UI_VIEWER_MAIN_H__ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include <msg.h> +#include "msg-ui-viewer-types.h" +#include "msg-ui-util.h" + +#include "msg-ui-viewer-item-list.h" +#include "msg-ui-viewer-drm-list.h" +#include "msg-ui-viewer-play-view.h" + +#include <Elementary.h> +#include <ui-gadget-module.h> + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define MSG_VIEWER_THEME EDJDIR"/msg_viewer.edj" + +/*View control CMD defines*/ +#define MSG_VIEWER_VIEW_CMD_NONE 0 +#define MSG_VIEWER_VIEW_CMD_PLAY 0x01 + +/*================================================================================================== + * ENUMERATIONS + *==================================================================================================*/ +typedef enum { + MSG_VIEWER_PLAYER_VIEW, + MSG_VIEWER_DRM_LIST_VIEW, + MSG_VIEWER_ITEM_LIST_VIEW +} MSG_VIEWER_VIEW_MODE_E; + +typedef enum { + MSG_UG_MODE_FULLVIEW, + MSG_UG_MODE_FRAMVIEW, + MSG_INVALID_UG_MODE, +} MSG_UG_LAUNCH_MODE_E; + +typedef enum { + MSG_VIEWER_FULLVIEW_MODE = 0, /*full view mode include item list*/ + MSG_VIEWER_PREVIEW_MODE, /*preview mode from composer*/ + MSG_VIEWER_INVALID_MODE, +} MSG_VIEWER_LAUNCH_VIEW_MODE_E; + +/*================================================================================================== + * STRUCTURES + *==================================================================================================*/ +typedef struct _MSG_VIEWER_MAIN_DATA { + ui_gadget_h viewer_ug; + struct ug_cbs cbs; + ui_gadget_h loaded_ug; /*if each view call other ug, then set this loaded_ug by using msg_ui_viewer_set_loaded_ug*/ + + Evas_Object *main_window; + Evas_Object *layout_main; + Evas_Object *bg; + Evas_Object *navi_frame; /*if navi_frame is created from which view, then navi_frame should be set by using msg_ui_viewer_set_navi_frame*/ + + msg_handle_t msgHandle; /*ipc handler between viewer and MF*/ + int msgID; + + MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode; /*preview mode or full view mode */ + void *SmilHandle; /*smilplayer handler*/ + msg_struct_t msg_t; /* msg info struct */ + msg_struct_t mms_t; /* mms struct */ + + MSG_UG_LAUNCH_MODE_E ug_launch_mode; /*This is a launching ug-mode of viewer, frameview or fullview*/ + + MSG_VIEWER_VIEW_MODE_E view_mode; + MSG_DRM_LIST_DATA_S *drm_list_view; + MSG_ITEM_LIST_DATA_S *item_list_view; + MSG_PLAY_DATA_S *player_view; + + Ecore_Idler *del_idler; + Eina_List* drm_list;/*set invalid ro drm content*/ +} MSG_VIEWER_MAIN_DATA_S; + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +void msg_ui_viewer_main_init(void *data); +MSG_BOOL msg_ui_viewer_launch(void *data); +void msg_ui_viewer_show_view_by_mode(void *data, MSG_VIEWER_VIEW_MODE_E viewMode, unsigned int commandType); + +/* + *@fn msg_ui_viewer_set_loaded_ug(void *data, ui_gadget_h loaded_ug); + *@brief this function is used to set loaded ug pointer to MSG_VIEWER_MAIN_DATA_S + *@param[in] data MSG_VIEWER_MAIN_DATA_S structure + *@param[in] loaded_ug loaded ug pointer + */ +void msg_ui_viewer_set_loaded_ug(void *data, ui_gadget_h loaded_ug); + +/* + *@fn msg_ui_viewer_set_navi_frame(void *data, Evas_Object *navi_frame); + *@brief this function is used to set navi_frame to MSG_VIEWER_MAIN_DATA_S + *@param[in] data MSG_VIEWER_MAIN_DATA_S structure + *@param[in] navi_frame naviframe pointer + */ +void msg_ui_viewer_set_navi_frame(void *data, Evas_Object *navi_frame); + +/* + *@fn msg_ui_viewer_set_smilhandle(void *data, void *smilhandle); + *@brief this function is used to set smilhandle to MSG_VIEWER_MAIN_DATA_S + *@param[in] data MSG_VIEWER_MAIN_DATA_S structure + *@param[in] smilhandle smilhandle + */ +void msg_ui_viewer_set_smilhandle(void *data, void *smilhandle); + +/* + *@fn msg_ui_viewer_get_viewer_launchmode(void *data, MSG_VIEWER_LAUNCH_VIEW_MODE_E *launchmode); + *@brief this function is used to get viewer launch mode(preview/fullview) + *@param[in] data MSG_VIEWER_MAIN_DATA_S structure + *@param[out] launchmode MSG_VIEWER_LAUNCH_VIEW_MODE_E mode (preview/fullview) + *@return return TRUE if it has launchmode, else FALSE + */ +MSG_BOOL msg_ui_viewer_get_viewer_launchmode(void *data, MSG_VIEWER_LAUNCH_VIEW_MODE_E *launchmode); + +/* + *@fn msg_ui_viewer_get_viewer_ug_mode(void *data, MSG_UG_LAUNCH_MODE_E *ug_mode); + *@brief this function is used to get viewer ug launched mode + *@param[in] data MSG_VIEWER_MAIN_DATA_S structure + *@param[out] ug_mode MSG_UG_LAUNCH_MODE_E mode (framview mode/fullview mode) + *@return return TRUE if it has viewer ug launchmode, else FALSE + */ +MSG_BOOL msg_ui_viewer_get_viewer_ug_mode(void *data, MSG_UG_LAUNCH_MODE_E *ug_mode); + +/* + *@fn msg_ui_viewer_get_viewer_ug(void *data); + *@brief this function is used to get viewer ug pointer + *@param[in] data MSG_VIEWER_MAIN_DATA_S structure + *@return return viewer ug pointer, else NULL + */ +ui_gadget_h msg_ui_viewer_get_viewer_ug(void *data); + +/* + *@fn msg_ui_viewer_get_main_layout(void *data); + *@brief this function is used to get layout_main of viewer + *@param[in] data MSG_VIEWER_MAIN_DATA_S structure + *@return return layout_main pointer, else NULL + */ +Evas_Object *msg_ui_viewer_get_main_layout(void *data); + +/* + *@fn msg_ui_viewer_get_bg_layout(void *data); + *@brief this function is used to get bg_layout of viewer + *@param[in] data MSG_VIEWER_MAIN_DATA_S structure + *@return return bg_layout pointer, else NULL + */ +Evas_Object *msg_ui_viewer_get_bg_layout(void *data); + +Evas_Object *msg_ui_viewer_create_bg(void *data, Evas_Object *parent); +Evas_Object *msg_ui_viewer_create_layout_main(Evas_Object *parent); +/* VIEWER CALLBACK */ +Eina_Bool msg_ui_viewer_ug_quit(void *data); +void msg_ui_viewer_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv); +void msg_ui_viewer_result_cb(ui_gadget_h ug, service_h svc_result_h, void *priv); +void msg_ui_viewer_destroy_cb(ui_gadget_h ug, void *priv); + +#endif /* __MSG_UI_VIEWER_MAIN_H__*/ diff --git a/viewer/include/msg-ui-viewer-play-view.h b/viewer/include/msg-ui-viewer-play-view.h new file mode 100755 index 0000000..cdac2a6 --- /dev/null +++ b/viewer/include/msg-ui-viewer-play-view.h @@ -0,0 +1,310 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_UI_VIEWER_PLAY_VIEW_H__ +#define __MSG_UI_VIEWER_PLAY_VIEW_H__ +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include <msg.h> + +#include "msg-smil-player-interface.h" +#include "msg-ui-viewer-types.h" + +#include <Ecore.h> +#include <Elementary.h> +#include <ui-gadget-module.h> + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define VIEWER_TITLE_MENU_GENLIST_MAX_ITEM 3 +#define VIEWER_TITLE_MENU_LINE_HEIGHT 129 +#define VIEWER_ATTACH_GL_ITEM_HEIGHT 114 +#define VIEWER_ATTACH_POPUP_WIDTH 620 +#define VIEWER_TITLE_FONT_LEN 100 +#define VIEWER_TITLE_FONT_STYLE_LEN 60 +#define VIEWER_SUBJECT_MAX_LEN 40 +#define VIEWER_SUBJECT_LINE_WRAP_LENGTH 560 +#define VIEWER_NAVI_FRAME_HEIGHT 98 +#define VIEWER_PAGE_NAVI_ICON_WIDTH 38 +#define VIEWER_PAGE_NAVI_ICON_HEIGHT 38 +#define VIEWER_COLOR_128 128 +#define VIEWER_COLOR_255 255 + +#define VIEWER_PLAY_CONTROLLER_LIFETIME 3 +#define VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME 1 +#define VIEWER_PLAY_CONTROLLER_HEIGHT 120 +#define VIEWER_NAVIFRAME_BOTTOM_H 114 + +#define VIEWER_DETAILS_TEXT_SPACE " " +#define VIEWER_DETAILS_TEXT_COMMA ", " +#define VIEWER_DETAILS_TEXT_DASH " - " +#define VIEWER_DETAILS_TEXT_LEFT_BRACE "(" +#define VIEWER_DETAILS_TEXT_RIGHT_BRACE ")" +#define VIEWER_DETAILS_TEXT_LINE_FEED "<br>" +#define VIEWER_DETAILS_TEXT_MSG_SIZE_KB 1024 + +#define MSG_VIEWER_EDJ EDJDIR"/msg_viewer.edj" +/*================================================================================================== + * ENUMERATIONS + *==================================================================================================*/ +typedef enum { + MSG_VIEWER_PLAY = 0, + MSG_VIEWER_PAUSE, + MSG_VIEWER_STOP, + MSG_VIEWER_CLOSE, + MSG_VIEWER_UNKOWN, +} MSG_VIEWER_PLAY_STATUS_E; + +typedef enum { + MSG_VIEWER_DEFAULT_MODE = 0, + MSG_VIEWER_LOAD_OTHER_UG_MODE, /*launch other ug mode like calling contact ug*/ + MSG_VIEWER_LOAD_OTHER_APP_MODE, /*launch other application mode like calling voice call*/ +} MSG_VIEWER_LAUNCH_CMD_TYPE_E; + +typedef enum { + MSG_VIEWER_CMD_NONE = 0, + MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT, + MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER, + MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER, + MSG_VIEWER_CMD_LOAD_CALL, + MSG_VIEWER_CMD_LOAD_VIDEO_CALL, + MSG_VIEWER_CMD_LOAD_BROWSER +} MSG_VIEWER_CMD_TYPE_E; + +typedef enum { + MSG_VIEWER_FILE_SAVE_SUCCESS = 0, + MSG_VIEWER_FILE_SAVE_FAILED, + MSG_VIEWER_FILE_SAVE_INVALID_ERROR, +} MSG_VIEWER_FILE_SAVE_STATUS_E; + +typedef enum { + VIEWER_NORMAL_POPUP, + VIEWER_SAVE_MODE_POPUP, + VIEWER_DELETE_MSG_MODE_POPUP, +} MSG_VIEWER_POPUP_MODE_E; + +typedef enum { + MSG_VIEWER_MEDIA_INVALID = 0, + MSG_VIEWER_MEDIA_IMG, + MSG_VIEWER_MEDIA_AUDIO, + MSG_VIEWER_MEDIA_VIDEO, + MSG_VIEWER_MEDIA_TEXT, + MSG_VIEWER_MEDIA_ANIMATE, + MSG_VIEWER_MEDIA_IMG_OR_VIDEO, + MSG_VIEWER_MEDIA_ATTACH, + MSG_VIEWER_MEDIA_DRM, +} MSG_VIEWER_MEDIA_TYPE_E; + +/*================================================================================================== + * STRUCTURES + *==================================================================================================*/ +typedef struct _MSG_VIEWER_ADDR_INFO_S{ + int contact_id; + char address[MAX_ADDRESS_VAL_LEN+1]; + char name[MAX_DISPLAY_NAME_LEN+1]; +} MSG_VIEWER_ADDR_INFO; + +typedef struct _MSG_VIEWER_ADDR_LIST_S{ + int addr_cnt; + MSG_VIEWER_ADDR_INFO addr_info[MAX_TO_ADDRESS_CNT]; +} MSG_VIEWER_ADDR_LIST; + +typedef struct _MSG_PLAY_DATA_S { + struct ug_cbs cbs; + void *viewer_main; + Evas_Object *main_window; + Evas_Object *navi_frame; + Evas_Object *navi_title_layout; /* navi title area layout */ + Evas_Object *title_button; /* navi title button */ + Evas_Object *ctrl_toolbar; /* control toolbar */ + Evas_Object *title_toolbar; /* title tolbar(optionheader) */ + + Evas_Object *title_box_layout; /* title box layout for genlist */ + Evas_Object *title_genlist; /* title genlist for multirecipients */ + Evas_Object *play_layout; /* play viewer main layout */ + Evas_Object *subject_index_layout; /* subject / page index */ + Evas_Object *play_controller; /* play controller */ + Evas_Object *progressbar; /* progressbar of play controller */ + Evas_Object *prev_button; /* prev button */ + Evas_Object *next_button; /* next button */ + Evas_Object *help_page_gl; /* help page genlist */ + + Evas_Object *save_attachment_gl; /* save attachments genlist(controlbar menu) */ + Evas_Object *save_button; /* save attachment's popup button */ + Evas_Object *sa_check; /* select all check object in save attachment popup */ + Eina_Bool isSelectAll; /* check if save attachments select all mode is enable */ + + Elm_Object_Item *navi_item; /* naviframe item */ + Elm_Object_Item *toolbar_item[3]; /* title button toolbar items */ + Elm_Object_Item *ctrltoolbar_item[4]; /* control toolbar items */ + + Evas_Object *popup; /*simple popup*/ + MSG_VIEWER_POPUP_MODE_E popup_mode; /*simple popup or saved mode popup*/ + SMIL_SLIDE_CLIENT_CB_PARAM_S *smil_eventStatus; + + int m_x; + int m_y; + int window_width; + int window_height; + + Ecore_Event_Handler *mouse_down_event_handler; + Ecore_Event_Handler *mouse_up_event_handler; + + msg_handle_t msgHandle; /*ipc handler between viewer and MF*/ + msg_struct_t msg_t; + msg_struct_t mms_t; + int msgID; + MSG_VIEWER_LAUNCH_CMD_TYPE_E launch_cmd; + + void *SmilHandle; + + MSG_VIEWER_PLAY_STATUS_E status; + MSG_VIEWER_PLAY_STATUS_E previous_status; + MSG_VIEWER_CMD_TYPE_E cmd_type; + + int bgcolor; + Ecore_Idler *del_idler; + Ecore_Timer *play_controller_timer; + Ecore_Timer *play_controller_progressbar_timer; + + int ctrl_start_x; /* play controller mouse pointer */ + int ctrl_start_y; /* play controller mouse pointer */ + + int insert_count; /*inserted contents count, except text file*/ + int attach_count; /*attached contents count*/ + + Eina_List *insert_list; /*inserted content list */ + Eina_List *attach_list; /*attached contents list */ + + bool title_optionheader_opened; /* check if title button option is opened*/ + bool playcontroller_opened; /*check play controller is shown or not */ + + int totalProgressTime; /* total progress time for all slide*/ + int elapsedProgressTime; /*progress time from 1st slide to current slide*/ + + Elm_Genlist_Item_Class itc_title; /* title button multi recipient item */ + Elm_Genlist_Item_Class hp_sa_class; /* help page attach list save all item */ + Elm_Genlist_Item_Class hp_class; /* help page attach list item */ + Elm_Genlist_Item_Class attach_sa_class; /*attachments select all item */ + Elm_Genlist_Item_Class attach_item_class; /*attachments each item */ + + MSG_VIEWER_ADDR_LIST addr_list; /* current only thread address list*/ + + Elm_Theme *title_th; /* title button theme*/ + Elm_Theme *progress_th; /* progressbar theme*/ +} MSG_PLAY_DATA_S; + +typedef struct { + char pfile_name[MSG_VIEWER_FILENAME_MAX_LEN + 1]; + char pfile_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1]; + int pfile_size; + bool isSaveAll; /* for select all item */ + Eina_Bool isChecked; /* check object status of save attachment genlist */ + Evas_Object *check_item; /* check object for save attachments genlist */ + MSG_VIEWER_MEDIA_TYPE_E media_type; + MSG_PLAY_DATA_S *viewer_play_data; +} MSG_VIEWER_ATTACH_MEDIA_INFO_S; +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data); + +/* + *@fn msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data); + *@brief This function is used to show player view again when player view is already ready. + * @param[in] data MSG_PLAY_DATA_S structure + * @return return TRUE if player view is playing, else FALSE + */ +MSG_BOOL msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data); + +void msg_ui_viewer_play_view_init(void *data); +void msg_ui_viewer_destroy_play_view(void *data); +void msg_ui_viewer_disconnect_handler(void *data); + +/* + *@fn msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status); + *@brief This function is used to enable/disable prev & next button + * @param[in] data MSG_PLAY_DATA_S structure + * @param[in] status viewer play status. + */ +void msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status); +Evas_Object *msg_ui_viewer_create_navigation_layout(Evas_Object *parent); +Evas_Object *msg_ui_viewer_create_navi_title_layout(MSG_PLAY_DATA_S *data); +void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data); +Evas_Object *msg_ui_viewer_create_title_toolbar(void *data); +void msg_ui_viewer_add_title_toolbar_item(Evas_Object *toolbar, void *data); +Evas_Object *msg_ui_viewer_create_title_toolbar_btn(Evas_Object *parent, char *icon_path, char *button_text); +void msg_ui_viewer_open_title_menu_genlist(void *data); +void msg_ui_viewer_close_title_menu_genlist(void *data); +void msg_ui_viewer_show_popup(void *data, Evas_Object *parent, char *pcontent); +void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data); +void msg_ui_viewer_create_play_controller_timer(MSG_PLAY_DATA_S *data); +void msg_ui_viewer_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx); +void msg_ui_viewer_destroy_play_controller_progressbar_timer(MSG_PLAY_DATA_S *data); +void msg_ui_viewer_destroy_play_controller_timer(MSG_PLAY_DATA_S *data); +void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data); + +/* ========================VIEWER CALLBACK========================*/ +/* + *@fn msg_ui_viewer_smil_cb(SMIL_SLIDE_EVENT_PARAM_S *eventStatus, void *appUserData); + *@brief This function is SMIL callback function + * @param[in] eventStatus this is the slide info to be used by the application. + * @param[in] appUserData appdata structure + * @return MSG_SMIL_ERROR_E + */ +MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *appUserData); +Eina_Bool msg_ui_viewer_mouse_down_cb(void *data, int type, void *event); +Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event); +void msg_ui_viewer_play_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +void msg_ui_viewer_title_button_clicked_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_save_button_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_resend_button_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_stop_button_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_toolbar_call_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_toolbar_vcall_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_toolbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_toolbar_view_contact_cb(void *data, Evas_Object *obj, void *event_info); + +/* Play controller */ +void msg_ui_viewer_volume_button_cb(void *data, Evas_Object *o, const char *emission, const char *source); +void msg_ui_viewer_prev_button_cb(void *data, Evas_Object *o, const char *emission, const char *source); +void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object *o, const char *emission, const char *source); +void msg_ui_viewer_next_button_cb(void *data, Evas_Object *o, const char *emission, const char *source); +Eina_Bool msg_ui_viewer_play_controller_progressbar_timer_cb(void *data); +Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data); +void msg_ui_viewer_command_play_pause(void *data); +void msg_ui_viewer_update_player_state_after_save(void *data); + +/* help page create cb - called from SMIL renderer */ +MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data, void **attach_list, void *box); +void msg_ui_viewer_help_page_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info); + +/* popup */ +void msg_ui_viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info); +void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info); + +/* message info */ +void msg_ui_viewer_contact_info_update(MSG_PLAY_DATA_S *data); +#endif /* __MSG_UI_VIEWER_PLAY_VIEW_H__*/ diff --git a/viewer/include/msg-ui-viewer-types.h b/viewer/include/msg-ui-viewer-types.h new file mode 100755 index 0000000..1854997 --- /dev/null +++ b/viewer/include/msg-ui-viewer-types.h @@ -0,0 +1,48 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_UI_VIEWER_TYPE_H__ +#define __MSG_UI_VIEWER_TYPE_H__ +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include <msg.h> +#include <stdio.h> +#include <string.h> +#include <stdlib.h> + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#ifndef TRUE +#define TRUE 1 +#endif +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef MSG_BOOL +#define MSG_BOOL char +#endif + +#define MSG_VIEWER_CONTENT_PATH "/opt/media" +#define MSG_VIEWER_DOWNLOAD_PATH MSG_VIEWER_CONTENT_PATH"/Downloads" +#define MSG_VIEWER_FILENAME_MAX_LEN MSG_FILENAME_LEN_MAX /*255*/ +#define MSG_VIEWER_FILEPATH_MAX_LEN MSG_FILEPATH_LEN_MAX /*1024*/ +#define MSG_VIEWER_FILE_EXT_MAX_LEN 8 + +#endif /*__MSG_UI_VIEWER_TYPE_H__*/ + diff --git a/viewer/include/msg-ui-viewer-utility.h b/viewer/include/msg-ui-viewer-utility.h new file mode 100755 index 0000000..9dd6f26 --- /dev/null +++ b/viewer/include/msg-ui-viewer-utility.h @@ -0,0 +1,138 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_VIEWER_UTILITY_H__ +#define __MSG_VIEWER_UTILITY_H__ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-ui-viewer-types.h" +#include <vconf.h> + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define MSG_VIEWER_COLOR_HEXA_BUFFER_LEN 2 +#define MSG_VIEWER_HEXA_SIZE 16 +#define MSG_VIEWER_RGB_COLOR_BUF 7 +#define MSG_VIEWER_DEFAULT_FILE_NUMBER 1 +#define MSG_VIEWER_INVALID_FILE_NUMBER -1 + +/*================================================================================================== + * STRUCTURES + *==================================================================================================*/ +typedef unsigned int MSG_VIEWER_COLORREF; + +typedef struct _MSG_VIEWER_RGBQUAD { + unsigned char rgbBlue; + unsigned char rgbGreen; + unsigned char rgbRed; + unsigned char rgbReserved; +} MSG_VIEWER_RGBQUAD; + +typedef union { + MSG_VIEWER_RGBQUAD rgbQuad; + MSG_VIEWER_COLORREF rgbColor; +} MSG_VIEWER_RGB_UNION; + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ + +/* + *@fn msg_viewer_util_get_display_name_by_index(int index); + *@brief this function is used to get display name from contact index + *@param[in] index contact_index + *@return return display name of contact, Caller must free returned string after using it + */ +char *msg_viewer_util_get_display_name_by_index(int index); + +/* + *@fn msg_viewer_util_get_file_ext(const char *filepath, char *file_ext, int ext_len); + *@brief this function is used to get extension of file + *@param[in] address string pointer of filepath and file_ext + *@return return TRUE on success, else FALSE + */ +MSG_BOOL msg_viewer_util_get_file_ext(const char *filepath, char *file_ext, int ext_len); + +/* + *@fn msg_viewer_util_get_next_number(char *file_name_without_ext); + *@brief this function is used to get the next number to rename the file + *@param[in] address string pointer of file_name_without_ext + *@return return the number(int) + */ +int msg_viewer_util_get_next_number(char *file_name_without_ext); + +/* + *@fn msg_viewer_util_get_color_as_string(char *szcolor, int szcolor_len, int r, int g, int b); + *@brief this function is used to get rgb string from int to string like "ffffff". Buffer(szcolor) length should be longer than 7. + *@param[in] r Red color value + *@param[in] g Green color value + *@param[in] b Blue color value + *@param[in] szcolor_len buffer length of szcolor. + *@param[out] szcolor RGB value will be get as string type. + */ +void msg_viewer_util_get_color_as_string(char *szcolor, int szcolor_len, int r, int g, int b); + +/* + *@fn msg_viewer_util_get_default_path(char *dir_path, int dir_path_len); + *@brief this function is used to get default file path + *@param[in] dir_path_len length of dir_path buffer + *@param[out] dir_path destination file_path of content to be saved + */ +MSG_BOOL msg_viewer_util_get_default_path(char *dir_path, int dir_path_len); + +/* + *@fn msg_ui_viewer_get_buffer_from_file(const char *filepath, const char *opt, unsigned int *buffer_size) + *@brief this function is used to get raw data of filepath + *@param[in] filepath src file path + *@param[in] opt open mode + *@param[out] buffer_size buffer size + *@return return allocated raw file data, else NULL + *@Caution Caller should free return raw file data after using it. + */ +unsigned char *msg_ui_viewer_get_buffer_from_file(const char *filepath, const char *opt, unsigned int *buffer_size); + +/* + *@fn msg_ui_viewer_util_copy_file(const char *src_path, char *dst_path) + *@brief Copy file from src to dest, if there is file at dest path, then save it with renamed one + *@param[in] src_path src file path + *@param[in] dst_path dest file path to be saved + *@return return allocated copied file path, else NULL + *@Caution Caller should free return copied file path after using data. + */ +char *msg_ui_viewer_util_copy_file(const char *src_path, char *dst_path); + +/* + *@fn msg_ui_viewer_util_create_working_dir(void) + *@brief create temp directroy to save a temp file for viewer + *@return return created temp path, else NULL + *@Caution Caller should free returned temp path after using it. + */ +char *msg_ui_viewer_util_create_working_dir(void); + +/* + *@fn msg_ui_viewer_auto_rename(char *src_path, char *dst_path); + *@brief saving duplicated filename without collision by adding extenstion(_XX) in msg viewer + *@param[in] src_path src file path + *@param[in] dst_path dest file path to be saved + *@return return TRUE when function operation was successful. + *@Caution Caller should free returned temp path after using it. + */ +MSG_BOOL msg_ui_viewer_auto_rename(char *src_path, char *dst_path); +#endif + diff --git a/viewer/smil-player/include/msg-smil-content-manager.h b/viewer/smil-player/include/msg-smil-content-manager.h new file mode 100755 index 0000000..7b0f366 --- /dev/null +++ b/viewer/smil-player/include/msg-smil-content-manager.h @@ -0,0 +1,234 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_CONTENT_MANAGER_SMIL_PLAYER_H__ +#define __MSG_CONTENT_MANAGER_SMIL_PLAYER_H__ +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-types.h" + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define MSG_MMS_SLIDE_INVALID -1 + +/*================================================================================================== + * STRUCTURES + *==================================================================================================*/ +typedef struct _SMIL_CONTENT_MGR_HANDLE_S { + int curSlideIdx; + msg_struct_t msg_info_t; /*MSG MMS data struct handle */ + SMIL_SLIDE_INFO_S *smilContent; /*slide info of the message*/ +} SMIL_CONTENT_MGR_HANDLE_S; /*Content Manager Handler.*/ + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +/** +*@fn _msg_smil_create_content_mgr(msg_struct_t msg_info_t, SMIL_CONTENT_MGR_HANDLE_S **smilContMgrHndle); +*@brief This API shall facilitate the the SMIL Player interface initialize the Content Manager Handler. +*@return MSG_SMIL_SUCCESS on success , else failure return code +*@param[in] smilMsg This is the message that the SMILPlayerInterface sends for page information extraction. +*@param[out] *smilContMgrHndle The Content Manager Handler. +*/ +MSG_SMIL_ERROR_E _msg_smil_create_content_mgr(msg_struct_t msg_info_t, SMIL_CONTENT_MGR_HANDLE_S **smilContMgrHndle); + +/** +*@fn _msg_smil_destroy_content_mgr(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); +*@brief This method will allow destroying the Content Manager handler and the complete slide queue for the MMS. +*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager. +*@param[out] None. +*/ +void _msg_smil_destroy_content_mgr(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); + +/** +*@fn _msg_smil_cont_mgr_set_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, SMIL_PLAYER_STATUS_E event); +*@brief This function will allow updating the slideIdx's slide status to the Content Manager. +*@return TRUE on success , else return FALSE +*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager. +*@param[in] curSlideIdx This is current slide index to be updated. +*@param[in] event This is the event to which the status of the Handlerand the Slide in the Queue has to be updated +*@param[out] None. +*/ +MSG_BOOL _msg_smil_cont_mgr_set_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, SMIL_PLAYER_STATUS_E event); + +/** +*@fn _msg_smil_cont_mgr_get_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); +*@brief This function returns the Current Slide index. +*@return The Current Slide index on success , else failure return code +*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager. +*@param[out] None. +*/ +int _msg_smil_cont_mgr_get_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); + +/** +*@fn _msg_smil_cont_mgr_set_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx); +*@brief This function set Current Slide index. +*@return TRUE on success , else return FALSE +*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager. +*@param[in] slideIdx This will be set as current slide index. +*/ +MSG_BOOL _msg_smil_cont_mgr_set_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx); + +/** +*@fn _msg_smil_cont_mgr_get_cur_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); +*@brief This function returns the Current Slide Detailed Information. +*@return Slide's detailed information on Success , else failure return code +*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager. +*@param[out] None. +*/ +SMIL_SLIDE_INFO_S *_msg_smil_cont_mgr_get_cur_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); + +/** +*@fn _msg_smil_cont_mgr_get_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx); +*@brief This function returns the requested Slide Detailed Information. +*@return The requested Slide Detailed Information on success , else failure return code +*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager. +*@param[in] slideIdx This is the handler to the SMILMessage sent back to UI while creating SMIL Player. +*@param[out] commonData This is the data common to all the slides. +*/ +SMIL_SLIDE_INFO_S *_msg_smil_cont_mgr_get_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx); + +/** +*@fn _msg_smil_cont_mgr_get_cur_slide_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); +*@brief This function returns the Current Slide Status. +*@return current slide's status. +*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager. +*@param[out] None. +*/ +SMIL_PLAYER_STATUS_E _msg_smil_cont_mgr_get_cur_slide_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); + +int _msg_smil_cont_mgr_get_total_slide_count(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); + +/** +*@fn _msg_smil_cont_mgr_set_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo, MSG_BOOL bSet); +*@brief This function set current page for help page +*@param[in] singleSlideInfo Slide information about currne page +*@param[in] bSet The value of setting help page +*@param[out] None. +*/ +void _msg_smil_cont_mgr_set_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo, MSG_BOOL bSet); + +/** +*@fn _msg_smil_cont_mgr_is_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo); +*@brief This function returns the result of current page is help page or not +*@return whether current slide is help page or not +*@param[in] singleSlideInfo Slide information about currne page +*@param[out] None. +*/ +MSG_BOOL _msg_smil_cont_mgr_is_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo); + +/** +*@fn _msg_smil_cont_mgr_delete_help_page(msg_message_t msg_message, SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); +*@brief This function delete help page for preview mode viewer and return the result +*@return the result of deleting help page +*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager +*@param[out] None. +*/ +MSG_BOOL _msg_smil_cont_mgr_delete_help_page(msg_struct_t msg_info_t, SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); + + +/** +*@fn _msg_smil_cont_mgr_get_page_list_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); +*@brief This function returns msg_list_handle_t for current msg +*@return msg_list_handle_t handler of page list +*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager. +*@param[out] None. +*/ +msg_list_handle_t _msg_smil_cont_mgr_get_page_list_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); + +/** +*@fn _msg_smil_cont_mgr_get_nth_page_struct_handle(msg_list_handle_t pagelist_info_t, int pageIdx); +*@brief This function returns page struct handle with given page index +*@return msg_struct_t handler of page +*@param[in] pagelist_info_t page list handle +*@param[in] pageIdx page index +*@param[out] None. +*/ +msg_struct_t _msg_smil_cont_mgr_get_nth_page_struct_handle(msg_list_handle_t pagelist_info_t, int pageIdx); + +/** +*@fn _msg_smil_cont_mgr_get_page_time_value(msg_struct_t pageInfo_t, int field); +*@brief This function returns page duration time for singleSlideInfo +*@return duration time +*@param[in] pageInfo_t page structure handle. +*@param[in] field page field value. +*@param[out] None. +*/ +int _msg_smil_cont_mgr_get_page_time_value(msg_struct_t pageInfo_t, int field); + +/** +*@fn _msg_smil_cont_mgr_get_page_media_list_handle(msg_struct_t pageInfo_t); +*@brief This function returns msg_list_handle_t for media of current page +*@return msg_list_handle_t handler of page list +*@param[in] pageInfo_t page struct handler +*@param[out] None. +*/ +msg_list_handle_t _msg_smil_cont_mgr_get_page_media_list_handle(msg_struct_t pageInfo_t); + +/** +*@fn _msg_smil_cont_mgr_get_page_nth_media_struct_handle(msg_list_handle_t medialist_info_t, int mediaIdx); +*@brief This function returns media struct handle with given page index +*@return msg_struct_t handler of page +*@param[in] medialist_info_t media list handle +*@param[in] mediaIdx media index +*@param[out] None. +*/ +msg_struct_t _msg_smil_cont_mgr_get_page_nth_media_struct_handle(msg_list_handle_t medialist_info_t, int mediaIdx); + +/** +*@fn _msg_smil_cont_mgr_get_media_str_value(msg_struct_t media_info_t, int strfield, char *rtnStr); +*@brief This function get STR value with given field for media +*@return void +*@param[in] media_info_t media list handle +*@param[in] strfield field value +*@param[out] rtnStr return value +*/ +void _msg_smil_cont_mgr_get_media_str_value(msg_struct_t media_info_t, int strfield, char *rtnStr); + +/** +*@fn _msg_smil_cont_mgr_get_media_int_value(msg_struct_t media_info_t, int intfield, int* rtnVal); +*@brief This function get INT value with given field for media +*@return void +*@param[in] media_info_t media list handle +*@param[in] intfield field value +*@param[out] rtnVal return value +*/ +void _msg_smil_cont_mgr_get_media_int_value(msg_struct_t media_info_t, int intfield, int* rtnVal); + +/** +*@fn _msg_smil_cont_mgr_get_mms_body_struct_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); +*@brief This function returns msg mms data struct handle +*@return mms data struct of current msg. +*@param[in] smilContMgrHndle This is the handler to the SMILMessage Content Manager. +*@param[out] None. +*/ +msg_struct_t _msg_smil_cont_mgr_get_mms_body_struct_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle); + +/** +*@fn _msg_smil_cont_mgr_get_slide_time(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, double *time); +*@brief This API returns total slide duration after given slide index +*@return TRUE on success , else FALSE return +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[in] slideIdx start slide index to get remain time +*@param[in] bExcludeHp whether help page will be excluded from total slide time or not +*@param[out] time calculated remain time +*@param[out] None. +*/ +MSG_BOOL _msg_smil_cont_mgr_get_slide_time(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, MSG_BOOL bExcludeHp, double *time); +#endif /*__MSG_CONTENT_MANAGER_SMIL_PLAYER_H__*/ + diff --git a/viewer/smil-player/include/msg-smil-event-manager.h b/viewer/smil-player/include/msg-smil-event-manager.h new file mode 100755 index 0000000..e4d4c6a --- /dev/null +++ b/viewer/smil-player/include/msg-smil-event-manager.h @@ -0,0 +1,166 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_EVENT_MANAGER_SMIL_PLAYER_H__ +#define __MSG_EVENT_MANAGER_SMIL_PLAYER_H__ +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-types.h" +#include <Ecore.h> + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define MSG_MMS_SMIL_MAX_TIMER_IDX (MSG_MMS_SMIL_MEDIA_TYPES * 2) /* + 2 6 for the media (max 3 types of Media Begin/End) and 2 for the Page Begin/End. */ +#define MSG_MMS_SMIL_PAGE_MEDIA_IDX_ACTION 3 +#define MSG_MMS_SMIL_TIMER_CONVERT 1000 +#define MSG_MMS_SMIL_HELP_PAGE_DURATION 5000 +/*================================================================================================== + * STRUCTURES + *==================================================================================================*/ +typedef struct _SMIL_TIMER_DATA_S { + int mediaTimerDur[MSG_MMS_SMIL_MAX_TIMER_IDX][MSG_MMS_SMIL_PAGE_MEDIA_IDX_ACTION]; + SMIL_PLAYER_PAGE_EVENT_E actionTypeOnPage; +} SMIL_TIMER_DATA_S; + +typedef struct _SMIL_TIMER_CALLBACK_DATA_S { + int elementIdx; /*mediaIdx; This will carry the index to the elemnt (media/Page) whose timer is registered. -1 for Page, other values for Media.*/ + SMIL_TIMER_DATA_S slideTimerInfo; + void *appUserData; + pfnSMILPlayerCb appSmilCb; + Ecore_Timer *timerHandle; + SMIL_SLIDE_EVENT_PARAM_S *curSlideParam; +} SMIL_TIMER_CALLBACK_DATA_S; + +typedef struct _SMIL_EVENT_MGR_HANDLE_S { + SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData; + void *smilhandle; +} SMIL_EVENT_MGR_HANDLE_S; + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +/** +*@fn _msg_smil_create_event_mgr(void *cb, void *data , SMIL_EVENT_MGR_HANDLE_S **smilEvntMgrHndle); +*@brief This function Initializes the Event Manager Handler. +*@return MSG_SUCCESS on success , else failure return code +*@param[in] cb This is the call back to the Client. +*@param[in] data This is the Client Instance Related data. +*@param[in] smilEvntMgrHndle This is the handler to the SMIL Event Manager. +*/ +MSG_SMIL_ERROR_E _msg_smil_create_event_mgr(void *cb, void *data, SMIL_EVENT_MGR_HANDLE_S **smilEvntMgrHndle); + +/** +*@fn _msg_smil_destroy_event_mgr(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +*@brief This function destroys the handler and all the Event Manager related data. +*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager. +*@param[out] None. +*/ +void _msg_smil_destroy_event_mgr(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); + +/** +*@fn _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx); +*@brief This function fetches the slide info from the Content Manager,sends to the Call Back from the Client +*@return MSG_SUCCESS on success , else failure return code +*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager. +*@param[in] curSlideIdx This represents the Slide Number to be Played. +*@param[out] None. +*/ +MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx); + +/** +*@fn _msg_smil_event_mgr_stop_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +*@brief This function stops the smil timer. +*@return MSG_SUCCESS on success , else failure return code +*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager. +*@param[out] None. +*/ +MSG_SMIL_ERROR_E _msg_smil_event_mgr_stop_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); + +/** +*@fn _msg_smil_event_mgr_pause_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle ); +*@brief This function kills the timer and calculates the remaining duration of the paused slide. +*@return MSG_SUCCESS on success , else failure return code +*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager. +*@param[out] None. +*/ +MSG_SMIL_ERROR_E _msg_smil_event_mgr_pause_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); + +/** +*@fn MSG_SMIL_ERROR_E _msg_smil_event_mgr_resume_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx ); +*@brief This function resumes the the paused slide and starts the timer with the remaining duration. +*@return MSG_SUCCESS on success , else failure return code +*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager. +*@param[in] curSlideIdx This is the Current Slide Index. +*@param[out] None. +*/ +MSG_SMIL_ERROR_E _msg_smil_event_mgr_resume_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx); + +/** +*@fn _msg_smil_event_mgr_move_to_next_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +*@brief Facilitates the moving to next slide from the current if next slide is present. +*@return MSG_SUCCESS on success , else failure return code +*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager. +*@param[out] None. +*/ +MSG_SMIL_ERROR_E _msg_smil_event_mgr_move_to_next_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); + +/** +*@fn _msg_smil_event_mgr_slide_timer_cb(void* data); +*@brief This function is the callback for the smil timer. +*@return MSG_SUCCESS on success , else failure return code +*@param[in] data This is the data that is returned by the timer for use by the call back function. +*@param[out] None. +*/ +Eina_Bool _msg_smil_event_mgr_slide_timer_cb(void *data); + +/** +*@fn _msg_smil_event_mgr_is_slide_active(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +*@brief This function is check if event slide is set or not +*@return TRUE on success, else return FALSE +*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager. +*/ +MSG_BOOL _msg_smil_event_mgr_is_slide_active(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); + +SMIL_TIMER_CALLBACK_DATA_S *_msg_smil_event_mgr_get_timer_cb_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +SMIL_SLIDE_EVENT_PARAM_S *_msg_smil_event_mgr_get_slide_event_param_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); + +SMIL_SLIDE_INFO_S *_msg_smil_event_mgr_get_current_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +MSG_BOOL _msg_smil_event_mgr_set_current_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_SLIDE_INFO_S *singleSlide); + +double _msg_smil_event_mgr_get_slide_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +MSG_BOOL _msg_smil_event_mgr_set_slide_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, double duration); + +MSG_BOOL _msg_smil_event_mgr_get_video_endofstream(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +MSG_BOOL _msg_smil_event_mgr_set_video_endofstream(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL iseos); + +SMIL_PLAYER_PAGE_EVENT_E _msg_smil_event_mgr_get_page_action_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +MSG_BOOL _msg_smil_event_mgr_set_page_action_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_PLAYER_PAGE_EVENT_E page_event); + +MSG_BOOL _msg_smil_event_mgr_get_is_video_media(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +MSG_BOOL _msg_smil_event_mgr_set_is_video_media(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isvideo); + +MSG_BOOL _msg_smil_event_mgr_get_unsupported_content(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +MSG_BOOL _msg_smil_event_mgr_set_unsupported_content(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isunsupported); + +MSG_BOOL _msg_smil_event_mgr_get_invalid_video_ro(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle); +MSG_BOOL _msg_smil_event_mgr_set_invalid_video_ro(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isinvalid_ro); + +MSG_BOOL _msg_smil_event_mgr_set_last_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL islast_slide); +MSG_BOOL _msg_smil_event_mgr_set_render_event(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_PLAYER_RENDER_EVENT_E render_event); + +#endif diff --git a/viewer/smil-player/include/msg-smil-player-interface.h b/viewer/smil-player/include/msg-smil-player-interface.h new file mode 100755 index 0000000..69dbd94 --- /dev/null +++ b/viewer/smil-player/include/msg-smil-player-interface.h @@ -0,0 +1,125 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_SMIL_PLAYER_INTERFACE_H__ +#define __MSG_SMIL_PLAYER_INTERFACE_H__ +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-types.h" + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ + /** +*@fn msg_smil_create_smil_player(msg_struct_t message, void *callBack, void *userData ,void **instance); +*@brief This wrapper API shall facilitate the client to intitialize the process of the SMIL Player Creation. +*@return MSG_SUCCESS on success , else failure return code +*@param[in] message This is the message details structure +*@param[in] callBack This is the callBack function that the Application registers with the SMIL Player for communication from the Player's side. +*@param[in] userData This is the application handler. +*@param[out] instance This will have a void* to the instance created by the API. +*/ +MSG_SMIL_ERROR_E msg_smil_create_smil_player(msg_struct_t message, void *callBack, void *userData , void **instance); + +/** +*@fn msg_smil_destroy_smil_player(void *smilhandle); +*@brief This wrapper API shall destroy smil player +*@param[in] smilhandle Smil player handle. +*/ +void msg_smil_destroy_smil_player(void *smilhandle); + +/** +*@fn msg_smil_get_current_slide_idx(void *hSmilHandle); +*@brief This wrapper API shall facilitate the client to fetch the current slide index. +*@return MSG_SUCCESS on success , else failure return code +*@param[in] hSmilHandle This is the handler to the SMILMessage sent back to UI while creating SMIL Player. +*@param[out] None. +*/ +int msg_smil_get_current_slide_idx(void *hSmilHandle); + +/** +*@fn msg_smil_get_current_slide_status(void *hSmilHandle); +*@brief This wrapper API shall facilitate the client to get the current Slide Status. +*@return SMIL_PLAYER_STATUS_E on success. +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[out] None. +*/ +SMIL_PLAYER_STATUS_E msg_smil_get_current_slide_status(void *hSmilHandle); + +/** +*@fn msg_smil_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent); +*@brief This wrapper API shall give the client one gate way for all types of actions performed on the Slide. +*@return MSG_SUCCESS on success , else failure return code +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[in] playerEvent This is the event that needs to be perfomed on the MMS message. +*@param[out] None. +*/ +MSG_SMIL_ERROR_E msg_smil_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent); + +/** +*@fn msg_smil_create_smil_player_layout(void *hSmilHandle, void *layout); +*@brief This wrapper API shall create layout of SMILPlayer +*@return TRUE on success , else FALSE return +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[in] layout This is layout window to be set to SMILPlayer. +*@param[out] None. +*/ +MSG_BOOL msg_smil_create_smil_player_layout(void *hSmilHandle, void *layout); + +/** +*@fn msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom); +*@brief This wrapper API shall set layout size of SMILPlayer. It must be called after calling msg_smil_create_smil_player_layout. +*@return TRUE on success , else FALSE return +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[in] left_top x,y point info. of let-top position. +*@param[in] right_bottom x,y point info. of right-bottom position. +*@param[out] None. +*/ +MSG_BOOL msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom); + +/* +*@fn msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void *callBack, void *userData) +*@brief This API shall change to render help page with player view +*@return TRUE on success , else FALSE return +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[in] callBack This is the callBack function that the Application registers with the SMIL Player for help page. +*@param[in] userData This is the application handler. +*@param[out] None. +*/ +MSG_BOOL msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void *callBack, void *userData); + +/** +*@fn msg_smil_get_current_slide_info(void *hSmilHandle); +*@brief This API shall facilitate the client to get the current Slide info. +*@return SMIL_SLIDE_INFO_S on success. +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[out] None. +*/ +SMIL_SLIDE_INFO_S *msg_smil_get_current_slide_info(void *hSmilHandle); + +/** +*@fn msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, double *slideTime); +*@brief This API returns total slide duration after given slide index +*@return TRUE on success , else FALSE return +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[in] slideIdx start slide index to get remain time +*@param[in] bExcludeHp whether help page will be excluded from total slide time or not +*@param[out] slideTime calculated remain time +*@param[out] None. +*/ +MSG_BOOL msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime); +#endif diff --git a/viewer/smil-player/include/msg-smil-player.h b/viewer/smil-player/include/msg-smil-player.h new file mode 100755 index 0000000..02dab1e --- /dev/null +++ b/viewer/smil-player/include/msg-smil-player.h @@ -0,0 +1,167 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_SMIL_PLAYER_H__ +#define __MSG_SMIL_PLAYER_H__ +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-content-manager.h" +#include "msg-smil-event-manager.h" +#include "msg-smil-render.h" +#include <glib.h> + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define MSG_MMS_SMIL_SLIDEIDX_INCREMENT 1 +#define MSG_MMS_SMIL_SLIDEIDX_DECREMENT 1 + +/*================================================================================================== + * STRUCTURES + *==================================================================================================*/ +typedef struct _SMIL_HANDLER_S { + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle; /* cont mgr handler*/ + SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle; /* evnt mgr handler*/ + SMIL_RENDERER_DATA_S *smilRenderer; /* smil render */ +} SMIL_HANDLER_S; + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +/** +*@fn _msg_smil_create_smil_player(msg_struct_t message, void *callBack, void *userData ,void **instance); +*@brief This API shall facilitate the client to intitialize the process of the SMIL Player Creation. +*@return MSG_SMIL_SUCCESS on success , else failure return code +*@param[in] message This is the message details structure +*@param[in] callBack This is the callBack function that the Application registers with the SMIL Player for communication from the Player's side. +*@param[in] userData This is the application handler. +*@param[out] instance This will have a void* to the instance created by the SMIL Player. +*/ +MSG_SMIL_ERROR_E _msg_smil_create_smil_player(msg_struct_t message, void *callBack, void *userData, void **instance); + +/** +*@fn _msg_smil_destroy_smil_player(void *smilhandle); +*@brief This API destroy smil player +*@param[out] smilhandle SMIL player handle. +*/ +void _msg_smil_destroy_smil_player(void *smilhandle); + +/** +*@fn _msg_smil_get_content_mgr(void *hSmilHandle); +*@brief This API shall fetch content manager handle. +*@return returns content manager handle on Success, else return NULL. +*@param[in] hSmilHandle This is the handler to the SMILMessage.. +*/ +SMIL_CONTENT_MGR_HANDLE_S *_msg_smil_get_content_mgr(void *hSmilHandle); + +/** +*@fn _msg_smil_get_event_mgr(void *hSmilHandle); +*@brief This API shall fetch event manager handle. +*@return returns event manager handle on Success, else return NULL. +*@param[in] hSmilHandle This is the handler to the SMILMessage.. +*/ +SMIL_EVENT_MGR_HANDLE_S *_msg_smil_get_event_mgr(void *hSmilHandle); + +/** +*@fn _msg_smil_get_renderder(void *hSmilHandle); +*@brief This API shall fetch renderer handle. +*@return returns renderer handle on Success, else return NULL. +*@param[in] hSmilHandle This is the handler to the SMILMessage.. +*/ +SMIL_RENDERER_DATA_S *_msg_smil_get_renderder(void *hSmilHandle); + +/** +*@fn _msg_smil_get_current_slide_idx(void *hSmilHandle); +*@brief This API shall fetch the current slide index. +*@return returns the current Slide index. +*@param[in] hSmilHandle This is the handler to the SMILMessage.. +*/ +int _msg_smil_get_current_slide_idx(void *hSmilHandle); + +/** +*@fn _msg_smil_get_current_slide_status(void *hSmilHandle); +*@brief This API shall facilitate the client to get the current Slide Status. +*@return SMIL_PLAYER_STATUS_E on success. +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[out] None. +*/ +SMIL_PLAYER_STATUS_E _msg_smil_get_current_slide_status(void *hSmilHandle); + +/** +*@fn _msg_smil_player_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent); +*@brief This API shall give the client one gate way for all types of actions performed on the Slide. +*@return MSG_SMIL_SUCCESS on success, else failure return code +*@param[in SmilHandle This is the handler to the SMILMessage. +*@param[in] playerEvent This is the action that needs to be performed on the current slide. +*@param[out] None. +*/ +MSG_SMIL_ERROR_E _msg_smil_player_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent); + +/** +*@fn _msg_smil_create_smil_player_layout(void *hSmilHandle, void *layout); +*@brief This API shall create layout of SMILPlayer. +*@return TRUE on success , else FALSE return +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[in] layout This is layout window to be set to SMILPlayer +*@param[out] None. +*/ +MSG_BOOL _msg_smil_create_smil_player_layout(void *hSmilHandle, void *layout); + +/** +*@fn _msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S* left_top, SMIL_POSITION_S* right_bottom); +*@brief This API shall set layout window to SMILPlayer. +*@return TRUE on success , else FALSE return +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[in] left_top x,y point info. of let-top position. +*@param[in] right_bottom x,y point info. of right-bottom position. +*@param[out] None. +*/ +MSG_BOOL _msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom); + +/* +*@fn _msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void *callBack, void *userData) +*@brief This API let player viewer able to render help page with renderer handle +*@return TRUE on success , else FALSE return +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[in] callBack This is the callBack function that the Application registers with the SMIL Player for help page. +*@param[in] userData This is the application handler. +*@param[out] None. +*/ +MSG_BOOL _msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void *callBack, void *userData); + +/** +*@fn _msg_smil_get_current_slide_info(void *hSmilHandle); +*@brief This API shall facilitate the client to get the current Slide info. +*@return SMIL_SLIDE_INFO_S on success. +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[out] None. +*/ +SMIL_SLIDE_INFO_S *_msg_smil_get_current_slide_info(void *hSmilHandle); + +/** +*@fn _msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, double *slideTime); +*@brief This API returns total slide duration after given slide index +*@return TRUE on success , else FALSE return +*@param[in] hSmilHandle This is the handler to the SMILMessage. +*@param[in] slideIdx start slide index to get remain time +*@param[in] bExcludeHp whether help page will be excluded from total slide time or not +*@param[out] slideTime calculated remain time +*@param[out] None. +*/ +MSG_BOOL _msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime); + +#endif diff --git a/viewer/smil-player/include/msg-smil-render.h b/viewer/smil-player/include/msg-smil-render.h new file mode 100755 index 0000000..4dd88c9 --- /dev/null +++ b/viewer/smil-player/include/msg-smil-render.h @@ -0,0 +1,195 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_SMIL_RENDER_H__ +#define __MSG_SMIL_RENDER_H__ +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-types.h" +#include "msg-smil-util.h" +#include <msg.h> +#include <stdio.h> +#include <Ecore_X.h> +#include <Ethumb.h> +#include <Elementary.h> +#include <ui-gadget-module.h> +#include "msg-ui-viewer-drm-utility.h" + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define VIEWER_W (480.0) +#define VIEWER_XPAD_RATIO (0.02) +#define VIEWER_VIDEO_WIDTH 176 +#define VIEWER_VIDEO_HEIGHT 144 +#define VIEWER_TEXT_FONT_LEN 1024 + +#define VIEWER_FONT_STYLE_BUF_LEN 10 + +typedef unsigned char VIEWER_BYTE; +typedef unsigned short VIEWER_WORD; +typedef unsigned long VIEWER_DWORD; +typedef unsigned long VIEWER_COLORREF; +#define VIEWER_RGB(r, g, b) ((VIEWER_COLORREF)(((VIEWER_BYTE)(r) | ((VIEWER_WORD)((VIEWER_BYTE)(g)) << 8)) | (((VIEWER_DWORD)(VIEWER_BYTE)(b)) << 16))) + +/*================================================================================================== + * ENUMERATIONS + *==================================================================================================*/ +enum viewer_media_player_state { + MEDIA_PLAYER_STATE_NONE = 0X00, + MEDIA_PLAYER_STATE_INIT, + MEDIA_PLAYER_STATE_READY, + MEDIA_PLAYER_STATE_PLAYING, + MEDIA_PLAYER_STATE_PAUSED, + MEDIA_PLAYER_STATE_STOP +}; + +typedef enum { + VIEWER_IMAGE_TYPE_NONE = 0, + VIEWER_IMAGE_TYPE_NORMAL, + VIEWER_IMAGE_TYPE_DRM_IMAGE, + VIEWER_IMAGE_TYPE_DRM_IMAGE_RAW_DATA, + VIEWER_IMAGE_TYPE_DRM_VIDEO, + VIEWER_IMAGE_TYPE_DRM_SOUND, + VIEWER_IMAGE_TYPE_UNSUPPORTED, +} SMIL_RENDER_IMAGE_TYPE_E; + +/*================================================================================================== + * STRUCTURES + *==================================================================================================*/ +typedef struct viewer_tagRGBQUAD { + VIEWER_BYTE rgbBlue; + VIEWER_BYTE rgbGreen; + VIEWER_BYTE rgbRed; + VIEWER_BYTE rgbReserved; +} SMIL_RGBQUAD; + +typedef union { + SMIL_RGBQUAD rgbQuad; + VIEWER_COLORREF rgbColor; +} SMIL_RGB_UNION; + +typedef struct _SMIL_FONT_SYTLE_S { + int font_size; + char font_color[VIEWER_RGB_COLOR_BUF_LEN + 1]; /*"#ffffff"*/ + char font_style[VIEWER_FONT_STYLE_BUF_LEN + 1]; /*"link", "em", etc.*/ +} SMIL_FONT_SYTLE_S; + +typedef struct _SMIL_RENDERER_DATA_S { + void *smilhandle; + msg_struct_t msg_info_t; + Evas_Object *main_window; + Evas_Object *layout_main; + Evas_Object *viewer_scroller; + Evas_Object *viewer_content_box; /*it contans text(entry) and image*/ + Evas_Object *viewer_bg_rect; + Evas_Object *viewer_body; /*it shows text , entry*/ + + char *viewer_body_text; /*set page text*/ + Evas_Object *insert_image; + Evas_Object *insert_sound_icon; /*display invalid drm sound icon*/ + Evas_Object *insert_unsupported_icon; /*display unsupported icon*/ + Evas_Object *video_image; + Evas_Object *attach_list; /* attach list for help page */ + unsigned char *video_image_buffer; /*Evas Object Image buffer*/ + Ecore_Timer *video_update_timer; + MSG_BOOL is_skip_frame; /*it is used to skip 1 frame of videostream cb*/ + int video_width; + int video_height; + int video_duration; /*video content's duration*/ + Ecore_Idler *video_resize_idle; + Ecore_Idler *video_duration_idle; + Ecore_Idler *video_eos_idle; + + int player_state; + int viewer_width; + int viewer_height; + int viewer_landscape_width; + int viewer_landscape_height; + int button_height; + int main_win_rotate; /*current rotation value of main window*/ + + pfnSMILHelpPageCb appSmilHelpPageCb; + void *appUserData; + + VIEWER_COLORREF bgcolor; + MSG_BOOL ismute; /*sound, video mute mode when silent mode*/ + + MSG_UI_DRM_CONSUME_S display_drm_consume; /*drm consume handle for image*/ + MSG_UI_DRM_CONSUME_S play_drm_consume; /*drm consume handle for sound, video*/ + + char *working_path; +} SMIL_RENDERER_DATA_S; + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +MSG_SMIL_ERROR_E _msg_smil_create_render(SMIL_RENDERER_DATA_S **viewerRenderData); +void _msg_smil_destroy_render(SMIL_RENDERER_DATA_S *viewerRenderData); +MSG_BOOL _msg_smil_init_render(SMIL_RENDERER_DATA_S *viewerRenderData); + +/*Create and set layout to display viewer*/ +MSG_BOOL _msg_smil_render_create_layout(SMIL_RENDERER_DATA_S *viewerRenderData, Evas_Object *layout); +MSG_BOOL _msg_smil_render_set_layout_size(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom); +MSG_BOOL _msg_smil_render_set_mute(SMIL_RENDERER_DATA_S *viewerRenderData, MSG_BOOL ismute); +MSG_BOOL _msg_smil_render_set_help_page_cb(SMIL_RENDERER_DATA_S *viewerRenderData, void *callBack, void *userData); + +/** +*@fn _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_SLIDE_EVENT_PARAM_S *eventStatus); +*@brief This API shall handle render event to display mms contents +*@return MSG_SMIL_SUCCESS on success, else failure return code +*@param[in] viewerRenderData This is the handler of SMIL_RENDERER_DATA_S. +*@param[in] eventStatus This is the eventstatus of a current slide. +*@param[out] None. +*/ +MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_SLIDE_EVENT_PARAM_S *eventStatus); +MSG_BOOL _msg_smil_render_reload_mms(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_SLIDE_EVENT_PARAM_S *eventStatus); + + +/*================================================================================================== + * Text related functions + *==================================================================================================*/ +MSG_BOOL _msg_smil_render_show_inserted_text(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path); +MSG_BOOL _msg_smil_render_show_help_page_attach_list(SMIL_RENDERER_DATA_S *viewerRenderData); + +/*================================================================================================== + * Media related functions + *==================================================================================================*/ +MSG_BOOL _msg_smil_render_show_inserted_audio(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path); +MSG_BOOL _msg_smil_render_show_inserted_image(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path); +MSG_BOOL _msg_smil_render_show_inserted_video(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path); + +/*smil player sound and video related functions*/ +MSG_BOOL _msg_smil_render_pause(void *data, int mediaType); +MSG_BOOL _msg_smil_render_resume(void *data, int mediaType); + +/** +*@fn _msg_smil_render_stop_playing_file(void *data) +*@brief This API shall stop and destroy mm player +*@return TRUE on success , else FALSE return code +*@param[in] data This is the smil render structure +*/ +MSG_BOOL _msg_smil_render_stop_playing_file(void *data); + +/** +*@fn _msg_smil_render_rotate_video_window(void *data) +*@brief This API shall rotate video window according to rotated status of viewer's main window +*@param[in] data This is the smil render structure +*/ +void _msg_smil_render_rotate_video_window(void *data); + +#endif diff --git a/viewer/smil-player/include/msg-smil-types.h b/viewer/smil-player/include/msg-smil-types.h new file mode 100755 index 0000000..6cfada9 --- /dev/null +++ b/viewer/smil-player/include/msg-smil-types.h @@ -0,0 +1,176 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_SMIL_TYPES_H__ +#define __MSG_SMIL_TYPES_H__ +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include <msg.h> +#include <msg_storage.h> +#include <msg_transport.h> +#include "msg-ui-util.h" +#include "msg-ui-viewer-types.h" + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define MSG_INVALID_INDEX 0 +#define MSG_MMS_SMIL_MEDIA_TYPES 3 + +/*================================================================================================== + * ENUMERATIONS + *==================================================================================================*/ +typedef enum _MSG_SMIL_ERROR_E { + MSG_SMIL_SUCCESS = 0, + MSG_ERR_SMIL_UNKNOWN, + MSG_ERR_SMIL_NULL_MESSAGE, + MSG_ERR_SMIL_EVENT_NONE, + MSG_ERR_SMIL_INVALID_STORAGE, + MSG_ERR_SMIL_PAUSE_SLIDE_EVENT_FAILURE, + MSG_ERR_SMIL_PAUSE_SLIDE_CONTENT_FAILURE, + MSG_ERR_SMIL_PAUSE_SLIDE_RENDER_FAILURE, /*smil render pause control*/ + MSG_ERR_SMIL_RESUME_SLIDE_RENDER_FAILURE, /*smil render resume control*/ + MSG_ERR_SMIL_STOP_SLIDE_RENDER_FAILURE, /*smil render stop control*/ + MSG_ERR_SMIL_UPDATE_CONTENT_MGR_FAILURE, + MSG_ERR_SMIL_INVALID_PARAMETER, + MSG_ERR_SMIL_INVALID_SLIDE, + MSG_ERR_SMIL_INVALID_MEDIA_TIMESTAMPS,/*All media in the slide have invalid timestamps*/ + MSG_ERR_SMIL_TIMER_FAILURE, + MSG_ERR_SMIL_DATA_RETREIVAL_FAILURE, + MSG_ERR_SMIL_UI_DISPLAY_FAIURE, +} MSG_SMIL_ERROR_E; + +typedef enum _SMIL_PLAYER_EVENT_E { + PLAYER_EVENT_NONE = 0, + PLAYER_EVENT_INIT, + PLAYER_EVENT_PLAY, + PLAYER_EVENT_PREVIEW_PLAY, + PLAYER_EVENT_STOP, + PLAYER_EVENT_PAUSE, + PLAYER_EVENT_RESUME, + PLAYER_EVENT_NEXT_SLIDE, + PLAYER_EVENT_PREV_SLIDE, + PLAYER_EVENT_MUTE, + PLAYER_EVENT_ROTATE_WINDOW, + PLAYER_EVENT_DESTROY_SCREEN, +} SMIL_PLAYER_EVENT_E; + +typedef enum _SMIL_PLAYER_STATUS_E { + PLAYER_STATUS_NONE = 0, + PLAYER_STATUS_PLAYING, + PLAYER_STATUS_PLAY_END, + PLAYER_STATUS_STOPPED, + PLAYER_STATUS_PAUSED, + PLAYER_STATUS_INVALID, +} SMIL_PLAYER_STATUS_E; + +typedef enum _SMIL_PLAYER_MEDIA_EVENT_E { + MEDIA_EVENT_NONE = 0, + MEDIA_EVENT_BEGIN, + MEDIA_EVENT_END, +} SMIL_PLAYER_MEDIA_EVENT_E; + +typedef enum _SMIL_PLAYER_PAGE_EVENT_E { + PAGE_EVENT_PLAY = 0, + PAGE_EVENT_END, + PAGE_EVENT_INTERNAL_MEDIA, + PAGE_EVENT_MOVE_TO_NEXT, + PAGE_EVENT_MOVE_TO_PREV, + PAGE_EVENT_NONE, +} SMIL_PLAYER_PAGE_EVENT_E; + +typedef enum _SMIL_PLAYER_RENDER_EVENT_E { + SMIL_RENDER_EVENT_NONE = -1, + SMIL_RENDER_EVENT_PAGE_PLAY_START = 0, /* Start playing the Page */ + SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START, /* Start Playing both Page and Media at the same time*/ + SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE, /*Puase player by interrupted earjack off*/ + SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE, /* For notifying the Client about the last slide */ + SMIL_RENDER_EVENT_DESTROY_SCREEN, /*This Event is called to destroy current screen*/ + SMIL_RENDER_EVENT_ERROR, /* Stop playing because of Error*/ +} SMIL_PLAYER_RENDER_EVENT_E; + +/*================================================================================================== + * STRUCTURES + *==================================================================================================*/ +/*Common Data for the Slide.*/ +typedef struct _SMIL_PAGE_INFO_S { + MSG_BOOL hasText; + MSG_BOOL hasImage; + MSG_BOOL hasVideo; + MSG_BOOL hasAudio; + MSG_BOOL isTexttop; + MSG_BOOL isHelpPage; + int pageDuration; + int mediaCnt; +} SMIL_PAGE_INFO_S; + +/*Common Data for the Slide.*/ +typedef struct _SMIL_MASTER_SLIDE_INFO_S { + int pageCnt; /*total no of pages.*/ + int regionCnt; + int attachCnt; + int transitionCnt; + int metaCnt; +} SMIL_MASTER_SLIDE_INFO_S; + +/*Structure for Per Slide Information Queue Implementation.*/ +typedef struct _SMIL_SLIDE_INFO_S { + int pageIdx; /*Index of the Current page.*/ + SMIL_PAGE_INFO_S *pageInfo; + SMIL_MASTER_SLIDE_INFO_S *commonData; /*Data common to ll the Slides.*/ + SMIL_PLAYER_STATUS_E slideStatus; /*Slide's Current Status.*/ + + struct _SMIL_SLIDE_INFO_S *nextSlide; /*Address of the next Slide in the Queue.NULL if its the last slide.*/ + struct _SMIL_SLIDE_INFO_S *prevSlide; /*Address of the next Slide in the Queue.NULL if its the first slide.*/ +} SMIL_SLIDE_INFO_S; + +typedef struct _SMIL_MEDIA_TIMER_S { + int mediaIdx; + SMIL_PLAYER_MEDIA_EVENT_E actionTypeOnMedia; /* This will define what action needs to be performed by the Client on the particular meida.*/ +} SMIL_MEDIA_TIMER_S; + +/* This is the structure that is sent to the client in its callback */ +typedef struct _SMIL_SLIDE_CLIENT_CB_PARAM_S { + int pageIdx; + int pageCnt; + SMIL_PLAYER_RENDER_EVENT_E clientCbEvent; + MSG_BOOL isLastSlide; +} SMIL_SLIDE_CLIENT_CB_PARAM_S; + +typedef struct _SMIL_SLIDE_EVENT_PARAM_S { + SMIL_SLIDE_INFO_S *singleSlideInfo; + SMIL_PLAYER_RENDER_EVENT_E renderEvent; + SMIL_MEDIA_TIMER_S timerDataMedia[MSG_MMS_SMIL_MEDIA_TYPES]; /* Media Related Action - Start/End */ + MSG_BOOL isLastSlide; + MSG_BOOL isVideoMedia; + MSG_BOOL isVideoRoInvalid; /*This is set if video content has valid drm ro or not*/ + MSG_BOOL iseos; /*This is set when end of stream of sound or video is passed*/ + MSG_BOOL isUnsupportedContent; /*This is set, if unsupported content is inserted on current page*/ + double timerDur; /*This is set, page timer duration*/ + SMIL_SLIDE_CLIENT_CB_PARAM_S clientCbParam; +} SMIL_SLIDE_EVENT_PARAM_S; + +typedef struct SMIL_POSITION_S { + int x; + int y; +} SMIL_POSITION_S; + +typedef MSG_SMIL_ERROR_E(*pfnSMILPlayerCb)(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *appUserData); +typedef MSG_SMIL_ERROR_E(*pfnSMILEventCb)(void *data, void *obj, void *event_info); +typedef MSG_SMIL_ERROR_E(*pfnSMILHelpPageCb)(void *appUserData, void **attach_list, void *box); + +#endif diff --git a/viewer/smil-player/include/msg-smil-util.h b/viewer/smil-player/include/msg-smil-util.h new file mode 100755 index 0000000..43e3039 --- /dev/null +++ b/viewer/smil-player/include/msg-smil-util.h @@ -0,0 +1,48 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __MSG_SMIL_UTIL_H__ +#define __MSG_SMIL_UTIL_H__ +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-types.h" + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define VIEWER_COLOR_HEXA_BUFFER_LEN 2 +#define VIEWER_HEXA_SIZE 16 +#define VIEWER_RGB_COLOR_BUF_LEN 7 + +/*================================================================================================== + * ENUMERATIONS + *==================================================================================================*/ + +typedef enum { + VIEWER_SMIL_REGION_IMAGE, + VIEWER_SMIL_REGION_TEXT, + VIEWER_SMIL_REGION_MAX +} VIEWER_SMIL_REGION_TYPE_E; + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ + +void _msg_smil_util_get_color_string(char *pszBuffer, int pszBuffer_len, int r, int g, int b); + +int _msg_smil_util_find_smallest(int num1, int num2); +#endif diff --git a/viewer/smil-player/src/msg-smil-content-manager.c b/viewer/smil-player/src/msg-smil-content-manager.c new file mode 100755 index 0000000..0f956de --- /dev/null +++ b/viewer/smil-player/src/msg-smil-content-manager.c @@ -0,0 +1,1193 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include <mm_file.h> +#include <mmf/mm_error.h> +#include "msg-smil-content-manager.h" +#include "msg-smil-player.h" + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +/** +*@fn __msg_smil_content_mgr_create_page_content(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, msg_struct_t *msgData); +*@brief This function creates the Slide Page Queue which is further passed to the UI for display. +*@return MSG_SUCCESS on success , else failure return code +*@param[in] msgData This is the message data +*@param[in] smilContMgrHndle The Content Manager Handler +*@param[out] None. +*/ +static MSG_SMIL_ERROR_E __msg_smil_content_mgr_create_page_content(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, msg_struct_t msg_info_t); +static SMIL_SLIDE_INFO_S *__msg_smil_content_mgr_create_mixed_message(msg_struct_t msg_info_t); +static SMIL_SLIDE_INFO_S *__msg_smil_content_mgr_create_related_message(msg_struct_t msg_info_t); +static SMIL_MASTER_SLIDE_INFO_S *__msg_smil_content_mgr_create_master_slide(msg_struct_t msg_info_t); +static void __msg_smil_content_mgr_free_slide_list(SMIL_SLIDE_INFO_S *deleteSlide); +static MSG_BOOL __msg_smil_cont_mgr_is_valid_slide(SMIL_MASTER_SLIDE_INFO_S *commonData, int curSlideIdx); + +/*================================================================================================== + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +MSG_SMIL_ERROR_E _msg_smil_create_content_mgr(msg_struct_t msg_info_t, SMIL_CONTENT_MGR_HANDLE_S **smilContMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, MSG_ERR_SMIL_NULL_MESSAGE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN; + + /*allocate memory for the content mgr handler*/ + *smilContMgrHndle = (SMIL_CONTENT_MGR_HANDLE_S *)calloc(1, sizeof(SMIL_CONTENT_MGR_HANDLE_S)); + if (*smilContMgrHndle == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return MSG_ERR_SMIL_INVALID_STORAGE; + } + + /*create and set page content info.*/ + err = __msg_smil_content_mgr_create_page_content(*smilContMgrHndle, msg_info_t); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_content_mgr_create_page_content is failed"); + if (*smilContMgrHndle != NULL) { + free(*smilContMgrHndle); + *smilContMgrHndle = NULL; + } + + return err; + } + + //store mmsdata struct handler + (*smilContMgrHndle)->msg_info_t = msg_info_t; + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return MSG_SMIL_SUCCESS; +} + +static SMIL_MASTER_SLIDE_INFO_S *__msg_smil_content_mgr_create_master_slide(msg_struct_t msg_info_t) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, NULL); + SMIL_MASTER_SLIDE_INFO_S *commonData = NULL; + + /*allocate master slide*/ + commonData = (SMIL_MASTER_SLIDE_INFO_S *)calloc(1, sizeof(SMIL_MASTER_SLIDE_INFO_S)); + if (commonData == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return NULL; + } + + msg_list_handle_t pagelist_info = NULL; + msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + + /*Get page count */ + commonData->pageCnt = msg_list_length(pagelist_info); + + /*Get Attachment List*/ + msg_list_handle_t attachlist_info = NULL; + msg_get_list_handle(msg_info_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info); + commonData->attachCnt = msg_list_length(attachlist_info); + + /*Get MetaData List*/ + msg_list_handle_t metalist_info = NULL; + msg_get_list_handle(msg_info_t, MSG_MMS_META_LIST_HND, (void **)&metalist_info); + commonData->metaCnt = msg_list_length(metalist_info); + + /*Get Region List */ + msg_list_handle_t regionlist_info = NULL; + msg_get_list_handle(msg_info_t, MSG_MMS_REGION_LIST_HND, (void **)®ionlist_info); + commonData->regionCnt = msg_list_length(regionlist_info); + + /*Get Transition List */ + msg_list_handle_t translist_info = NULL; + msg_get_list_handle(msg_info_t, MSG_MMS_TRANSITION_LIST_HND, (void **)&translist_info); + commonData->transitionCnt = msg_list_length(translist_info); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return commonData; +} + + +static SMIL_SLIDE_INFO_S *__msg_smil_content_mgr_create_mixed_message(msg_struct_t msg_info_t) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, NULL); + SMIL_SLIDE_INFO_S *newSlideContent = NULL; + int pageCnt = 0; + int attachCnt = 0; + MSG_BOOL isMixedMsg = FALSE; + msg_list_handle_t pagelist_info = NULL; + msg_list_handle_t attachlist_info = NULL; + + msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + pageCnt = msg_list_length(pagelist_info); + + msg_get_list_handle(msg_info_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info); + attachCnt = msg_list_length(attachlist_info); + + isMixedMsg = (pageCnt == 0) ? TRUE : FALSE; + + if (isMixedMsg) { + newSlideContent = (SMIL_SLIDE_INFO_S *)calloc(1, sizeof(SMIL_SLIDE_INFO_S)); + if (newSlideContent == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return NULL; + } + + newSlideContent->pageIdx = pageCnt; + newSlideContent->slideStatus = PLAYER_STATUS_NONE; + newSlideContent->nextSlide = NULL; + newSlideContent->prevSlide = NULL; + + /* set pageinfo with no data*/ + newSlideContent->pageInfo = (SMIL_PAGE_INFO_S *)calloc(1, sizeof(SMIL_PAGE_INFO_S)); + if (newSlideContent->pageInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + free(newSlideContent); + newSlideContent = NULL; + return NULL; + } + + // Init + newSlideContent->pageInfo->mediaCnt = 0; + newSlideContent->pageInfo->isTexttop = FALSE; + newSlideContent->pageInfo->hasText = FALSE; + newSlideContent->pageInfo->hasImage = FALSE; + newSlideContent->pageInfo->hasVideo = FALSE; + newSlideContent->pageInfo->hasAudio = FALSE; + newSlideContent->pageInfo->pageDuration = MSG_MMS_SMIL_HELP_PAGE_DURATION; + _msg_smil_cont_mgr_set_cur_slide_help_page(newSlideContent, ((attachCnt > 0) ? TRUE : FALSE)); + + /*create master slide*/ + newSlideContent->commonData = __msg_smil_content_mgr_create_master_slide(msg_info_t); + if (newSlideContent->commonData == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_content_mgr_create_master_slide is failed"); + if (newSlideContent) { + free(newSlideContent); + newSlideContent = NULL; + } + return NULL; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "This is not mixed message"); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return newSlideContent; +} + +static SMIL_SLIDE_INFO_S *__msg_smil_content_mgr_create_related_message(msg_struct_t msg_info_t) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, NULL); + SMIL_SLIDE_INFO_S *firstSlide = NULL; /*first slide pointer to be returned*/ + SMIL_SLIDE_INFO_S *newSlideContent = NULL; + int pageCnt = 0; + int attachCnt = 0; + MSG_BOOL bSkipEmptyPage = FALSE; + msg_list_handle_t pagelist_info = NULL; + msg_struct_t page_info = NULL; + msg_list_handle_t medialist_info = NULL; + msg_list_handle_t attachlist_info = NULL; + + //Get page info and count + msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + pageCnt = msg_list_length(pagelist_info); + + //Get attach info and count + msg_get_list_handle(msg_info_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info); + attachCnt = msg_list_length(attachlist_info); + + if (pageCnt > 0) { + SMIL_SLIDE_INFO_S *prev = NULL; + int pageIndex = 0; + int mediaCnt = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msgData->pageCnt = %d", pageCnt); + + while (pageIndex < pageCnt) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pgCount = %d", pageIndex); + + page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, pageIndex); + medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info); + mediaCnt = msg_list_length(medialist_info); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mediaCnt = %d", mediaCnt); + + /* For empty page, if there's only 1 page and help page is exist, then skip composing 1st empty page. */ + if (pageCnt == 1 && pageIndex == 0 && mediaCnt == 0 && attachCnt > 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "There's 1 empty page, but attachment is exist, skip composing empty 1 page!"); + bSkipEmptyPage = TRUE; + break; + } + + newSlideContent = (SMIL_SLIDE_INFO_S *)calloc(1, sizeof(SMIL_SLIDE_INFO_S)); + if (newSlideContent == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + if (firstSlide == NULL) { + return NULL; + } else + goto FREE_SLIDE_LIST; + } + + /*init silde info data*/ + newSlideContent->pageIdx = pageIndex; + newSlideContent->slideStatus = PLAYER_STATUS_NONE; + newSlideContent->nextSlide = NULL; + newSlideContent->prevSlide = NULL; + + /*set master(commonData) slide*/ + if (pageIndex == 0) { + /*set smilContent of content mgr as first slide pointer */ + firstSlide = newSlideContent; + + newSlideContent->commonData = __msg_smil_content_mgr_create_master_slide(msg_info_t); + if (newSlideContent->commonData == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_content_mgr_create_master_slide is failed"); + goto FREE_SLIDE_LIST; + } + } else { + /* Keeping one copy of commonData and makig all pointers to point to that copy */ + newSlideContent->commonData = firstSlide->commonData; + } + + /*set pageinfo */ + newSlideContent->pageInfo = (SMIL_PAGE_INFO_S *)calloc(1, sizeof(SMIL_PAGE_INFO_S)); + if (newSlideContent->pageInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + if (firstSlide == NULL) { + return NULL; + } else + goto FREE_SLIDE_LIST; + } + + // Init + newSlideContent->pageInfo->mediaCnt = mediaCnt; + newSlideContent->pageInfo->isTexttop = FALSE; + newSlideContent->pageInfo->hasText = FALSE; + newSlideContent->pageInfo->hasImage = FALSE; + newSlideContent->pageInfo->hasVideo = FALSE; + newSlideContent->pageInfo->hasAudio = FALSE; + + msg_get_int_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT, &(newSlideContent->pageInfo->pageDuration)); + + int index = 0; + while (index < mediaCnt) { + msg_struct_t media_info = _msg_smil_cont_mgr_get_page_nth_media_struct_handle(medialist_info, index); + int mediaType = 0; + _msg_smil_cont_mgr_get_media_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + + if (mediaType == MMS_SMIL_MEDIA_TEXT) { + newSlideContent->pageInfo->hasText = TRUE; + index++; + continue; + } else if (mediaType == MMS_SMIL_MEDIA_AUDIO) { + newSlideContent->pageInfo->hasAudio = TRUE; + index++; + continue; + } else if (mediaType == MMS_SMIL_MEDIA_VIDEO || mediaType == MMS_SMIL_MEDIA_IMG_OR_VIDEO) { + newSlideContent->pageInfo->hasVideo = TRUE; + index++; + continue; + } else if (mediaType == MMS_SMIL_MEDIA_IMG || mediaType == MMS_SMIL_MEDIA_ANIMATE) { + newSlideContent->pageInfo->hasImage = TRUE; + index++; + continue; + } else { + index++; + } + } + + //check isTexttop + if (newSlideContent->pageInfo->hasText && + (newSlideContent->pageInfo->hasVideo || newSlideContent->pageInfo->hasImage)) { + int nTop_0 = 0; + int nTop_1 = 0; + int nHeight_0 = 0; + int nHeight_1 = 0; + char szID_0[MAX_SMIL_REGION_ID] = {0,}; + char szID_1[MAX_SMIL_REGION_ID] = {0,}; + + msg_list_handle_t region_list = NULL; + msg_get_list_handle(msg_info_t, MSG_MMS_REGION_LIST_HND, (void **)®ion_list); + + /* Get 0th region */ + msg_struct_t region_info_0 = (msg_struct_t)msg_list_nth_data(region_list, 0); + msg_get_str_value(region_info_0, MSG_MMS_REGION_ID_STR, szID_0, sizeof(szID_0)); + msg_get_int_value(region_info_0, MSG_MMS_REGION_LENGTH_TOP_INT, &nTop_0); + msg_get_int_value(region_info_0, MSG_MMS_REGION_LENGTH_HEIGHT_INT, &nHeight_0); + + /* Get 1th region */ + msg_struct_t region_info_1 = (msg_struct_t)msg_list_nth_data(region_list, 1); + msg_get_str_value(region_info_1, MSG_MMS_REGION_ID_STR, szID_1, sizeof(szID_1)); + msg_get_int_value(region_info_1, MSG_MMS_REGION_LENGTH_TOP_INT, &nTop_1); + msg_get_int_value(region_info_1, MSG_MMS_REGION_LENGTH_HEIGHT_INT, &nHeight_1); + + /*check text top + * if (text's top == 0 & image's top != 0) + * text top + * else if (text's top < image's top) + * text top + * else if (text's top == 0 & image's top == 0) { + * if (text' height < image's height ) + * text top + * } + */ + + /*find and set image, text region*/ + if (!strcasecmp(szID_0, "Image")) { /*Image top region_info_0 is IMAGE REGION*/ + if (nTop_1 == 0 && nTop_0 != 0) { + newSlideContent->pageInfo->isTexttop = TRUE; + } else if (nTop_1 < nTop_0) { + newSlideContent->pageInfo->isTexttop = TRUE; + } else if (nTop_1 == 0 && nTop_0 == 0) { + if (nHeight_1 < nHeight_0) { + newSlideContent->pageInfo->isTexttop = TRUE; + } + } + + } else if (!strcasecmp(szID_1, "Image")) { /* region_info_1 is IMAGE_REGION */ + if (nTop_0 == 0 && nTop_1 != 0) { + newSlideContent->pageInfo->isTexttop = TRUE; + } else if (nTop_0 < nTop_1) { + newSlideContent->pageInfo->isTexttop = TRUE; + } else if (nTop_0 == 0 && nTop_1 == 0) { + if (nHeight_0 < nHeight_1) { + newSlideContent->pageInfo->isTexttop = TRUE; + } + } + } + } + + /*set prev, next slide pointer*/ + newSlideContent->prevSlide = prev; + if (prev != NULL) { + prev->nextSlide = newSlideContent; + } + + prev = newSlideContent; + pageIndex++; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "This is not related message"); + } + + if (attachCnt > 0) { + SMIL_SLIDE_INFO_S *lastSlide = NULL; /*last slide pointer to ref for help page */ + newSlideContent = (SMIL_SLIDE_INFO_S *)calloc(1, sizeof(SMIL_SLIDE_INFO_S)); + if (newSlideContent == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return NULL; + } + + newSlideContent->pageIdx = (bSkipEmptyPage) ? pageCnt-1 : pageCnt; //set last page + newSlideContent->slideStatus = PLAYER_STATUS_NONE; + newSlideContent->nextSlide = NULL; + + if (firstSlide) + newSlideContent->commonData = firstSlide->commonData; + else + newSlideContent->commonData = __msg_smil_content_mgr_create_master_slide(msg_info_t); + + /*set pageinfo */ + newSlideContent->pageInfo = (SMIL_PAGE_INFO_S *)calloc(1, sizeof(SMIL_PAGE_INFO_S)); + if (newSlideContent->pageInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + if (firstSlide == NULL) { + return NULL; + } else + goto FREE_SLIDE_LIST; + } + + // Init + newSlideContent->pageInfo->mediaCnt = 0; + newSlideContent->pageInfo->isTexttop = FALSE; + newSlideContent->pageInfo->hasText = FALSE; + newSlideContent->pageInfo->hasImage = FALSE; + newSlideContent->pageInfo->hasVideo = FALSE; + newSlideContent->pageInfo->hasAudio = FALSE; + newSlideContent->pageInfo->pageDuration = MSG_MMS_SMIL_HELP_PAGE_DURATION; + _msg_smil_cont_mgr_set_cur_slide_help_page(newSlideContent, TRUE); + + /* set no media contents */ + + if (firstSlide) { + lastSlide = firstSlide; //set first slide for searching last slide + + for (; lastSlide->nextSlide != NULL ;) + lastSlide = lastSlide->nextSlide; + + newSlideContent->prevSlide = lastSlide; + lastSlide->nextSlide = newSlideContent; + + firstSlide->commonData->pageCnt += 1; + } else { + newSlideContent->prevSlide = NULL; + newSlideContent->nextSlide = NULL; + + firstSlide = newSlideContent; + } + } + + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return firstSlide; + +FREE_SLIDE_LIST: + /*free current slide data*/ + if (newSlideContent) { + if (newSlideContent->pageInfo) { + free(newSlideContent->pageInfo); + newSlideContent->pageInfo = NULL; + } + free(newSlideContent); + newSlideContent = NULL; + } + + __msg_smil_content_mgr_free_slide_list(firstSlide); + + return NULL; +} + + + +/********************************************************************************************* +*This method allocates memory and does a deep copy of the message details received from the FW. +*********************************************************************************************/ +static MSG_SMIL_ERROR_E __msg_smil_content_mgr_create_page_content(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, msg_struct_t msg_info_t) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + + MSG_BOOL isMixedMsg = FALSE; + int pageCnt = 0; + msg_list_handle_t pagelist_info = NULL; + msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + pageCnt = msg_list_length(pagelist_info); + + isMixedMsg = (pageCnt == 0) ? TRUE : FALSE; + + if (isMixedMsg) { /*multipart mixed mms*/ + smilContMgrHndle->smilContent = __msg_smil_content_mgr_create_mixed_message(msg_info_t); + if (smilContMgrHndle->smilContent == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_content_mgr_create_mixed_message is failed"); + return MSG_ERR_SMIL_INVALID_STORAGE; + } + } else { /*multipart related mms*/ + smilContMgrHndle->smilContent = __msg_smil_content_mgr_create_related_message(msg_info_t); + if (smilContMgrHndle->smilContent == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_content_mgr_create_mixed_message is failed"); + return MSG_ERR_SMIL_INVALID_STORAGE; + } + } + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return MSG_SMIL_SUCCESS; +} + + + +static void __msg_smil_content_mgr_free_slide_list(SMIL_SLIDE_INFO_S *deleteSlide) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, deleteSlide == NULL); + + if (deleteSlide->nextSlide == NULL) { /*Single Slide message*/ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Freeing smilContent if MMS has one page"); + /*free commonData*/ + if (deleteSlide->commonData != NULL) { + free(deleteSlide->commonData); + deleteSlide->commonData = NULL; + } + /*free page data*/ + if (deleteSlide->pageInfo != NULL) { + free(deleteSlide->pageInfo); + deleteSlide->pageInfo = NULL; + } + free(deleteSlide); + + return; + } else { /*Multiple Slides message*/ + SMIL_SLIDE_INFO_S *nextSlide = NULL; + while (deleteSlide->nextSlide != NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Freeing smilContent: page = %d ", deleteSlide->pageIdx); + nextSlide = deleteSlide->nextSlide; + /*free commonData*/ + if (deleteSlide->pageIdx == 0) { + if (deleteSlide->commonData != NULL) { + free(deleteSlide->commonData); + deleteSlide->commonData = NULL; + } + } + + free(deleteSlide); + + deleteSlide = nextSlide; + } + + /*free the last slide data*/ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Freeing smilContent last page"); + /*free page data*/ + if (deleteSlide->pageInfo != NULL) { + free(deleteSlide->pageInfo); + deleteSlide->pageInfo = NULL; + } + free(deleteSlide); + + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + + +void _msg_smil_destroy_content_mgr(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL); + SMIL_SLIDE_INFO_S *deleteSlide = smilContMgrHndle->smilContent; + + __msg_smil_content_mgr_free_slide_list(deleteSlide); + smilContMgrHndle->smilContent = NULL; + + free(smilContMgrHndle); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + + +static MSG_BOOL __msg_smil_cont_mgr_is_valid_slide(SMIL_MASTER_SLIDE_INFO_S *commonData, int curSlideIdx) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, commonData == NULL, FALSE); + + if (commonData->pageCnt > 0) { /*Multipart Related message*/ + if (curSlideIdx > (commonData->pageCnt - 1) || curSlideIdx < 0) + return FALSE; + } else if (commonData->pageCnt == 0) { /*Multipart Mixed message*/ + if (curSlideIdx > (commonData->pageCnt) || curSlideIdx < 0) + return FALSE; + } else { + return FALSE; + } + + return TRUE; +} + + +MSG_BOOL _msg_smil_cont_mgr_set_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, SMIL_PLAYER_STATUS_E event) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent->commonData == NULL, FALSE); + SMIL_SLIDE_INFO_S *findSlide = smilContMgrHndle->smilContent; + int count = 0; + + if (__msg_smil_cont_mgr_is_valid_slide(findSlide->commonData, slideIdx) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide index is invalid"); + return FALSE; + } + + while (count < slideIdx) { + findSlide = findSlide->nextSlide; + count++; + } + findSlide->slideStatus = event; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Slide number = %d", findSlide->pageIdx); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Slide Status = %d", findSlide->slideStatus); + + return TRUE; +} + + +SMIL_PLAYER_STATUS_E _msg_smil_cont_mgr_get_cur_slide_status(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, PLAYER_STATUS_INVALID); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, PLAYER_STATUS_INVALID); + SMIL_SLIDE_INFO_S *findSlide = smilContMgrHndle->smilContent; + int count = 0; + + while (count < smilContMgrHndle->curSlideIdx) { + findSlide = findSlide->nextSlide; + count++; + + if (findSlide == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "smilContMgrHndle->smilContent is NULL"); + return PLAYER_STATUS_INVALID; + } + } + + return (findSlide->slideStatus); +} + + +int _msg_smil_cont_mgr_get_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_MMS_SLIDE_INVALID); + + return smilContMgrHndle->curSlideIdx; +} + + +MSG_BOOL _msg_smil_cont_mgr_set_cur_slide_idx(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, FALSE); + SMIL_SLIDE_INFO_S *firstSlide = smilContMgrHndle->smilContent; + + if (firstSlide->commonData) { + if (__msg_smil_cont_mgr_is_valid_slide(firstSlide->commonData, slideIdx) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide index is invalid"); + return FALSE; + } + + smilContMgrHndle->curSlideIdx = slideIdx; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide index is invalid"); + return FALSE; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + + +int _msg_smil_cont_mgr_get_total_slide_count(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_MMS_SLIDE_INVALID); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, MSG_MMS_SLIDE_INVALID); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent->commonData == NULL, MSG_MMS_SLIDE_INVALID); + + return smilContMgrHndle->smilContent->commonData->pageCnt; +} + + +SMIL_SLIDE_INFO_S *_msg_smil_cont_mgr_get_cur_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent->commonData == NULL, NULL); + SMIL_SLIDE_INFO_S *findSlide = smilContMgrHndle->smilContent; + int pageCnt = findSlide->commonData->pageCnt; + int count = 0; + + while (count < pageCnt) { + if (count == smilContMgrHndle->curSlideIdx) { + return findSlide; + } + findSlide = findSlide->nextSlide; + count++; + } + + //Adjust Mixed type msg, first slide should be set as cur slide + if (pageCnt == 0) { + msg_list_handle_t page_list_t = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle); + if (!page_list_t) { + return findSlide; + } + } + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return NULL; +} + + +SMIL_SLIDE_INFO_S *_msg_smil_cont_mgr_get_slide(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, NULL); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slide Index = %d", slideIdx); + SMIL_SLIDE_INFO_S *findSlide = smilContMgrHndle->smilContent; + + if (findSlide->commonData) { + if (__msg_smil_cont_mgr_is_valid_slide(findSlide->commonData, slideIdx) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide index is invalid"); + return NULL; + } + + while (findSlide->pageIdx < slideIdx) { + findSlide = findSlide->nextSlide; + if (findSlide == NULL) + break; + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return findSlide; +} + +void _msg_smil_cont_mgr_set_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo, MSG_BOOL bSet) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, singleSlideInfo == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, singleSlideInfo->pageInfo == NULL); + + singleSlideInfo->pageInfo->isHelpPage = bSet; + + if (bSet) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current page set as help page!"); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current page set as normal page!"); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +MSG_BOOL _msg_smil_cont_mgr_is_cur_slide_help_page(SMIL_SLIDE_INFO_S *singleSlideInfo) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, singleSlideInfo == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, singleSlideInfo->pageInfo == NULL, FALSE); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "The result of checking help page = %d", singleSlideInfo->pageInfo->isHelpPage); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return singleSlideInfo->pageInfo->isHelpPage; +} + +MSG_BOOL _msg_smil_cont_mgr_delete_help_page(msg_struct_t msg_info_t, SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, FALSE); + + MSG_BOOL isMixedMsg = FALSE; + msg_list_handle_t pagelist_info = NULL; + msg_struct_t page_info = NULL; + msg_list_handle_t medialist_info = NULL; + msg_list_handle_t attachlist_info = NULL; + int pageCnt = 0; + int mediaCnt = 0; + int attachCnt = 0; + + SMIL_SLIDE_INFO_S *curSlide = smilContMgrHndle->smilContent; + + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide->commonData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide->pageInfo == NULL, FALSE); + + /* get page list info */ + msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + pageCnt = msg_list_length(pagelist_info); + + isMixedMsg = (pageCnt == 0) ? TRUE : FALSE; + + if (isMixedMsg) { + /* change current slide page tag */ + _msg_smil_cont_mgr_set_cur_slide_help_page(curSlide, FALSE); + + /*set prev, next slide pointer*/ + curSlide->prevSlide = NULL; + curSlide->nextSlide = NULL; + } else { // related msg + + msg_get_list_handle(msg_info_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info); + attachCnt = msg_list_length(attachlist_info); + + //Check 1st page media info, media count + page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, 0); + medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info); + mediaCnt = msg_list_length(medialist_info); + + if (attachCnt > 0) { + if (pageCnt == 1 && mediaCnt == 0) { // condition for skip and show Help page direct + /* change current slide page tag */ + _msg_smil_cont_mgr_set_cur_slide_help_page(curSlide, FALSE); + + /*set prev, next slide pointer*/ + curSlide->prevSlide = NULL; + curSlide->nextSlide = NULL; + } else { + SMIL_SLIDE_INFO_S *firstSlide = NULL; /*first slide */ + SMIL_SLIDE_INFO_S *lastSlide = NULL; /*last slide pointer to ref for help page */ + SMIL_SLIDE_INFO_S *lastaheadSlide = NULL; /*last ahead slide pointer */ + + firstSlide = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, 0); + if (firstSlide == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "failed in getting firstSlide"); + return FALSE; + } + lastSlide = firstSlide; //copy pointer to last slide + + for(; lastSlide->nextSlide; ) + lastSlide = lastSlide->nextSlide; + + lastaheadSlide = lastSlide->prevSlide; + + firstSlide->commonData->pageCnt -= 1; + lastaheadSlide->nextSlide = NULL; + + if (lastSlide->pageInfo) { + free(lastSlide->pageInfo); + lastSlide->pageInfo = NULL; + } + + free(lastSlide); + lastSlide = NULL; + } + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + +/* + * functions for page/media struct handle with FW managed api + */ +msg_list_handle_t _msg_smil_cont_mgr_get_page_list_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, NULL); + msg_struct_t msg_info_t = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, NULL); + + int pageCnt = 0; + + /*Get struct handle of current page */ + msg_list_handle_t pagelist_info = NULL; + msg_get_list_handle(msg_info_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + + pageCnt = msg_list_length(pagelist_info); + + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, NULL); + + return pagelist_info; +} + +msg_struct_t _msg_smil_cont_mgr_get_nth_page_struct_handle(msg_list_handle_t pagelist_info_t, int pageIdx) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pagelist_info_t == NULL, NULL); + + int pageCnt = msg_list_length(pagelist_info_t); + MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, NULL, "page length is 0, no page is exist"); + + /*Get page*/ + msg_struct_t page_info = NULL; + page_info = (msg_struct_t)msg_list_nth_data(pagelist_info_t, pageIdx); + + return page_info; +} + +int _msg_smil_cont_mgr_get_page_time_value(msg_struct_t pageInfo_t, int field) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pageInfo_t == NULL, MSG_MMS_SLIDE_INVALID); + int time; + + /*Get page nDur */ + if (field == MSG_MMS_PAGE_PAGE_DURATION_INT) { + msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_PAGE_DURATION_INT, &time); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page duration time = %d", time); + } else if (field == MSG_MMS_PAGE_BEGIN_TIME_INT) { + msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_BEGIN_TIME_INT, &time); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page begin time = %d", time); + } else if (field == MSG_MMS_PAGE_END_TIME_INT) { + msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_END_TIME_INT, &time); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page end time = %d", time); + } else if (field == MSG_MMS_PAGE_MIN_INT) { + msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_MIN_INT, &time); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page min time = %d", time); + } else if (field == MSG_MMS_PAGE_MAX_INT) { + msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_MAX_INT, &time); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page max time = %d", time); + } else if (field == MSG_MMS_PAGE_REPEAT_INT) { + msg_get_int_value(pageInfo_t, MSG_MMS_PAGE_REPEAT_INT, &time); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page repeat time = %d", time); + } + + return time; +} + +msg_list_handle_t _msg_smil_cont_mgr_get_page_media_list_handle(msg_struct_t pageInfo_t) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pageInfo_t == NULL, NULL); + + int mediaCnt = 0; + /*Get media list handler */ + msg_list_handle_t medialist_info = NULL; + msg_get_list_handle(pageInfo_t, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info); + mediaCnt = msg_list_length(medialist_info); + + if (mediaCnt == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media count is 0, no medias in page"); + return NULL; + } + + return medialist_info; +} + +msg_struct_t _msg_smil_cont_mgr_get_page_nth_media_struct_handle(msg_list_handle_t medialist_info_t, int mediaIdx) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, medialist_info_t == NULL, NULL); + + int mediaCnt = msg_list_length(medialist_info_t); + MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, mediaCnt == 0, NULL, "media count is 0, no medias in page"); + + /*Get media*/ + msg_struct_t media_info = NULL; + media_info = (msg_struct_t)msg_list_nth_data(medialist_info_t, mediaIdx); + + return media_info; +} + +void _msg_smil_cont_mgr_get_media_str_value(msg_struct_t media_info_t, int strfield, char *rtnStr) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, media_info_t == NULL); + + if (strfield == MSG_MMS_MEDIA_TYPE_INT || + strfield == MSG_MMS_MEDIA_DRM_TYPE_INT || + strfield == MSG_MMS_MEDIA_SMIL_TEXT_HND || + strfield == MSG_MMS_MEDIA_SMIL_AVI_HND ) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "field value(%d) is not STRING type", strfield); + return; + } + + char strbuf[2048] = {0,}; + + if (strfield == MSG_MMS_MEDIA_SRC_STR) + msg_get_str_value(media_info_t, MSG_MMS_MEDIA_SRC_STR, strbuf, sizeof(strbuf)); + else if (strfield == MSG_MMS_MEDIA_FILENAME_STR) + msg_get_str_value(media_info_t, MSG_MMS_MEDIA_FILENAME_STR, strbuf, sizeof(strbuf)); + else if (strfield == MSG_MMS_MEDIA_FILEPATH_STR) + msg_get_str_value(media_info_t, MSG_MMS_MEDIA_FILEPATH_STR, strbuf, sizeof(strbuf)); + else if (strfield == MSG_MMS_MEDIA_CONTENT_ID_STR) + msg_get_str_value(media_info_t, MSG_MMS_MEDIA_CONTENT_ID_STR, strbuf, sizeof(strbuf)); + else if (strfield == MSG_MMS_MEDIA_REGION_ID_STR) + msg_get_str_value(media_info_t, MSG_MMS_MEDIA_REGION_ID_STR, strbuf, sizeof(strbuf)); + else if (strfield == MSG_MMS_MEDIA_ALTERNATIVE_STR) + msg_get_str_value(media_info_t, MSG_MMS_MEDIA_ALTERNATIVE_STR, strbuf, sizeof(strbuf)); + else if (strfield == MSG_MMS_MEDIA_DRM_FULLPATH_STR) + msg_get_str_value(media_info_t, MSG_MMS_MEDIA_DRM_FULLPATH_STR, strbuf, sizeof(strbuf)); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "STRING field value(%d) is %s", strfield, strbuf); + strncpy(rtnStr, strbuf, strlen(strbuf)); +} + +void _msg_smil_cont_mgr_get_media_int_value(msg_struct_t media_info_t, int intfield, int* rtnVal) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, media_info_t == NULL); + + if (intfield != MSG_MMS_MEDIA_TYPE_INT && intfield != MSG_MMS_MEDIA_DRM_TYPE_INT) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "field value(%d) is not INT type", intfield); + return; + } + + if (intfield == MSG_MMS_MEDIA_TYPE_INT) + msg_get_int_value(media_info_t, MSG_MMS_MEDIA_TYPE_INT, rtnVal); + else if (intfield == MSG_MMS_MEDIA_DRM_TYPE_INT) + msg_get_int_value(media_info_t, MSG_MMS_MEDIA_DRM_TYPE_INT, rtnVal); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "field value(%d) is %d", intfield, *rtnVal); +} + +msg_struct_t _msg_smil_cont_mgr_get_mms_body_struct_handle(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, NULL); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "smilContMgrHndle->msg_info_t = 0x%x", smilContMgrHndle->msg_info_t); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return smilContMgrHndle->msg_info_t; +} + +MSG_BOOL _msg_smil_cont_mgr_get_slide_time(SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle, int slideIdx, MSG_BOOL bExcludeHp, double *time) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle->smilContent == NULL, FALSE); + + SMIL_SLIDE_INFO_S *curSlide = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, 0); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide->commonData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide->pageInfo == NULL, FALSE); + + MSG_BOOL is_mixed_msg = FALSE; + double total_time = 0; + char szFilePath[MSG_FILEPATH_LEN_MAX] = {0,}; + msg_list_handle_t page_list_info = NULL; + msg_struct_t page_info = NULL; + + is_mixed_msg = (curSlide->commonData->pageCnt == 0) ? TRUE : FALSE; + + //check validity input page index + if ((curSlide =_msg_smil_cont_mgr_get_slide(smilContMgrHndle, slideIdx)) == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Current msg is Multipart related msg, but there's no page with given index (%d)!", slideIdx); + return FALSE; + } + + if (is_mixed_msg) { + if (slideIdx != 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Mixed msg cannot have 1 more page!"); + return FALSE; + } + total_time = (double)MSG_MMS_SMIL_HELP_PAGE_DURATION; + } else { + while (slideIdx < curSlide->commonData->pageCnt) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slideIdx = %d", slideIdx); + double pagetime = 0.0; + int duration = 0; + double maximum_time = 0.0; + + curSlide =_msg_smil_cont_mgr_get_slide(smilContMgrHndle, slideIdx); + if (curSlide->pageInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page of current slide is NULL!"); + return FALSE; + } + + if (bExcludeHp && curSlide->pageInfo->isHelpPage) { + if (slideIdx == 0 && curSlide->commonData->pageCnt == 1) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total page count = 1, And if there's only 1 help page, set default time for duration."); + total_time = (double)MSG_MMS_SMIL_HELP_PAGE_DURATION; + break; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current page(%d) is Help page and bExcludeHp flag is %d, skip calculating this page", curSlide->pageIdx, bExcludeHp); + slideIdx++; + continue; + } + } + //set pagetime as duration time + pagetime = (double)(curSlide->pageInfo->pageDuration); + + // get media time value for pagetime is not valid + if (pagetime < 0) { + /*Get Media List.*/ + page_list_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle); + if (page_list_info) + page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(page_list_info, curSlide->pageIdx); + + if (page_info && curSlide->pageInfo->mediaCnt > 0) { + int index = 0; + int mediaCnt = 0; + msg_list_handle_t media_list_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info); + mediaCnt = msg_list_length(media_list_info); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mediaCnt = %d", mediaCnt); + while (index < mediaCnt) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + int mediaType = 0; + msg_struct_t media_info = _msg_smil_cont_mgr_get_page_nth_media_struct_handle(media_list_info, index); + + if (media_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info is Null"); + return FALSE; + } + + bzero(szFilePath, sizeof(szFilePath)); + _msg_smil_cont_mgr_get_media_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, szFilePath); + _msg_smil_cont_mgr_get_media_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + + if (mediaType == MMS_SMIL_MEDIA_VIDEO || + mediaType == MMS_SMIL_MEDIA_AUDIO || + mediaType == MMS_SMIL_MEDIA_IMG_OR_VIDEO) { + bool is_drm = FALSE; + bool is_available_play = FALSE; + + //check DRM + drm_bool_type_e is_drm_file = DRM_UNKNOWN; + int ret = DRM_RETURN_SUCCESS; + + ret = drm_is_drm_file(szFilePath, &is_drm_file); + is_drm = (ret == DRM_RETURN_SUCCESS && is_drm_file == DRM_TRUE) ? TRUE : FALSE; + if (is_drm) { + int ret = DRM_RETURN_SUCCESS; + drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED; + ret = drm_get_license_status(szFilePath, DRM_PERMISSION_TYPE_PLAY, &license_status); + if (ret != DRM_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_get_license_status is failed ret = %d", ret); + is_available_play = FALSE; + } + + if (license_status != DRM_LICENSE_STATUS_VALID) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "license_status = %d", license_status); + is_available_play = FALSE; + } else { + is_available_play = TRUE; + } + } else { + is_available_play = TRUE; + } + + if (is_available_play) { + int ret = 0; + MMHandleType content_attrs = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "tempMedia->szFilePath is %s", szFilePath); + + ret = mm_file_create_content_attrs(&content_attrs, szFilePath); + + if (ret == MM_ERROR_NONE) { + char *error = NULL; + + ret = mm_file_get_attrs(content_attrs, &error, MM_FILE_CONTENT_DURATION, &duration, NULL); + + if (ret != MM_ERROR_NONE) { + if (error) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mm_file_get_attrs is failed - ret(%x), error(%s)", ret, error); + free(error); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mm_file_get_attrs is failed - ret(%x)", ret); + } + } + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "file : %s, duration : %f", szFilePath, (double)duration); + + if (content_attrs) + mm_file_destroy_content_attrs(content_attrs); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mm_file_create_content_attrs is failed - ret(%x)", ret); + } + } + + + //ceiling duration time + double ceilvalue = ceil((double)duration/1000)*1000; + if (maximum_time <= ceilvalue) + maximum_time = ceilvalue; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current media type(%d) is follow page duration time. skip checking..", mediaType); + } + index++; + } + } + + pagetime = maximum_time; + } + + total_time += pagetime; + + slideIdx++; + } + } + + *time = total_time; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "total slide time is %f", *time); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return TRUE; +} diff --git a/viewer/smil-player/src/msg-smil-event-manager.c b/viewer/smil-player/src/msg-smil-event-manager.c new file mode 100755 index 0000000..0af9ffe --- /dev/null +++ b/viewer/smil-player/src/msg-smil-event-manager.c @@ -0,0 +1,1299 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-event-manager.h" +#include "msg-smil-content-manager.h" +#include "msg-smil-player.h" +#include "msg-smil-util.h" + +/*For Multimedia element duration calculation.*/ +#include "mm_file.h" +#include <mm_player.h> +#include <mm_error.h> + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define MSG_MMS_SMIL_TIMER_DEFAULT_DUR 5000 +#define MSG_MMS_SMIL_TIMER_DUR_INDEFINITE -1 +#define MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN 0 +#define MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE (0.0) +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +/* +*@fn __msg_smil_event_mgr_fill_media_time_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData); +*@brief Fill the Media elements timer related data for UI usage and return the timer duration required for timer registry. +*@return timerDuration value. Zero if no timer value. +*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager. +*@param[in] callbackData +*/ +static double __msg_smil_event_mgr_fill_media_time_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData); + +/* +*@fn __msg_smil_event_mgr_set_media_time_info(SMIL_TIMER_CALLBACK_DATA_S *callbackData); +*@brief set Media timer related data and create and sort the data. +*@param[in] callbackData +*/ +static void __msg_smil_event_mgr_set_media_time_info(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData); + +/* +*@fn __msg_smil_event_mgr_set_page_time(SMIL_SLIDE_INFO_S *pageData); +*@brief set page time info(begin, dur, end) of MMS_PAGE_S +*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager. +*@param[in] pageData page time info. of MMS_PAGE_S will be set +*/ +static void __msg_smil_event_mgr_set_page_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_SLIDE_INFO_S *pageData); + +/* +*@fn __msg_smil_event_mgr_check_media_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData); +*@brief check specific media type(video or invalid type) +*@param[out] callbackData video or invalid type will be set if there is the media +*/ +static void __msg_smil_event_mgr_check_media_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData); + +/* +*@fn __msg_smil_event_mgr_change_media_time(msg_struct_t media_info, MmsSmilMediaType mediaType); +*@brief Change media time(begin, dur, end) to process invalid receiving media time datas +*@param[in] mediaType media type info. +*@param[out] mediaList changed media time will be set +*/ +static void __msg_smil_event_mgr_change_media_time(msg_struct_t media_info, MmsSmilMediaType mediaType); + +/* +*@fn __msg_smil_event_mgr_register_timer(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, void *cb, double duration); +*@brief Register call timer +*@return MSG_SUCCESS on success , else failure return code +*@param[in] smilEvntMgrHndle This is the handler to the SMILEvent Manager. +*@param[in] cb Timer callback function +*@param[in] duration Timer duration +*@param[out] callbackData. +*/ +static MSG_SMIL_ERROR_E __msg_smil_event_mgr_register_timer(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, void *cb, double duration); + +MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_idx(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int slideIdx); +MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_count(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int pageCnt); + + +/*================================================================================================ + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +MSG_SMIL_ERROR_E _msg_smil_create_event_mgr(void *cb, void *data, SMIL_EVENT_MGR_HANDLE_S **smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, cb == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + + /*allocate memory to handler*/ + *smilEvntMgrHndle = (SMIL_EVENT_MGR_HANDLE_S *)calloc(1, sizeof(SMIL_EVENT_MGR_HANDLE_S)); + if (*smilEvntMgrHndle == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return MSG_ERR_SMIL_INVALID_STORAGE; + } + + (*smilEvntMgrHndle)->slideTimerCbData = (SMIL_TIMER_CALLBACK_DATA_S *)calloc(1, sizeof(SMIL_TIMER_CALLBACK_DATA_S)); + if ((*smilEvntMgrHndle)->slideTimerCbData == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + if (*smilEvntMgrHndle != NULL) { + free(*smilEvntMgrHndle); + *smilEvntMgrHndle = NULL; + } + return MSG_ERR_SMIL_INVALID_STORAGE; + } + + (*smilEvntMgrHndle)->slideTimerCbData->appSmilCb = (pfnSMILPlayerCb)cb; + (*smilEvntMgrHndle)->slideTimerCbData->appUserData = data; + (*smilEvntMgrHndle)->slideTimerCbData->curSlideParam = (SMIL_SLIDE_EVENT_PARAM_S *)calloc(1, sizeof(SMIL_SLIDE_EVENT_PARAM_S)); + if ((*smilEvntMgrHndle)->slideTimerCbData->curSlideParam == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + if ((*smilEvntMgrHndle)->slideTimerCbData != NULL) { + free((*smilEvntMgrHndle)->slideTimerCbData); + (*smilEvntMgrHndle)->slideTimerCbData = NULL; + } + + if (*smilEvntMgrHndle != NULL) { + free(*smilEvntMgrHndle); + *smilEvntMgrHndle = NULL; + } + return MSG_ERR_SMIL_INVALID_STORAGE; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return MSG_SMIL_SUCCESS; +} + + +void _msg_smil_destroy_event_mgr(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL); + + if (smilEvntMgrHndle->slideTimerCbData != NULL) { + if (smilEvntMgrHndle->slideTimerCbData->timerHandle != NULL) { + void *timerRet = ecore_timer_del(smilEvntMgrHndle->slideTimerCbData->timerHandle); + if (timerRet == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Timer Registry Failed"); + } + } + + if (smilEvntMgrHndle->slideTimerCbData->curSlideParam != NULL) { + free(smilEvntMgrHndle->slideTimerCbData->curSlideParam); + smilEvntMgrHndle->slideTimerCbData->curSlideParam = NULL; + } + + free(smilEvntMgrHndle->slideTimerCbData); + smilEvntMgrHndle->slideTimerCbData = NULL; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "smilEvntMgrHndle->slideTimerCbData is NULL"); + } + + free(smilEvntMgrHndle); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + + +MSG_SMIL_ERROR_E _msg_smil_event_mgr_play_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_ERR_SMIL_INVALID_SLIDE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->smilhandle == NULL, MSG_ERR_SMIL_INVALID_SLIDE); + + double timerDuration = 0; + MSG_BOOL haspageinfo = TRUE; + SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData; + SMIL_SLIDE_INFO_S *singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle); + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, MSG_ERR_SMIL_INVALID_SLIDE); + + if (curSlideIdx < 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid slide index = %d", curSlideIdx); + return MSG_ERR_SMIL_INVALID_SLIDE; + } + + /*fetching the slide data for the first slide*/ + if (singleSlideInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Getting Slide info from content mgr"); + SMIL_SLIDE_INFO_S *slideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, curSlideIdx); + if (slideInfo == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Slide info fetch failed."); + return MSG_ERR_SMIL_INVALID_SLIDE; + } + _msg_smil_event_mgr_set_current_slide(smilEvntMgrHndle, slideInfo); + singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle); + } + + if (_msg_smil_cont_mgr_set_cur_slide_idx(smilContMgrHndle, curSlideIdx) == FALSE) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_cur_slide_idx is failed"); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current slide idx = %d", _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle)); + + int pageCnt = _msg_smil_cont_mgr_get_total_slide_count(smilContMgrHndle); + __msg_smil_event_mgr_set_client_cb_page_idx(smilEvntMgrHndle, curSlideIdx); + __msg_smil_event_mgr_set_client_cb_page_count(smilEvntMgrHndle, pageCnt); + +/********CallBack for Timer is needed only for Multipart Related MMS - + *Currently implementing for Only Three Media types as there are only two regions supported********/ + if (pageCnt > 0) { + while (1) { + if (singleSlideInfo && singleSlideInfo->pageInfo) { + int durTime = 0; + int endTime = 0; + SMIL_PLAYER_PAGE_EVENT_E actionTypeOnPage = _msg_smil_event_mgr_get_page_action_type(smilEvntMgrHndle); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage); + switch (actionTypeOnPage) { + case PAGE_EVENT_PLAY: + /* Check for validity of Page Timer Values and Assign Default Values if required */ + __msg_smil_event_mgr_set_page_time(smilEvntMgrHndle, singleSlideInfo); + _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAGE_PLAY_START); + + /* check current page is help page and skip internal media play */ + if (_msg_smil_cont_mgr_is_cur_slide_help_page(singleSlideInfo)) { + haspageinfo = FALSE; + break; + } + + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_INTERNAL_MEDIA); + continue; + case PAGE_EVENT_INTERNAL_MEDIA: + /*Populate and sort Media Timer Info into the slideTimerInfo Array*/ + __msg_smil_event_mgr_set_media_time_info(smilEvntMgrHndle, slideTimerCbData); + _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START); + /*Considering the fact that there can be less than three media, we need to perform a check for + * if there is any media related information in the array for the sake of a boundary condition check. + * Also we need to take the Begin and End time of the Page into consideration*/ + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_NONE); + __msg_smil_event_mgr_check_media_type(smilEvntMgrHndle, slideTimerCbData); + timerDuration = __msg_smil_event_mgr_fill_media_time_data(smilEvntMgrHndle, slideTimerCbData); + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "timerDuration = %lf", timerDuration); + + /*Get page handle - Do not null check, it is not needed from here*/ + msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle); + msg_struct_t page_info =_msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, singleSlideInfo->pageIdx); + + durTime = _msg_smil_cont_mgr_get_page_time_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT); + if (timerDuration == 0) { + /* If there is no media Handle - Show the blank slide for the duration of the slide and then move to the next slide if the page->nDur is Valid. */ + if (durTime != MSG_MMS_SMIL_TIMER_DUR_INDEFINITE) { + timerDuration = durTime; + } else { + /* if the page->nDur is Invalid do no timer interacton and wait for user action.*/ + } + } + + /* Calculation of timerDuration basing on the End Time/Duration of the page - This case arises if there is no media or in case the end time of all media > the end time of the slide. */ + endTime = _msg_smil_cont_mgr_get_page_time_value(page_info, MSG_MMS_PAGE_END_TIME_INT); + if (endTime > 0) { + if (timerDuration > durTime) { + timerDuration = durTime; + } + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "timerDuration = %lf", timerDuration); + + if (singleSlideInfo->nextSlide == NULL)/* If the current slide is the last slide */ + _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE); + + _msg_smil_event_mgr_set_slide_time(smilEvntMgrHndle, timerDuration); + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_END); + break; + case PAGE_EVENT_END: + break; + case PAGE_EVENT_MOVE_TO_NEXT: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PAGE_EVENT_MOVE_TO_NEXT"); + if (singleSlideInfo->nextSlide != NULL) { + /* Move to next slide*/ + _msg_smil_event_mgr_set_current_slide(smilEvntMgrHndle, singleSlideInfo->nextSlide); + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_PLAY); + singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle); + if (singleSlideInfo && singleSlideInfo->nextSlide == NULL) + _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE); + } else { + /* Last Slide*/ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Last Slide - so do nothing"); + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_NONE); + break; + } + continue; + case PAGE_EVENT_MOVE_TO_PREV: + if (singleSlideInfo->prevSlide != NULL) { + /* Move to prev slide*/ + _msg_smil_event_mgr_set_current_slide(smilEvntMgrHndle, singleSlideInfo->prevSlide); + singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle); + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_PLAY); + _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, FALSE); + } else { + /*First Slide*/ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "First Slide"); + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_NONE); + break; + } + continue; + default: + break; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "slide page is NULL"); + } + break; + } + } else { + /*invalide message without page info or multipart.mixed message*/ + _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAGE_PLAY_START); + haspageinfo = FALSE; + } + + if (slideTimerCbData->slideTimerInfo.actionTypeOnPage != PAGE_EVENT_NONE) { + MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN; + int slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle); + + _msg_smil_cont_mgr_set_status(smilContMgrHndle, slideIdx, PLAYER_STATUS_PLAYING); + + /*calling renderhandler to draw content*/ + MSG_BOOL rendering_failed = FALSE; + SMIL_RENDERER_DATA_S *smilRenderer = _msg_smil_get_renderder(smilEvntMgrHndle->smilhandle); + if (smilRenderer) { + err = _msg_smil_render_on_slide_render_handler(smilRenderer, slideTimerCbData->curSlideParam); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_on_slide_render_handler failed err = %d", err); + rendering_failed = TRUE; + + _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_ERROR); + slideTimerCbData->appSmilCb(&(slideTimerCbData->curSlideParam->clientCbParam), slideTimerCbData->appUserData); + + return err; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "smilRenderer is NULL"); + rendering_failed = TRUE; + } + + /*Calling the callback function of Client.*/ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Calling the Client callback"); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "RENDEREVENT = %d", slideTimerCbData->curSlideParam->renderEvent); + err = slideTimerCbData->appSmilCb(&(slideTimerCbData->curSlideParam->clientCbParam), slideTimerCbData->appUserData); + _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_NONE); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Client CB failed with error = %d", err); + _msg_smil_cont_mgr_set_status(smilContMgrHndle, slideIdx, PLAYER_STATUS_NONE); + return MSG_ERR_SMIL_UI_DISPLAY_FAIURE; + } + + /*Timer Registration -- needed for Multipart Related MMS only.*/ + MSG_BOOL is_video_media = _msg_smil_event_mgr_get_is_video_media(smilEvntMgrHndle); + MSG_BOOL binvalid_ro = _msg_smil_event_mgr_get_invalid_video_ro(smilEvntMgrHndle); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "binvalid_ro = %d", binvalid_ro); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isVideoMedia = %d", is_video_media); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "timerDuration = %lf", timerDuration); + + //for UI progressbar. ceiling duration time to second + double ceiled_duration = ceil(timerDuration/1000)*1000; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ceiling timerDuration = %lf", ceiled_duration); + + if (is_video_media) { /*video*/ + if (rendering_failed) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "create timer for invalid case of video content or etc"); + if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, ceiled_duration)) != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err); + return err; + } + } else if (binvalid_ro == TRUE) { /*video is an invalid ro drm content*/ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "create timer for invalid ro drm video content"); + double time_dur = _msg_smil_event_mgr_get_slide_time(smilEvntMgrHndle); + double ceiled_duration = ceil(time_dur/1000)*1000; + if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, ceiled_duration)) != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err); + return err; + } + } else { //valid ro video file. now we insure page duration for at least video duration + double remain_current_slide = 0.0; + double remain_next_Slide = 0.0; + double current_slide_time = 0.0; + if (_msg_smil_cont_mgr_get_slide_time(smilContMgrHndle, slideIdx, FALSE, &remain_current_slide)) { + if (_msg_smil_cont_mgr_get_slide_time(smilContMgrHndle, slideIdx+1, FALSE, &remain_next_Slide)) + current_slide_time = remain_current_slide - remain_next_Slide; + else + current_slide_time = remain_current_slide; + } + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current slide(include video) time is %f", current_slide_time); + + double duration_time = (current_slide_time >= ceiled_duration) ? current_slide_time : ceiled_duration; + + if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, duration_time)) != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err); + return err; + } + } + } else if (timerDuration > 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "create timer for normal case"); + if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, ceiled_duration)) != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err); + return err; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "timer is not created. PLAYSLIDEEVENT : timerDuration = %lf", timerDuration); + if (haspageinfo == FALSE) { /*for invalid page info message or multipart.mixed message*/ + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_END); + timerDuration = MSG_MMS_SMIL_TIMER_DEFAULT_DUR; + if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, timerDuration)) != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err); + return err; + } + } else if (_msg_smil_event_mgr_get_unsupported_content(smilEvntMgrHndle)) { /*if unsupported content has no duration time*/ + timerDuration = MSG_MMS_SMIL_TIMER_DEFAULT_DUR; + if ((err = __msg_smil_event_mgr_register_timer(smilEvntMgrHndle, _msg_smil_event_mgr_slide_timer_cb, timerDuration)) != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_event_mgr_register_timer Failed err = %d", err); + return err; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "timer is not registerd actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage); + } + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Page event is error actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return MSG_SMIL_SUCCESS; +} + + +static MSG_SMIL_ERROR_E __msg_smil_event_mgr_register_timer(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, void *cb, double duration) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYSLIDEEVENT : timerDuration = %lf", duration); + /*Start Timer.*/ + duration = duration / MSG_MMS_SMIL_TIMER_CONVERT; + slideTimerCbData->timerHandle = ecore_timer_add(duration, cb, (void *)smilEvntMgrHndle); + if (slideTimerCbData->timerHandle == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Timer Registry Failed"); + return MSG_ERR_SMIL_TIMER_FAILURE; + } + return MSG_SMIL_SUCCESS; +} + + +MSG_SMIL_ERROR_E _msg_smil_event_mgr_stop_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData; + void *timerRet = NULL; + + /*Delete the Timer.*/ + if (slideTimerCbData->timerHandle != NULL) { + timerRet = ecore_timer_del(slideTimerCbData->timerHandle); + if (timerRet == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Timer Deletion Failed"); + return MSG_ERR_SMIL_TIMER_FAILURE; + } + slideTimerCbData->timerHandle = NULL; + } + + /* Update status as PLAYER_STATUS_PLAY_END */ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "CALL UPDATE AT PLAY END"); + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle); + int curSlideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle); + if (_msg_smil_cont_mgr_set_status(smilContMgrHndle, curSlideIdx, PLAYER_STATUS_PLAY_END) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_status is failed"); + return MSG_ERR_SMIL_NULL_MESSAGE; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return MSG_SMIL_SUCCESS; +} + + +MSG_SMIL_ERROR_E _msg_smil_event_mgr_pause_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData; + + if (slideTimerCbData->timerHandle != NULL) + ecore_timer_freeze(slideTimerCbData->timerHandle); + + /* Update status as PLAYER_EVENT_PAUSED */ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "CALL UPDATE AT PLAY PAUSE"); + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle); + int curSlideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle); + if (_msg_smil_cont_mgr_set_status(smilContMgrHndle, curSlideIdx, PLAYER_STATUS_PAUSED) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_status is failed"); + return MSG_ERR_SMIL_NULL_MESSAGE; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return MSG_SMIL_SUCCESS; +} + + +MSG_SMIL_ERROR_E _msg_smil_event_mgr_resume_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int curSlideIdx) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_BOOL isVideoMedia = _msg_smil_event_mgr_get_is_video_media(smilEvntMgrHndle); + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isVideoMedia = %d", isVideoMedia); + + if (smilEvntMgrHndle->slideTimerCbData->timerHandle) { + ecore_timer_thaw(smilEvntMgrHndle->slideTimerCbData->timerHandle); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "CALL UPDATE AT PLAY RESUME"); + if (_msg_smil_cont_mgr_set_status(smilContMgrHndle, curSlideIdx, PLAYER_STATUS_PLAYING) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_status is failed"); + return MSG_ERR_SMIL_NULL_MESSAGE; + } + } else { + MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN; + if (_msg_smil_cont_mgr_set_status(smilContMgrHndle, curSlideIdx, PLAYER_STATUS_PLAYING) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_cont_mgr_set_status is failed"); + return MSG_ERR_SMIL_NULL_MESSAGE; + } + + curSlideIdx += MSG_MMS_SMIL_SLIDEIDX_INCREMENT; + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_NEXT); + + // Call Event Manager for playing the slide and starting the timer. + err = _msg_smil_event_mgr_play_slide(smilEvntMgrHndle, curSlideIdx); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed :PLAYER_EVENT_NEXT_SLIDE"); + return err; + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return MSG_SMIL_SUCCESS; +} + + +Eina_Bool _msg_smil_event_mgr_slide_timer_cb(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE); + MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN; + MSG_SMIL_ERROR_E error = MSG_ERR_SMIL_UNKNOWN; + SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = (SMIL_EVENT_MGR_HANDLE_S *)data; + SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = smilEvntMgrHndle->slideTimerCbData; + SMIL_SLIDE_INFO_S *singleSlideInfo = NULL; + void *timerRet = NULL; + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, slideTimerCbData == NULL, EINA_FALSE); + + /*Delete the Current timer and then start a fresh timer.*/ + if (slideTimerCbData->timerHandle != NULL) { + timerRet = ecore_timer_del(slideTimerCbData->timerHandle); + if (timerRet == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Timer Deletion Failed"); + return EINA_FALSE; + } + slideTimerCbData->timerHandle = NULL; + } + + int cur_slide = _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle); + + singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, singleSlideInfo == NULL, EINA_FALSE); + while (1) { + switch (slideTimerCbData->slideTimerInfo.actionTypeOnPage) { + case PAGE_EVENT_END: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "actionTypeOnPage = PAGE_EVENT_END"); + slideTimerCbData->elementIdx = -1; + if (singleSlideInfo->nextSlide != NULL) { /* Not the last slide*/ + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_NEXT); + continue; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LAST SLIDE CASE"); + /* If Delayed client cb only after timer expiry. */ + _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE); + _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, TRUE); + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_NONE); + _msg_smil_cont_mgr_set_status(smilContMgrHndle, cur_slide, PLAYER_STATUS_PLAY_END); + + /*call renderhandler to draw content*/ + SMIL_RENDERER_DATA_S *smilRenderer = _msg_smil_get_renderder(smilEvntMgrHndle->smilhandle); + error = _msg_smil_render_on_slide_render_handler(smilRenderer, slideTimerCbData->curSlideParam); + if (error != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_on_slide_render_handler failed err = %d", err); + _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_ERROR); + } + + /*Calling the callback of Client.*/ + err = slideTimerCbData->appSmilCb(&(slideTimerCbData->curSlideParam->clientCbParam), slideTimerCbData->appUserData); + _msg_smil_event_mgr_set_last_slide(smilEvntMgrHndle, FALSE); + + if (err != MSG_SMIL_SUCCESS || error != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Client CB failed"); + return EINA_FALSE; + } + break; + } + case PAGE_EVENT_MOVE_TO_NEXT: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "actionTypeOnPage = PAGE_EVENT_MOVE_TO_NEXT"); + _msg_smil_cont_mgr_set_status(smilContMgrHndle, cur_slide, PLAYER_STATUS_PLAY_END); + err = _msg_smil_event_mgr_move_to_next_slide(smilEvntMgrHndle); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_move_to_next_slide is failed = %d", err); + } + break; + default: + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "actionTypeOnPage = %d", slideTimerCbData->slideTimerInfo.actionTypeOnPage); + break; + } + break; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SLIDE IDX = %d", _msg_smil_cont_mgr_get_cur_slide_idx(smilContMgrHndle)); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SLIDE STATUS = %d", _msg_smil_cont_mgr_get_cur_slide_status(smilContMgrHndle)); + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return EINA_FALSE; +} + + +static double __msg_smil_event_mgr_fill_media_time_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callbackData == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam->singleSlideInfo == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE); + int mediaCnt = 0; + int pageCnt = 0; + int count = 0; + double timerDuration = 0; + int value = 0; + int mediaIdxCnt = 0; + + /*Get contentMgr */ + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle); + + /*Get page list handler of current page of callbackData*/ + msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle); + pageCnt = msg_list_length(pagelist_info); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE); + + /*Get page handler */ + msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, callbackData->curSlideParam->singleSlideInfo->pageIdx); + + /*Get media list handler */ + msg_list_handle_t medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info); + mediaCnt = msg_list_length(medialist_info); + + while (count < MSG_MMS_SMIL_MEDIA_TYPES) { + callbackData->curSlideParam->timerDataMedia[count].mediaIdx = 0; + callbackData->curSlideParam->timerDataMedia[count].actionTypeOnMedia = MEDIA_EVENT_NONE; + count++; + } + count = 0; + if (callbackData->slideTimerInfo.actionTypeOnPage != PAGE_EVENT_INTERNAL_MEDIA) { + /* If it is not an internal media timer expiry, then the loop should start from 0 */ + count = 0; + value = 0; + } else { + /* else the loop may start from the index pointed to by elementIdx. */ + count = callbackData->elementIdx; + value = callbackData->slideTimerInfo.mediaTimerDur[callbackData->elementIdx][0]; + } + + while (count < mediaCnt * 2) { + if (callbackData->slideTimerInfo.mediaTimerDur[count][2] == MEDIA_EVENT_NONE) { + break; + } else { + /*only MEDIA_EVENT_BEGIN will be set to timerDatamedia, because begin = 0, dur and end = -1*/ + if (callbackData->slideTimerInfo.mediaTimerDur[count][0] != MSG_MMS_SMIL_TIMER_DUR_INDEFINITE) { + if (callbackData->slideTimerInfo.mediaTimerDur[count][0] == value) { + callbackData->curSlideParam->timerDataMedia[mediaIdxCnt].mediaIdx = callbackData->slideTimerInfo.mediaTimerDur[count][1]; + callbackData->curSlideParam->timerDataMedia[mediaIdxCnt].actionTypeOnMedia = callbackData->slideTimerInfo.mediaTimerDur[count][2]; + count++; + mediaIdxCnt++; + } else if (count == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "count = %d, value = %d", count, value); + timerDuration = callbackData->slideTimerInfo.mediaTimerDur[count][0]; + break; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "count2 = %d, value = %d", count, value); + timerDuration = (callbackData->slideTimerInfo.mediaTimerDur[count][0]) - (callbackData->slideTimerInfo.mediaTimerDur[count-1][0]); + break; + } + } else { + count++; + } + } + } + + if ((count < (mediaCnt * 2)) && (callbackData->slideTimerInfo.mediaTimerDur[count][2] != MEDIA_EVENT_NONE)) + callbackData->elementIdx = count; + + return timerDuration; +} + + +static void __msg_smil_event_mgr_check_media_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam->singleSlideInfo == NULL); + + int mediaIdx = 0; + int mediaCnt = 0; + int pageCnt = 0; + + /*Get contentMgr */ + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle); + + /*Get page list handler of current page of callbackData*/ + msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle); + pageCnt = msg_list_length(pagelist_info); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, "page list is null, no pages in current message"); + + /*Get page handler */ + msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, callbackData->curSlideParam->singleSlideInfo->pageIdx); + if (page_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed in getting page(%d)", callbackData->curSlideParam->singleSlideInfo->pageIdx); + return; + } + + /*Get media list handler */ + msg_list_handle_t medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info); + mediaCnt = msg_list_length(medialist_info); + + while (mediaIdx < mediaCnt) { + int mediaType = 0; + msg_struct_t media_info = (msg_struct_t)msg_list_nth_data(medialist_info, mediaIdx); + msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + + if (mediaType == MMS_SMIL_MEDIA_VIDEO) { + callbackData->curSlideParam->isVideoMedia = TRUE; + } else if (mediaType == MMS_SMIL_MEDIA_INVALID) { /*unsupported contents*/ + callbackData->curSlideParam->isUnsupportedContent = TRUE; + } + mediaIdx++; + } + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "callbackData->curSlideParam->isVideoMedia = %d", callbackData->curSlideParam->isVideoMedia); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "callbackData->curSlideParam->isUnsupportedContent = %d", callbackData->curSlideParam->isUnsupportedContent); +} + + +static void __msg_smil_event_mgr_set_media_time_info(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_TIMER_CALLBACK_DATA_S *callbackData) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, callbackData->curSlideParam->singleSlideInfo == NULL); + + int pageCnt = 0; + int count = 0; + int holder = 0; + int subCount = 0; + int swapCount = 0; + int mediaCnt = 0; + + /*Get contentMgr */ + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle); + + /*Get page list handler of current page of callbackData*/ + msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle); + pageCnt = msg_list_length(pagelist_info) ; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pageCnt== 0, "page count is 0, no pages in current message"); + + /*Get page handler */ + msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, callbackData->curSlideParam->singleSlideInfo->pageIdx); + + /*Get media list handler */ + msg_list_handle_t medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info); + int len = msg_list_length(medialist_info); + + mediaCnt = len * 2;/* 2 is multiplied considering that at max for every media we may have two timers- 1. Begin, 2. End. */ + + memset(callbackData->slideTimerInfo.mediaTimerDur, 0, (MSG_MMS_SMIL_MAX_TIMER_IDX * MSG_MMS_SMIL_PAGE_MEDIA_IDX_ACTION) * sizeof(int)); + /*Populate Media Timer Info into the slideTimerInfo Array*/ + while (count < mediaCnt) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "count = %d, mediaCnt = %d", count, mediaCnt); + int mediaType = 0; + int timeBegin; + int timeEnd; + msg_struct_t media_info = (msg_struct_t)msg_list_nth_data(medialist_info, count/2); + msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "media type = %d", mediaType); + + __msg_smil_event_mgr_change_media_time(media_info, mediaType); + + /*Media Index in the array will be filled as 0,1,2,3*/ + if (mediaType == MMS_SMIL_MEDIA_TEXT) { + msg_struct_t sText; + msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_TEXT_HND, &sText); + + msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_BEGIN_INT, &timeBegin); + callbackData->slideTimerInfo.mediaTimerDur[count][0] = timeBegin; + callbackData->slideTimerInfo.mediaTimerDur[count][1] = count / 2;/*This division by 2 is done to keep the media count value in the array appropriate*/ + callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_BEGIN; + + count++; + + msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_END_INT, &timeEnd); + callbackData->slideTimerInfo.mediaTimerDur[count][0] = timeEnd; + callbackData->slideTimerInfo.mediaTimerDur[count][1] = (count - 1) / 2;/*This subtraction and division by 2 is done to keep the media count value in the array appropriate*/ + callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_END; + } else if (mediaType != MMS_SMIL_MEDIA_INVALID) { + msg_struct_t sAvi; + msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_AVI_HND, &sAvi); + + msg_get_int_value(sAvi, MSG_MMS_SMIL_AVI_BEGIN_INT, &timeBegin); + callbackData->slideTimerInfo.mediaTimerDur[count][0] = timeBegin; + callbackData->slideTimerInfo.mediaTimerDur[count][1] = count / 2;/*This division by 2 is done to keep the media count value in the array appropriate*/ + callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_BEGIN; + + count++; + + msg_get_int_value(sAvi, MSG_MMS_SMIL_AVI_END_INT, &timeEnd); + callbackData->slideTimerInfo.mediaTimerDur[count][0] = timeEnd; + callbackData->slideTimerInfo.mediaTimerDur[count][1] = (count - 1) / 2; /*This subtraction and division by 2 is done to keep the media count value in the array appropriate*/ + callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_END; + } else if (mediaType == MMS_SMIL_MEDIA_INVALID) { /*unsupported contents*/ + callbackData->slideTimerInfo.mediaTimerDur[count][0] = 0; + callbackData->slideTimerInfo.mediaTimerDur[count][1] = count / 2;/*This division by 2 is done to keep the media count value in the array appropriate*/ + callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_BEGIN; + + count++; + + callbackData->slideTimerInfo.mediaTimerDur[count][0] = 0; + callbackData->slideTimerInfo.mediaTimerDur[count][1] = (count - 1) / 2; /*This subtraction and division by 2 is done to keep the media count value in the array appropriate*/ + callbackData->slideTimerInfo.mediaTimerDur[count][2] = MEDIA_EVENT_END; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalide mediaType Error = %d", mediaType); + } + + count++; + } + + /*Sort timer Data*/ + count = 0; + for (count = 1 ; count < mediaCnt ; count++) { + for (subCount = 0; subCount < (mediaCnt - count); subCount++) { + if (callbackData->slideTimerInfo.mediaTimerDur[subCount][0] > callbackData->slideTimerInfo.mediaTimerDur[subCount + 1][0]) { + swapCount = 0; + while (swapCount < MSG_MMS_SMIL_PAGE_MEDIA_IDX_ACTION) { + holder = callbackData->slideTimerInfo.mediaTimerDur[subCount + 1][swapCount]; + callbackData->slideTimerInfo.mediaTimerDur[subCount + 1][swapCount] = callbackData->slideTimerInfo.mediaTimerDur[subCount][swapCount]; + callbackData->slideTimerInfo.mediaTimerDur[subCount][swapCount] = holder; + swapCount++; + } + } + } + } +} + + +static void __msg_smil_event_mgr_set_page_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_SLIDE_INFO_S *pageData) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, pageData == NULL); + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL); + int duration = 0 ; + int end = 0; + int pageCnt = 0; + + /*Get struct handle of current page */ + msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle); + pageCnt = msg_list_length(pagelist_info); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, "page count is 0, no pages in current message"); + + /*Get page*/ + msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, pageData->pageIdx); + + /*Get page nDur */ + msg_get_int_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT, &duration); + + if (duration > 0) { + msg_set_int_value(page_info, MSG_MMS_PAGE_END_TIME_INT, duration); + } else { + /* Assigining Default Value */ + msg_set_int_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT, MSG_MMS_SMIL_TIMER_DUR_INDEFINITE); + msg_set_int_value(page_info, MSG_MMS_PAGE_END_TIME_INT, MSG_MMS_SMIL_TIMER_DUR_INDEFINITE); + } + + msg_get_int_value(page_info, MSG_MMS_PAGE_PAGE_DURATION_INT, &duration); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PAGE----nDur = %d", duration); + + msg_get_int_value(page_info, MSG_MMS_PAGE_END_TIME_INT, &end); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PAGE----nEnd = %d", end); +} + + +static void __msg_smil_event_mgr_change_media_time(msg_struct_t media_info, MmsSmilMediaType mediaType) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, media_info == NULL); + int timeBegin = 0; + int timeEnd = 0; + int timeDur = 0; + +#ifdef SMIL_MEDIA_TIMER + /*get media time*/ + switch (mediaType) { + case MMS_SMIL_MEDIA_TEXT: + case MMS_SMIL_MEDIA_IMG: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Inside TXT/IMG Case"); + msg_struct_t sText; + msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_TEXT_HND, (void**)&sText); + msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_BEGIN_INT, &timeBegin); + msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_END_INT, &timeEnd); + msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_DURTIME_INT, &timeDur); + + if (timeDur <= 0) { + timeDur = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE; + } + break; + case MMS_SMIL_MEDIA_AUDIO: + case MMS_SMIL_MEDIA_VIDEO: + case MMS_SMIL_MEDIA_ANIMATE: + case MMS_SMIL_MEDIA_IMG_OR_VIDEO: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Inside AUDIO/VIDEO/ANIMATE Case"); + msg_struct_t sAvi; + msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_AVI_HND, (void**)&sAvi); + msg_get_int_value(sAvi, MSG_MMS_SMIL_AVI_BEGIN_INT, &timeBegin); + msg_get_int_value(sAvi, MSG_MMS_SMIL_AVI_END_INT, &timeEnd); + msg_get_int_value(sAvi, MSG_MMS_SMIL_AVI_DURTIME_INT, &timeDur); + + /* Calculating media Duration if nDurTime is not specified */ + if (!timeDur) + timeDur = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE; + break; + default: + break; + } + + /*change media time*/ + if ((timeBegin > 0) && (timeEnd > 0)) { + if (timeDur > 0) { + int tempDur = 0; + /* If End time as well as Duration is available then consider the smallest of them. */ + tempDur = timeEnd - timeBegin; + tempDur = _msg_smil_util_find_smallest(tempDur, timeDur); + timeEnd = timeBegin + tempDur; + timeDur = tempDur; + } else { + timeDur = timeEnd - timeBegin; + } + } else if ((timeBegin > 0) && (timeDur > 0)) { + timeEnd = timeBegin + timeDur; + } else if ((timeEnd > 0) && (timeDur > 0)) { + timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN; + timeDur = _msg_smil_util_find_smallest(timeDur, timeEnd); + timeEnd = timeBegin + timeDur; + } else if (timeDur > 0) { + timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN; + timeEnd = timeDur; + } else if (timeBegin > 0) { + /*set media timerBegin as 0. Media will be display at first time*/ + timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN; + timeDur = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE; + timeEnd = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE; + } else if (timeEnd > 0) { + timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN; + timeDur = timeEnd; + } else { + timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN; + timeDur = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE; + timeEnd = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE; + } +#else + /*set begin of media as 0, begin time is important */ + timeBegin = MSG_MMS_SMIL_TIMER_DEFAULT_BEGIN; + timeDur = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE; + timeEnd = MSG_MMS_SMIL_TIMER_DUR_INDEFINITE; +#endif + msg_struct_t sText; + msg_struct_t sAvi; + + /*set changed media time*/ + switch (mediaType) { + case MMS_SMIL_MEDIA_TEXT: + msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_TEXT_HND, &sText); + msg_set_int_value(sText, MSG_MMS_SMIL_TEXT_BEGIN_INT, timeBegin); + msg_set_int_value(sText, MSG_MMS_SMIL_TEXT_END_INT, timeEnd); + msg_set_int_value(sText, MSG_MMS_SMIL_TEXT_DURTIME_INT, timeDur); + break; + case MMS_SMIL_MEDIA_IMG: + case MMS_SMIL_MEDIA_AUDIO: + case MMS_SMIL_MEDIA_VIDEO: + case MMS_SMIL_MEDIA_ANIMATE: + case MMS_SMIL_MEDIA_IMG_OR_VIDEO: + msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_AVI_HND, &sAvi); + msg_set_int_value(sAvi, MSG_MMS_SMIL_AVI_BEGIN_INT, timeBegin); + msg_set_int_value(sAvi, MSG_MMS_SMIL_AVI_END_INT, timeEnd); + msg_set_int_value(sAvi, MSG_MMS_SMIL_AVI_DURTIME_INT, timeDur); + break; + default: + break; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Media timeBegin = %d", timeBegin); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Media timeDur = %d", timeDur); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Media timeEnd = %d", timeEnd); +} + + +MSG_SMIL_ERROR_E _msg_smil_event_mgr_move_to_next_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + int slideIdx = 0; + MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN; + SMIL_SLIDE_INFO_S *singleSlideInfo = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle); + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilEvntMgrHndle->smilhandle); + + if (singleSlideInfo != NULL) { + /*Call the Event Manager to Stop the timer.*/ + if (_msg_smil_cont_mgr_get_cur_slide_status(smilContMgrHndle) != PLAYER_STATUS_PLAY_END) { + err = _msg_smil_event_mgr_stop_slide(smilEvntMgrHndle); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_NEXT_SLIDE"); + return err; + } + } + + /*Incrementing the slide index in order to move to the next slide*/ + slideIdx = singleSlideInfo->pageIdx + 1; + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_NEXT); + _msg_smil_event_mgr_set_is_video_media(smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_unsupported_content(smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_invalid_video_ro(smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_video_endofstream(smilEvntMgrHndle, FALSE); + } else { + _msg_smil_event_mgr_set_page_action_type(smilEvntMgrHndle, PAGE_EVENT_PLAY); + } + + err = _msg_smil_event_mgr_play_slide(smilEvntMgrHndle, slideIdx); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed %d", err); + return err; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return MSG_SMIL_SUCCESS; +} + + +MSG_BOOL _msg_smil_event_mgr_is_slide_active(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + return smilEvntMgrHndle->slideTimerCbData->curSlideParam->singleSlideInfo ? TRUE : FALSE; +} + + +SMIL_TIMER_CALLBACK_DATA_S *_msg_smil_event_mgr_get_timer_cb_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, NULL); + + return smilEvntMgrHndle->slideTimerCbData; +} + + +SMIL_SLIDE_EVENT_PARAM_S *_msg_smil_event_mgr_get_slide_event_param_data(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, NULL); + + return smilEvntMgrHndle->slideTimerCbData->curSlideParam; +} + + +double _msg_smil_event_mgr_get_slide_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, MSG_MMS_SMIL_MEDIA_DEFAULT_VALUE); + + return smilEvntMgrHndle->slideTimerCbData->curSlideParam->timerDur; +} + + +MSG_BOOL _msg_smil_event_mgr_set_slide_time(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, double duration) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + smilEvntMgrHndle->slideTimerCbData->curSlideParam->timerDur = duration; + return TRUE; +} + + +SMIL_PLAYER_PAGE_EVENT_E _msg_smil_event_mgr_get_page_action_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + + return smilEvntMgrHndle->slideTimerCbData->slideTimerInfo.actionTypeOnPage; +} + + +MSG_BOOL _msg_smil_event_mgr_set_page_action_type(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_PLAYER_PAGE_EVENT_E page_event) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + + smilEvntMgrHndle->slideTimerCbData->slideTimerInfo.actionTypeOnPage = page_event; + return TRUE; +} + + +SMIL_SLIDE_INFO_S *_msg_smil_event_mgr_get_current_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, NULL); + + return smilEvntMgrHndle->slideTimerCbData->curSlideParam->singleSlideInfo; +} + + +MSG_BOOL _msg_smil_event_mgr_set_current_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_SLIDE_INFO_S *singleSlide) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + smilEvntMgrHndle->slideTimerCbData->curSlideParam->singleSlideInfo = singleSlide; + return TRUE; +} + + +MSG_BOOL _msg_smil_event_mgr_get_video_endofstream(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + return smilEvntMgrHndle->slideTimerCbData->curSlideParam->iseos; +} + + +MSG_BOOL _msg_smil_event_mgr_set_video_endofstream(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL iseos) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + smilEvntMgrHndle->slideTimerCbData->curSlideParam->iseos = iseos; + return TRUE; +} + + +MSG_BOOL _msg_smil_event_mgr_get_is_video_media(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + return smilEvntMgrHndle->slideTimerCbData->curSlideParam->isVideoMedia; +} + + +MSG_BOOL _msg_smil_event_mgr_set_is_video_media(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isvideo) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + smilEvntMgrHndle->slideTimerCbData->curSlideParam->isVideoMedia = isvideo; + return TRUE; +} + + +MSG_BOOL _msg_smil_event_mgr_get_unsupported_content(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + return smilEvntMgrHndle->slideTimerCbData->curSlideParam->isUnsupportedContent; +} + + +MSG_BOOL _msg_smil_event_mgr_set_unsupported_content(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isunsupported) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + smilEvntMgrHndle->slideTimerCbData->curSlideParam->isUnsupportedContent = isunsupported; + return TRUE; +} + + +MSG_BOOL _msg_smil_event_mgr_get_invalid_video_ro(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + return smilEvntMgrHndle->slideTimerCbData->curSlideParam->isVideoRoInvalid; +} + + +MSG_BOOL _msg_smil_event_mgr_set_invalid_video_ro(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL isinvalid_ro) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + smilEvntMgrHndle->slideTimerCbData->curSlideParam->isVideoRoInvalid = isinvalid_ro; + return TRUE; +} + + +MSG_BOOL _msg_smil_event_mgr_set_last_slide(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, MSG_BOOL islast_slide) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + smilEvntMgrHndle->slideTimerCbData->curSlideParam->isLastSlide = islast_slide; + smilEvntMgrHndle->slideTimerCbData->curSlideParam->clientCbParam.isLastSlide = islast_slide; + return TRUE; +} + + +MSG_BOOL _msg_smil_event_mgr_set_render_event(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, SMIL_PLAYER_RENDER_EVENT_E render_event) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + smilEvntMgrHndle->slideTimerCbData->curSlideParam->renderEvent = render_event; + smilEvntMgrHndle->slideTimerCbData->curSlideParam->clientCbParam.clientCbEvent = render_event; + return TRUE; +} + + +MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_idx(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int slideIdx) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + smilEvntMgrHndle->slideTimerCbData->curSlideParam->clientCbParam.pageIdx = slideIdx; + return TRUE; +} + + +MSG_BOOL __msg_smil_event_mgr_set_client_cb_page_count(SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle, int pageCnt) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilEvntMgrHndle->slideTimerCbData->curSlideParam == NULL, FALSE); + + smilEvntMgrHndle->slideTimerCbData->curSlideParam->clientCbParam.pageCnt = pageCnt; + return TRUE; +} + diff --git a/viewer/smil-player/src/msg-smil-media-render.c b/viewer/smil-player/src/msg-smil-media-render.c new file mode 100755 index 0000000..2855d96 --- /dev/null +++ b/viewer/smil-player/src/msg-smil-media-render.c @@ -0,0 +1,1411 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-types.h" +#include "msg-smil-player.h" +#include "msg-smil-render.h" +#include "msg-smil-util.h" +#include "msg-ui-viewer-drm-utility.h" +#include "msg-ui-image-resource.h" +#include "msg-ui-viewer-main.h" +#include "msg-ui-viewer-utility.h" +#include "msg-ui-common-utility.h" + +#include <mm_error.h> +#include <mm_player.h> +#include <mm_session.h> +#include <utilX.h> +#include <Ecore_X.h> +#include <E_DBus.h> +/*For Multimedia element width, height.*/ +#include "mm_file.h" + +/*for direct video displaying*/ +#include <mm_player_internal.h> + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ + /*smil player sound and video related functions*/ +static MSG_BOOL __msg_smil_render_is_player_active(void); +static MSG_BOOL __msg_smil_render_player_mgr_create(void *data); +static MSG_BOOL __msg_smil_render_player_mgr_destroy(void *data); +static MSG_BOOL __msg_smil_render_player_mgr_play(void *data); +static MSG_BOOL __msg_smil_render_player_mgr_stop(void *data); +static MSG_BOOL __msg_smil_render_player_mgr_realize(void *data); +static MSG_BOOL __msg_smil_render_player_mgr_unrealize(void); +static MSG_BOOL __msg_smil_render_player_mgr_pause(void *data); +static MSG_BOOL __msg_smil_render_player_mgr_resume(void *data); +static MSG_BOOL __msg_smil_render_player_mgr_mute(void *data); +static MSG_BOOL __msg_smil_render_player_mgr_set_msg_cb(MMMessageCallback cb, void *user_data); +static MSG_BOOL __msg_smil_render_player_mgr_set_video_stream_cb(void *cb, void *user_data); +static MSG_BOOL __msg_smil_render_player_mgr_set_attribute(void *data, const char *path, int mediaType); + +static MSG_BOOL __msg_smil_render_check_file_validity(SMIL_RENDERER_DATA_S *viewerRenderData, const char *file_path); +static MSG_BOOL __msg_smil_render_get_video_size(SMIL_RENDERER_DATA_S *viewerRenderData, const char *file_path, int *width, int *height); +static void __msg_smil_render_show_image_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_RENDER_IMAGE_TYPE_E imageType); +static MSG_BOOL __msg_smil_render_play_audio_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path); +static MSG_BOOL __msg_smil_render_play_video_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path); +static MSG_BOOL __msg_smil_render_get_resized_content_size(void *data, int content_w, int content_h, int *w, int *h); +static void __msg_smil_render_create_video_image(void *data); +static void __msg_smil_render_start_video_timer(void *data); +/*idle functions*/ +static Eina_Bool __msg_smil_render_player_mgr_get_content_duration(void *data); +static Eina_Bool __msg_smil_render_end_of_stream(void *data); +static Eina_Bool __msg_smil_render_resize_mm_video(void *data); +static Eina_Bool __msg_smil_render_update_video_screen(void *data); + +/*cb functions*/ +static int __msg_smil_render_msg_cb(int msg_type, void *msg_param, void *user_param); +static int __msg_smil_render_video_stream_cb(void *stream, int stream_size, void *user_param, int width, int height); + +/*================================================================================================ + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +static MMHandleType _player = 0; + +static MSG_BOOL __msg_smil_render_is_player_active(void) +{ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "_player : %x", _player); + return _player ? TRUE : FALSE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_create(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + int err = MM_ERROR_NONE; + + if (__msg_smil_render_is_player_active()) + return FALSE; + + if ((err = mm_player_create(&_player)) != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_create is failed err = %x", err); + return FALSE; + } + viewerRenderData->player_state = MEDIA_PLAYER_STATE_INIT; + + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_realize(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + int err = MM_ERROR_NONE; + + if (!__msg_smil_render_is_player_active()) + return FALSE; + + if ((err = mm_player_realize(_player)) != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_realize Error = %x", err); + return FALSE; + } + viewerRenderData->player_state = MEDIA_PLAYER_STATE_READY; + + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_unrealize(void) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + if (!__msg_smil_render_is_player_active()) + return FALSE; + + if (mm_player_unrealize(_player) != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_unrealize is failed"); + return FALSE; + } + + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_destroy(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + + if (!__msg_smil_render_is_player_active()) + return FALSE; + + if (mm_player_destroy(_player) != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_destroy is failed"); + return FALSE; + } + _player = 0; + viewerRenderData->player_state = MEDIA_PLAYER_STATE_NONE; + + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_play(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + int err = MM_ERROR_NONE; + + if (!__msg_smil_render_is_player_active()) + return FALSE; + + if ((err = mm_player_start(_player)) != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_start is failed err = 0x%x", err); + return FALSE; + } + viewerRenderData->player_state = MEDIA_PLAYER_STATE_PLAYING; + + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_pause(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + int err = MM_ERROR_NONE; + + if (!__msg_smil_render_is_player_active()) + return FALSE; + + if ((err = mm_player_pause(_player)) != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_pause is failed err = 0x%x", err); + return FALSE; + } + viewerRenderData->player_state = MEDIA_PLAYER_STATE_PAUSED; + + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_resume(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + int err = MM_ERROR_NONE; + + if (!__msg_smil_render_is_player_active()) + return FALSE; + + if ((err = mm_player_resume(_player)) != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_resume is failed err = 0x%x", err); + return FALSE; + } + viewerRenderData->player_state = MEDIA_PLAYER_STATE_PLAYING; + + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_mute(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + int err = MM_ERROR_NONE; + + if (!__msg_smil_render_is_player_active()) + return FALSE; + + if ((err = mm_player_set_mute(_player, TRUE)) != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_mute is failed err = 0x%x", err); + return FALSE; + } + + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_stop(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + + /*stop media player*/ + if (__msg_smil_render_is_player_active() && viewerRenderData->player_state == MEDIA_PLAYER_STATE_PLAYING) { + int err = MM_ERROR_NONE; + if ((err = mm_player_stop(_player)) != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_stop is failed err = 0x%x", err); + return FALSE; + } + } + viewerRenderData->player_state = MEDIA_PLAYER_STATE_STOP; + + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_set_msg_cb(MMMessageCallback cb, void *user_data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + int err = MM_ERROR_NONE; + + if (!__msg_smil_render_is_player_active()) + return FALSE; + + if ((err = mm_player_set_message_callback(_player, cb, user_data)) != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_message_callback is failed err = 0x%x", err); + return FALSE; + } + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_set_video_stream_cb(void *cb, void *user_data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + int err = MM_ERROR_NONE; + + if (!__msg_smil_render_is_player_active()) + return FALSE; + + if ((err = mm_player_set_video_stream_callback(_player, cb, user_data)) != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_video_stream_callback is failed err = 0x%x", err); + return FALSE; + } + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_player_mgr_set_attribute(void *data, const char *path, int mediaType) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + int err = MM_ERROR_NONE; + char *perr_name = NULL; + int resized_width = 0; + int resized_height = 0; + int path_len = strlen(path); + + if (!__msg_smil_render_is_player_active()) + return FALSE; + + /*avsysaudiosink volume table setting*/ + err = mm_player_set_attribute(_player, &perr_name, + "sound_volume_type", MM_SOUND_VOLUME_TYPE_MEDIA, + "sound_priority", MM_SOUND_PRIORITY_1, + "sound_fadeup", 0, + "sound_route", MM_AUDIOROUTE_PLAYBACK_NORMAL, + NULL); + if (err != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name); + free(perr_name); + return FALSE; + } + + err = mm_player_set_attribute(_player, &perr_name, + "profile_uri", path, path_len, + NULL); + if (err != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name); + free(perr_name); + return FALSE; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mediaType = %d", mediaType); + if (mediaType == MMS_SMIL_MEDIA_VIDEO) { + err = mm_player_set_attribute(_player, &perr_name, + "display_rotation", MM_DISPLAY_ROTATION_NONE, + NULL); + if (err != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name); + free(perr_name); + return FALSE; + } + + if (!__msg_smil_render_get_resized_content_size(viewerRenderData, viewerRenderData->video_width, viewerRenderData->video_height, &resized_width, &resized_height)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_get_resized_content_size is failed"); + resized_width = viewerRenderData->viewer_width; + resized_height = viewerRenderData->viewer_landscape_height; + } + + err = mm_player_set_attribute(_player, &perr_name, + "display_width", resized_width, + "display_height", resized_height, + NULL); + if (err != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x, perr_name = (%s)", err, perr_name); + free(perr_name); + return FALSE; + } + } + + return TRUE; +} + + +static Eina_Bool __msg_smil_render_player_mgr_get_content_duration(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, ECORE_CALLBACK_CANCEL); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + int duration = 0; + char *perr_name = NULL; + int err = MM_ERROR_NONE; + + if (!__msg_smil_render_is_player_active()) { + viewerRenderData->video_duration_idle = NULL; + return ECORE_CALLBACK_CANCEL; + } + + err = mm_player_get_attribute(_player, &perr_name, "content_duration", &duration, NULL); + if (err != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_get_attribute is failed err = %x, pErrName = (%s)", err, perr_name); + if (perr_name) + free(perr_name); + } + + viewerRenderData->video_duration = duration; + viewerRenderData->video_duration_idle = NULL; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "video content duration = %d", viewerRenderData->video_duration); + + return ECORE_CALLBACK_CANCEL; +} + + +MSG_BOOL _msg_smil_render_pause(void *data, int mediaType) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + + if (viewerRenderData->display_drm_consume.consume_handle) + msg_ui_viewer_consume_ro_pause(&viewerRenderData->display_drm_consume); + + if (viewerRenderData->play_drm_consume.consume_handle) + msg_ui_viewer_consume_ro_pause(&viewerRenderData->play_drm_consume); + + if (viewerRenderData->video_update_timer) + ecore_timer_freeze(viewerRenderData->video_update_timer); + + if (viewerRenderData->insert_image && elm_icon_animated_available_get(viewerRenderData->insert_image)) + elm_icon_animated_play_set(viewerRenderData->insert_image, EINA_FALSE); + + /* enable copy and paste popup */ + elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_FALSE); + elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_FALSE); + + if (mediaType == MMS_SMIL_MEDIA_VIDEO || mediaType == MMS_SMIL_MEDIA_AUDIO) { + SMIL_HANDLER_S *smil_handler = (SMIL_HANDLER_S *)viewerRenderData->smilhandle; + if (smil_handler->smilEvntMgrHndle->slideTimerCbData->curSlideParam->iseos == FALSE) + return __msg_smil_render_player_mgr_pause(viewerRenderData); + } + + return TRUE; +} + + +MSG_BOOL _msg_smil_render_resume(void *data, int mediaType) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + + if (viewerRenderData->display_drm_consume.consume_handle) + msg_ui_viewer_consume_ro_resume(&viewerRenderData->display_drm_consume); + + if (viewerRenderData->play_drm_consume.consume_handle) + msg_ui_viewer_consume_ro_resume(&viewerRenderData->play_drm_consume); + + if (viewerRenderData->video_update_timer) + ecore_timer_thaw(viewerRenderData->video_update_timer); + + if (viewerRenderData->insert_image && elm_icon_animated_available_get(viewerRenderData->insert_image)) + elm_icon_animated_play_set(viewerRenderData->insert_image, EINA_TRUE); + + /* disable copy and paste popup */ + elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE); + elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE); + elm_entry_select_none(viewerRenderData->viewer_body); + + if (mediaType == MMS_SMIL_MEDIA_VIDEO || mediaType == MMS_SMIL_MEDIA_AUDIO) { + SMIL_HANDLER_S *smil_handler = (SMIL_HANDLER_S *)viewerRenderData->smilhandle; + if (_msg_smil_event_mgr_get_video_endofstream(smil_handler->smilEvntMgrHndle) == FALSE) + return __msg_smil_render_player_mgr_resume(viewerRenderData); + } + + return TRUE; +} + + +MSG_BOOL _msg_smil_render_stop_playing_file(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + + if (viewerRenderData->display_drm_consume.consume_handle) { + msg_ui_viewer_consume_ro_stop(&viewerRenderData->display_drm_consume); + viewerRenderData->display_drm_consume.consume_handle = NULL; + } + + if (viewerRenderData->play_drm_consume.consume_handle) { + msg_ui_viewer_consume_ro_stop(&viewerRenderData->play_drm_consume); + viewerRenderData->play_drm_consume.consume_handle = NULL; + } + + if (viewerRenderData->video_update_timer) { + ecore_timer_del(viewerRenderData->video_update_timer); + viewerRenderData->video_update_timer = NULL; + } + + if (viewerRenderData->insert_image && elm_icon_animated_available_get(viewerRenderData->insert_image)) + elm_icon_animated_play_set(viewerRenderData->insert_image, EINA_FALSE); + + /* enable copy and paste popup */ + elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_FALSE); + elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_FALSE); + + __msg_smil_render_player_mgr_stop(data); + __msg_smil_render_player_mgr_unrealize(); + __msg_smil_render_player_mgr_destroy(data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + + +static Eina_Bool __msg_smil_render_update_video_screen(void *data) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + + if (viewerRenderData->video_image) { + if (viewerRenderData->video_image_buffer) { + int video_width = 0; + int video_height = 0; + evas_object_image_size_get(viewerRenderData->video_image, &video_width, &video_height); + evas_object_image_data_update_add(viewerRenderData->video_image, 0, 0, video_width, video_height); + } + return EINA_TRUE; + } + + viewerRenderData->video_update_timer = NULL; + return EINA_FALSE; +} + + +static void __msg_smil_render_start_video_timer(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + + if (viewerRenderData->video_update_timer == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "add timer"); + viewerRenderData->video_update_timer = ecore_timer_add(0.03, __msg_smil_render_update_video_screen, viewerRenderData); /* more than 30 frames/sec*/ + } else { + ecore_timer_thaw(viewerRenderData->video_update_timer); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ecore_timer_thaw"); + } + + return; +} + + +static Eina_Bool __msg_smil_render_resize_mm_video(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, ECORE_CALLBACK_CANCEL); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + + if (viewerRenderData->video_image) { + int video_width = 0; + int video_height = 0; + int err = MM_ERROR_NONE; + char *perr_name = NULL; + + evas_object_image_size_get(viewerRenderData->video_image, &video_width, &video_height); + err = mm_player_set_attribute(_player, &perr_name, + "display_width", video_width, + "display_height", video_height, + NULL); + if (err != MM_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_player_set_attribute is failed. err = %x", err); + if (perr_name) + free(perr_name); + + viewerRenderData->video_resize_idle = NULL; + return ECORE_CALLBACK_CANCEL; + } + viewerRenderData->video_image_buffer = NULL; + + if (!viewerRenderData->video_image_buffer) { + viewerRenderData->video_image_buffer = evas_object_image_data_get(viewerRenderData->video_image, EINA_TRUE); + evas_object_image_data_set(viewerRenderData->video_image, viewerRenderData->video_image_buffer); + __msg_smil_render_update_video_screen(viewerRenderData); + } + } + + viewerRenderData->video_resize_idle = NULL; + return ECORE_CALLBACK_CANCEL; +} + + +static int __msg_smil_render_video_stream_cb(void *stream, int stream_size, void *user_param, int width, int height) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, stream == NULL || stream_size <= 0, MSG_UI_RET_ERR); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, user_param == NULL, MSG_UI_RET_ERR); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)user_param; + int video_width = 0; + int video_height = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "stream_size = %d, width = %d, height = %d", stream_size, width, height); + evas_object_image_size_get(viewerRenderData->video_image, &video_width, &video_height); + + if (viewerRenderData->is_skip_frame) { /*skip 1 frame*/ + viewerRenderData->is_skip_frame = FALSE; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Skip 1 frame"); + return MSG_UI_RET_SUCCESS; + } + + if (width != video_width || height != video_height) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "size is different video_width = %d, video height = %d", video_width, video_height); + if (viewerRenderData->video_resize_idle) { + ecore_idler_del(viewerRenderData->video_resize_idle); + viewerRenderData->video_resize_idle = NULL; + } + viewerRenderData->video_resize_idle = ecore_idler_add(__msg_smil_render_resize_mm_video, (void *)viewerRenderData); + return MSG_UI_RET_SUCCESS; + } + + if (viewerRenderData->video_image_buffer == NULL) { + viewerRenderData->video_image_buffer = evas_object_image_data_get(viewerRenderData->video_image, EINA_TRUE); + evas_object_image_data_set(viewerRenderData->video_image, viewerRenderData->video_image_buffer); + } + + /*update evas image buffer*/ + if (viewerRenderData->video_image_buffer) + memcpy(viewerRenderData->video_image_buffer, stream, stream_size); + + return MSG_UI_RET_SUCCESS; +} + + +static Eina_Bool __msg_smil_render_end_of_stream(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, ECORE_CALLBACK_CANCEL); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + SMIL_SLIDE_INFO_S *current_slide_data = NULL; + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle); + SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = _msg_smil_get_event_mgr(viewerRenderData->smilhandle); + + current_slide_data = _msg_smil_cont_mgr_get_cur_slide(smilContMgrHndle); + _msg_smil_event_mgr_set_video_endofstream(smilEvntMgrHndle, TRUE); + _msg_smil_render_stop_playing_file(data); + + if (current_slide_data->pageInfo && current_slide_data->pageInfo->hasVideo) { + _msg_smil_event_mgr_set_is_video_media(smilEvntMgrHndle, FALSE); + viewerRenderData->video_duration = 0; + } + + viewerRenderData->video_eos_idle = NULL; + return ECORE_CALLBACK_CANCEL; +} + + +static int __msg_smil_render_msg_cb(int msg_type, void *msg_param, void *user_param) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, user_param == NULL, MSG_UI_RET_ERR); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)user_param; + MMMessageParamType *param = (MMMessageParamType *)msg_param; + + if (!__msg_smil_render_is_player_active()) + return MSG_UI_RET_ERR; + + switch (msg_type) { + case MM_MESSAGE_BEGIN_OF_STREAM: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_BEGIN_OF_STREAM"); + { + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle); + SMIL_SLIDE_INFO_S *current_slide_data = _msg_smil_cont_mgr_get_cur_slide(smilContMgrHndle); + + if (current_slide_data->pageInfo && current_slide_data->pageInfo->hasVideo) { + if (viewerRenderData->video_duration_idle) { + ecore_idler_del(viewerRenderData->video_duration_idle); + viewerRenderData->video_duration_idle = NULL; + } + viewerRenderData->video_duration_idle = ecore_idler_add(__msg_smil_render_player_mgr_get_content_duration, (void *)viewerRenderData); + } + viewerRenderData->is_skip_frame = TRUE; + } + break; + + case MM_MESSAGE_ERROR: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_ERROR"); + break; + + case MM_MESSAGE_WARNING: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_WARNING"); + break; + + case MM_MESSAGE_END_OF_STREAM: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_END_OF_STREAM"); + if (viewerRenderData->video_eos_idle) { + ecore_idler_del(viewerRenderData->video_eos_idle); + viewerRenderData->video_eos_idle = NULL; + } + viewerRenderData->video_eos_idle = ecore_idler_add(__msg_smil_render_end_of_stream, (void *)viewerRenderData); + break; + + case MM_MESSAGE_STATE_CHANGED: + if (param) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_STATE_CHANGED with[%d]", param->state.current); + switch (param->state.current) { + case MM_PLAYER_STATE_NONE: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [NONE]"); + break; + case MM_PLAYER_STATE_READY: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [READY]"); + break; + case MM_PLAYER_STATE_PLAYING: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [PLAYING]"); + { + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle); + SMIL_SLIDE_INFO_S *current_slide_data = _msg_smil_cont_mgr_get_cur_slide(smilContMgrHndle); + + if (current_slide_data->pageInfo && current_slide_data->pageInfo->hasVideo) + __msg_smil_render_start_video_timer(viewerRenderData); + } + break; + case MM_PLAYER_STATE_PAUSED: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [PAUSED]"); + break; + case MM_PLAYER_STATE_NULL: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "==> [MediaPlayerApp] Player is [NULL]"); + break; + } + } + break; + + case MM_MESSAGE_STATE_INTERRUPTED: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "receive MM_MESSAGE_STATE_INTERRUPTED"); + if (param) { + switch (param->code) { + case MM_MSG_CODE_INTERRUPTED_BY_OTHER_APP: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_ERROR_PLAYER_BT_CONNECTION"); + break; + + case MM_MSG_CODE_INTERRUPTED_BY_CALL_START: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_CALL_START"); + break; + + case MM_MSG_CODE_INTERRUPTED_BY_CALL_END: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_CALL_END"); + break; + + case MM_MSG_CODE_INTERRUPTED_BY_EARJACK_UNPLUG: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_EARJACK_UNPLUG"); + { + SMIL_HANDLER_S *smil_handler = (SMIL_HANDLER_S *)viewerRenderData->smilhandle; + SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = _msg_smil_get_event_mgr(viewerRenderData->smilhandle); + SMIL_SLIDE_EVENT_PARAM_S *curSlideParam = _msg_smil_event_mgr_get_slide_event_param_data(smilEvntMgrHndle);; + SMIL_TIMER_CALLBACK_DATA_S *timer_cb_data = _msg_smil_event_mgr_get_timer_cb_data(smilEvntMgrHndle); + + _msg_smil_player_on_slide_event_handler((void **)&smil_handler, PLAYER_EVENT_PAUSE); + if (curSlideParam && timer_cb_data) { + _msg_smil_event_mgr_set_render_event(smilEvntMgrHndle, SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE); + timer_cb_data->appSmilCb(&(curSlideParam->clientCbParam), timer_cb_data->appUserData); + } + } + break; + + case MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT"); + /*It is called when vtcall is receiving during video play*/ + break; + + case MM_MSG_CODE_INTERRUPTED_BY_ALARM_START: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_ALARM_START"); + break; + + case MM_MSG_CODE_INTERRUPTED_BY_ALARM_END: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MM_MSG_CODE_INTERRUPTED_BY_ALARM_END"); + break; + } + } + break; + + default: + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid msg_type = %d", msg_type); + return MSG_UI_RET_ERR; + } + + return MSG_UI_RET_SUCCESS; +} + + +static MSG_BOOL __msg_smil_render_play_audio_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE); + + if (__msg_smil_render_is_player_active()) + return FALSE; + + if (!__msg_smil_render_player_mgr_create((void *)viewerRenderData)) + return FALSE; + + if (!__msg_smil_render_player_mgr_set_attribute(viewerRenderData, path, MMS_SMIL_MEDIA_AUDIO)) + return FALSE; + + if (!__msg_smil_render_player_mgr_set_msg_cb(__msg_smil_render_msg_cb, (void *)viewerRenderData)) + return FALSE; + + if (!__msg_smil_render_player_mgr_realize((void *)viewerRenderData)) + return FALSE; + + if (!__msg_smil_render_player_mgr_play((void *)viewerRenderData)) { + return FALSE; + } + + /*if silent and mute mode*/ + if (viewerRenderData->ismute) { + if (!__msg_smil_render_player_mgr_mute((void *)viewerRenderData)) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_player_mgr_mute is Fail"); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + + +MSG_BOOL _msg_smil_render_show_inserted_audio(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE); + + if (msg_common_is_connected_call()) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Unable to play during call"); + return FALSE; + } + + if (!ecore_file_exists(path)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media file is not exist!"); + return FALSE; + } + + if (msg_ui_viewer_is_drm_file(path)) { + if (msg_ui_viewer_check_drm_ro_valid(path, MSG_UI_DRM_RIGHT_PLAY)) { + /*consume ro and play content*/ + if (viewerRenderData->play_drm_consume.consume_handle) { + msg_ui_viewer_consume_ro_stop(&viewerRenderData->play_drm_consume); + viewerRenderData->play_drm_consume.consume_handle = NULL; + } + + //copy drm file temporarily, because drm file is created by MF with read right and drm_svc try to open file with append mode. + char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1]= {0,}; + const char *filename = (const char *)ecore_file_file_get(path); + + snprintf(dst_path, sizeof(dst_path),"%s%s", viewerRenderData->working_path, filename); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = %s", dst_path); + + char *app_drm_path = msg_ui_viewer_util_copy_file(path, dst_path); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "app_drm_path = %s", app_drm_path); + //copy drm content to app path end + + /*play original sound(drm)*/ + if (__msg_smil_render_play_audio_file(viewerRenderData, app_drm_path) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_audio_file is failed"); + _msg_smil_render_stop_playing_file((void *)viewerRenderData); + + if (app_drm_path) { + g_free(app_drm_path); + app_drm_path = NULL; + } + + return FALSE; + } + + msg_ui_viewer_consume_ro_start(path, MSG_UI_DRM_RIGHT_PLAY, &viewerRenderData->play_drm_consume); + + if (app_drm_path) { + g_free(app_drm_path); + app_drm_path = NULL; + } + } else { /*there is no valid ro case*/ + /*display drm icon*/ + __msg_smil_render_show_image_file(viewerRenderData, MSG_VIEWER_IMAGE_DRM_ICON, VIEWER_IMAGE_TYPE_DRM_SOUND); + } + } else { + /*normal case -- no drm*/ + if (__msg_smil_render_play_audio_file(viewerRenderData, path) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_audio_file is failed"); + _msg_smil_render_stop_playing_file((void *)viewerRenderData); + return FALSE; + } + } + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + + +void _msg_smil_render_rotate_video_window(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + + viewerRenderData->main_win_rotate = elm_win_rotation_get(viewerRenderData->main_window); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "main_win_rotate = %d", viewerRenderData->main_win_rotate); +} + + +static MSG_BOOL __msg_smil_render_check_file_validity(SMIL_RENDERER_DATA_S *viewerRenderData, const char *file_path) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, file_path == NULL, FALSE); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "file_path = (%s)", file_path); + + MMHandleType content = (MMHandleType)NULL; + int err = 0; + + err = mm_file_create_content_attrs(&content, file_path); + if (err == 0) { + err = mm_file_destroy_content_attrs(content); + if (err != 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_destroy_content_attrs FAILED err = %x", err); + return FALSE; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_create_content_attrs FAILED err = %x", err); + return FALSE; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_get_video_size(SMIL_RENDERER_DATA_S *viewerRenderData, const char *file_path, int *width, int *height) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, file_path == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, width == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, height == NULL, FALSE); + MMHandleType content = (MMHandleType)NULL; + int err = 0; + char *err_msg = NULL; + MSG_BOOL iserror = FALSE; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "file_path = (%s)", file_path); + err = mm_file_create_content_attrs(&content, file_path); + + if (err == 0) { + err = mm_file_get_attrs(content, &err_msg, + MM_FILE_CONTENT_VIDEO_WIDTH, width, + MM_FILE_CONTENT_VIDEO_HEIGHT, height, + /*MM_FILE_CONTENT_VIDEO_THUMBNAIL, &thumbnail, &thumbnail_size,*/ + NULL); + if (err != 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_get_attrs FAILED err = %d", err); + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_get_attrs err_msg = %s", err_msg); + if (err_msg) { + free(err_msg); + err_msg = NULL; + } + iserror = TRUE; + } + + err = mm_file_destroy_content_attrs(content); + if (err != 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_destroy_content_attrs FAILED err = %x", err); + iserror = TRUE; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mm_file_create_content_attrs FAILED err = %x", err); + iserror = TRUE; + } + + if (iserror) + return FALSE; + + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_get_resized_content_size(void *data, int content_w, int content_h, int *w, int *h) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, w == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, h == NULL, FALSE); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + int viewer_width = viewerRenderData->viewer_width > viewerRenderData->viewer_landscape_width ? viewerRenderData->viewer_landscape_width : viewerRenderData->viewer_width; + int viewer_height = viewerRenderData->viewer_height > viewerRenderData->viewer_landscape_height ? viewerRenderData->viewer_landscape_height : viewerRenderData->viewer_height; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_width = %d, height = %d", viewer_width, viewer_height); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "content_w = %d, content_h = %d", content_w, content_h); + + /*check image size*/ + if (content_w > viewer_width) { + *w = viewer_width; + *h = content_h * viewer_width / content_w; + + if (*h > viewer_height) { + *w = content_w * viewer_height / content_h; + *h = viewer_height; + } + } else if (content_h > viewer_height) { + *w = content_w * viewer_height / content_h; + *h = viewer_height; + + if (*w > viewer_width) { + *w = viewer_width; + *h = content_h * viewer_width / content_w; + } + } else if (content_w <= viewer_width && content_h <= viewer_height) { + *w = content_w; + *h = content_h; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid case"); + *w = content_w; + *h = content_h; + } + + /*make size as even number becasue of hardware limitation*/ + if (*w % 2) + *w = *w - 1; + + if (*h % 2) + *h = *h - 1; + + /*make size as multiples of 16 because of hardware limitation, C110*/ + int remained = 0; + if ((remained = *w % 16)) + *w = *w - remained; + + if ((remained = *h % 16)) + *h = *h - remained; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Result content width = %d, height = %d", *w, *h); + return TRUE; +} + + +static void __msg_smil_render_create_video_image(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL"); + SMIL_RENDERER_DATA_S *viewerRenderData = (SMIL_RENDERER_DATA_S *)data; + Evas_Object *ic = NULL; + int resized_width = 0; + int resized_height = 0; + + if (!__msg_smil_render_get_resized_content_size(viewerRenderData, viewerRenderData->video_width, viewerRenderData->video_height, &resized_width, &resized_height)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_get_resized_content_size is failed"); + resized_width = viewerRenderData->viewer_width; + resized_height = viewerRenderData->viewer_landscape_height; + } + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Image resized_width = %d, resized_height = %d", resized_width, resized_height); + + /*create image object for video image*/ + Evas *evas = NULL; + evas = evas_object_evas_get(viewerRenderData->main_window); + ic = evas_object_image_add(evas); + viewerRenderData->video_image = ic; + + evas_object_image_colorspace_set(ic, EVAS_COLORSPACE_ARGB8888); + evas_object_image_size_set(ic, resized_width, resized_height); + evas_object_image_fill_set(ic, 0, 0, resized_width, resized_height); + evas_object_image_smooth_scale_set(ic, EINA_TRUE); + evas_object_resize(ic, resized_width, resized_height); + evas_object_move(ic, 0, 0); + evas_object_size_hint_min_set(ic, resized_width, resized_height); + + /*set video image buffer to display as black screen*/ + viewerRenderData->video_image_buffer = evas_object_image_data_get(ic, EINA_TRUE); + if (viewerRenderData->video_image_buffer) { + memset(viewerRenderData->video_image_buffer, 0, (resized_width * resized_height * 4)); + evas_object_image_data_set(ic, viewerRenderData->video_image_buffer); + } + + /*video top*/ + elm_box_pack_start(viewerRenderData->viewer_content_box, ic); + +#ifdef MSG_VIEWER_ENABLE_VIDEO_TOP_AND_BOTTOM /*Set image top as defalt region in case of video*/ + SMIL_SLIDE_INFO_S *curSlideInfo = NULL; + MSG_BOOL istexttop = FALSE; + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle); + + curSlideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, 0); + if (curSlideInfo && curSlideInfo->pageInfo) + istexttop = curSlideInfo->pageInfo->isTexttop; + + if (istexttop) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Text top message"); + elm_box_unpack(viewerRenderData->viewer_content_box, ic); + elm_box_pack_end(viewerRenderData->viewer_content_box, ic); /*Text top*/ + } else + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Image top message"); +#endif + evas_object_show(ic); +} + + +static MSG_BOOL __msg_smil_render_play_video_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE); + int video_width = 0; + int video_height = 0; + + /*get width, height size of video content*/ + if (!__msg_smil_render_get_video_size(viewerRenderData, path, &video_width, &video_height)) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_get_video_size is failed"); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "video_width = %d, video_height = %d", video_width, video_height); + if (video_width == 0 || video_height == 0) { + video_width = VIEWER_VIDEO_WIDTH; + video_height = VIEWER_VIDEO_HEIGHT; + } + + /*set original video content size.*/ + viewerRenderData->video_width = video_width; + viewerRenderData->video_height = video_height; + + /*create Evas object image for video*/ + if (!viewerRenderData->video_image) + __msg_smil_render_create_video_image(viewerRenderData); + + if (!__msg_smil_render_player_mgr_create(viewerRenderData)) + return FALSE; + + if (!__msg_smil_render_player_mgr_set_attribute(viewerRenderData, path, MMS_SMIL_MEDIA_VIDEO)) + return FALSE; + + if (!__msg_smil_render_player_mgr_set_msg_cb(__msg_smil_render_msg_cb, (void *)viewerRenderData)) + return FALSE; + + if (!__msg_smil_render_player_mgr_set_video_stream_cb(__msg_smil_render_video_stream_cb, (void *)viewerRenderData)) + return FALSE; + + if (!__msg_smil_render_player_mgr_realize((void *)viewerRenderData)) + return FALSE; + + if (!__msg_smil_render_player_mgr_play((void *)viewerRenderData)) { + return FALSE; + } + + return TRUE; +} + + +MSG_BOOL _msg_smil_render_show_inserted_video(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE); + SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = _msg_smil_get_event_mgr(viewerRenderData->smilhandle); + + if (msg_common_is_connected_call()) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Unable to play during call"); + return FALSE; + } + + if (!ecore_file_exists(path)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media file is not exist!"); + return FALSE; + } + + if (!__msg_smil_render_check_file_validity(viewerRenderData, path)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_check_file_validity is failed"); + return FALSE; + } + + _msg_smil_event_mgr_set_invalid_video_ro(smilEvntMgrHndle, FALSE); + + if (msg_ui_viewer_is_drm_file(path)) { + if (msg_ui_viewer_check_drm_ro_valid(path, MSG_UI_DRM_RIGHT_PLAY)) { + /*consume ro and play content*/ + if (viewerRenderData->play_drm_consume.consume_handle) { + msg_ui_viewer_consume_ro_stop(&viewerRenderData->play_drm_consume); + viewerRenderData->play_drm_consume.consume_handle = NULL; + } + + //copy drm file temporarily, because drm file is created by MF with read right and drm_svc try to open file with append property. + char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1]= {0,}; + const char *filename = (const char *)ecore_file_file_get(path); + + snprintf(dst_path, sizeof(dst_path),"%s%s", viewerRenderData->working_path, filename); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = %s", dst_path); + + char *app_drm_path = msg_ui_viewer_util_copy_file(path, dst_path); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "app_drm_path = %s", app_drm_path); + //copy drm content to app path end + + /*play drm video file*/ + if (__msg_smil_render_play_video_file(viewerRenderData, app_drm_path) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_video_file is failed"); + _msg_smil_render_stop_playing_file((void *)viewerRenderData); + + if (app_drm_path) { + g_free(app_drm_path); + app_drm_path = NULL; + } + + return FALSE; + } + + msg_ui_viewer_consume_ro_start(path, MSG_UI_DRM_RIGHT_PLAY, &viewerRenderData->play_drm_consume); + + if (app_drm_path) { + g_free(app_drm_path); + app_drm_path = NULL; + } + } else { /*drm, but no ro case*/ + _msg_smil_event_mgr_set_invalid_video_ro(smilEvntMgrHndle, TRUE); + /*display drm icon*/ + __msg_smil_render_show_image_file(viewerRenderData, MSG_VIEWER_IMAGE_DRM_ICON, VIEWER_IMAGE_TYPE_DRM_VIDEO); + } + } else { + /*normal case -- no drm*/ + if (__msg_smil_render_play_video_file(viewerRenderData, path) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_smil_render_play_video_file is failed"); + _msg_smil_render_stop_playing_file((void *)viewerRenderData); + return FALSE; + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + + +static void __msg_smil_render_show_image_file(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path, SMIL_RENDER_IMAGE_TYPE_E imageType) +{ + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, "viewerRenderData is NULL"); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, path == NULL, "path is NULL"); + Evas_Object *image_layout = NULL; + Evas_Object *ic = NULL; + int contnet_w = 0; + int contnet_h = 0; + int tmp_w = 0; + int tmp_h = 0; + int layout_width = viewerRenderData->viewer_width - (2 * (viewerRenderData->viewer_width * VIEWER_XPAD_RATIO)); + int layout_height = viewerRenderData->viewer_height; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "path = %s", path); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "imageType = %d", imageType); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "layout_width = %d, layout_height = %d", layout_width, layout_height); + MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, viewerRenderData->viewer_content_box == NULL, "Invalid argument: viewer_content_box is NULL"); + /*get image's content size*/ + Evas *evas = evas_object_evas_get(viewerRenderData->main_window); + Evas_Object *img = evas_object_image_add(evas); + evas_object_image_file_set(img, path, NULL); + evas_object_image_size_get(img, &contnet_w, &contnet_h); + evas_object_del(img); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "image_width = %d, image_height = %d", contnet_w, contnet_h); + + /*create layout for image*/ + image_layout = elm_layout_add(viewerRenderData->layout_main); + MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, image_layout == NULL, "failed to create viewerRenderData->viewer_content_layout"); + + elm_layout_file_set(image_layout, MSG_VIEWER_THEME, "viewer_main"); + evas_object_size_hint_weight_set(image_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(image_layout, 0.0, 0.0); + evas_object_show(image_layout); + + + /*create icon above image_layout*/ + ic = elm_icon_add(image_layout); + + if (imageType == VIEWER_IMAGE_TYPE_DRM_IMAGE_RAW_DATA) { // rendering drm image by raw data + unsigned char *drm_raw_data = NULL; + unsigned int buf_size = 0; + + drm_raw_data = msg_ui_viewer_get_buffer_from_drm_file(path, MSG_UI_DRM_RIGHT_DISPLAY, &buf_size); + if (drm_raw_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "buf_size = %d", buf_size); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "image buf size = %d", (contnet_w * contnet_h * 4)); + + Eina_Bool result = elm_icon_memfile_set(ic, drm_raw_data, buf_size, NULL, NULL); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "result = %d", result); + + free(drm_raw_data); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_raw_data is NULL"); + elm_icon_file_set(ic, MSG_VIEWER_IMAGE_DRM_ICON, NULL); + } + } else { + elm_icon_file_set(ic, path, NULL); + } + + MSG_UI_RETM_IF(MSG_UI_LEVEL_DEBUG, ic == NULL, "attached image add failed"); + + if (elm_icon_animated_available_get(ic)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Animated image"); + elm_icon_animated_set(ic, EINA_TRUE); + elm_icon_animated_play_set(ic, EINA_TRUE); + } + + /*check and set image size*/ + if (contnet_w > layout_width) { + tmp_w = layout_width; + tmp_h = contnet_h * layout_width / contnet_w; + + if (tmp_h > layout_height) { + tmp_w = contnet_w * layout_height / contnet_h; + tmp_h = layout_height; + } + evas_object_size_hint_min_set(ic, tmp_w, tmp_h); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "tmp_w = %d, tmp_h = %d", tmp_w, tmp_h); + } else if (contnet_h > layout_height) { + tmp_w = contnet_w * layout_height / contnet_h; + tmp_h = layout_height; + + if (tmp_w > layout_width) { + tmp_w = layout_width; + tmp_h = contnet_h * layout_width / contnet_w; + } + evas_object_size_hint_min_set(ic, tmp_w, tmp_h); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "tmp_w = %d, tmp_h = %d", tmp_w, tmp_h); + } else if (contnet_w <= layout_width && contnet_h <= layout_height) { + evas_object_size_hint_min_set(ic, contnet_w , contnet_h); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid case"); + } + + elm_object_part_content_set(image_layout, "viewer.body.content", ic); + + if (imageType == VIEWER_IMAGE_TYPE_DRM_SOUND) { + if (!viewerRenderData->insert_sound_icon) { + elm_box_pack_end(viewerRenderData->viewer_content_box, image_layout); /*sound drm icon*/ + viewerRenderData->insert_sound_icon = image_layout; + evas_object_show(ic); + } else { + evas_object_del(ic); + } + } else if (imageType == VIEWER_IMAGE_TYPE_UNSUPPORTED) { + if (!viewerRenderData->insert_unsupported_icon) { + elm_box_pack_end(viewerRenderData->viewer_content_box, image_layout); /*unsupported file icon*/ + viewerRenderData->insert_unsupported_icon = image_layout; + evas_object_show(ic); + } else { + evas_object_del(ic); + } + } else { + elm_box_pack_start(viewerRenderData->viewer_content_box, image_layout);/*image top*/ + viewerRenderData->insert_image = image_layout; + + /*display region area according to Region info*/ + MSG_BOOL istexttop = FALSE; + SMIL_SLIDE_INFO_S *curSlideInfo = NULL; + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle); + + curSlideInfo = _msg_smil_cont_mgr_get_slide(smilContMgrHndle, 0); + + if (curSlideInfo && curSlideInfo->pageInfo) + istexttop = curSlideInfo->pageInfo->isTexttop; + + if (istexttop) { + if (viewerRenderData->insert_sound_icon || viewerRenderData->insert_unsupported_icon) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Text top message. And there is a drm sound or unsupported icon"); + elm_box_unpack(viewerRenderData->viewer_content_box, image_layout); + elm_box_pack_after(viewerRenderData->viewer_content_box, image_layout, viewerRenderData->viewer_body); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Text top message"); + elm_box_unpack(viewerRenderData->viewer_content_box, image_layout); + elm_box_pack_end(viewerRenderData->viewer_content_box, image_layout); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Image top message"); + } + + evas_object_show(ic); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + + +MSG_BOOL _msg_smil_render_show_inserted_image(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE); + + if (access(path, R_OK) == 0) { + if (msg_ui_viewer_is_drm_file(path)) { + if (msg_ui_viewer_check_drm_ro_valid(path, MSG_UI_DRM_RIGHT_DISPLAY)) { + /*consume ro and display content*/ + if (viewerRenderData->display_drm_consume.consume_handle) { + msg_ui_viewer_consume_ro_stop(&viewerRenderData->display_drm_consume); + viewerRenderData->display_drm_consume.consume_handle = NULL; + } + + //copy drm file temporarily, because drm file is created by MF with read right and drm_svc try to open file with append property. + char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1]= {0,}; + const char *filename = (const char *)ecore_file_file_get(path); + + snprintf(dst_path, sizeof(dst_path),"%s%s", viewerRenderData->working_path, filename); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = %s", dst_path); + + char *app_drm_path = msg_ui_viewer_util_copy_file(path, dst_path); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "app_drm_path = %s", app_drm_path); + //copy drm content to app path end + + /*display original image*/ + __msg_smil_render_show_image_file(viewerRenderData, app_drm_path, VIEWER_IMAGE_TYPE_DRM_IMAGE_RAW_DATA); + + msg_ui_viewer_consume_ro_start(path, MSG_UI_DRM_RIGHT_DISPLAY, &viewerRenderData->display_drm_consume); + + if (app_drm_path) { + free(app_drm_path); + app_drm_path = NULL; + } + } else { + /*there is no valid ro case*/ + /*display drm icon*/ + __msg_smil_render_show_image_file(viewerRenderData, MSG_VIEWER_IMAGE_DRM_ICON, VIEWER_IMAGE_TYPE_DRM_IMAGE); + } + } else { /*no drm case*/ + MSG_BOOL unsupported_image = FALSE; + if (!strcmp(path, MSG_VIEWER_IMAGE_UNSUPPORT_ICON)) + unsupported_image = TRUE; + + if (unsupported_image) + __msg_smil_render_show_image_file(viewerRenderData, path, VIEWER_IMAGE_TYPE_UNSUPPORTED); + else + __msg_smil_render_show_image_file(viewerRenderData, path, VIEWER_IMAGE_TYPE_NORMAL); + } + } else + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "access is failed"); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + diff --git a/viewer/smil-player/src/msg-smil-player-interface.c b/viewer/smil-player/src/msg-smil-player-interface.c new file mode 100755 index 0000000..fb040b7 --- /dev/null +++ b/viewer/smil-player/src/msg-smil-player-interface.c @@ -0,0 +1,75 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-player-interface.h" +#include "msg-smil-player.h" +#include "msg-smil-util.h" + +/*================================================================================================ + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +MSG_SMIL_ERROR_E msg_smil_create_smil_player(msg_struct_t msg_info_t, void *callBack, void *userData , void **instance) +{ + return _msg_smil_create_smil_player(msg_info_t, callBack, userData, instance); +} + +void msg_smil_destroy_smil_player(void *smilhandle) +{ + _msg_smil_destroy_smil_player(smilhandle); +} + +int msg_smil_get_current_slide_idx(void *hSmilHandle) +{ + return _msg_smil_get_current_slide_idx(hSmilHandle); +} + +SMIL_PLAYER_STATUS_E msg_smil_get_current_slide_status(void *hSmilHandle) +{ + return _msg_smil_get_current_slide_status(hSmilHandle); +} + +MSG_SMIL_ERROR_E msg_smil_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent) +{ + return _msg_smil_player_on_slide_event_handler(hSmilHandle, playerEvent); +} + +MSG_BOOL msg_smil_create_smil_player_layout(void *hSmilHandle, void* layout) +{ + return _msg_smil_create_smil_player_layout(hSmilHandle, layout); +} + +MSG_BOOL msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom) +{ + return _msg_smil_set_smil_player_layout_size(hSmilHandle, left_top, right_bottom); +} + +MSG_BOOL msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void* callBack, void *userData) +{ + return _msg_smil_set_smil_player_help_page_cb(hSmilHandle, callBack, userData); +} + +SMIL_SLIDE_INFO_S *msg_smil_get_current_slide_info(void *hSmilHandle) +{ + return _msg_smil_get_current_slide_info(hSmilHandle); +} + +MSG_BOOL msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime) +{ + return _msg_smil_get_slide_time(hSmilHandle, slideIdx, bExcludeHp, slideTime); +} diff --git a/viewer/smil-player/src/msg-smil-player.c b/viewer/smil-player/src/msg-smil-player.c new file mode 100755 index 0000000..4a09e1a --- /dev/null +++ b/viewer/smil-player/src/msg-smil-player.c @@ -0,0 +1,449 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-types.h" +#include "msg-smil-player.h" +#include "msg-smil-util.h" + +/*================================================================================================ + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +MSG_SMIL_ERROR_E _msg_smil_create_smil_player(msg_struct_t msg_info_t, void *callBack, void *userData, void **instance) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, msg_info_t == NULL, MSG_ERR_SMIL_NULL_MESSAGE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callBack == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, userData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, instance == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN; + SMIL_HANDLER_S *smilPlayerHndle = NULL; + + /*Allocate memory for smilPlayerHandler*/ + smilPlayerHndle = (SMIL_HANDLER_S *)calloc(1, sizeof(SMIL_HANDLER_S)); + if (smilPlayerHndle == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + *instance = NULL; + return MSG_ERR_SMIL_INVALID_STORAGE; + } + + /*Create Content Manager Handler*/ + err = _msg_smil_create_content_mgr(msg_info_t, &smilPlayerHndle->smilContMgrHndle); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_create_content_mgr is failed"); + if (smilPlayerHndle) { + free(smilPlayerHndle); + smilPlayerHndle = NULL; + } + *instance = NULL; + return err; + } + + /*Create Event Manager Handler*/ + err = _msg_smil_create_event_mgr(callBack, userData, &smilPlayerHndle->smilEvntMgrHndle); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_create_event_mgr is failed"); + _msg_smil_destroy_content_mgr(smilPlayerHndle->smilContMgrHndle); + smilPlayerHndle->smilContMgrHndle = NULL; + + if (smilPlayerHndle) { + free(smilPlayerHndle); + smilPlayerHndle = NULL; + } + *instance = NULL; + return err; + } + smilPlayerHndle->smilEvntMgrHndle->smilhandle = smilPlayerHndle; + + /*Create & Initialize Reder handle*/ + err = _msg_smil_create_render(&smilPlayerHndle->smilRenderer); + if (err != MSG_SMIL_SUCCESS) { + _msg_smil_destroy_content_mgr(smilPlayerHndle->smilContMgrHndle); + smilPlayerHndle->smilContMgrHndle = NULL; + + _msg_smil_destroy_event_mgr(smilPlayerHndle->smilEvntMgrHndle); + smilPlayerHndle->smilEvntMgrHndle = NULL; + + if (smilPlayerHndle) { + free(smilPlayerHndle); + smilPlayerHndle = NULL; + } + *instance = NULL; + return err; + } + _msg_smil_init_render(smilPlayerHndle->smilRenderer); + smilPlayerHndle->smilRenderer->msg_info_t = msg_info_t; + smilPlayerHndle->smilRenderer->smilhandle = smilPlayerHndle; + + *instance = (void *)smilPlayerHndle; + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return MSG_SMIL_SUCCESS; +} + + +void _msg_smil_destroy_smil_player(void *smilhandle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)smilhandle; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilPlayerHndle == NULL); + + _msg_smil_destroy_content_mgr(smilPlayerHndle->smilContMgrHndle); + smilPlayerHndle->smilContMgrHndle = NULL; + + _msg_smil_destroy_event_mgr(smilPlayerHndle->smilEvntMgrHndle); + smilPlayerHndle->smilEvntMgrHndle = NULL; + + _msg_smil_destroy_render(smilPlayerHndle->smilRenderer); + smilPlayerHndle->smilRenderer = NULL; + + free(smilPlayerHndle); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + + +SMIL_CONTENT_MGR_HANDLE_S *_msg_smil_get_content_mgr(void *hSmilHandle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle; + + return smilPlayerHndle->smilContMgrHndle; +} + + +SMIL_EVENT_MGR_HANDLE_S *_msg_smil_get_event_mgr(void *hSmilHandle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, NULL); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle; + + return smilPlayerHndle->smilEvntMgrHndle; +} + + +SMIL_RENDERER_DATA_S *_msg_smil_get_renderder(void *hSmilHandle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, NULL); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle; + + return smilPlayerHndle->smilRenderer; +} + + +int _msg_smil_get_current_slide_idx(void *hSmilHandle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, MSG_MMS_SLIDE_INVALID); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle; + + return _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle); +} + + +SMIL_PLAYER_STATUS_E _msg_smil_get_current_slide_status(void *hSmilHandle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle; + + return _msg_smil_cont_mgr_get_cur_slide_status(smilPlayerHndle->smilContMgrHndle); +} + + +SMIL_SLIDE_INFO_S *_msg_smil_get_current_slide_info(void *hSmilHandle) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle; + + return _msg_smil_cont_mgr_get_cur_slide(smilPlayerHndle->smilContMgrHndle); +} + + +MSG_SMIL_ERROR_E _msg_smil_player_on_slide_event_handler(void **hSmilHandle, SMIL_PLAYER_EVENT_E playerEvent) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, playerEvent == PLAYER_EVENT_NONE, MSG_ERR_SMIL_EVENT_NONE); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)(*hSmilHandle); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilPlayerHndle == NULL, MSG_ERR_SMIL_NULL_MESSAGE); + int slideIdx = 0; + int mediaType = MMS_SMIL_MEDIA_INVALID; + MSG_SMIL_ERROR_E err = MSG_ERR_SMIL_UNKNOWN; + SMIL_TIMER_CALLBACK_DATA_S *slideTimerCbData = _msg_smil_event_mgr_get_timer_cb_data(smilPlayerHndle->smilEvntMgrHndle); + SMIL_SLIDE_EVENT_PARAM_S *curSlideParam = _msg_smil_event_mgr_get_slide_event_param_data(smilPlayerHndle->smilEvntMgrHndle); + + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, slideTimerCbData == NULL, MSG_ERR_SMIL_NULL_MESSAGE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlideParam == NULL, MSG_ERR_SMIL_NULL_MESSAGE); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "playerEvent = %d", playerEvent); + + if (_msg_smil_event_mgr_is_slide_active(smilPlayerHndle->smilEvntMgrHndle)) { + SMIL_SLIDE_INFO_S *curSlide = _msg_smil_cont_mgr_get_cur_slide(smilPlayerHndle->smilContMgrHndle); + if (curSlide->pageInfo) { + // if page has audio or video, image and text is not needed to checked. + if (curSlide->pageInfo->hasAudio ) + mediaType = MMS_SMIL_MEDIA_AUDIO; + else if (curSlide->pageInfo->hasVideo) + mediaType = MMS_SMIL_MEDIA_VIDEO; + else if (curSlide->pageInfo->hasImage) + mediaType = MMS_SMIL_MEDIA_IMG; + else if (curSlide->pageInfo->hasText) + mediaType = MMS_SMIL_MEDIA_TEXT; + } + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mediaType = %d", mediaType); + } + + /* PREV/NEXT EVENT skip condition*/ + if (playerEvent == PLAYER_EVENT_PREV_SLIDE) { + if (_msg_smil_event_mgr_is_slide_active(smilPlayerHndle->smilEvntMgrHndle)) { + int current_slide = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle); + int total_page_count = _msg_smil_cont_mgr_get_total_slide_count(smilPlayerHndle->smilContMgrHndle); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "current_slide = %d, total_page_count = %d", current_slide, total_page_count); + + /*if first page or multipart.mixed message, then return err*/ + if (current_slide == 0 || total_page_count == 0) { + return MSG_ERR_SMIL_INVALID_SLIDE; + } + } + } else if (playerEvent == PLAYER_EVENT_NEXT_SLIDE) { + if (_msg_smil_event_mgr_is_slide_active(smilPlayerHndle->smilEvntMgrHndle)) { + MSG_BOOL isLastSlide = curSlideParam->isLastSlide; + int total_page_count = _msg_smil_cont_mgr_get_total_slide_count(smilPlayerHndle->smilContMgrHndle); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isLastSlide = %d, total_page_count = %d", isLastSlide, total_page_count); + + /*if last page or multipart.mixed message, then return err*/ + if (isLastSlide || total_page_count == 0) { + return MSG_ERR_SMIL_INVALID_SLIDE; + } + } + } + + switch (playerEvent) { + case PLAYER_EVENT_ROTATE_WINDOW: + _msg_smil_render_rotate_video_window(smilPlayerHndle->smilRenderer); + err = MSG_SMIL_SUCCESS; + break; + case PLAYER_EVENT_PLAY: + _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE); + if (slideTimerCbData->timerHandle) { + err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_PLAY_SLIDE"); + return err; + } + + _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer); + } + + _msg_smil_event_mgr_set_current_slide(smilPlayerHndle->smilEvntMgrHndle, NULL); + _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_PLAY); + err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_PLAY"); + return err; + } + break; + case PLAYER_EVENT_PREVIEW_PLAY: + _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE); + if (slideTimerCbData->timerHandle) { + err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_PLAY_SLIDE"); + return err; + } + + _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer); + } + + _msg_smil_cont_mgr_delete_help_page(smilPlayerHndle->smilRenderer->msg_info_t, smilPlayerHndle->smilContMgrHndle); //delete help page + _msg_smil_event_mgr_set_current_slide(smilPlayerHndle->smilEvntMgrHndle, NULL); + _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_PLAY); + err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_PREVIEW_PLAY"); + return err; + } + break; + case PLAYER_EVENT_PAUSE: + err = _msg_smil_event_mgr_pause_slide(smilPlayerHndle->smilEvntMgrHndle); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_pause_slide is failed: PLAYER_EVENT_PAUSE"); + if (slideTimerCbData->timerHandle == NULL) { + int pageIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle); + _msg_smil_event_mgr_resume_slide(smilPlayerHndle->smilEvntMgrHndle, pageIdx); + } + + return err; + } + + if (_msg_smil_render_pause(smilPlayerHndle->smilRenderer, mediaType) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_pause is failed: PLAYER_EVENT_PAUSE"); + int pageIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle); + _msg_smil_event_mgr_resume_slide(smilPlayerHndle->smilEvntMgrHndle, pageIdx); + + return MSG_ERR_SMIL_PAUSE_SLIDE_RENDER_FAILURE; + } + break; + case PLAYER_EVENT_STOP: + /*reset event media info*/ + _msg_smil_event_mgr_set_is_video_media(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_unsupported_content(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_invalid_video_ro(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_last_slide(smilPlayerHndle->smilEvntMgrHndle, FALSE); + + err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_STOP"); + return err; + } + _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer); + break; + case PLAYER_EVENT_RESUME: + err = _msg_smil_event_mgr_resume_slide(smilPlayerHndle->smilEvntMgrHndle, _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle)); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_resume_slide is failed; PLAYER_EVENT_RESUME"); + return err; + } + + if (_msg_smil_render_resume(smilPlayerHndle->smilRenderer, mediaType) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_resume is failed: PLAYER_EVENT_RESUME"); + return MSG_ERR_SMIL_RESUME_SLIDE_RENDER_FAILURE; + } + break; + case PLAYER_EVENT_NEXT_SLIDE: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER_EVENT_NEXT_SLIDE"); + err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_NEXT_SLIDE"); + return err; + } + _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer); + + _msg_smil_event_mgr_set_is_video_media(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_unsupported_content(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_invalid_video_ro(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_NEXT); + + /*Incrementing the slide index in order to move to the next slide*/ + slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle); + slideIdx += MSG_MMS_SMIL_SLIDEIDX_INCREMENT; + _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx); + + err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed :PLAYER_EVENT_NEXT_SLIDE"); + slideIdx -= MSG_MMS_SMIL_SLIDEIDX_INCREMENT; + _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx); + return err; + } + break; + case PLAYER_EVENT_PREV_SLIDE: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER_EVENT_PREV_SLIDE"); + err = _msg_smil_event_mgr_stop_slide(smilPlayerHndle->smilEvntMgrHndle); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_stop_slide is failed: PLAYER_EVENT_PREV_SLIDE"); + return err; + } + _msg_smil_render_stop_playing_file(smilPlayerHndle->smilRenderer); + + _msg_smil_event_mgr_set_is_video_media(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_unsupported_content(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_invalid_video_ro(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_video_endofstream(smilPlayerHndle->smilEvntMgrHndle, FALSE); + _msg_smil_event_mgr_set_page_action_type(smilPlayerHndle->smilEvntMgrHndle, PAGE_EVENT_MOVE_TO_PREV); + + /*Decrement the Slide Index for fetching the appropriate slide content.*/ + slideIdx = _msg_smil_cont_mgr_get_cur_slide_idx(smilPlayerHndle->smilContMgrHndle); + slideIdx -= MSG_MMS_SMIL_SLIDEIDX_DECREMENT; + _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx); + + err = _msg_smil_event_mgr_play_slide(smilPlayerHndle->smilEvntMgrHndle, slideIdx); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_event_mgr_play_slide is failed: PLAYER_EVENT_PREV_SLIDE"); + slideIdx += MSG_MMS_SMIL_SLIDEIDX_DECREMENT; + _msg_smil_cont_mgr_set_cur_slide_idx(smilPlayerHndle->smilContMgrHndle, slideIdx); + return err; + } + break; + case PLAYER_EVENT_DESTROY_SCREEN: + _msg_smil_event_mgr_set_render_event(smilPlayerHndle->smilEvntMgrHndle, SMIL_RENDER_EVENT_DESTROY_SCREEN); + err = _msg_smil_render_on_slide_render_handler(smilPlayerHndle->smilRenderer, curSlideParam); + if (err != MSG_SMIL_SUCCESS) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_on_slide_render_handler failed err = %d", err); + break; + case PLAYER_EVENT_MUTE: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER_EVENT_MUTE"); + _msg_smil_render_set_mute(smilPlayerHndle->smilRenderer, TRUE); + err = MSG_SMIL_SUCCESS; + break; + default: + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "In default"); + err = MSG_ERR_SMIL_UNKNOWN; + break; + } + + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_player_on_slide_event_handler is failed %d", err); + return err; + } + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return MSG_SMIL_SUCCESS; +} + + +MSG_BOOL _msg_smil_create_smil_player_layout(void *hSmilHandle, void *layout) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, FALSE); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle; + + return _msg_smil_render_create_layout(smilPlayerHndle->smilRenderer, (Evas_Object *)layout); +} + + +MSG_BOOL _msg_smil_set_smil_player_layout_size(void *hSmilHandle, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, FALSE); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle; + + return _msg_smil_render_set_layout_size(smilPlayerHndle->smilRenderer, left_top, right_bottom); +} + +MSG_BOOL _msg_smil_set_smil_player_help_page_cb(void *hSmilHandle, void *callBack, void *userData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callBack == NULL, FALSE); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle; + + return _msg_smil_render_set_help_page_cb(smilPlayerHndle->smilRenderer, callBack, userData); +} + +MSG_BOOL _msg_smil_get_slide_time(void *hSmilHandle, int slideIdx, MSG_BOOL bExcludeHp, double *slideTime) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, hSmilHandle == NULL, PLAYER_STATUS_NONE); + SMIL_HANDLER_S *smilPlayerHndle = (SMIL_HANDLER_S *)hSmilHandle; + + return _msg_smil_cont_mgr_get_slide_time(smilPlayerHndle->smilContMgrHndle, slideIdx, bExcludeHp, slideTime); +}
\ No newline at end of file diff --git a/viewer/smil-player/src/msg-smil-render.c b/viewer/smil-player/src/msg-smil-render.c new file mode 100755 index 0000000..d0e558f --- /dev/null +++ b/viewer/smil-player/src/msg-smil-render.c @@ -0,0 +1,681 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-render.h" +#include "msg-smil-player.h" +#include "msg-smil-content-manager.h" +#include "msg-smil-util.h" +#include "msg-ui-image-resource.h" +#include "msg-ui-viewer-utility.h" +#include <Elementary.h> + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +static void __msg_smil_render_set_bg_color(SMIL_RENDERER_DATA_S *viewerRenderData); +/*================================================================================================ + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +MSG_SMIL_ERROR_E _msg_smil_create_render(SMIL_RENDERER_DATA_S **viewerRenderData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + + *viewerRenderData = (SMIL_RENDERER_DATA_S *)calloc(1, sizeof(SMIL_RENDERER_DATA_S)); + if (*viewerRenderData == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return MSG_ERR_SMIL_INVALID_STORAGE; + } + + (*viewerRenderData)->working_path = msg_ui_viewer_util_create_working_dir(); + if (!(*viewerRenderData)->working_path) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_create_working_dir is failed"); + return MSG_ERR_SMIL_INVALID_STORAGE; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "*viewerRenderData->working_path= %s", (*viewerRenderData)->working_path); + + return MSG_SMIL_SUCCESS; +} + + +void _msg_smil_destroy_render(SMIL_RENDERER_DATA_S *viewerRenderData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL); + + if (viewerRenderData->viewer_body_text) { + free(viewerRenderData->viewer_body_text); + viewerRenderData->viewer_body_text = NULL; + } + + if (viewerRenderData->video_image) { + evas_object_del(viewerRenderData->video_image); + viewerRenderData->video_image = NULL; + } + + if (viewerRenderData->attach_list) { + evas_object_del(viewerRenderData->attach_list); + viewerRenderData->attach_list = NULL; + } + + if (viewerRenderData->viewer_bg_rect) { + evas_object_del(viewerRenderData->viewer_bg_rect); + viewerRenderData->viewer_bg_rect = NULL; + } + + if (viewerRenderData->video_update_timer) { + ecore_timer_del(viewerRenderData->video_update_timer); + viewerRenderData->video_update_timer = NULL; + } + + if (viewerRenderData->video_resize_idle) { + ecore_idler_del(viewerRenderData->video_resize_idle); + viewerRenderData->video_resize_idle = NULL; + } + + if (viewerRenderData->video_duration_idle) { + ecore_idler_del(viewerRenderData->video_duration_idle); + viewerRenderData->video_duration_idle = NULL; + } + + if (viewerRenderData->video_eos_idle) { + ecore_idler_del(viewerRenderData->video_eos_idle); + viewerRenderData->video_eos_idle = NULL; + } + + if (viewerRenderData->working_path) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "remove temp path"); + ecore_file_recursive_rm(viewerRenderData->working_path); + g_free(viewerRenderData->working_path); + viewerRenderData->working_path = NULL; + } + + free(viewerRenderData); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + + +MSG_BOOL _msg_smil_init_render(SMIL_RENDERER_DATA_S *viewerRenderData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + + viewerRenderData->viewer_bg_rect = NULL; + viewerRenderData->msg_info_t = NULL; + viewerRenderData->viewer_body_text = NULL; + viewerRenderData->viewer_content_box = NULL; + viewerRenderData->insert_image = NULL; + viewerRenderData->viewer_scroller = NULL; + viewerRenderData->viewer_body = NULL; + viewerRenderData->smilhandle = NULL; + viewerRenderData->player_state = MEDIA_PLAYER_STATE_NONE; + viewerRenderData->viewer_height = 0; + viewerRenderData->viewer_width = 0; + viewerRenderData->viewer_landscape_width = 0; + viewerRenderData->viewer_landscape_height = 0; + viewerRenderData->button_height = 0; + viewerRenderData->video_width = 0; + viewerRenderData->video_height = 0; + viewerRenderData->video_duration = 0; + viewerRenderData->video_resize_idle = NULL; + viewerRenderData->video_duration_idle = NULL; + viewerRenderData->video_eos_idle = NULL; + viewerRenderData->bgcolor = 0; + viewerRenderData->ismute = FALSE; + viewerRenderData->display_drm_consume.consume_handle = NULL; + viewerRenderData->play_drm_consume.consume_handle = NULL; + viewerRenderData->insert_sound_icon = NULL; + viewerRenderData->insert_unsupported_icon = NULL; + viewerRenderData->main_window = ug_get_window(); + viewerRenderData->main_win_rotate = 0; + viewerRenderData->video_image = NULL; + viewerRenderData->video_image_buffer = NULL; + viewerRenderData->is_skip_frame = FALSE; + + return TRUE; +} + + +MSG_BOOL _msg_smil_render_set_layout_size(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, left_top == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, right_bottom == NULL, FALSE); + int x = 0; + int y = 0; + int w = 0; + int play_control_height = 0; + int window_width = 0; + int window_height = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "left_top (%d, %d)", left_top->x, left_top->y); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "right_bottom (%d, %d)", right_bottom->x, right_bottom->y); + ecore_x_window_size_get(ecore_x_window_root_first_get(), &window_width, &window_height); + edje_object_part_geometry_get(_EDJ(viewerRenderData->layout_main), "viewer.swallow.play.controller", &x, &y, &w, &play_control_height); + + viewerRenderData->viewer_width = window_width; + viewerRenderData->viewer_height = (right_bottom->y - left_top->y - play_control_height); + viewerRenderData->button_height = (window_height - right_bottom->y); + + viewerRenderData->viewer_landscape_width = window_height; + viewerRenderData->viewer_landscape_height = (window_width - (left_top->y + play_control_height + viewerRenderData->button_height)); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_width = %d, viewer_height = %d", viewerRenderData->viewer_width, viewerRenderData->viewer_height); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "landscape viewer_width = %d, landscape viewer_height = %d", viewerRenderData->viewer_landscape_width, viewerRenderData->viewer_landscape_height); + + return TRUE; +} + + +MSG_BOOL _msg_smil_render_create_layout(SMIL_RENDERER_DATA_S *viewerRenderData, Evas_Object *layout) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, FALSE); + Evas_Object *eo = NULL; + Evas_Object *entry = NULL; + + viewerRenderData->layout_main = layout; + + /*create scroller*/ + if (!viewerRenderData->viewer_scroller) { + eo = elm_scroller_add(layout); + 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_scroller_bounce_set(eo, FALSE, TRUE); + elm_scroller_policy_set(eo, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + elm_object_part_content_set(layout, "viewer.body", eo); + evas_object_show(eo); + viewerRenderData->viewer_scroller = eo; + } + + /* create content box */ + if (!viewerRenderData->viewer_content_box) { + viewerRenderData->viewer_content_box = eo = elm_box_add(layout); + evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, 0.0); + elm_box_homogeneous_set(eo, EINA_FALSE); + evas_object_show(eo); + } + + elm_object_content_set(viewerRenderData->viewer_scroller, viewerRenderData->viewer_content_box); + + /* create entry */ + if (!viewerRenderData->viewer_body) { + entry = elm_entry_add(layout); + elm_entry_entry_set(entry, ""); + elm_entry_editable_set(entry, 0); + elm_entry_context_menu_disabled_set(entry, EINA_TRUE); + elm_entry_magnifier_disabled_set(entry, EINA_TRUE); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_pack_end(viewerRenderData->viewer_content_box, entry); + evas_object_show(entry); + viewerRenderData->viewer_body = entry; + } + + /*bg color rectangular*/ + if (!viewerRenderData->viewer_bg_rect) { + eo = evas_object_rectangle_add(evas_object_evas_get(layout)); + evas_object_color_set(eo, 255, 0, 0, 255); + elm_object_part_content_set(layout, "viewer.body.bg", eo); + evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(eo, EVAS_HINT_FILL, 0.0); + evas_object_show(eo); + viewerRenderData->viewer_bg_rect = eo; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + +MSG_BOOL _msg_smil_render_set_help_page_cb(SMIL_RENDERER_DATA_S *viewerRenderData, void *callBack, void *userData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, callBack == NULL, FALSE); + + viewerRenderData->appUserData = userData; + viewerRenderData->appSmilHelpPageCb = (pfnSMILHelpPageCb)callBack; + + return TRUE; +} + +MSG_SMIL_ERROR_E _msg_smil_render_on_slide_render_handler(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_SLIDE_EVENT_PARAM_S *eventStatus) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + + switch (eventStatus->renderEvent) { + case SMIL_RENDER_EVENT_PAGE_PLAY_START: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_PAGE_PLAY_START"); + + if (viewerRenderData->insert_image) { + evas_object_del(viewerRenderData->insert_image); + viewerRenderData->insert_image = NULL; + } + + if (viewerRenderData->video_image) { + evas_object_del(viewerRenderData->video_image); + viewerRenderData->video_image = NULL; + viewerRenderData->video_image_buffer = NULL; + } + + if (viewerRenderData->insert_sound_icon) { + evas_object_del(viewerRenderData->insert_sound_icon); + viewerRenderData->insert_sound_icon = NULL; + } + + if (viewerRenderData->insert_unsupported_icon) { + evas_object_del(viewerRenderData->insert_unsupported_icon); + viewerRenderData->insert_unsupported_icon = NULL; + } + + if (viewerRenderData->attach_list) { + evas_object_del(viewerRenderData->attach_list); + viewerRenderData->attach_list = NULL; + } + + _msg_smil_render_stop_playing_file((void *)viewerRenderData); + elm_entry_entry_set(viewerRenderData->viewer_body, ""); + + /* disable copy and paste popup */ + elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE); + elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE); + elm_entry_select_none(viewerRenderData->viewer_body); + + /* set viewer bg color */ + __msg_smil_render_set_bg_color(viewerRenderData); + break; + + case SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START"); + + if (viewerRenderData->insert_image) { + evas_object_del(viewerRenderData->insert_image); + viewerRenderData->insert_image = NULL; + } + + if (viewerRenderData->video_image) { + evas_object_del(viewerRenderData->video_image); + viewerRenderData->video_image = NULL; + viewerRenderData->video_image_buffer = NULL; + } + + if (viewerRenderData->insert_sound_icon) { + evas_object_del(viewerRenderData->insert_sound_icon); + viewerRenderData->insert_sound_icon = NULL; + } + + if (viewerRenderData->insert_unsupported_icon) { + evas_object_del(viewerRenderData->insert_unsupported_icon); + viewerRenderData->insert_unsupported_icon = NULL; + } + + if (viewerRenderData->attach_list) { + evas_object_del(viewerRenderData->attach_list); + viewerRenderData->attach_list = NULL; + } + + _msg_smil_render_stop_playing_file((void *)viewerRenderData); + elm_entry_entry_set(viewerRenderData->viewer_body, ""); + + /* disable copy and paste popup */ + elm_entry_context_menu_disabled_set(viewerRenderData->viewer_body, EINA_TRUE); + elm_entry_magnifier_disabled_set(viewerRenderData->viewer_body, EINA_TRUE); + elm_entry_select_none(viewerRenderData->viewer_body); + + /* set viewer bg color */ + __msg_smil_render_set_bg_color(viewerRenderData); + /*move scroll to top*/ + elm_scroller_region_show(viewerRenderData->viewer_scroller, 0, 0, 0, 0); + break; + + case SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE"); + _msg_smil_render_stop_playing_file((void *)viewerRenderData); + return MSG_SMIL_SUCCESS; + + case SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE"); + return MSG_SMIL_SUCCESS; + + case SMIL_RENDER_EVENT_DESTROY_SCREEN: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "SMIL_RENDER_EVENT_DESTROY_SCREEN"); + elm_entry_entry_set(viewerRenderData->viewer_body, ""); + + if (viewerRenderData->insert_image) { + evas_object_del(viewerRenderData->insert_image); + viewerRenderData->insert_image = NULL; + } + + if (viewerRenderData->video_image) { + evas_object_del(viewerRenderData->video_image); + viewerRenderData->video_image = NULL; + viewerRenderData->video_image_buffer = NULL; + } + + if (viewerRenderData->insert_sound_icon) { + evas_object_del(viewerRenderData->insert_sound_icon); + viewerRenderData->insert_sound_icon = NULL; + } + + if (viewerRenderData->insert_unsupported_icon) { + evas_object_del(viewerRenderData->insert_unsupported_icon); + viewerRenderData->insert_unsupported_icon = NULL; + } + return MSG_SMIL_SUCCESS; + + default: + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "abnormal renderEvent : %d", eventStatus->renderEvent); + return MSG_ERR_SMIL_EVENT_NONE; + } + + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus->singleSlideInfo == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus->singleSlideInfo->commonData == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle); + int pageCnt = _msg_smil_cont_mgr_get_total_slide_count(smilContMgrHndle); + if (pageCnt > 0) { //Multipart related + if (_msg_smil_cont_mgr_is_cur_slide_help_page(eventStatus->singleSlideInfo)) { + char buf_font[VIEWER_TEXT_FONT_LEN + 1] = {0, }; + snprintf(buf_font, sizeof(buf_font), "<font_size=%d color=#6ca8c7>%s", + MMS_SMIL_FONT_SIZE_NORMAL, + dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE")); + + elm_entry_entry_set(viewerRenderData->viewer_body, buf_font); + + _msg_smil_render_show_help_page_attach_list(viewerRenderData); + + } else { + if (_msg_smil_render_reload_mms(viewerRenderData, eventStatus) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_reload_mms is failed"); + return MSG_ERR_SMIL_UI_DISPLAY_FAIURE; + } + } + } else { //Multipart mixed + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "eventStatus->singleSlideInfo->commonData->attachCnt : %d", eventStatus->singleSlideInfo->commonData->attachCnt); + + if (_msg_smil_cont_mgr_is_cur_slide_help_page(eventStatus->singleSlideInfo)) { + msg_list_handle_t attachlist_info = NULL; + msg_struct_t attach_info = NULL; + int nAttachCnt = 0; + int mediaType = 0; + + msg_struct_t mmsData_h = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, mmsData_h == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + + msg_get_list_handle(mmsData_h, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info); + nAttachCnt = msg_list_length(attachlist_info); + + if (nAttachCnt == 1) { + attach_info = (msg_struct_t)msg_list_nth_data(attachlist_info, 0); + + msg_get_int_value(attach_info, MSG_MMS_ATTACH_MIME_TYPE_INT, &mediaType); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment mediatype : 0x%x", mediaType); + + if (mediaType == MIME_TEXT_TXT || mediaType == MIME_TEXT_PLAIN) { + char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,}; + msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, strFilePath, sizeof(strFilePath)); + _msg_smil_render_show_inserted_text(viewerRenderData, strFilePath); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Attachment is not TEXT type, Display help page"); + + char buf_font[VIEWER_TEXT_FONT_LEN + 1] = {0, }; + snprintf(buf_font, sizeof(buf_font), "<font_size=%d color=#6ca8c7>%s", + MMS_SMIL_FONT_SIZE_NORMAL, + dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE")); + + elm_entry_entry_set(viewerRenderData->viewer_body, buf_font); + + _msg_smil_render_show_help_page_attach_list(viewerRenderData); + } + } else { //nAttachCnt > 1 + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Attachment count is over than 1, Display help page"); + + char buf_font[VIEWER_TEXT_FONT_LEN + 1] = {0, }; + snprintf(buf_font, sizeof(buf_font), "<font_size=%d color=#6ca8c7>%s", + MMS_SMIL_FONT_SIZE_NORMAL, + dgettext(MESSAGE_PKGNAME, "IDS_MSGF_POP_HELP_PAGE_MESSAGE")); + + elm_entry_entry_set(viewerRenderData->viewer_body, buf_font); + + _msg_smil_render_show_help_page_attach_list(viewerRenderData); + } + } else { + elm_entry_entry_set(viewerRenderData->viewer_body, ""); + } + } + + return MSG_SMIL_SUCCESS; +} + + +MSG_BOOL _msg_smil_render_reload_mms(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_SLIDE_EVENT_PARAM_S *eventStatus) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus->singleSlideInfo == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus->singleSlideInfo->commonData == NULL, FALSE); + + int i = 0; + int bgColor; + int width; + int height; + int pageCnt; + int mediaCnt; + int mediaType; + + MSG_BOOL isTextUsed = FALSE; + MSG_BOOL isImageUsed = FALSE; + MSG_BOOL isSoundUsed = FALSE; + bool widthPercent; + bool heightPercent; + + char szFileName[MSG_FILENAME_LEN_MAX] = {0,}; + char szFilePath[MSG_FILEPATH_LEN_MAX] = {0,}; + char regionId[MAX_SMIL_REGION_ID] = {0,}; + + /*Get smil handler*/ + SMIL_HANDLER_S *smilHandle = (SMIL_HANDLER_S *)viewerRenderData->smilhandle; + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilHandle == NULL, FALSE); + + /*Get contentMgr */ + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilHandle); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE); + + /*Get Mms body data */ + msg_struct_t msgMmsBody = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle); + + msg_get_int_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_WIDTH_INT, &width); + msg_get_bool_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_WIDTH_PERCENT_BOOL, &widthPercent); + msg_get_int_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_HEIGHT_INT, &height); + msg_get_bool_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_HEIGHT_PERCENT_BOOL, &heightPercent); + msg_get_int_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, &bgColor); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ROOT LAYOUT INFO width: %d %s height: %d %s bgColor:0x%x", + width, + widthPercent ? "%" : "", + height, + heightPercent ? "%" : "", + bgColor); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page : %d/%d", + eventStatus->singleSlideInfo->pageIdx + 1, eventStatus->singleSlideInfo->commonData->pageCnt); + + /*Get page list handler of current page of callbackData*/ + msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle); + pageCnt = msg_list_length(pagelist_info); + MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, FALSE, "page length is 0, no pages is current message"); + + /*Get page handler */ + msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, eventStatus->singleSlideInfo->pageIdx); + + /*Get media list handler */ + msg_list_handle_t medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info); + mediaCnt = msg_list_length(medialist_info); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d page's media count: %d", + eventStatus->singleSlideInfo->pageIdx + 1, mediaCnt); + + for (i = 0 ; i < mediaCnt ; ++i) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "eventStatus->timerDataMedia[%d].actionTypeOnMedia = %d", i, eventStatus->timerDataMedia[i].actionTypeOnMedia); + if (eventStatus->timerDataMedia[i].actionTypeOnMedia == MEDIA_EVENT_BEGIN) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MEDIA_EVENT_BEGIN : "); + msg_struct_t media_info = _msg_smil_cont_mgr_get_page_nth_media_struct_handle(medialist_info, eventStatus->timerDataMedia[i].mediaIdx); + + if (media_info) { + bzero(szFileName, sizeof(szFileName)); + bzero(szFilePath, sizeof(szFilePath)); + + _msg_smil_cont_mgr_get_media_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, szFileName); + _msg_smil_cont_mgr_get_media_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, szFilePath); + _msg_smil_cont_mgr_get_media_str_value(media_info, MSG_MMS_MEDIA_REGION_ID_STR, regionId); + _msg_smil_cont_mgr_get_media_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "\n%d media's filename: %s\n%d media's filepath: %s\n%d media's regionId: %s\n%d media's mediatype: 0x%04X", + eventStatus->timerDataMedia[i].mediaIdx, + szFileName, + eventStatus->timerDataMedia[i].mediaIdx, + szFilePath, + eventStatus->timerDataMedia[i].mediaIdx, + regionId, + eventStatus->timerDataMedia[i].mediaIdx, + mediaType); + + switch (mediaType) { + case MMS_SMIL_MEDIA_IMG: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MMS_SMIL_MEDIA_IMG"); + if (isImageUsed) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Image media is already added"); + break; + } else + isImageUsed = TRUE; + + if (_msg_smil_render_show_inserted_image(viewerRenderData, szFilePath) == FALSE) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_image is failed"); + + break; + case MMS_SMIL_MEDIA_TEXT: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MMS_SMIL_MEDIA_TEXT"); + if (isTextUsed) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Text media is already added"); + break; + } else + isTextUsed = TRUE; + + if (_msg_smil_render_show_inserted_text(viewerRenderData, szFilePath) == FALSE) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_text is failed"); + + break; + case MMS_SMIL_MEDIA_AUDIO: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MMS_SMIL_MEDIA_AUDIO"); + if (isSoundUsed) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Sound media is already added"); + break; + } else + isSoundUsed = TRUE; + + if (_msg_smil_render_show_inserted_audio(viewerRenderData, szFilePath) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_audio is failed"); + return FALSE; + } + + break; + case MMS_SMIL_MEDIA_VIDEO: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MMS_SMIL_MEDIA_VIDEO"); + if (isSoundUsed || isImageUsed) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Image or sound media is already added"); + break; + } else { + isSoundUsed = TRUE; + isImageUsed = TRUE; + } + + if (_msg_smil_render_show_inserted_video(viewerRenderData, szFilePath) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_video is failed"); + return FALSE; /*returning FALSE is required to register timer in case of failed video play*/ + } + + break; + case MMS_SMIL_MEDIA_INVALID: /*unsupported content*/ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "MMS_SMIL_MEDIA_INVALID"); + if (_msg_smil_render_show_inserted_image(viewerRenderData, MSG_VIEWER_IMAGE_UNSUPPORT_ICON) == FALSE) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "_msg_smil_render_show_inserted_image is failed"); + + break; + default: + break; + } + } + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + + +static void __msg_smil_render_set_bg_color(SMIL_RENDERER_DATA_S *viewerRenderData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL); + + /*Get smil handler*/ + SMIL_HANDLER_S *smilHandle = (SMIL_HANDLER_S *)viewerRenderData->smilhandle; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilHandle == NULL); + + /*Get contentMgr */ + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(smilHandle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL); + + /*Get Mms body data */ + msg_struct_t msgMmsBody = _msg_smil_cont_mgr_get_mms_body_struct_handle(smilContMgrHndle); + int bgColor = 0; + + msg_list_handle_t page_list_t = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle); + + if (page_list_t) + msg_get_int_value(msgMmsBody, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, &bgColor); + else //Mixed msg + bgColor = 0xffffff; // set WHITE directly + + SMIL_RGB_UNION rgbUnion; + + memset(&rgbUnion, 0x00, sizeof(SMIL_RGB_UNION)); + rgbUnion.rgbColor = bgColor; + + memset(&viewerRenderData->bgcolor, 0x00, sizeof(VIEWER_COLORREF)); + viewerRenderData->bgcolor = bgColor; + + evas_object_color_set(viewerRenderData->viewer_bg_rect, rgbUnion.rgbQuad.rgbRed, rgbUnion.rgbQuad.rgbGreen, rgbUnion.rgbQuad.rgbBlue, 255); + evas_object_show(viewerRenderData->viewer_bg_rect); +} + + +MSG_BOOL _msg_smil_render_set_mute(SMIL_RENDERER_DATA_S *viewerRenderData, MSG_BOOL ismute) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + + viewerRenderData->ismute = ismute; + return TRUE; +} + diff --git a/viewer/smil-player/src/msg-smil-text-render.c b/viewer/smil-player/src/msg-smil-text-render.c new file mode 100755 index 0000000..1c1895f --- /dev/null +++ b/viewer/smil-player/src/msg-smil-text-render.c @@ -0,0 +1,253 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-types.h" +#include "msg-smil-player.h" +#include "msg-smil-render.h" +#include "msg-smil-util.h" + +#include "msg-ui-common-utility.h" +#include <Elementary.h> + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +static MSG_BOOL __msg_smil_render_get_font_style(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_FONT_SYTLE_S *pfont_style); + +/*================================================================================================ + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +MSG_BOOL _msg_smil_render_show_inserted_text(SMIL_RENDERER_DATA_S *viewerRenderData, const char *path) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, path == NULL, FALSE); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "path : (%s)", path); + FILE *fp = NULL; + + fp = fopen(path, "r"); + if (fp) { + struct stat stat_buf; + if (stat(path, &stat_buf) != 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Getting file information Error"); + fclose(fp); + return FALSE; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "FileSize : %d", (int)stat_buf.st_size); + if (stat_buf.st_size > 0) { + if (viewerRenderData->viewer_body_text) { + free(viewerRenderData->viewer_body_text); + viewerRenderData->viewer_body_text = NULL; + } + + viewerRenderData->viewer_body_text = (void *)calloc(1, (size_t)stat_buf.st_size + 1); + + if (viewerRenderData->viewer_body_text == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + fclose(fp); + return FALSE; + } else { + int result = fread(viewerRenderData->viewer_body_text, sizeof(char), stat_buf.st_size, fp); + if (result != stat_buf.st_size) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "fread is failed result : %d", result); + } + } + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_body_text : (%s)", (char *)viewerRenderData->viewer_body_text); + + if (viewerRenderData->viewer_body_text[0] != '\0') { + /*get font size, color and style*/ + SMIL_FONT_SYTLE_S text_style = {0,}; + if (__msg_smil_render_get_font_style(viewerRenderData, &text_style) == FALSE) { + text_style.font_size = MMS_SMIL_FONT_SIZE_NORMAL; + snprintf(text_style.font_color, sizeof(text_style.font_color), "#%s", "#000000"); + } + + /* get marked up text */ + Eina_Strbuf *markup_text = NULL; + markup_text = msg_common_get_markup_text((const char *)viewerRenderData->viewer_body_text,text_style.font_size, text_style.font_color, text_style.font_style); + + if (markup_text) { + elm_entry_entry_set(viewerRenderData->viewer_body, eina_strbuf_string_get(markup_text)); + eina_strbuf_free(markup_text); + } else { + elm_entry_entry_set(viewerRenderData->viewer_body, ""); + } + } + + /*free message text after displaying*/ + if (viewerRenderData->viewer_body_text) { + free(viewerRenderData->viewer_body_text); + viewerRenderData->viewer_body_text = NULL; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid file size"); + } + + fclose(fp); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "File Open Error"); + return FALSE; + } + + return TRUE; +} + + +static MSG_BOOL __msg_smil_render_get_font_style(SMIL_RENDERER_DATA_S *viewerRenderData, SMIL_FONT_SYTLE_S *pfont_style) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pfont_style == NULL, FALSE); + int pageCnt = 0; + int mediaCnt = 0; + int mediaTotalCnt = 0; + int font_size = 0; + char szColor[VIEWER_RGB_COLOR_BUF_LEN] = {0x00, }; + char font_style[VIEWER_FONT_STYLE_BUF_LEN + 1] = {0, }; + SMIL_RGB_UNION rgbUnion; + SMIL_SLIDE_INFO_S *curSlide = NULL; + SMIL_EVENT_MGR_HANDLE_S *smilEvntMgrHndle = _msg_smil_get_event_mgr(viewerRenderData->smilhandle); + + curSlide = _msg_smil_event_mgr_get_current_slide(smilEvntMgrHndle); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, curSlide->commonData == NULL, FALSE); + + memset(&rgbUnion, 0x00, sizeof(SMIL_RGB_UNION)); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "curSlide->commonData->pageCnt : %d", curSlide->commonData->pageCnt); + + /*Get contentMgr */ + SMIL_CONTENT_MGR_HANDLE_S *smilContMgrHndle = _msg_smil_get_content_mgr(viewerRenderData->smilhandle); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, smilContMgrHndle == NULL, FALSE); + + /*Get page list handler of current page of callbackData*/ + msg_list_handle_t pagelist_info = _msg_smil_cont_mgr_get_page_list_handle(smilContMgrHndle); + pageCnt = msg_list_length(pagelist_info); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pageCnt == 0, FALSE); + + /*Get page handler */ + msg_struct_t page_info = _msg_smil_cont_mgr_get_nth_page_struct_handle(pagelist_info, curSlide->pageIdx); + + /*Get media list handler */ + msg_list_handle_t medialist_info = _msg_smil_cont_mgr_get_page_media_list_handle(page_info); + mediaTotalCnt = msg_list_length(medialist_info); + + /*get font size, color and style*/ + if (curSlide->commonData->pageCnt != 0) { /*multipart.related*/ + mediaCnt = 0; + + while (mediaCnt < mediaTotalCnt) { + msg_struct_t media_info = _msg_smil_cont_mgr_get_page_nth_media_struct_handle(medialist_info, mediaCnt); + int mediaType = 0; + //msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + _msg_smil_cont_mgr_get_media_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + + if (mediaType == MMS_SMIL_MEDIA_TEXT) { + msg_struct_t sText; + int fontSize = 0; + int fontColor = 0; + msg_get_struct_handle(media_info, MSG_MMS_MEDIA_SMIL_TEXT_HND, &sText); + + msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_SIZE_INT, &fontSize); + + if (fontSize == 0) + msg_set_int_value(sText, MSG_MMS_SMIL_TEXT_SIZE_INT, MMS_SMIL_FONT_SIZE_NORMAL); + + msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_SIZE_INT, &fontSize); + font_size = fontSize; + + msg_get_int_value(sText, MSG_MMS_SMIL_TEXT_COLOR_INT, &fontColor); + rgbUnion.rgbColor = fontColor; + + /*change font color when both bgcolor and font color are same(black or white case)*/ + if ((viewerRenderData->bgcolor == fontColor) && + (viewerRenderData->bgcolor == 0xffffff)) { + rgbUnion.rgbColor = 0x000000; /*chagne font color as black*/ + } else if ((viewerRenderData->bgcolor == fontColor) && + (viewerRenderData->bgcolor == 0x000000)) { + rgbUnion.rgbColor = 0xffffff; /*chagne font color as white*/ + } + + _msg_smil_util_get_color_string(szColor, sizeof(szColor), rgbUnion.rgbQuad.rgbRed, rgbUnion.rgbQuad.rgbGreen, rgbUnion.rgbQuad.rgbBlue); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "sMedia.sText.nSize = %d", fontSize); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font color : #%s", szColor); + + bool bBold; + bool bUnderline; + bool bItalic; + + msg_get_bool_value(sText, MSG_MMS_SMIL_TEXT_BOLD_BOOL, &bBold); + msg_get_bool_value(sText, MSG_MMS_SMIL_TEXT_UNDERLINE_BOOL, &bUnderline); + msg_get_bool_value(sText, MSG_MMS_SMIL_TEXT_ITALIC_BOOL, &bItalic); + + if (bBold) { + snprintf(font_style, sizeof(font_style), "hilight"); + } else if (bUnderline) { + snprintf(font_style, sizeof(font_style), "link"); + } else if (bItalic) { + snprintf(font_style, sizeof(font_style), "em"); + } + + break; + } + + mediaCnt++; + } + + /*rollback mediaList pointer*/ + //curSlide->page->mediaList = tmpmedia; + } else { /*invalide message without page info or multipart.mixed message*/ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid message or multipart.related message"); + font_size = MMS_SMIL_FONT_SIZE_NORMAL; + + if (viewerRenderData->bgcolor == 0xffffff) { + rgbUnion.rgbColor = 0x000000; /*set font color as black(0x000000)*/ + } else { + rgbUnion.rgbColor = 0xffffff; /*set font color as white(0xffffff)*/ + } + _msg_smil_util_get_color_string(szColor, sizeof(szColor), rgbUnion.rgbQuad.rgbRed, rgbUnion.rgbQuad.rgbGreen, rgbUnion.rgbQuad.rgbBlue); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "font color : #%s", szColor); + } + + if (font_size == 0) + font_size = MMS_SMIL_FONT_SIZE_NORMAL; + + /*get pfont_style*/ + pfont_style->font_size = font_size; + snprintf(pfont_style->font_color, sizeof(pfont_style->font_color), "#%s", szColor); + + if (font_style[0] != '\0') + snprintf(pfont_style->font_style, sizeof(pfont_style->font_style), "%s", font_style); + + return TRUE; +} + +MSG_BOOL _msg_smil_render_show_help_page_attach_list(SMIL_RENDERER_DATA_S *viewerRenderData) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewerRenderData == NULL, FALSE); + MSG_UI_RETVM_IF(MSG_UI_LEVEL_DEBUG, viewerRenderData->viewer_content_box == NULL, FALSE, "Invalid argument: viewer_content_box is NULL"); + + if (viewerRenderData->appSmilHelpPageCb) { + viewerRenderData->appSmilHelpPageCb(viewerRenderData->appUserData, (void**)&(viewerRenderData->attach_list), viewerRenderData->viewer_content_box); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} diff --git a/viewer/smil-player/src/msg-smil-util.c b/viewer/smil-player/src/msg-smil-util.c new file mode 100755 index 0000000..d9adbf8 --- /dev/null +++ b/viewer/smil-player/src/msg-smil-util.c @@ -0,0 +1,75 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-smil-util.h" + +#include <stdlib.h> +#include <string.h> + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +static void __msg_smil_util_get_color_code(int color_dec); + +/*================================================================================================ + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +char hexa[VIEWER_COLOR_HEXA_BUFFER_LEN]; +char colorMap[VIEWER_HEXA_SIZE] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; +static void __msg_smil_util_get_color_code(int color_dec) +{ + int col = color_dec; + int rem = 0; + + memset(hexa, 0x00, sizeof(hexa)); + rem = col % VIEWER_HEXA_SIZE; + col = col / VIEWER_HEXA_SIZE; + hexa[0] = colorMap[col]; + hexa[1] = colorMap[rem]; +} + + +void _msg_smil_util_get_color_string(char *pszBuffer, int pszBuffer_len, int r, int g, int b) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, pszBuffer == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, pszBuffer_len < VIEWER_RGB_COLOR_BUF_LEN); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "r : %x, g : %x, b : %x", r, g, b); + char col_hex[VIEWER_RGB_COLOR_BUF_LEN] = {0x0, }; + + __msg_smil_util_get_color_code(r); + col_hex[0] = hexa[0]; + col_hex[1] = hexa[1]; + __msg_smil_util_get_color_code(g); + col_hex[2] = hexa[0]; + col_hex[3] = hexa[1]; + __msg_smil_util_get_color_code(b); + col_hex[4] = hexa[0]; + col_hex[5] = hexa[1]; + col_hex[6] = '\0'; + + strncpy(pszBuffer, col_hex, strlen(col_hex)); +} + + +int _msg_smil_util_find_smallest(int num1, int num2) +{ + return num1 > num2 ? num2 : num1; +} + + diff --git a/viewer/src/msg-ui-viewer-callback.c b/viewer/src/msg-ui-viewer-callback.c new file mode 100755 index 0000000..fdc3363 --- /dev/null +++ b/viewer/src/msg-ui-viewer-callback.c @@ -0,0 +1,132 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS +*==================================================================================================*/ +#include "msg-ui-viewer-main.h" +#include "msg-ui-common-utility.h" + +/*================================================================================================== + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +void msg_ui_viewer_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL); + Evas_Object *base = NULL; + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv; + + base = ug_get_layout(ug); + if (!base) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "base is NULL"); + ug_destroy(ug); + return; + } + + Evas_Object *win = ug_get_window(); + + switch (mode) { + case UG_MODE_FULLVIEW: + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, base); + evas_object_show(base); + + break; + case UG_MODE_FRAMEVIEW: + elm_object_part_content_set(viewer_main_data->layout_main, "content", base); + break; + default: + break; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + + +void msg_ui_viewer_result_cb(ui_gadget_h ug, service_h service, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); +} + + +Eina_Bool msg_ui_viewer_ug_quit(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, ECORE_CALLBACK_CANCEL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + + if (viewer_main_data != NULL) { + /*destroy captured image and resource.*/ + if (viewer_main_data->SmilHandle) { + msg_smil_destroy_smil_player(viewer_main_data->SmilHandle); + msg_ui_viewer_set_smilhandle(viewer_main_data, NULL); + + if (viewer_main_data->player_view) + viewer_main_data->player_view->SmilHandle = NULL; + } + + if (viewer_main_data->viewer_ug) { + msg_common_reset_font_size("entry"); + ug_destroy_me(viewer_main_data->viewer_ug); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "viewer_main_data is NULL"); + } + + return ECORE_CALLBACK_CANCEL; +} + + +void msg_ui_viewer_destroy_cb(ui_gadget_h ug, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv; + + if (viewer_main_data->loaded_ug) { + ug_destroy(viewer_main_data->loaded_ug); + viewer_main_data->loaded_ug = NULL; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode); + if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) { + if (viewer_main_data->player_view) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PLAYER launch_cmd : %d, cmd_type : %d", viewer_main_data->player_view->launch_cmd, viewer_main_data->player_view->cmd_type); + if (viewer_main_data->player_view->launch_cmd == MSG_VIEWER_LOAD_OTHER_UG_MODE && + (viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT || + viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER || + viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER)) { + + /*update title button text after contact sync */ + if (viewer_main_data->player_view->cmd_type == MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT) + msg_ui_viewer_contact_info_update(viewer_main_data->player_view); + + /*connect handler again*/ + if (!viewer_main_data->player_view->mouse_down_event_handler) + viewer_main_data->player_view->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_main_data->player_view); + + viewer_main_data->player_view->launch_cmd = MSG_VIEWER_DEFAULT_MODE; + viewer_main_data->player_view->cmd_type = MSG_VIEWER_CMD_NONE; + } + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + diff --git a/viewer/src/msg-ui-viewer-drm-list.c b/viewer/src/msg-ui-viewer-drm-list.c new file mode 100755 index 0000000..6172db4 --- /dev/null +++ b/viewer/src/msg-ui-viewer-drm-list.c @@ -0,0 +1,505 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + * ==================================================================================================*/ +#include <msg.h> +#include <msg_storage.h> + +#include "msg-ui-viewer-drm-list.h" +#include "msg-ui-viewer-drm-utility.h" +#include "msg-ui-viewer-main.h" +#include "msg-ui-common-utility.h" +#include "msg-ui-image-resource.h" + +#include <bundle.h> +#include "aul.h" + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +#define DRM_LIST_DATA_KEY "drm_list_view_data" + +static Elm_Genlist_Item_Class gdrm_list_itc; + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +static void __drm_list_back_button_cb(void *data, Evas_Object *obj, void *event_info); +static void __drm_list_play_button_cb(void *data, Evas_Object *obj, void *event_info); +static char *__drm_list_genlist_text_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object *__drm_list_genlist_content_get(void *data, Evas_Object *obj, const char *part); +static void __drm_list_genlist_del(void *data, Evas_Object *obj); +static MSG_BOOL __msg_ui_viewer_drm_list_get_message(void *data); +static Evas_Object *__msg_ui_viewer_drm_list_create_navibar(Evas_Object *parent); +static void __drm_list_genlist_sel_cb(void *data, Evas_Object *obj, void *event_info); +static MSG_BOOL __msg_ui_viewer_drm_list_create_view(void *data); + +/*================================================================================================== +* FUNCTION IMPLEMENTATIONS +*==================================================================================================*/ +void msg_ui_viewer_destroy_drm_list_view(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL"); + MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data; + + if (drm_list_data->genlist) { + evas_object_data_del(drm_list_data->genlist, DRM_LIST_DATA_KEY); + evas_object_del(drm_list_data->genlist); + drm_list_data->genlist = NULL; + } + + + /*free the list*/ + int index = 0; + if (drm_list_data->drm_list) { + MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL; + int ntotal = eina_list_count(drm_list_data->drm_list); + + for (index = 0; index < ntotal; index++) { + pmedia_info = eina_list_nth(drm_list_data->drm_list, index); + if (pmedia_info) { + free(pmedia_info); + pmedia_info = NULL; + } + } + eina_list_free(drm_list_data->drm_list); + drm_list_data->drm_list = NULL; + } + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __drm_list_back_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL"); + MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data; + + msg_common_reset_font_size("entry"); + ug_destroy_me(msg_ui_viewer_get_viewer_ug(drm_list_data->viewer_main)); + elm_object_disabled_set(obj, TRUE); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __drm_list_play_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL"); + MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data; + + msg_ui_viewer_show_view_by_mode(drm_list_data->viewer_main, MSG_VIEWER_PLAYER_VIEW, MSG_VIEWER_VIEW_CMD_NONE); + elm_object_disabled_set(obj, TRUE); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static char *__drm_list_genlist_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_VIEWER_MEDIA_INFO_S *pmedia_info = (MSG_VIEWER_MEDIA_INFO_S *)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name [%s]", pmedia_info->pfile_name); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path [%s]", pmedia_info->pfile_path); + + if (strcmp(part, "elm.text") == 0) { + + if (strlen(pmedia_info->pfile_name)) { + return strdup(pmedia_info->pfile_name); + } + } + return NULL; +} + +static Evas_Object *__drm_list_genlist_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_VIEWER_MEDIA_INFO_S *pmedia_info = (MSG_VIEWER_MEDIA_INFO_S *)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name [%s]", pmedia_info->pfile_name); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path [%s]", pmedia_info->pfile_path); + + if (strcmp(part, "elm.icon") == 0) { + Evas_Object *image = elm_icon_add(obj); + + elm_icon_file_set(image, MSG_VIEWER_IMAGE_DRM_SMALL_ICON, NULL); + evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + return image; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part); + } + + return NULL; +} + +static void __drm_list_genlist_del(void *data, Evas_Object *obj) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); +} + +MSG_BOOL msg_ui_viewer_get_invalid_ro_drm_list(msg_struct_t mms_t, Eina_List **drm_list) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, mms_t == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, drm_list == NULL, FALSE); + + msg_list_handle_t pagelist_info = NULL; + msg_struct_t page_info = NULL; + msg_list_handle_t medialist_info = NULL; + msg_struct_t media_info = NULL; + + int nPageCnt = 0; + int nmedia_count = 0; + + msg_get_list_handle(mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + + nPageCnt = msg_list_length(pagelist_info); + + if (nPageCnt) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Multipart Related"); + int page_idx = 0; + char strFileName[MSG_FILENAME_LEN_MAX] = {0,}; + char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,}; + + for (page_idx = 0; page_idx < nPageCnt; ++page_idx) { + page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx); + + msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info); + + int mediaCnt = msg_list_length(medialist_info); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, mediaCnt); + + int media_idx = 0; + for (media_idx = 0; media_idx < mediaCnt; ++media_idx) { + int mediaType = 0; + int drmType = 0; + media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx); + + if (!media_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info is NULL"); + return FALSE; + } + + bzero(strFileName, sizeof(strFileName)); + bzero(strFilePath, sizeof(strFilePath)); + + msg_get_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, strFileName, sizeof(strFileName)); + msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath)); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "media filename = [%s], media filepath = [%s]", strFileName, strFilePath); + + msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + + /*skip the text file*/ + if (mediaType == MMS_SMIL_MEDIA_TEXT) + continue; + + msg_get_int_value(media_info, MSG_MMS_MEDIA_DRM_TYPE_INT, &drmType); + + if (drmType != MSG_DRM_TYPE_NONE) { + char szDrmFullPath[MSG_FILEPATH_LEN_MAX] = {0,}; + bzero(szDrmFullPath, sizeof(szDrmFullPath)); + msg_get_str_value(media_info, MSG_MMS_MEDIA_DRM_FULLPATH_STR, szDrmFullPath, sizeof(szDrmFullPath)); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drmtype: %d drmpath: %s", drmType, szDrmFullPath); + + /*TODO : actually pMedia->szDrm2FullPath should be used to get drm type, if it works correctly*/ + MSG_UI_DRM_TYPE_E drm_type = msg_ui_viewer_get_drm_type(strFilePath); + if (drm_type == MSG_UI_DRM_TYPE_SD) { + MSG_UI_DRM_RIGHT_TYPE_E permission_type; + + if (mediaType == MMS_SMIL_MEDIA_IMG) + permission_type = MSG_UI_DRM_RIGHT_DISPLAY; + else + permission_type = MSG_UI_DRM_RIGHT_PLAY; + + if (!msg_ui_viewer_check_drm_ro_valid(strFilePath, permission_type)) { + /*append drm list*/ + MSG_VIEWER_MEDIA_INFO_S *pmedia_info = (MSG_VIEWER_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_MEDIA_INFO_S)); + if (!pmedia_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return FALSE; + } + + if (strlen(strFileName)) { + strncpy(pmedia_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN); + } else { + const char *file_name = NULL; + file_name = ecore_file_file_get(strFilePath); + if (file_name) + strncpy(pmedia_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN); + else + strncpy(pmedia_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN); + } + strncpy(pmedia_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN); + pmedia_info->media_type = mediaType; + + *drm_list = eina_list_append(*drm_list, pmedia_info); + nmedia_count++; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "valid ro content"); + } + } + } + } + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Multipart Mixed"); + return FALSE; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "nmedia_count [%d]", nmedia_count); + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + if (nmedia_count) + return TRUE; + else + return FALSE; +} + +static MSG_BOOL __msg_ui_viewer_drm_list_get_message(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE, "data is NULL"); + MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data; + + if (!drm_list_data->mms_t) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_list_data->mms_t is null"); + return FALSE; + } + + return TRUE; +} + +static Evas_Object *__msg_ui_viewer_drm_list_create_navibar(Evas_Object *parent) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL, "parent object is NULL"); + Evas_Object *navi_frame = NULL; + + navi_frame = elm_naviframe_add(parent); + + elm_object_part_content_set(parent, "elm.swallow.content", navi_frame); + evas_object_show(navi_frame); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return navi_frame; +} + +static void __drm_list_genlist_sel_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL); + MSG_VIEWER_MEDIA_INFO_S *pmedia_info = (MSG_VIEWER_MEDIA_INFO_S *)data; + Elm_Object_Item *selected_item = (Elm_Object_Item *)event_info; + char szurl[MSG_UI_URL_MAX_LEN + 1] = {0x00}; + MSG_DRM_LIST_DATA_S *drm_list_data = NULL; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "media_type [%d]", pmedia_info->media_type); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name [%s]", pmedia_info->pfile_name); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path [%s]", pmedia_info->pfile_path); + + elm_genlist_item_selected_set(selected_item, FALSE); + drm_list_data = (MSG_DRM_LIST_DATA_S *)evas_object_data_get(obj, DRM_LIST_DATA_KEY); + + if (msg_ui_viewer_get_drm_url(pmedia_info->pfile_path, szurl, sizeof(szurl)-1)) { + if (drm_list_data) { + drm_list_data->drm_list_cmd = MSG_VIEWER_DRM_LIST_CMD_LAUNCH_BROWSER; + drm_list_data->selected_item = selected_item; + drm_list_data->selected_file_info = pmedia_info; + } else + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_list_data is NULL"); + + /*launch browser to buy ro*/ + aul_open_content(szurl); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_get_drm_url is failed"); + } + + return; +} + +static MSG_BOOL __msg_ui_viewer_drm_list_create_view(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data; + Evas_Object *genlist = NULL; + Evas_Object *back_button = NULL; + Evas_Object *toolbar = NULL; + Elm_Object_Item *pitem = NULL; + int index = 0; + int ntotal_cnt = 0; + MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL; + Elm_Object_Item *toolbar_item = NULL; + + /*create genlist*/ + genlist = elm_genlist_add(drm_list_data->navi_frame); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + drm_list_data->genlist = genlist; + + /*set drm_list_data*/ + evas_object_data_set(genlist, DRM_LIST_DATA_KEY, drm_list_data); + + /*set items style*/ + gdrm_list_itc.item_style = "1text.1icon.2"; + gdrm_list_itc.func.text_get = __drm_list_genlist_text_get; + gdrm_list_itc.func.content_get = __drm_list_genlist_content_get; + gdrm_list_itc.func.del = __drm_list_genlist_del; + + /*add items*/ + if (drm_list_data->drm_list) { + ntotal_cnt = eina_list_count(drm_list_data->drm_list); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "ntotal_cnt [%d]", ntotal_cnt); + + for (index = 0; index < ntotal_cnt; index++) { + pmedia_info = eina_list_nth(drm_list_data->drm_list, index); + pitem = elm_genlist_item_append(genlist, &gdrm_list_itc, (void *)pmedia_info, NULL, ELM_GENLIST_ITEM_NONE, __drm_list_genlist_sel_cb, (void *)pmedia_info); + pmedia_info = NULL; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no drm content. drm_list_data->drm_list is NULL"); + } + + /*create controlbar*/ + toolbar = elm_toolbar_add(drm_list_data->navi_frame); + MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, toolbar == NULL, FALSE); + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + + toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(toolbar_item, EINA_TRUE); + toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(toolbar_item, EINA_TRUE); + toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(toolbar_item, EINA_TRUE); + + elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_PLAY, NULL, __drm_list_play_button_cb, drm_list_data); + + /*create back button*/ + back_button = elm_button_add(drm_list_data->navi_frame); + elm_object_style_set(back_button, "naviframe/back_btn/default"); + evas_object_smart_callback_add(back_button, "clicked", __drm_list_back_button_cb, (void *)drm_list_data); + + Elm_Object_Item *navi_it = elm_naviframe_item_push(drm_list_data->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_DRM_CONTENT"), back_button, NULL, genlist, NULL); + elm_object_item_part_content_set(navi_it, "controlbar", toolbar); + + return TRUE; +} + +void msg_ui_viewer_drm_list_init(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL"); + MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data; + + drm_list_data->viewer_main = NULL; + drm_list_data->main_window = NULL; + drm_list_data->navi_frame = NULL; + drm_list_data->genlist = NULL; + drm_list_data->msgID = -1; + drm_list_data->mms_t= NULL; + drm_list_data->drm_list_cmd = MSG_VIEWER_DRM_LIST_CMD_NONE; + drm_list_data->drm_list = NULL; +} + +MSG_BOOL msg_ui_viewer_create_drm_list_view(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data; + Evas_Object *layout = NULL; + + layout = msg_ui_viewer_get_main_layout(drm_list_data->viewer_main); + if (layout == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "layout is NULL"); + return FALSE; + } else { + /*create Navigation Bar */ + if (!drm_list_data->navi_frame) { + drm_list_data->navi_frame = __msg_ui_viewer_drm_list_create_navibar(layout); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, drm_list_data->navi_frame == NULL, FALSE); + msg_ui_viewer_set_navi_frame(drm_list_data->viewer_main, drm_list_data->navi_frame); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "navi_frame is already created"); + } + + /*get invlaid ro drm list */ + if (!drm_list_data->drm_list) { + /*get the message content*/ + if (__msg_ui_viewer_drm_list_get_message(drm_list_data) == FALSE) { + msg_ui_viewer_destroy_drm_list_view(drm_list_data); + return FALSE; + } + + if (msg_ui_viewer_get_invalid_ro_drm_list(drm_list_data->mms_t, &drm_list_data->drm_list) == FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "there is no invalid drm list"); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drm_list is already created"); + } + + /*create view layout like list, button and controlbar*/ + if (__msg_ui_viewer_drm_list_create_view(drm_list_data) == FALSE) + return FALSE; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + +void msg_ui_viewer_drm_list_delete_current_list(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, data == NULL, "data is NULL"); + MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data; + + if (drm_list_data->selected_item) { + elm_object_item_del(drm_list_data->selected_item); + drm_list_data->selected_item = NULL; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no selected_item"); + } +} + +MSG_BOOL msg_ui_viewer_drm_list_check_current_ro_valid(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE, "data is NULL"); + MSG_DRM_LIST_DATA_S *drm_list_data = (MSG_DRM_LIST_DATA_S *)data; + + if (drm_list_data->selected_file_info) { + MSG_UI_DRM_RIGHT_TYPE_E permission_type; + + if (drm_list_data->selected_file_info->media_type == MMS_SMIL_MEDIA_IMG) + permission_type = MSG_UI_DRM_RIGHT_DISPLAY; + else + permission_type = MSG_UI_DRM_RIGHT_PLAY; + + if (msg_ui_viewer_check_drm_ro_valid(drm_list_data->selected_file_info->pfile_path, permission_type)) + return TRUE; + else + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_ui_viewer_check_drm_ro_valid is failed"); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "selected_file_info is NULL"); + } + + return FALSE; +} diff --git a/viewer/src/msg-ui-viewer-drm-utility.c b/viewer/src/msg-ui-viewer-drm-utility.c new file mode 100755 index 0000000..0f79a11 --- /dev/null +++ b/viewer/src/msg-ui-viewer-drm-utility.c @@ -0,0 +1,392 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + INCLUDE HEADERS +* ==================================================================================================*/ +#include "msg-ui-viewer-drm-utility.h" +#include "msg-ui-viewer-utility.h" +#include <msg-ui-util.h> +#include <memory.h> + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +static drm_permission_type_e __get_permission_type(MSG_UI_DRM_RIGHT_TYPE_E permission_type); +static MSG_BOOL __get_drm_license_status(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type); + +/*================================================================================================== + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +MSG_BOOL msg_ui_viewer_is_drm_file(const char *filepath) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + drm_bool_type_e is_drm_file = DRM_UNKNOWN; + int ret = DRM_RETURN_SUCCESS; + + ret = drm_is_drm_file(filepath, &is_drm_file); + + if (ret == DRM_RETURN_SUCCESS && is_drm_file == DRM_TRUE) { + return TRUE; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ret = %d", ret); + return FALSE; + } +} + +static MSG_BOOL __get_drm_license_status(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, FALSE); + + int ret = DRM_RETURN_SUCCESS; + drm_permission_type_e permission = DRM_PERMISSION_TYPE_ANY; + drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED; + + permission = __get_permission_type(permission_type); + + ret = drm_get_license_status(filepath, permission, &license_status); + if (ret != DRM_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_get_license_status is failed ret = %d", ret); + return FALSE; + } + + if (license_status != DRM_LICENSE_STATUS_VALID) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "license_status = %d", license_status); + return FALSE; + } + + return TRUE; +} + +MSG_UI_DRM_TYPE_E msg_ui_viewer_get_drm_type(const char *filepath) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, MSG_UI_DRM_UNDEFINED); + MSG_UI_DRM_TYPE_E drm_type = MSG_UI_DRM_UNDEFINED; + drm_file_type_e file_type = DRM_TYPE_UNDEFINED; + int ret = DRM_RETURN_SUCCESS; + + ret = drm_get_file_type(filepath, &file_type); + if (ret != DRM_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ret = %d", ret); + return drm_type; + } + + if (file_type == DRM_TYPE_OMA_V1) { + drm_file_info_s drmInfo; + memset(&drmInfo, 0x0, sizeof(drm_file_info_s)); + + ret = drm_get_file_info(filepath, &drmInfo); + if (ret != DRM_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ret = %d", ret); + return drm_type; + } + + switch (drmInfo.oma_info.method) { + case DRM_METHOD_TYPE_FORWARD_LOCK: + drm_type = MSG_UI_DRM_TYPE_FL; + break; + case DRM_METHOD_TYPE_COMBINED_DELIVERY: + drm_type = MSG_UI_DRM_TYPE_CD; + break; + case DRM_METHOD_TYPE_SEPARATE_DELIVERY: + drm_type = MSG_UI_DRM_TYPE_SD; + break; + default: + drm_type = MSG_UI_DRM_UNDEFINED; + break; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "This is not a DRM_TYPE_OMA_V1 type"); + } + + return drm_type; +} + +MSG_BOOL msg_ui_viewer_check_drm_ro_valid(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type) +{ + return __get_drm_license_status(filepath, permission_type); +} + +MSG_BOOL msg_ui_viewer_get_drm_url(const char *filepath, char *szurl, int szurl_len) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, szurl == NULL, FALSE); + + int ret = DRM_RETURN_SUCCESS; + drm_content_info_s content_info; + memset(&content_info, 0x0, sizeof(drm_content_info_s)); + + ret = drm_get_content_info(filepath, &content_info); + if (ret != DRM_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_get_content_info is failed ret = %d", ret); + return FALSE; + } + + strncpy(szurl, content_info.rights_url, szurl_len); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "szurl = [%s]", szurl); + + return TRUE; +} + +static drm_permission_type_e __get_permission_type(MSG_UI_DRM_RIGHT_TYPE_E permission_type) +{ + drm_permission_type_e drm_permission_type = DRM_PERMISSION_TYPE_ANY; + + switch (permission_type) { + case MSG_UI_DRM_RIGHT_PLAY: + drm_permission_type = DRM_PERMISSION_TYPE_PLAY; + break; + case MSG_UI_DRM_RIGHT_DISPLAY: + drm_permission_type = DRM_PERMISSION_TYPE_DISPLAY; + break; + default: + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid drm type"); + } + + return drm_permission_type; +} + +MSG_BOOL msg_ui_viewer_consume_ro_start(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, MSG_UI_DRM_CONSUME_S *consume_t) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t == NULL, FALSE); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "permission_type is %d", permission_type); + + drm_permission_type_e permission = DRM_PERMISSION_TYPE_ANY; + DRM_DECRYPT_HANDLE pHandle = NULL; + int ret = DRM_TRUSTED_RETURN_SUCCESS; + + permission = __get_permission_type(permission_type); + + /* Open Decrypt Session*/ + drm_trusted_open_decrypt_info_s open_input_data; + drm_trusted_open_decrypt_resp_data_s open_output_data; + + strncpy(open_input_data.filePath, filepath, sizeof(open_input_data.filePath)-1); + open_input_data.file_type = DRM_TRUSTED_TYPE_OMA_V1; + open_input_data.permission = permission; + + ret = drm_trusted_open_decrypt_session(&open_input_data, &open_output_data, &pHandle); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_open_decrypt_session is failed ret = %d", ret); + return FALSE; + } + consume_t->consume_handle = pHandle; + + /*Start the consumption*/ + drm_trusted_set_consumption_state_info_s state_input_data; + state_input_data.state = DRM_CONSUMPTION_STARTED; + + ret = drm_trusted_set_decrypt_state(consume_t->consume_handle, &state_input_data); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "DRM_CONSUMPTION_STARTED is failed ret = %d", ret); + return FALSE; + } + + return TRUE; +} + +MSG_BOOL msg_ui_viewer_consume_ro_pause(MSG_UI_DRM_CONSUME_S *consume_t) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t->consume_handle == NULL, FALSE); + + int ret = DRM_TRUSTED_RETURN_SUCCESS; + + /* Pause the consumption*/ + drm_trusted_set_consumption_state_info_s state_input_data; + state_input_data.state = DRM_CONSUMPTION_PAUSED; + + ret = drm_trusted_set_decrypt_state(consume_t->consume_handle, &state_input_data); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "DRM_CONSUMPTION_PAUSED is failed ret = %d", ret); + return FALSE; + } + + return TRUE; +} + +MSG_BOOL msg_ui_viewer_consume_ro_resume(MSG_UI_DRM_CONSUME_S *consume_t) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t->consume_handle == NULL, FALSE); + + int ret = DRM_TRUSTED_RETURN_SUCCESS; + + /*Resume the consumption*/ + drm_trusted_set_consumption_state_info_s state_input_data; + state_input_data.state = DRM_CONSUMPTION_RESUMED; + + ret = drm_trusted_set_decrypt_state(consume_t->consume_handle, &state_input_data); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "DRM_CONSUMPTION_RESUMED is failed ret = %d", ret); + return FALSE; + } + + return TRUE; +} + +MSG_BOOL msg_ui_viewer_consume_ro_stop(MSG_UI_DRM_CONSUME_S *consume_t) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, consume_t->consume_handle == NULL, FALSE); + + int ret = DRM_TRUSTED_RETURN_SUCCESS; + + /*stop the consumption*/ + drm_trusted_set_consumption_state_info_s state_input_data; + state_input_data.state = DRM_CONSUMPTION_STOPPED; + + ret = drm_trusted_set_decrypt_state(consume_t->consume_handle, &state_input_data); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "DRM_CONSUMPTION_STOPPED is failed ret = %d", ret); + return FALSE; + } + + /*close the consumption*/ + ret = drm_trusted_close_decrypt_session(&(consume_t->consume_handle)); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_close_decrypt_session is failed ret = %d", ret); + return FALSE; + } + + return TRUE; +} + +unsigned char *msg_ui_viewer_get_buffer_from_drm_file(const char *filepath, MSG_UI_DRM_RIGHT_TYPE_E permission_type, unsigned int *buffer_size) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, buffer_size == NULL, NULL); + + *buffer_size = 0; + + if (!__get_drm_license_status(filepath, permission_type)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__get_drm_license_status is failed"); + return NULL; + } + + unsigned int size = 0; + drm_permission_type_e permission = __get_permission_type(permission_type); + + /* Open Decrypt Session*/ + drm_trusted_open_decrypt_info_s open_input_data; + drm_trusted_open_decrypt_resp_data_s open_output_data; + DRM_DECRYPT_HANDLE pHandle = NULL; + int ret = DRM_TRUSTED_RETURN_SUCCESS; + unsigned char *buffer = NULL; + + memset(&open_input_data, 0x0, sizeof(drm_trusted_open_decrypt_info_s)); + strncpy(open_input_data.filePath, filepath, sizeof(open_input_data.filePath)-1); + open_input_data.file_type = DRM_TRUSTED_TYPE_OMA_V1; + open_input_data.permission = permission; + + ret = drm_trusted_open_decrypt_session(&open_input_data, &open_output_data, &pHandle); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_open_decrypt_session is failed ret = %d", ret); + return NULL; + } + + /* Seek Decrypt Session*/ + drm_trusted_seek_decrypt_info_s seek_input_data; + seek_input_data.offset = 0; + seek_input_data.seek_mode = DRM_SEEK_END; + + ret = drm_trusted_seek_decrypt_session(pHandle, &seek_input_data); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_seek_decrypt_session is failed ret = %d", ret); + goto drm_error; + } + + /* Tell Decrypt Session*/ + drm_trusted_tell_decrypt_resp_data_s tell_output_data; + + ret = drm_trusted_tell_decrypt_session(pHandle, &tell_output_data); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_tell_decrypt_session is failed ret = %d", ret); + goto drm_error; + } + + if (tell_output_data.offset == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm file size is 0"); + goto drm_error; + } + + size = tell_output_data.offset; + + /* Seek Decrypt Session*/ + seek_input_data.offset = 0; + seek_input_data.seek_mode = DRM_SEEK_SET; + + ret = drm_trusted_seek_decrypt_session(pHandle, &seek_input_data); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_seek_decrypt_session is failed ret = %d", ret); + goto drm_error; + } + + buffer = (unsigned char *)malloc(size); + if (buffer == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "malloc is failed"); + goto drm_error; + } + + /* Read Decrypt Session */ + drm_trusted_payload_info_s read_input_data = {0,}; + drm_trusted_read_decrypt_resp_data_s read_output_data = {0, }; + + read_input_data.media_offset = 0; + read_input_data.payload_data = buffer; + read_input_data.payload_data_len = size; + + ret = drm_trusted_read_decrypt_session(pHandle, &read_input_data, &read_output_data); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_read_decrypt_session is failed ret = %d", ret); + goto drm_error; + } + + if (size != read_output_data.read_size) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "read is not perfect size = %d", size); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "read_size = %d", read_output_data.read_size); + + *buffer_size = (unsigned int)size; + + /* Close Decrypt Session */ + ret = drm_trusted_close_decrypt_session(&pHandle); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_close_decrypt_session is failed ret = %d", ret); + + return buffer; + +drm_error: + /* Close Decrypt Session */ + ret = drm_trusted_close_decrypt_session(&pHandle); + if (ret != DRM_TRUSTED_RETURN_SUCCESS) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "drm_trusted_close_decrypt_session is failed ret = %d", ret); + + if (buffer) + free(buffer); + + return NULL; +} + diff --git a/viewer/src/msg-ui-viewer-gadget.c b/viewer/src/msg-ui-viewer-gadget.c new file mode 100755 index 0000000..623c5d5 --- /dev/null +++ b/viewer/src/msg-ui-viewer-gadget.c @@ -0,0 +1,533 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef UG_MODULE_API +#define UG_MODULE_API __attribute__ ((visibility("default"))) +#endif + +/*================================================================================================== + * INCLUDE HEADERS +*==================================================================================================*/ +#include <msg.h> +#include "msg-smil-player-interface.h" +#include "msg-ui-common-utility.h" +#include "msg-ui-viewer-main.h" +#include "msg-ui-image-resource.h" +#include <Ecore_X.h> +#include <glib.h> +#include <vconf.h> +#include "msg-ui-common-utility.h" + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, service_h svc_handle, void *priv); +static void __msg_ui_viewer_on_start(ui_gadget_h ug, service_h svc_handle, void *priv); +static void __msg_ui_viewer_on_pause(ui_gadget_h ug, service_h svc_handle, void *priv); +static void __msg_ui_viewer_on_resume(ui_gadget_h ug, service_h svc_handle, void *priv); +static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, void *priv); +static void __msg_ui_viewer_on_message(ui_gadget_h ug, service_h svc_msg_h, service_h svc_data_h, void *priv); +static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, service_h svc_handle, void *priv); +static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h svc_handle, void *priv); + +static void __msg_ui_viewer_destroy_viewer_ug(void *data); +static unsigned int __msg_ui_viewer_convert_atoh(const char *string); +static void __msg_ui_viewer_rotate_play_window(void *data, int rotate); + +/*================================================================================================== + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +static unsigned int __msg_ui_viewer_convert_atoh(const char *string) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, string == NULL, 0); + unsigned int value = 0; + unsigned int digit = 0; + char c; + + while ((c = *string++) != '\0') { + if (c >= '0' && c <= '9') + digit = (unsigned int) (c - '0'); + else if (c >= 'a' && c <= 'f') + digit = (unsigned int) (c - 'a') + 10; + else if (c >= 'A' && c <= 'F') + digit = (unsigned int) (c - 'A') + 10; + else + break; + + value = (value << 4) + digit; + } + + return value; +} + +static void __msg_ui_viewer_rotate_play_window(void *data, int rotate) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode); + + if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) { + if (viewer_main_data->player_view) { + MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS; + + if ((Error = msg_smil_on_slide_event_handler(&(viewer_main_data->SmilHandle), PLAYER_EVENT_ROTATE_WINDOW)) != MSG_SMIL_SUCCESS) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "PLAYER_EVENT_ROTATE_WINDOW failed : %d", Error); + } + } +} + +static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, service_h svc_handle, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, ug == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, svc_handle == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, priv == NULL, NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv; + msg_error_t err = MSG_SUCCESS; + msg_handle_t msgHandle = NULL; + Evas_Object *layout = NULL; + + /*Set Message Handler*/ + err = msg_open_msg_handle(&msgHandle); + + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_open_msg_handle failed, Error = %d", err); + ug_destroy_me(ug); + return NULL; + } + + msg_ui_viewer_main_init(viewer_main_data); + + viewer_main_data->viewer_ug = ug; + viewer_main_data->cbs.layout_cb = msg_ui_viewer_layout_cb; + viewer_main_data->cbs.result_cb = msg_ui_viewer_result_cb; + viewer_main_data->cbs.destroy_cb = msg_ui_viewer_destroy_cb; + viewer_main_data->cbs.priv = (void *)viewer_main_data; + viewer_main_data->msgHandle = msgHandle; + viewer_main_data->main_window = ug_get_window(); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_main_data->main_window == NULL, NULL); + + if (svc_handle) { + char *mode_value = NULL; + /* get mode value */ + service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MODE, &mode_value); + + /*preview mode*/ + if (!g_strcmp0(mode_value, MSG_BUNDLE_VALUE_PREVIEW_MODE)) { + unsigned int msg_t_pointer = 0; + char *preview_data = NULL; + + viewer_main_data->launchmode = MSG_VIEWER_PREVIEW_MODE; + + /* get data value */ + service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_PREVIEW_DATA, &preview_data); + + if (preview_data) { + /* get subject text for preview msg - mms_t doesn't have subject string */ + int strlenSubject = 0; + char strSubject[MAX_SUBJECT_LEN] = {0}; + msg_t_pointer = __msg_ui_viewer_convert_atoh((const char*)preview_data); + msg_get_str_value((msg_struct_t)msg_t_pointer, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN); + + /*create new msg info struct */ + viewer_main_data->msg_t = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + strlenSubject = strlen(strSubject); + msg_set_str_value(viewer_main_data->msg_t, MSG_MESSAGE_SUBJECT_STR, strSubject, strlenSubject); + + /*create mms_t*/ + viewer_main_data->mms_t = msg_create_struct(MSG_STRUCT_MMS); + err = msg_get_mms_struct((msg_struct_t)msg_t_pointer, viewer_main_data->mms_t); + + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed in get mms data handler"); + return FALSE; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "preview_data is NULL"); + return NULL; + } + } else { /*normal view mode*/ + char *msgid = NULL; + service_get_extra_data(svc_handle, MSG_BUNDLE_KEY_MSG_ID, &msgid); + if (msgid) { + viewer_main_data->msgID = (int)atoi(msgid); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msgID = %d", viewer_main_data->msgID); + } + else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "There is no msgID"); + return NULL; + } + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "data is NULL"); + return NULL; + } + + if (mode == UG_MODE_FULLVIEW) { + viewer_main_data->ug_launch_mode = MSG_UG_MODE_FULLVIEW; + /*create layout*/ + Evas_Object *bg = msg_ui_viewer_create_bg(viewer_main_data, viewer_main_data->main_window); + layout = msg_ui_viewer_create_layout_main(viewer_main_data->main_window); + viewer_main_data->layout_main = layout; + + if (bg) + elm_object_part_content_set(layout, "elm.swallow.bg", bg); + else + return NULL; + } else { + viewer_main_data->ug_launch_mode = MSG_UG_MODE_FRAMVIEW; + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "framview is not supported"); + return NULL; + } + + return layout; +} + +static void __msg_ui_viewer_on_start(ui_gadget_h ug, service_h svc_handle, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv; + + msg_common_apply_font_size("entry", viewer_main_data->layout_main); + + if (msg_ui_viewer_launch(viewer_main_data) == FALSE) { + msg_common_reset_font_size("entry"); + ug_destroy_me(viewer_main_data->viewer_ug); + } +} + +static void __msg_ui_viewer_on_pause(ui_gadget_h ug, service_h svc_handle, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode); + + if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) { + if (viewer_main_data->player_view) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Player view launch_cmd : %d, cmd_type : %d", viewer_main_data->player_view->launch_cmd, viewer_main_data->player_view->cmd_type); + /* viewer will be paused */ + MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS; + msg_ui_viewer_disconnect_handler(viewer_main_data->player_view); + + if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY) { + Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_PAUSE); + if (Error != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error); + } + + Evas_Object *play_icon = elm_object_part_content_get(viewer_main_data->player_view->play_layout, "viewer.swallow.play.controller"); + if (play_icon != NULL) + edje_object_signal_emit(_EDJ(play_icon), "play", "*"); + viewer_main_data->player_view->status = MSG_VIEWER_PAUSE; + } + } + } +} + +static void __msg_ui_viewer_on_resume(ui_gadget_h ug, service_h svc_handle, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode); + + msg_common_apply_font_size("entry", viewer_main_data->layout_main); + + if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) { + if (viewer_main_data->player_view) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Player view launch_cmd : %d, cmd_type : %d", viewer_main_data->player_view->launch_cmd, viewer_main_data->player_view->cmd_type); + /*connect handler again*/ + if (!viewer_main_data->player_view->mouse_down_event_handler) + viewer_main_data->player_view->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_main_data->player_view); + + if (viewer_main_data->player_view->launch_cmd == MSG_VIEWER_LOAD_OTHER_APP_MODE) { + /*reset launch_cmd and cmd_type*/ + viewer_main_data->player_view->launch_cmd = MSG_VIEWER_DEFAULT_MODE; + viewer_main_data->player_view->cmd_type = MSG_VIEWER_CMD_NONE; + } + } + } else if (viewer_main_data->view_mode == MSG_VIEWER_DRM_LIST_VIEW) { + if (viewer_main_data->drm_list_view) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drm list view drm_list_cmd : %d", viewer_main_data->drm_list_view->drm_list_cmd); + if (viewer_main_data->drm_list_view->drm_list_cmd == MSG_VIEWER_DRM_LIST_CMD_LAUNCH_BROWSER) { + if (msg_ui_viewer_drm_list_check_current_ro_valid(viewer_main_data->drm_list_view)) + msg_ui_viewer_drm_list_delete_current_list(viewer_main_data->drm_list_view); + + viewer_main_data->drm_list_view->drm_list_cmd = MSG_VIEWER_DRM_LIST_CMD_NONE; + viewer_main_data->drm_list_view->selected_file_info = NULL; + } + } + } +} + +static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv; + msg_error_t err; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->SmilHandle : %x", viewer_main_data->SmilHandle); + + if (viewer_main_data->item_list_view) { + msg_ui_viewer_destroy_item_list(viewer_main_data->item_list_view); + free(viewer_main_data->item_list_view); + viewer_main_data->item_list_view = NULL; + } + + if (viewer_main_data->player_view) { + msg_ui_viewer_destroy_play_view(viewer_main_data->player_view); + free(viewer_main_data->player_view); + viewer_main_data->player_view = NULL; + } + + if (viewer_main_data->drm_list_view) { + msg_ui_viewer_destroy_drm_list_view(viewer_main_data->drm_list_view); + free(viewer_main_data->drm_list_view); + viewer_main_data->drm_list_view = NULL; + } + + if (viewer_main_data->bg) { + evas_object_del(viewer_main_data->bg); + viewer_main_data->bg = NULL; + } + + if (viewer_main_data->layout_main) { + evas_object_del(viewer_main_data->layout_main); + viewer_main_data->layout_main = NULL; + } + + /*destroy viewer_main data*/ + /*free the drm list*/ + if (viewer_main_data->drm_list) { + MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL; + int ntotal = eina_list_count(viewer_main_data->drm_list); + int index = 0; + + for (index = 0; index < ntotal; index++) { + pmedia_info = eina_list_nth(viewer_main_data->drm_list, index); + if (pmedia_info) { + free(pmedia_info); + pmedia_info = NULL; + } + } + eina_list_free(viewer_main_data->drm_list); + viewer_main_data->drm_list = NULL; + } + + if (viewer_main_data->SmilHandle) { + msg_smil_destroy_smil_player(viewer_main_data->SmilHandle); + msg_ui_viewer_set_smilhandle(viewer_main_data, NULL); + } + + /* release msg info struct handle */ + if (viewer_main_data->msg_t) { + msg_release_struct(&viewer_main_data->msg_t); + viewer_main_data->msg_t = NULL; + } + + /* release mms struct handle */ + if (viewer_main_data->mms_t) { + msg_release_struct(&viewer_main_data->mms_t); + viewer_main_data->mms_t = NULL; + } + + if ((err = msg_close_msg_handle(&viewer_main_data->msgHandle)) != MSG_SUCCESS) + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "msg_close_msg_handle, err=[%d]", err); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_on_message(ui_gadget_h ug, service_h svc_msg_h, service_h svc_data_h, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_on_event(ui_gadget_h ug, enum ug_event event, service_h svc_handle, void *priv) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "event : %d", event); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv; + + switch (event) { + case UG_EVENT_LOW_MEMORY: + break; + case UG_EVENT_LOW_BATTERY: + { + int battey_level = 0; + vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW , &battey_level); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "battey_level = %d", battey_level); + if (battey_level == VCONFKEY_SYSMAN_BAT_POWER_OFF) + __msg_ui_viewer_destroy_viewer_ug(priv); + + break; + } + case UG_EVENT_LANG_CHANGE: + break; + case UG_EVENT_ROTATE_PORTRAIT: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_PORTRAIT"); + __msg_ui_viewer_rotate_play_window(viewer_main_data, 0); + break; + case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN"); + __msg_ui_viewer_rotate_play_window(viewer_main_data, 180); + break; + case UG_EVENT_ROTATE_LANDSCAPE: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_LANDSCAPE"); + __msg_ui_viewer_rotate_play_window(viewer_main_data, 270); + break; + case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN"); + __msg_ui_viewer_rotate_play_window(viewer_main_data, 90); + break; + case UG_EVENT_REGION_CHANGE: + break; + default: + break; + } +} + +static void __msg_ui_viewer_on_key_event(ui_gadget_h ug, enum ug_key_event event, service_h svc_handle, void *priv) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, ug == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, priv == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)priv; + MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS; + int ispopup = FALSE; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->view_mode : %d", viewer_main_data->view_mode); + + switch (event) { + case UG_KEY_EVENT_END: + if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) { + if (viewer_main_data->player_view) { + if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY || + viewer_main_data->player_view->status == MSG_VIEWER_PAUSE) { + Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_STOP); + if (Error != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error); + } + + viewer_main_data->player_view->status = MSG_VIEWER_STOP; + msg_ui_viewer_update_play_controller(viewer_main_data->player_view, MSG_VIEWER_STOP); + } + } + } else if (viewer_main_data->view_mode == MSG_VIEWER_ITEM_LIST_VIEW) { + if (viewer_main_data->item_list_view) { + if (viewer_main_data->item_list_view->popup) { + elm_popup_timeout_set(viewer_main_data->item_list_view->popup, 0); + evas_object_del(viewer_main_data->item_list_view->popup); + viewer_main_data->item_list_view->popup = NULL; + ispopup = TRUE; + } + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Not required case"); + } + + if (ispopup == FALSE) { + if (!viewer_main_data->del_idler) + viewer_main_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_main_data); + } + + break; + default: + break; + } +} + +static void __msg_ui_viewer_destroy_viewer_ug(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS; + + if (viewer_main_data->view_mode == MSG_VIEWER_PLAYER_VIEW) { + if (viewer_main_data->player_view) { + if (viewer_main_data->player_view->status == MSG_VIEWER_PLAY || + viewer_main_data->player_view->status == MSG_VIEWER_PAUSE) { + Error = msg_smil_on_slide_event_handler(&(viewer_main_data->player_view->SmilHandle), PLAYER_EVENT_STOP); + if (Error != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error); + } else + viewer_main_data->player_view->status = MSG_VIEWER_STOP; + } + } + } else if (viewer_main_data->view_mode == MSG_VIEWER_ITEM_LIST_VIEW) { + if (viewer_main_data->item_list_view) { + if (viewer_main_data->item_list_view->popup) { + elm_popup_timeout_set(viewer_main_data->item_list_view->popup, 0); + evas_object_del(viewer_main_data->item_list_view->popup); + viewer_main_data->item_list_view->popup = NULL; + } + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d mode is not required anything", viewer_main_data->view_mode); + } + + if (!viewer_main_data->del_idler) + viewer_main_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_main_data); +} + +UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = NULL; + + if (!ops) + return MSG_UI_RET_ERR; + + viewer_main_data = calloc(1, sizeof(MSG_VIEWER_MAIN_DATA_S)); + if (!viewer_main_data) + return MSG_UI_RET_ERR; + + ops->create = __msg_ui_viewer_on_create; + ops->start = __msg_ui_viewer_on_start; + ops->pause = __msg_ui_viewer_on_pause; + ops->resume = __msg_ui_viewer_on_resume; + ops->destroy = __msg_ui_viewer_on_destroy; + ops->message = __msg_ui_viewer_on_message; + ops->event = __msg_ui_viewer_on_event; + ops->key_event = __msg_ui_viewer_on_key_event; + ops->priv = (void *)viewer_main_data; + ops->opt = UG_OPT_INDICATOR_ENABLE; + + return MSG_UI_RET_SUCCESS; +} + +UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = NULL; + + if (!ops) + return; + + viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)ops->priv; + + if (viewer_main_data) + free(viewer_main_data); +} diff --git a/viewer/src/msg-ui-viewer-item-list.c b/viewer/src/msg-ui-viewer-item-list.c new file mode 100755 index 0000000..a95b689 --- /dev/null +++ b/viewer/src/msg-ui-viewer-item-list.c @@ -0,0 +1,896 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + * ==================================================================================================*/ +#include <msg.h> +#include <msg_storage.h> +#include <msg_transport.h> + +#include "msg-ui-viewer-item-list.h" +#include "msg-ui-viewer-main.h" +#include "msg-ui-image-resource.h" +#include "msg-ui-viewer-utility.h" +#include "msg-ui-common-utility.h" + +#include "aul.h" +#include <glib.h> +#include <Ecore_X.h> +#include "appsvc.h" +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +static void __viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_viewer_item_list_popup(void *data, Evas_Object *parent, char *pcontent); +static void __viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info); + +static MSG_BOOL __msg_ui_viewer_auto_rename(char *src_path, char *dst_path); +static void __viewer_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info); + +static char *__msg_ui_viewer_text_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object *__msg_ui_viewer_content_get(void *data, Evas_Object *obj, const char *part); +static char *__msg_ui_viewer_group_text_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_viewer_genlist_item_selected(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_viewer_item_selected(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_viewer_create_genlist(void *data); +static void __msg_ui_viewer_set_list_styles(void *data); +static void __msg_ui_viewer_item_list_set_list_data(Evas_Object *genlist, void *data); +static MSG_BOOL __msg_ui_viewer_item_list_get_list_data(void *data); +static MSG_BOOL __msg_ui_viewer_get_body_message(void *data); +static void __viewer_toolbar_play_cb(void *data, Evas_Object *obj, void *event_info); +static void __viewer_toolbar_save_all_cb(void *data, Evas_Object *obj, void *event_info); +static Evas_Object *__msg_ui_viewer_create_toolbar(Evas_Object *parent, void *data); + +/*================================================================================================== +* FUNCTION IMPLEMENTATIONS +*==================================================================================================*/ +void msg_ui_viewer_init_item_list(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + + pitem_list_data->viewer_main = NULL; + pitem_list_data->main_window = NULL; + pitem_list_data->navi_frame = NULL; + pitem_list_data->popup = NULL; + pitem_list_data->genlist = NULL; + pitem_list_data->msgHandle = NULL; + pitem_list_data->msgID = 0; + pitem_list_data->mms_t = NULL; + pitem_list_data->insert_item_count = 0; + pitem_list_data->attach_item_count = 0; + pitem_list_data->insert_list = NULL; + pitem_list_data->attach_list = NULL; + pitem_list_data->group_list[0].index = 0; + pitem_list_data->group_list[0].group_label = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_INSERTED_ITEMS"); + pitem_list_data->group_list[1].index = 1; + pitem_list_data->group_list[1].group_label = dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_ATTACHED_ITEMS"); + + pitem_list_data->group_item_class = NULL; + memset(&pitem_list_data->item_class, 0x00, sizeof(Elm_Genlist_Item_Class)); + memset(&pitem_list_data->title_class, 0x00, sizeof(Elm_Genlist_Item_Class)); +} + +void msg_ui_viewer_destroy_item_list(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + + if (pitem_list_data->popup) { + evas_object_del(pitem_list_data->popup); + pitem_list_data->popup = NULL; + } + + + /*free insert list*/ + if (pitem_list_data->insert_list) { + int index = 0; + int ntotal = 0; + ntotal = eina_list_count(pitem_list_data->insert_list); + for (index = 0; index < ntotal; index++) { + MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->insert_list, index); + if (pmedia_info) { + free(pmedia_info); + pmedia_info = NULL; + } + } + eina_list_free(pitem_list_data->insert_list); + pitem_list_data->insert_list = NULL; + } + + /*free attach list*/ + if (pitem_list_data->attach_list) { + int index = 0; + int ntotal = 0; + ntotal = eina_list_count(pitem_list_data->attach_list); + for (index = 0; index < ntotal; index++) { + MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->attach_list, index); + if (pmedia_info) { + free(pmedia_info); + pmedia_info = NULL; + } + } + eina_list_free(pitem_list_data->attach_list); + pitem_list_data->attach_list = NULL; + } + + /* genlist must be destroyed before freeing itc */ + if (pitem_list_data->genlist) { + evas_object_del(pitem_list_data->genlist); + pitem_list_data->genlist = NULL; + } + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, obj == NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + + msg_common_reset_font_size("entry"); + ug_destroy_me(msg_ui_viewer_get_viewer_ug(pitem_list_data->viewer_main)); + elm_object_disabled_set(obj, TRUE); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static MSG_BOOL __msg_ui_viewer_auto_rename(char *src_path, char *dst_path) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, src_path == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, dst_path == NULL, FALSE); + char file_ext[MSG_VIEWER_FILE_EXT_MAX_LEN + 1] = {0}; + char file_name_without_ext[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0}; + char new_file_name[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0}; + MSG_BOOL result = FALSE; + int ncount = 0; + + strncpy(file_name_without_ext, dst_path, MSG_VIEWER_FILENAME_MAX_LEN); + result = msg_viewer_util_get_file_ext(dst_path, file_ext, MSG_VIEWER_FILE_EXT_MAX_LEN); + if (result) + file_name_without_ext[strlen(file_name_without_ext) - strlen(file_ext) - 1] = '\0'; + + ncount = msg_viewer_util_get_next_number(file_name_without_ext); + if (ncount < 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid filename"); + return FALSE; + } else { + /*find new filename*/ + Eina_Bool is_exists = FALSE; + do { + if (strlen(file_ext) > 0) + snprintf(new_file_name, sizeof(new_file_name), "%s_%d.%s", file_name_without_ext, ncount, file_ext); + else + snprintf(new_file_name, sizeof(new_file_name), "%s_%d", file_name_without_ext, ncount); + /*check for same file*/ + is_exists = ecore_file_exists(new_file_name); + if (is_exists == EINA_TRUE) { + memset(new_file_name, 0x00, sizeof(new_file_name)); + ncount++; + } else { + break; + } + } while (is_exists); + + if (ecore_file_cp(src_path, new_file_name) == EINA_FALSE) + return FALSE; + } + + return TRUE; +} + +static void __viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + + if (pitem_list_data->popup) { + evas_object_del(pitem_list_data->popup); + pitem_list_data->popup = NULL; + } +} + +static void __viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + + if (pitem_list_data->popup) { + evas_object_del(pitem_list_data->popup); + pitem_list_data->popup = NULL; + } +} + +static void __msg_ui_viewer_item_list_popup(void *data, Evas_Object *parent, char *pcontent) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, parent == NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + Evas_Object *popup = NULL; + + if (pitem_list_data->popup) { + evas_object_del(pitem_list_data->popup); + pitem_list_data->popup = NULL; + } + + popup = elm_popup_add(parent); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, popup == NULL); + pitem_list_data->popup = popup; + + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + if (pcontent) { + elm_object_text_set(popup, pcontent); + elm_popup_timeout_set(popup, 2); + evas_object_smart_callback_add(popup, "block,clicked", __viewer_popup_block_clicked_cb, pitem_list_data); + evas_object_smart_callback_add(popup, "timeout", __viewer_popup_timeout_cb, pitem_list_data); + } else { + evas_object_del(pitem_list_data->popup); + pitem_list_data->popup = NULL; + return; + } + + evas_object_show(popup); +} + +static void __viewer_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data; + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)pmedia_info->item_list_data; + + if (strlen(pmedia_info->pfile_path) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pfile_path is NULL"); + __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE")); + return; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "source pfile_path = [%s]", pmedia_info->pfile_path); + MSG_BOOL result = 0; + MSG_BOOL issave = TRUE; + char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0}; + + /*get default file path*/ + result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path)); + if (result) { + char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,}; + snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pmedia_info->pfile_name); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = [%s]", dst_path); + + /*check for same file*/ + if (ecore_file_exists(dst_path) == EINA_TRUE) { + if (__msg_ui_viewer_auto_rename(pmedia_info->pfile_path, dst_path) == FALSE) + issave = FALSE; + } else { + if (ecore_file_cp(pmedia_info->pfile_path, dst_path) == EINA_FALSE) + issave = FALSE; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_viewer_util_get_default_path is failed"); + __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE")); + return; + } + + if (issave) + __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_SAVED")); + else + __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE")); + } +} + +static char *__msg_ui_viewer_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL); + MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data; + + if (strcmp(part, "elm.text") == 0) { + if (pmedia_info) + return strdup(pmedia_info->pfile_name); + } + return NULL; +} + +static Evas_Object *__msg_ui_viewer_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, obj == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL); + + if (strcmp(part, "elm.icon.2") == 0) { + Evas_Object *box = elm_box_add(obj); + Evas_Object *button = elm_button_add(obj); + Evas_Object *icon = elm_icon_add(obj); + + evas_object_propagate_events_set(button, EINA_FALSE); + elm_box_pack_start(box, button); + elm_icon_file_set(icon, MSG_VIEWER_IMAGE_SAVE_ICON, NULL); + elm_object_part_content_set(button, "icon", icon); + evas_object_smart_callback_add(button, "clicked", __viewer_save_button_clicked_cb, data); + evas_object_show(button); + evas_object_show(box); + return box; + } else if (strcmp(part, "elm.icon.1") == 0) { + MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data; + Evas_Object *image = NULL; + + image = elm_icon_add(obj); + + /*set attach file icon*/ + if (pmedia_info->emedia_type == MSG_MEDIA_IMG || + pmedia_info->emedia_type == MSG_MEDIA_ANIMATE) { + elm_icon_file_set(image, pmedia_info->pfile_path, NULL); + } else if (pmedia_info->emedia_type == MSG_MEDIA_DRM) { + elm_icon_file_set(image, MSG_VIEWER_IMAGE_DRM_SMALL_ICON, NULL); + } else { + if (strlen(pmedia_info->pfile_path)) { + const char *icon_path = NULL; + + icon_path = msg_common_get_file_icon(pmedia_info->pfile_path); + if (icon_path) { + elm_icon_file_set(image, icon_path, NULL); + } else { + D_EMSG("icon_path is NULL"); + elm_icon_file_set(image, MSG_VIEWER_IMAGE_ATTACH_ICON, NULL); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL"); + return NULL; + } + } + + if (image) + evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + return image; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part); + } + + return NULL; +} + +static char *__msg_ui_viewer_group_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL); + MSG_GROUP_LABEL_S *group_label = (MSG_GROUP_LABEL_S *) data; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", group_label->index); + + if (strcmp(part, "elm.text") == 0) { + if (group_label->group_label) + return strdup(group_label->group_label); + } + + return NULL; +} + +static void __msg_ui_viewer_genlist_item_selected(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL); + Elm_Object_Item *pitem = (Elm_Object_Item *)event_info; + + elm_genlist_item_selected_set(pitem, FALSE); + return; +} + +static void __msg_ui_viewer_item_selected(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL); + MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)data; + Elm_Object_Item *pselected_item = (Elm_Object_Item *)event_info; + + elm_genlist_item_selected_set(pselected_item, FALSE); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name = [%s]", pmedia_info->pfile_name); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path = [%s]", pmedia_info->pfile_path); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "emedia_type = %d", pmedia_info->emedia_type); + + char mimetype[MSG_BUFFER_SIZE_64 + 1] = {0,}; + char defapp[MSG_BUFFER_SIZE_64 + 1] = {0,}; + + service_h svc_handle = NULL; + service_create(&svc_handle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL); + + service_set_operation(svc_handle, SERVICE_OPERATION_VIEW); + service_set_uri(svc_handle, pmedia_info->pfile_path); + + /*get mime type*/ + if (aul_get_mime_from_file(pmedia_info->pfile_path, mimetype, sizeof(mimetype)) < 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mime type failed"); + + if (SERVICE_ERROR_NONE != service_send_launch_request(svc_handle, NULL, NULL)) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed"); + + service_destroy(svc_handle); + return; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mime type [%s]", mimetype); + } + + /*get default app*/ + if (aul_get_defapp_from_mime(mimetype, defapp, sizeof(defapp)) < 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "default app failed"); + + if (SERVICE_ERROR_NONE != service_send_launch_request(svc_handle, NULL, NULL)) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_send_launch_request is failed"); + + service_destroy(svc_handle); + return; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "default app [%s]", defapp); + } + + /*launch application*/ + if (strcmp(defapp, VIDEO_PLAYER_PKG_NAME) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Video content"); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_LAUNCH_APPLICATION, MESSAGE_PKGNAME); + } + + if (SERVICE_ERROR_NONE != service_send_launch_request(svc_handle, NULL, NULL)) + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request is failed"); + + service_destroy(svc_handle); + + return; +} + +static Evas_Object *__msg_ui_viewer_create_genlist(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + Evas_Object *genlist = NULL; + + genlist = elm_genlist_add(pitem_list_data->navi_frame); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return genlist; +} + +static void __msg_ui_viewer_set_list_styles(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + + pitem_list_data->item_class.item_style = "1text.2icon"; + pitem_list_data->item_class.func.text_get = __msg_ui_viewer_text_get; + pitem_list_data->item_class.func.content_get = __msg_ui_viewer_content_get; + pitem_list_data->item_class.func.del = NULL; + pitem_list_data->item_class.func.state_get = NULL; + + pitem_list_data->title_class.item_style = "grouptitle.dialogue"; + pitem_list_data->title_class.func.text_get = __msg_ui_viewer_group_text_get; + pitem_list_data->title_class.func.content_get = NULL; + pitem_list_data->title_class.func.del = NULL; + pitem_list_data->title_class.func.state_get = NULL; + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_item_list_set_list_data(Evas_Object *genlist, void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, genlist == NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + int nmedia_count = pitem_list_data->insert_item_count; + int attachment_count = pitem_list_data->attach_item_count; + + /*add inserted items*/ + if (nmedia_count > 0) { + int insert_index = 0; + pitem_list_data->group_item_class = elm_genlist_item_append(genlist, &pitem_list_data->title_class, (void *)(&pitem_list_data->group_list[0]), NULL, ELM_GENLIST_ITEM_GROUP, __msg_ui_viewer_genlist_item_selected, (void*)ITEM_LIST_INFO_INSERT_FILE); + for (insert_index = 0; insert_index < nmedia_count; insert_index++) { + MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->insert_list, insert_index); + if (pmedia_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL"); + } else { + elm_genlist_item_append(genlist, &pitem_list_data->item_class, (void *)(pmedia_info), pitem_list_data->group_item_class, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_item_selected, (void*)(pmedia_info)); + } + } + } + + /*add attached items*/ + if (attachment_count > 0) { + int attach_index = 0; + pitem_list_data->group_item_class = elm_genlist_item_append(genlist, &pitem_list_data->title_class, (void *)(&pitem_list_data->group_list[1]), NULL, ELM_GENLIST_ITEM_GROUP, __msg_ui_viewer_genlist_item_selected, (void*)ITEM_LIST_INFO_ATTACH_FILE); + for (attach_index = 0; attach_index < attachment_count; attach_index++) { + MSG_MEDIA_INFO_S *pmedia_info = eina_list_nth(pitem_list_data->attach_list, attach_index); + if (pmedia_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL"); + } else { + elm_genlist_item_append(genlist, &pitem_list_data->item_class, (void *)(pmedia_info), pitem_list_data->group_item_class, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_item_selected, (void*)(pmedia_info)); + } + } + } + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static MSG_BOOL __msg_ui_viewer_item_list_get_list_data(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + msg_list_handle_t pagelist_info = NULL; + msg_struct_t page_info = NULL; + msg_list_handle_t medialist_info = NULL; + msg_struct_t media_info = NULL; + + msg_list_handle_t attachlist_info = NULL; + msg_struct_t attach_info = NULL; + + int nPageCnt = 0; + int nPageMediaCnt = 0; + int nAttachmentCnt = 0; + int nmedia_count = 0; + int attach_count = 0; + + char strFileName[MSG_FILENAME_LEN_MAX] = {0,}; + char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,}; + + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, pitem_list_data->mms_t == NULL, FALSE); + + msg_get_list_handle(pitem_list_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + if (!pagelist_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_list_handle(MSG_MMS_PAGE_LIST_HND) is failed"); + return FALSE; + } + + nPageCnt = msg_list_length(pagelist_info); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pageCnt = %d", nPageCnt); + + /*get inserted content list*/ + if (nPageCnt) { + int page_idx = 0; + + for (page_idx = 0; page_idx < nPageCnt; ++page_idx) { + page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx); + + if (!page_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL"); + continue; + } + + msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info); + + if (!medialist_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "medialist_info is NULL"); + continue; + } + nPageMediaCnt = msg_list_length(medialist_info); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, media count = %d", page_idx, nPageMediaCnt); + + int media_idx = 0; + for (media_idx = 0; media_idx < nPageMediaCnt; ++media_idx) { + int mediaType = 0; + int drmType = 0; + media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx); + + if (!media_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info is NULL"); + continue; + } + + bzero(strFileName, sizeof(strFileName)); + bzero(strFilePath, sizeof(strFilePath)); + + msg_get_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, strFileName, sizeof(strFileName)); + msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath)); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "filename [%s], filepath [%s]", strFileName, strFilePath); + + msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + + /*skip the text file*/ + if (mediaType == MMS_SMIL_MEDIA_TEXT) + continue; + + MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)calloc(1, sizeof(MSG_MEDIA_INFO_S)); + if (pmedia_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return FALSE; + } else { + if (strlen(strFileName)) { + strncpy(pmedia_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN); + } else { + const char *file_name = NULL; + file_name = ecore_file_file_get(strFilePath); + if (file_name) + strncpy(pmedia_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN); + else + strncpy(pmedia_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN); + } + + strncpy(pmedia_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN); + + msg_get_int_value(media_info, MSG_MMS_MEDIA_DRM_TYPE_INT, &drmType); + + if (drmType != MSG_DRM_TYPE_NONE) { + char szDrmFullPath[MSG_FILEPATH_LEN_MAX] = {0,}; + bzero(szDrmFullPath, sizeof(szDrmFullPath)); + msg_get_str_value(media_info, MSG_MMS_MEDIA_DRM_FULLPATH_STR, szDrmFullPath, sizeof(szDrmFullPath)); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drmtype: %d (1: Fowward Lock, 2:Combined Delivery, 3: Separated Delivery), drmpath: %s", drmType, szDrmFullPath); + pmedia_info->emedia_type = MSG_MEDIA_DRM; + } else { + if (mediaType == MMS_SMIL_MEDIA_IMG) + pmedia_info->emedia_type = MSG_MEDIA_IMG; + else if (mediaType == MMS_SMIL_MEDIA_AUDIO) + pmedia_info->emedia_type = MSG_MEDIA_AUDIO; + else if (mediaType == MMS_SMIL_MEDIA_VIDEO) + pmedia_info->emedia_type = MSG_MEDIA_VIDEO; + else if (mediaType == MMS_SMIL_MEDIA_TEXT) + pmedia_info->emedia_type = MSG_MEDIA_TEXT; + else if (mediaType == MMS_SMIL_MEDIA_ANIMATE) + pmedia_info->emedia_type = MSG_MEDIA_ANIMATE; + else if (mediaType == MMS_SMIL_MEDIA_IMG_OR_VIDEO) + pmedia_info->emedia_type = MSG_MEDIA_IMG_OR_VIDEO; + else { + pmedia_info->emedia_type = MSG_MEDIA_INVALID; + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid mediaType : %d", mediaType); + } + } + pmedia_info->item_list_data = pitem_list_data; + /*append insert list*/ + pitem_list_data->insert_list = eina_list_append(pitem_list_data->insert_list, pmedia_info); + nmedia_count++; + } + } + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Multipart Mixed"); + } + pitem_list_data->insert_item_count = nmedia_count; + + /*get attached content list*/ + int attach_idx = 0; + msg_get_list_handle(pitem_list_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info); + + nAttachmentCnt = msg_list_length(attachlist_info); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachmentCnt = %d", nAttachmentCnt); + + for (attach_idx = 0; attach_idx < nAttachmentCnt; ++attach_idx) { + attach_info = (msg_struct_t)msg_list_nth_data(attachlist_info, attach_idx); + + if (attach_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach is NULL"); + continue; + } else { + bzero(strFileName, sizeof(strFileName)); + bzero(strFilePath, sizeof(strFilePath)); + + msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILENAME_STR, strFileName, sizeof(strFileName)); + msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, strFilePath, sizeof(strFilePath)); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file name: %s", strFileName); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath); + + MSG_MEDIA_INFO_S *pmedia_info = (MSG_MEDIA_INFO_S *)calloc(1, sizeof(MSG_MEDIA_INFO_S)); + if (pmedia_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return FALSE; + } else { + if (strlen(strFileName)) { + strncpy(pmedia_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN); + } else { + const char *file_name = NULL; + file_name = ecore_file_file_get(strFilePath); + if (file_name) + strncpy(pmedia_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN); + else + strncpy(pmedia_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN); + } + + strncpy(pmedia_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN); + pmedia_info->emedia_type = MSG_MEDIA_ATTACH; + pmedia_info->item_list_data = pitem_list_data; + /*append attach list*/ + pitem_list_data->attach_list = eina_list_append(pitem_list_data->attach_list, pmedia_info); + attach_count++; + } + } + } + pitem_list_data->attach_item_count = attach_count; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert_count = %d, attach_count = %d", nmedia_count, attach_count); + + return TRUE; +} + +static MSG_BOOL __msg_ui_viewer_get_body_message(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + + if (pitem_list_data->mms_t == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pitem_list_data->mms_t is failed"); + return FALSE; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + +static void __viewer_toolbar_play_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + + msg_ui_viewer_destroy_item_list(pitem_list_data); + msg_ui_viewer_show_view_by_mode(pitem_list_data->viewer_main, MSG_VIEWER_PLAYER_VIEW, MSG_VIEWER_VIEW_CMD_PLAY); + elm_naviframe_item_pop(pitem_list_data->navi_frame); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __viewer_toolbar_save_all_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + + int insert_cnt = eina_list_count(pitem_list_data->insert_list); + int attach_cnt = eina_list_count(pitem_list_data->attach_list); + int total_cnt = insert_cnt + attach_cnt; + int index = 0; + int insert_index = 0; + int attach_index = 0; + int failed_count = 0; + int saved_count = 0; + MSG_MEDIA_INFO_S *pmedia_info = NULL; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert_cnt = %d, attach_cnt = %d", insert_cnt, attach_cnt); + + while (index < total_cnt) { + if (index < insert_cnt) + pmedia_info = eina_list_nth(pitem_list_data->insert_list, insert_index++); + else + pmedia_info = eina_list_nth(pitem_list_data->attach_list, attach_index++); + + if (pmedia_info) { + /*get default file path*/ + MSG_BOOL result = FALSE; + char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0}; + + result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path)); + if (result) { + char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,}; + snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pmedia_info->pfile_name); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", pmedia_info->pfile_path); + + char *result_path = msg_ui_viewer_util_copy_file(pmedia_info->pfile_path, dst_path); + if (result_path) { + saved_count++; + free(result_path); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index); + failed_count++; + } + } else { + failed_count++; + } + + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index); + failed_count++; + } + + pmedia_info = NULL; + + index++; + } + + /* show popup */ + if (failed_count == total_cnt) { + __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE")); + } else { + char buf[DEF_BUF_LEN_S + 1] = {0, }; + snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, total_cnt); + __msg_ui_viewer_item_list_popup(pitem_list_data, pitem_list_data->main_window, buf); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static Evas_Object *__msg_ui_viewer_create_toolbar(Evas_Object *parent, void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + Evas_Object *toolbar = elm_toolbar_add(parent); + Elm_Object_Item *toolbar_item = NULL; + + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + + elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_SAVE, NULL, __viewer_toolbar_save_all_cb, pitem_list_data); + toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(toolbar_item, EINA_TRUE); + elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_PLAY, NULL, __viewer_toolbar_play_cb, pitem_list_data); + toolbar_item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL); + elm_object_item_disabled_set(toolbar_item, EINA_TRUE); + + evas_object_show(toolbar); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return toolbar; +} + +MSG_BOOL msg_ui_viewer_create_item_list_view(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_ITEM_LIST_DATA_S *pitem_list_data = (MSG_ITEM_LIST_DATA_S *)data; + Evas_Object *back_button = NULL; + Evas_Object *toolbar = NULL; + Evas_Object *layout_inner = NULL; + Evas_Object *genlist = NULL; + Evas_Object *bg_layout = NULL; + + /*get message body*/ + if (__msg_ui_viewer_get_body_message(pitem_list_data) == FALSE) + return FALSE; + + /*get inserted and attached item list*/ + if (__msg_ui_viewer_item_list_get_list_data(pitem_list_data) == FALSE) + return FALSE; + + bg_layout = msg_ui_viewer_get_bg_layout(pitem_list_data->viewer_main); + if (bg_layout) + elm_object_style_set(bg_layout, "group_list"); + + layout_inner = elm_layout_add(pitem_list_data->navi_frame); + evas_object_size_hint_weight_set(layout_inner, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_layout_file_set(layout_inner, MSG_VIEWER_THEME, "item_list"); + + genlist = __msg_ui_viewer_create_genlist(pitem_list_data); + __msg_ui_viewer_set_list_styles(pitem_list_data); + pitem_list_data->genlist = genlist; + + /*set list data*/ + __msg_ui_viewer_item_list_set_list_data(genlist, pitem_list_data); + elm_object_part_content_set(layout_inner, "viewer.itemlist.body", genlist); + + back_button = elm_button_add(pitem_list_data->navi_frame); + elm_object_style_set(back_button, "naviframe/back_btn/default"); + evas_object_smart_callback_add(back_button, "clicked", __viewer_back_button_cb, (void *)pitem_list_data); + Elm_Object_Item *navi_it = elm_naviframe_item_push(pitem_list_data->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_ITEM_LIST"), back_button, NULL, layout_inner, NULL); + + /*create commandbar*/ + toolbar = __msg_ui_viewer_create_toolbar(pitem_list_data->navi_frame, pitem_list_data); + elm_object_item_part_content_set(navi_it, "controlbar", toolbar); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} diff --git a/viewer/src/msg-ui-viewer-main.c b/viewer/src/msg-ui-viewer-main.c new file mode 100755 index 0000000..d4d9019 --- /dev/null +++ b/viewer/src/msg-ui-viewer-main.c @@ -0,0 +1,494 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + INCLUDE HEADERS +*==================================================================================================*/ +#include <msg.h> +#include <msg_storage.h> +#include "msg-smil-player-interface.h" +#include "msg-ui-common-utility.h" + +#include "msg-ui-viewer-main.h" +#include "msg-ui-viewer-drm-utility.h" + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +static MSG_BOOL __msg_ui_viewer_check_drm_content(void *data); +static MSG_SMIL_ERROR_E __msg_ui_viewer_main_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *data); +static MSG_BOOL __msg_ui_vewer_get_smil_handle(void *data); +static void __msg_ui_viewer_launch_item_list(void *data); +static MSG_BOOL __msg_ui_viewer_launch_drm_list(void *data); +static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data); +static MSG_BOOL __msg_ui_viewer_show_play_view(void *data); + +/*================================================================================================== + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +void msg_ui_viewer_main_init(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + + viewer_main_data->main_window = NULL; + viewer_main_data->layout_main = NULL; + viewer_main_data->bg = NULL; + viewer_main_data->msgHandle = NULL; + viewer_main_data->msgID = -1; + viewer_main_data->launchmode = MSG_VIEWER_FULLVIEW_MODE; + viewer_main_data->SmilHandle = NULL; + viewer_main_data->msg_t = NULL; + viewer_main_data->mms_t = NULL; + viewer_main_data->ug_launch_mode = MSG_UG_MODE_FULLVIEW; + viewer_main_data->navi_frame = NULL; + viewer_main_data->player_view = NULL; + viewer_main_data->drm_list_view = NULL; + viewer_main_data->item_list_view = NULL; + viewer_main_data->del_idler = NULL; +} + +MSG_BOOL msg_ui_viewer_launch(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + MSG_BOOL ret = TRUE; + + if (!__msg_ui_vewer_get_smil_handle(viewer_main_data)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_ui_vewer_get_smil_handle is failed"); + return FALSE; + } + + if (viewer_main_data->launchmode == MSG_VIEWER_FULLVIEW_MODE) { + if (__msg_ui_viewer_check_drm_content(viewer_main_data)) { + ret = __msg_ui_viewer_launch_drm_list(viewer_main_data); + viewer_main_data->view_mode = MSG_VIEWER_DRM_LIST_VIEW; + } else { + ret = __msg_ui_viewer_launch_play_view(viewer_main_data); + viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW; + } + } else { + ret = __msg_ui_viewer_launch_play_view(viewer_main_data); + viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW; + } + + return ret; +} + +void msg_ui_viewer_show_view_by_mode(void *data, MSG_VIEWER_VIEW_MODE_E viewMode, unsigned int commandType) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewMode = %d", viewMode); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->player_view = 0x%x", viewer_main_data->player_view); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->drm_list_view = 0x%x", viewer_main_data->drm_list_view); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_main_data->item_list_view = 0x%x", viewer_main_data->item_list_view); + + if (viewMode == MSG_VIEWER_PLAYER_VIEW) { + if (commandType == MSG_VIEWER_VIEW_CMD_PLAY) { + if (__msg_ui_viewer_show_play_view(viewer_main_data)) + viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW; + } else { + __msg_ui_viewer_launch_play_view(viewer_main_data); + viewer_main_data->view_mode = MSG_VIEWER_PLAYER_VIEW; + } + } else if (viewMode == MSG_VIEWER_DRM_LIST_VIEW) { + __msg_ui_viewer_launch_drm_list(viewer_main_data); + viewer_main_data->view_mode = MSG_VIEWER_DRM_LIST_VIEW; + } else if (viewMode == MSG_VIEWER_ITEM_LIST_VIEW) { + __msg_ui_viewer_launch_item_list(viewer_main_data); + viewer_main_data->view_mode = MSG_VIEWER_ITEM_LIST_VIEW; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid viewMode!!"); + } +} + +static void __msg_ui_viewer_launch_item_list(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + MSG_ITEM_LIST_DATA_S *pitem_list_data = NULL; + + if (!viewer_main_data->item_list_view) { + pitem_list_data = (MSG_ITEM_LIST_DATA_S *)calloc(1, sizeof(MSG_ITEM_LIST_DATA_S)); + if (!pitem_list_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return; + } else + viewer_main_data->item_list_view = pitem_list_data; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "item list view is already created"); + pitem_list_data = viewer_main_data->item_list_view; + } + + msg_ui_viewer_init_item_list(pitem_list_data); + + pitem_list_data->msgID = viewer_main_data->msgID; + pitem_list_data->msgHandle = viewer_main_data->msgHandle; + pitem_list_data->mms_t = viewer_main_data->mms_t; + pitem_list_data->main_window = viewer_main_data->main_window; + if (viewer_main_data->navi_frame) + pitem_list_data->navi_frame = viewer_main_data->navi_frame; + + pitem_list_data->viewer_main = viewer_main_data; + + if (msg_ui_viewer_create_item_list_view(pitem_list_data) == FALSE) { + if (viewer_main_data->item_list_view) { + msg_ui_viewer_destroy_item_list(viewer_main_data->item_list_view); + free(viewer_main_data->item_list_view); + viewer_main_data->item_list_view = NULL; + } + } +} + +static MSG_BOOL __msg_ui_viewer_launch_drm_list(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + MSG_DRM_LIST_DATA_S *pdrm_list_data = NULL; + + /*allocate drm_list_view*/ + if (!viewer_main_data->drm_list_view) { + pdrm_list_data = (MSG_DRM_LIST_DATA_S *)calloc(1, sizeof(MSG_DRM_LIST_DATA_S)); + if (!pdrm_list_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return FALSE; + } else + viewer_main_data->drm_list_view = pdrm_list_data; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "drm list view is already created"); + pdrm_list_data = viewer_main_data->drm_list_view; + } + + msg_ui_viewer_drm_list_init(pdrm_list_data); + /*set drm list view data from viewer_main_data*/ + pdrm_list_data->mms_t = viewer_main_data->mms_t; + pdrm_list_data->msgID = viewer_main_data->msgID; + pdrm_list_data->main_window = viewer_main_data->main_window; + if (viewer_main_data->navi_frame) + pdrm_list_data->navi_frame = viewer_main_data->navi_frame; + + if (viewer_main_data->drm_list) { + MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL; + int ntotal = eina_list_count(viewer_main_data->drm_list); + int index = 0; + + /*copy drm list*/ + for (index = 0; index < ntotal; index++) { + pmedia_info = eina_list_nth(viewer_main_data->drm_list, index); + if (pmedia_info) { + MSG_VIEWER_MEDIA_INFO_S *ptmp_media_info = (MSG_VIEWER_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_MEDIA_INFO_S)); + if (ptmp_media_info) { + memcpy(ptmp_media_info, pmedia_info, sizeof(MSG_VIEWER_MEDIA_INFO_S)); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + break; + } + + pdrm_list_data->drm_list = eina_list_append(pdrm_list_data->drm_list, ptmp_media_info); + } + } + + /*free the drm list*/ + if (viewer_main_data->drm_list) { + MSG_VIEWER_MEDIA_INFO_S *pmedia_info = NULL; + int ntotal = eina_list_count(viewer_main_data->drm_list); + int index = 0; + + for (index = 0; index < ntotal; index++) { + pmedia_info = eina_list_nth(viewer_main_data->drm_list, index); + if (pmedia_info) { + free(pmedia_info); + pmedia_info = NULL; + } + } + eina_list_free(viewer_main_data->drm_list); + viewer_main_data->drm_list = NULL; + } + } + pdrm_list_data->viewer_main = viewer_main_data; + + return msg_ui_viewer_create_drm_list_view(pdrm_list_data); +} + +static MSG_BOOL __msg_ui_viewer_show_play_view(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + MSG_PLAY_DATA_S *viewer_play_data = NULL; + + if (!viewer_main_data->player_view) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "player view is not created"); + return FALSE; + } else + viewer_play_data = viewer_main_data->player_view; + + return msg_ui_viewer_show_player_view(viewer_play_data); +} + +static MSG_BOOL __msg_ui_viewer_launch_play_view(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + MSG_PLAY_DATA_S *viewer_play_data = NULL; + + if (!viewer_main_data->player_view) { + viewer_play_data = (MSG_PLAY_DATA_S *)calloc(1, sizeof(MSG_PLAY_DATA_S)); + if (!viewer_play_data) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + return FALSE; + } + viewer_main_data->player_view = viewer_play_data; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play view is already created"); + viewer_play_data = viewer_main_data->player_view; + } + + msg_ui_viewer_play_view_init(viewer_play_data); + + viewer_play_data->msgID = viewer_main_data->msgID; + viewer_play_data->msgHandle = viewer_main_data->msgHandle; + viewer_play_data->SmilHandle = viewer_main_data->SmilHandle; + viewer_play_data->msg_t = viewer_main_data->msg_t; + viewer_play_data->mms_t = viewer_main_data->mms_t; + viewer_play_data->main_window = viewer_main_data->main_window; + if (viewer_main_data->navi_frame) + viewer_play_data->navi_frame = viewer_main_data->navi_frame; + + viewer_play_data->cbs = viewer_main_data->cbs; + viewer_play_data->viewer_main = viewer_main_data; + + return msg_ui_viewer_create_player_view(viewer_play_data); +} + +static MSG_SMIL_ERROR_E __msg_ui_viewer_main_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *data) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, eventStatus == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, MSG_ERR_SMIL_INVALID_PARAMETER); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + MSG_PLAY_DATA_S *viewer_data = viewer_main_data->player_view; + + return msg_ui_viewer_smil_cb(eventStatus, viewer_data); +} + +static MSG_BOOL __msg_ui_vewer_get_smil_handle(void *data) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + int msg_id = viewer_main_data->msgID; + MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS; + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + if (viewer_main_data->launchmode == MSG_VIEWER_FULLVIEW_MODE) { + msg_error_t err = MSG_SUCCESS; + err = msg_get_message(viewer_main_data->msgHandle, msg_id, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message is failed! err = %d", err); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return FALSE; + } + + viewer_main_data->mms_t = msg_create_struct(MSG_STRUCT_MMS); + err = msg_get_mms_struct(msgInfo, viewer_main_data->mms_t); + + if (err != MSG_SUCCESS) { + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return FALSE; + } + } + + /*Create smilplayer handler*/ + Error = msg_smil_create_smil_player(viewer_main_data->mms_t, __msg_ui_viewer_main_smil_cb, (void *)viewer_main_data, &(viewer_main_data->SmilHandle)); + if (Error != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_create_smil_player is failed! Error = %d", Error); + service_h svc_handle = NULL; + service_create(&svc_handle); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL, FALSE); + + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_VIEWER_MESSAGE, MSG_BUNDLE_VALUE_ERROR); + ug_send_result(viewer_main_data->viewer_ug, svc_handle); + service_destroy(svc_handle); + + return FALSE; + } + + msg_release_struct(&sendOpt); + return TRUE; +} + +static MSG_BOOL __msg_ui_viewer_check_drm_content(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + msg_error_t err = MSG_SUCCESS; + MSG_BOOL isdrm_content = FALSE; + + /*get the SMIL content*/ + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + err = msg_get_message(viewer_main_data->msgHandle, viewer_main_data->msgID, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed"); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return FALSE; + } + + msg_struct_t mms_data = msg_create_struct(MSG_STRUCT_MMS); + if (mms_data == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, " msg_mms_get_message_body is failed"); + + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return FALSE; + } + msg_get_mms_struct(msgInfo, mms_data); + + /*check invalid sd, ssd type drm file*/ + if (msg_ui_viewer_get_invalid_ro_drm_list(mms_data, &viewer_main_data->drm_list)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "RO is required"); + isdrm_content = TRUE; + } else + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Ro is not required"); + + /*destroy and free message data*/ + msg_release_struct(&mms_data); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + + return isdrm_content; +} + +Evas_Object *msg_ui_viewer_create_bg(void *data, Evas_Object *parent) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + Evas_Object *bg = NULL; + + if (viewer_main_data->bg == NULL) { + bg = elm_bg_add(parent); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, bg == NULL, NULL); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, bg); + evas_object_show(bg); + viewer_main_data->bg = bg; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "bg is already created"); + return NULL; + } + + return bg; +} + +Evas_Object *msg_ui_viewer_create_layout_main(Evas_Object *parent) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL); + Evas_Object *layout = NULL; + + layout = elm_layout_add(parent); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, NULL); + elm_layout_theme_set(layout, "layout", "application", "default"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(parent, layout); + evas_object_show(layout); + + return layout; +} + +void msg_ui_viewer_set_loaded_ug(void *data, ui_gadget_h loaded_ug) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, loaded_ug == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + viewer_main_data->loaded_ug = loaded_ug; +} + +void msg_ui_viewer_set_navi_frame(void *data, Evas_Object *navi_frame) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, navi_frame == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + viewer_main_data->navi_frame = navi_frame; +} + +void msg_ui_viewer_set_smilhandle(void *data, void *smilhandle) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + + if (!smilhandle) + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "smilhandle is set as NULL"); + + viewer_main_data->SmilHandle = smilhandle; +} + +MSG_BOOL msg_ui_viewer_get_viewer_launchmode(void *data, MSG_VIEWER_LAUNCH_VIEW_MODE_E *launchmode) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, launchmode == NULL, FALSE); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + *launchmode = viewer_main_data->launchmode; + + return TRUE; +} + +MSG_BOOL msg_ui_viewer_get_viewer_ug_mode(void *data, MSG_UG_LAUNCH_MODE_E *ug_mode) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, ug_mode == NULL, FALSE); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + *ug_mode = viewer_main_data->ug_launch_mode; + + return TRUE; +} + +ui_gadget_h msg_ui_viewer_get_viewer_ug(void *data) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + + return viewer_main_data->viewer_ug; +} + +Evas_Object *msg_ui_viewer_get_main_layout(void *data) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + + return viewer_main_data->layout_main; +} + +Evas_Object *msg_ui_viewer_get_bg_layout(void *data) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data; + + return viewer_main_data->bg; +} + diff --git a/viewer/src/msg-ui-viewer-play-view-callback.c b/viewer/src/msg-ui-viewer-play-view-callback.c new file mode 100755 index 0000000..f65355a --- /dev/null +++ b/viewer/src/msg-ui-viewer-play-view-callback.c @@ -0,0 +1,2267 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "msg-ui-viewer-play-view.h" +#include "msg-ui-viewer-main.h" +#include "msg-ui-viewer-utility.h" +#include "msg-ui-common-utility.h" +#include "msg-ui-image-resource.h" + +#include <aul.h> +#include <contacts-ug.h> +#include "contacts-svc.h" +#include "appsvc.h" +#include <app_service.h> +#include <syspopup_caller.h> +#include <status.h> + +/*================================================================================================== + * DEFINITIONS + *==================================================================================================*/ +Elm_Genlist_Item_Class itc_popup = {0,}; /** itc for list style popup */ + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +/* genlist for multirecipients in title button */ +static char *__msg_ui_viewer_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_viewer_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info); + +/*attachment list for help page */ +static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data); + +/* controllbar toolbar option */ +static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info); + +/* save attachment popup */ +static void __msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data); +static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info); +static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_viewer_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_viewer_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info); + +/*================================================================================================== + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE; + int start_point = 0; + int end_point = 0; + int screen_width = 0; + int rotate = 0; + + play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status); + + /*get start and end point according to rotation*/ + rotate = elm_win_rotation_get(viewer_play_data->main_window); + if (rotate == 0) { /*PORTRAIT mode*/ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT mode"); + start_point = viewer_play_data->m_x; + end_point = ev->x; + screen_width = viewer_play_data->window_width; + } else if (rotate == 180) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "PORTRAIT reverse mode"); + start_point = ev->x; + end_point = viewer_play_data->m_x; + screen_width = viewer_play_data->window_width; + } else if (rotate == 90) { /*LANDSCAPE mode*/ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE mode"); + start_point = ev->y; + end_point = viewer_play_data->m_y; + screen_width = viewer_play_data->window_height; + } else if (rotate == 270) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "LANDSCAPE reverse mode"); + start_point = viewer_play_data->m_y; + end_point = ev->y; + screen_width = viewer_play_data->window_height; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value"); + return FALSE; + } + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "start_point = %d, end_point = %d, screen_width = %d", start_point, end_point, screen_width); + + if (end_point - start_point > screen_width / 4) { + /* prev*/ + int pageIdx = viewer_play_data->smil_eventStatus->pageIdx; + if (pageIdx >= 0) { + if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + } else { + /* hide menu title genlist if player status is changed to play */ + if (viewer_play_data->title_box_layout) { + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + msg_ui_viewer_close_title_menu_genlist(viewer_play_data); + } + //set progressbar and progress text sync + if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer) + msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1); + } + //show play controller + if (viewer_play_data->play_controller) { + elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller); + evas_object_show(viewer_play_data->play_controller); + viewer_play_data->playcontroller_opened = TRUE; + //create play controller timer + msg_ui_viewer_create_play_controller_timer(viewer_play_data); + } + } + } + } else if (start_point - end_point > screen_width / 4) { + /*next*/ + int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1; + int total_page = viewer_play_data->smil_eventStatus->pageCnt; + if (total_page >= pageIdx) { + if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + } else { + /* hide menu title genlist if player status is changed to play */ + if (viewer_play_data->title_box_layout) { + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + msg_ui_viewer_close_title_menu_genlist(viewer_play_data); + } + //show play controller + if (viewer_play_data->play_controller) { + elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller); + evas_object_show(viewer_play_data->play_controller); + viewer_play_data->playcontroller_opened = TRUE; + //create play controller timer + msg_ui_viewer_create_play_controller_timer(viewer_play_data); + } + //set progressbar and progress text sync + if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer) + msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx); + } + } + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return EINA_FALSE; +} + +Eina_Bool msg_ui_viewer_mouse_down_cb(void *data, int type, void *event) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, event == NULL, EINA_FALSE); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + Ecore_Event_Mouse_Button *ev = (Ecore_Event_Mouse_Button *)event; + + viewer_play_data->m_x = ev->x; + viewer_play_data->m_y = ev->y; + + if (viewer_play_data->mouse_up_event_handler) { + ecore_event_handler_del(viewer_play_data->mouse_up_event_handler); + viewer_play_data->mouse_up_event_handler = NULL; + } + viewer_play_data->mouse_up_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_UP, msg_ui_viewer_mouse_up_cb, (void *) viewer_play_data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return EINA_FALSE; +} + +void msg_ui_viewer_play_layout_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + Evas_Event_Mouse_Down *ev = event_info; + + viewer_play_data->ctrl_start_x = ev->canvas.x; + viewer_play_data->ctrl_start_y = ev->canvas.y; + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_play_layout_mouse_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ASSERT, event_info == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + Evas_Event_Mouse_Up *ev = event_info; + int start_point_x = 0; + int start_point_y = 0; + int end_point_x = 0; + int end_point_y = 0; + int screen_width = 0; + int screen_height = 0; + int rotate = 0; + + //get screen size + rotate = elm_win_rotation_get(viewer_play_data->main_window); + if (rotate == 0 || rotate == 180) { + screen_width = viewer_play_data->window_width; + screen_height = viewer_play_data->window_height; + } else if (rotate == 90 || rotate == 270) { + screen_width = viewer_play_data->window_height; + screen_height = viewer_play_data->window_width; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid ratation value"); + return; + } + + //Check mouse move + start_point_x = viewer_play_data->ctrl_start_x; + end_point_x = ev->canvas.x; + + start_point_y = viewer_play_data->ctrl_start_y; + end_point_y = ev->canvas.y; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "start point_x = %d", start_point_x); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "start point_y = %d", start_point_y); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "end point_x = %d", end_point_x); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "endpoint_y = %d", end_point_y); + + if (viewer_play_data->playcontroller_opened) { + if (abs(start_point_x-end_point_x) < screen_width / 10 && + abs(start_point_y-end_point_y) < screen_height / 10 && + end_point_y < screen_height-(VIEWER_NAVIFRAME_BOTTOM_H+VIEWER_PLAY_CONTROLLER_HEIGHT)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is now displayed and play controller should be hided"); + + if (viewer_play_data->playcontroller_opened) { + elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller"); + evas_object_hide(viewer_play_data->play_controller); + viewer_play_data->playcontroller_opened = FALSE; + //destroy play controller timer + msg_ui_viewer_destroy_play_controller_timer(viewer_play_data); + } else { + if (viewer_play_data->play_controller) { + elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller); + evas_object_show(viewer_play_data->play_controller); + viewer_play_data->playcontroller_opened = TRUE; + //create play controller timer + msg_ui_viewer_create_play_controller_timer(viewer_play_data); + } + } + } + } else { + if (abs(start_point_x-end_point_x) < screen_width / 10 && abs(start_point_y-end_point_y) < screen_height / 10 ) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play layout is tapped and play controller should be displayed"); + + if (viewer_play_data->play_controller) { + elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller); + evas_object_show(viewer_play_data->play_controller); + viewer_play_data->playcontroller_opened = TRUE; + //create play controller timer + msg_ui_viewer_create_play_controller_timer(viewer_play_data); + } + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_back_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->launch_cmd : %d", viewer_play_data->launch_cmd); + + /*prevent invalid double pressing button event after launching ug or app(like call, vtcall)*/ + if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) + return; + + if (viewer_play_data->title_box_layout) { + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + msg_ui_viewer_close_title_menu_genlist(viewer_play_data); + } + + if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + } + + viewer_play_data->status = MSG_VIEWER_STOP; + msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP); + } + + msg_ui_viewer_disconnect_handler(viewer_play_data); + + if (!viewer_play_data->del_idler) + viewer_play_data->del_idler = ecore_idler_add(msg_ui_viewer_ug_quit, viewer_play_data->viewer_main); + + elm_object_disabled_set(obj, TRUE); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_title_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + + if (viewer_play_data->title_optionheader_opened) { + elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", ""); + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + viewer_play_data->title_optionheader_opened = EINA_FALSE; + } else if (viewer_play_data->title_box_layout) { + /* clear title box layout */ + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "clear title box layout!"); + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + msg_ui_viewer_close_title_menu_genlist(viewer_play_data); + } else { + /* clear optionheader */ + Evas_Object *content = NULL; + + content = elm_object_item_part_content_unset(viewer_play_data->navi_item, "optionheader"); + if (content) { + if (content == viewer_play_data->title_toolbar) { + int i = 0; + for (i = 0; i < sizeof(viewer_play_data->toolbar_item)/sizeof(Elm_Object_Item *); i++) { + if (viewer_play_data->toolbar_item[i] != NULL) { + elm_object_item_del(viewer_play_data->toolbar_item[i]); + viewer_play_data->toolbar_item[i] = NULL; + } + } + } + evas_object_del(content); + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "addr count is : %d", viewer_play_data->addr_list.addr_cnt); + + if (viewer_play_data->addr_list.addr_cnt == 1) { + viewer_play_data->title_toolbar = msg_ui_viewer_create_title_toolbar(viewer_play_data); + msg_ui_viewer_add_title_toolbar_item(viewer_play_data->title_toolbar, viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->navi_item, "optionheader", viewer_play_data->title_toolbar); + elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,open", ""); + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,show", ""); + viewer_play_data->title_optionheader_opened = EINA_TRUE; + } else if (viewer_play_data->addr_list.addr_cnt > 1) { + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,show", ""); + msg_ui_viewer_open_title_menu_genlist(viewer_play_data); + } else { + D_EMSG("invalid address count [%d]", viewer_play_data->addr_list.addr_cnt); + return; + } + + /* set player state to pause and update icon */ + if (viewer_play_data->status == MSG_VIEWER_PLAY) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err); + return; + } else { + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + viewer_play_data->status = MSG_VIEWER_PAUSE; + + if (viewer_play_data->play_controller_progressbar_timer) { + ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer); + } + } + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_save_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status); + + //no medias in msg + if (viewer_play_data->insert_count + viewer_play_data->attach_count == 0) { + msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, (char *)"No attachments"); + return; + } + + viewer_play_data->popup_mode = VIEWER_SAVE_MODE_POPUP; + + //prevent invalid double pressing button event after launching ug or app( call, vtcall) + if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launch_cmd is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->launch_cmd); + return; + } + + //destroying popup code is added, because response_cb of saving result popup is sometimes not called + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + viewer_play_data->previous_status = viewer_play_data->status; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status = %d", viewer_play_data->previous_status); + + //Pause + if (viewer_play_data->status == MSG_VIEWER_PLAY) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + return; + } else { + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + viewer_play_data->status = MSG_VIEWER_PAUSE; + + if (viewer_play_data->play_controller_progressbar_timer) { + ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer); + } + } + } + + //create popup for save attachments and insert items + __msg_ui_viewer_create_save_attachments_popup(viewer_play_data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_delete_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + Evas_Object *popup = elm_popup_add(viewer_play_data->main_window); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(popup, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_DELETE_Q")); + + Evas_Object *btn_ok = elm_button_add(popup); + elm_object_style_set(btn_ok, "popup_button/default"); + elm_object_text_set(btn_ok, dgettext("sys_string", "IDS_COM_SK_OK")); + elm_object_part_content_set(popup, "button1", btn_ok); + evas_object_smart_callback_add(btn_ok, "clicked", __msg_ui_viewer_delete_ok_clicked_cb, viewer_play_data); + + Evas_Object *btn_cancel = elm_button_add(popup); + elm_object_style_set(btn_cancel, "popup_button/default"); + elm_object_text_set(btn_cancel, dgettext("sys_string", "IDS_COM_SK_CANCEL")); + elm_object_part_content_set(popup, "button2", btn_cancel); + evas_object_smart_callback_add(btn_cancel, "clicked", __msg_ui_viewer_delete_cancel_clicked_cb, viewer_play_data); + + evas_object_show(popup); + viewer_play_data->popup = popup; + + /* set player state to pause*/ + if (viewer_play_data->status == MSG_VIEWER_PLAY) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + return; + } else { + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + viewer_play_data->status = MSG_VIEWER_PAUSE; + + if (viewer_play_data->play_controller_progressbar_timer) { + ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer); + } + } + } + + /*disconnect mouse handler*/ + msg_ui_viewer_disconnect_handler(viewer_play_data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_delete_ok_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main; + char str_id[DEF_BUF_LEN] = {0,}; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete msg-id is %d", viewer_play_data->msgID); + + service_h svc_handle = NULL; + + service_create(&svc_handle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL); + + snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_DELETE_MSG, str_id); + + ug_send_result(viewer_main_data->viewer_ug, svc_handle); + service_destroy(svc_handle); + + /*destroy viewer*/ + ug_destroy_me(viewer_main_data->viewer_ug); + + return; +} + +static void __msg_ui_viewer_delete_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + /* connect mouse handler again*/ + if (!viewer_play_data->mouse_down_event_handler) + viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data); +} + +void msg_ui_viewer_forward_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + char buf[DEF_BUF_LEN_S] = { 0, }; + service_h svc_handle; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + /* set player state to pause*/ + if (viewer_play_data->status == MSG_VIEWER_PLAY) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err); + return; + } else { + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + viewer_play_data->status = MSG_VIEWER_PAUSE; + + if (viewer_play_data->play_controller_progressbar_timer) { + ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer); + } + } + } + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "service_create() is failed !!"); + } else { + snprintf(buf, sizeof(buf), "%d", viewer_play_data->msgID); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_FORWARD, buf); + ui_gadget_h loaded_ug; + + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER; + loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs); + + if (loaded_ug) { + msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug); + msg_ui_viewer_disconnect_handler(viewer_play_data); + } else { + viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE; + } + service_destroy(svc_handle); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_resend_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + char str_id[DEF_BUF_LEN] = {0,}; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + /* set player state to pause*/ + if (viewer_play_data->status == MSG_VIEWER_PLAY) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err); + return; + } else { + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + viewer_play_data->status = MSG_VIEWER_PAUSE; + + if (viewer_play_data->play_controller_progressbar_timer) { + ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer); + } + } + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "failed msg-id is %d", viewer_play_data->msgID); + + service_h svc_handle = NULL; + + service_create(&svc_handle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL); + + snprintf(str_id, DEF_BUF_LEN, "%d", viewer_play_data->msgID); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RESEND, str_id); + + ug_send_result(viewer_main_data->viewer_ug, svc_handle); + service_destroy(svc_handle); + + /*destroy viewer*/ + ug_destroy_me(viewer_main_data->viewer_ug); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_reply_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + service_h svc_handle; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + /* set player state to pause*/ + if (viewer_play_data->status == MSG_VIEWER_PLAY) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", err); + return; + } else { + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + viewer_play_data->status = MSG_VIEWER_PAUSE; + + if (viewer_play_data->play_controller_progressbar_timer) { + ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer); + } + } + } + + if (service_create(&svc_handle) < 0 || svc_handle == NULL) { + D_EMSG("service_create() is failed !!"); + } else { + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, viewer_play_data->addr_list.addr_info[0].address); + ui_gadget_h loaded_ug; + + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_MESSAGE_COMPOSER; + loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), MSG_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs); + + if (loaded_ug) { + msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug); + msg_ui_viewer_disconnect_handler(viewer_play_data); + } else { + viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE; + } + service_destroy(svc_handle); + } + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_more_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_SMIL_ERROR_E smilErr = MSG_SMIL_SUCCESS; + MSG_BOOL hasText = FALSE; + int page_count = 0; + int media_count = 0; + int folder_id = MSG_MAX_FOLDER_ID; + msg_error_t err = MSG_SUCCESS; + + /*Get msg info struct handle */ + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed"); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + /* set player state to pause*/ + if (viewer_play_data->status == MSG_VIEWER_PLAY) { + smilErr = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE); + if (smilErr != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "[Error] msg_smil_on_slide_event_handler failed! : %d", smilErr); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } else { + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + viewer_play_data->status = MSG_VIEWER_PAUSE; + + if (viewer_play_data->play_controller_progressbar_timer) { + ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer); + } + } + } + Evas_Object *ctx_popup = NULL; + ctx_popup = elm_ctxpopup_add(viewer_play_data->main_window); + evas_object_smart_callback_add(ctx_popup, "dismissed", __msg_ui_viewer_more_ctxpopup_dismissed_cb, (void *)viewer_play_data); + + /* Get folder ID */ + msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); //get msg folder type + + /* Add FORWARD menu if outbox/inbox msg */ + if (folder_id == MSG_OUTBOX_ID || folder_id == MSG_INBOX_ID) + elm_ctxpopup_item_append(ctx_popup, dgettext("sys_string", "IDS_COM_BODY_FORWARD_A"), NULL, msg_ui_viewer_forward_button_cb, (void *)viewer_play_data); + + /* Add Copy Message text menu */ + if (viewer_play_data->smil_eventStatus != NULL) { + /* get msg body */ + msg_list_handle_t pagelist_info = NULL; + msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + page_count = msg_list_length(pagelist_info); + + msg_struct_t page_info = NULL; + page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, viewer_play_data->smil_eventStatus->pageIdx); + if (page_info) { + int i = 0; + msg_list_handle_t medialist_info = NULL; + msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info); + media_count = msg_list_length(medialist_info); + + for (i = 0; i < media_count; i++) { + int mediaType; + msg_struct_t media_info = NULL; + media_info = (msg_struct_t)msg_list_nth_data(medialist_info, i); + + if (media_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "getting media has failed"); + continue; + } + + msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + if (mediaType != MMS_SMIL_MEDIA_TEXT) + continue; + + hasText = TRUE; + } + } + } + + if (hasText) + elm_ctxpopup_item_append(ctx_popup, (char *)"Copy message text", NULL, __msg_ui_viewer_more_ctxpopup_clicked_cb, (void *)viewer_play_data); + + /* Add view message details menu */ + elm_ctxpopup_item_append(ctx_popup, (char *)"View message details", NULL, __msg_ui_viewer_more_ctxpopup_clicked_cb, (void *)viewer_play_data); + + // move ctx popup + Evas_Coord x, y, w, h; + evas_object_geometry_get(viewer_play_data->ctrl_toolbar, &x, &y, &w, &h); + evas_object_move(ctx_popup, ((w-x)*5)/6 , y); + evas_object_show(ctx_popup); + + viewer_play_data->popup = ctx_popup; + + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_volume_button_cb(void *data, Evas_Object * o, const char *emission, const char *source) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + syspopup_launch("volume", NULL); + + //create play controller timer repeatedly + msg_ui_viewer_create_play_controller_timer(viewer_play_data); +} + +void msg_ui_viewer_prev_button_cb(void *data, Evas_Object * o, const char *emission, const char *source) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE; + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL); + + play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status); + + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL); + + if (!strcmp(emission, "prev_clicked")) { + /* prev*/ + int pageIdx = viewer_play_data->smil_eventStatus->pageIdx; + if (pageIdx >= 0) { + if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) { + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREV_SLIDE); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + } else { + //set progressbar and progress text sync + if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer) + msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx-1); + } + } + } + + //create play controller timer repeatedly + msg_ui_viewer_create_play_controller_timer(viewer_play_data); + + /* hide optionheader if current viewer status has changed to MSG_VIEWER_PLAY */ + if (viewer_play_data->status == MSG_VIEWER_PLAY) { + if (viewer_play_data->title_optionheader_opened) { + elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", ""); + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + viewer_play_data->title_optionheader_opened = EINA_FALSE; + } + + if (viewer_play_data->title_box_layout) { + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + msg_ui_viewer_close_title_menu_genlist(viewer_play_data); + } + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_play_pause_button_cb(void *data, Evas_Object * o, const char *emission, const char *source) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + msg_ui_viewer_command_play_pause(viewer_play_data); + + //create play controller timer repeatedly + msg_ui_viewer_create_play_controller_timer(viewer_play_data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_next_button_cb(void *data, Evas_Object * o, const char *emission, const char *source) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (!strcmp(emission, "next_clicked")) + { + SMIL_PLAYER_STATUS_E play_status = PLAYER_STATUS_NONE; + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->SmilHandle == NULL); + + play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status); + + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, viewer_play_data->smil_eventStatus == NULL); + /*next*/ + int pageIdx = viewer_play_data->smil_eventStatus->pageIdx + 1; + int total_page = viewer_play_data->smil_eventStatus->pageCnt; + if (total_page >= pageIdx) { + if (play_status != PLAYER_STATUS_PLAY_END && play_status != PLAYER_STATUS_STOPPED) { + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_NEXT_SLIDE); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + } else { + //set progressbar and progress text sync + if (viewer_play_data->progressbar && viewer_play_data->play_controller_progressbar_timer) + msg_ui_viewer_create_progressbar(viewer_play_data, pageIdx); + } + } + } + + //create play controller timer repeatedly + msg_ui_viewer_create_play_controller_timer(viewer_play_data); + + /* hide optionheader if current viewer status has changed to MSG_VIEWER_PLAY */ + if (viewer_play_data->status == MSG_VIEWER_PLAY) { + if (viewer_play_data->title_optionheader_opened) { + elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", ""); + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + viewer_play_data->title_optionheader_opened = EINA_FALSE; + } + + if (viewer_play_data->title_box_layout) { + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + msg_ui_viewer_close_title_menu_genlist(viewer_play_data); + } + } + } +} + +void msg_ui_viewer_stop_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE; + + /*prevent invalid double pressing button event after launching ug or app( call, vtcall)*/ + if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launch_cmd is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->launch_cmd); + return; + } + + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + } else { + msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode); + + if (launchmode == MSG_VIEWER_PREVIEW_MODE) { + if (viewer_play_data->play_controller) { + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + msg_ui_viewer_destroy_play_controller_progressbar_timer(viewer_play_data); + } + } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE){ + msg_ui_viewer_disconnect_handler(viewer_play_data); + msg_ui_viewer_show_view_by_mode(viewer_play_data->viewer_main, MSG_VIEWER_ITEM_LIST_VIEW, MSG_VIEWER_VIEW_CMD_NONE); + if (viewer_play_data->title_optionheader_opened) { + elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", ""); + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + viewer_play_data->title_optionheader_opened = EINA_FALSE; + } else if (viewer_play_data->title_box_layout) { + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + msg_ui_viewer_close_title_menu_genlist(viewer_play_data); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid launchmode : %d", launchmode); + } + + viewer_play_data->status = MSG_VIEWER_STOP; + msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_toolbar_email_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data); + + msg_error_t err = MSG_SUCCESS; + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed"); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } + msg_struct_list_s *addr_list = NULL; + msg_get_list_handle(msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void **)&addr_list); + + int addr_count = addr_list->nCount; //get address count + + if (addr_count == 1) { + ui_gadget_h loaded_ug = NULL; + service_h svc_handle = NULL; + msg_struct_t addr_info = NULL; + char szAddress[MAX_ADDRESS_VAL_LEN + 1] = {0,}; + addr_info = addr_list->msg_struct_info[0]; + msg_set_str_value(addr_info, MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, szAddress, strlen(szAddress)); + + char *address = (char*)calloc(1, strlen(szAddress)+1); + memcpy(address, szAddress, strlen(szAddress)); + + service_create(&svc_handle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL); + + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, address); + + msg_ui_viewer_disconnect_handler(viewer_play_data); + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER; + loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), EMAIL_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs); + if (loaded_ug) { + msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug); + } else { + viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE; + } + + service_destroy(svc_handle); + } + + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_toolbar_call_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data); + + if (viewer_play_data->addr_list.addr_cnt == 1) { + char telnum[255] = {0,}; + int ret = 0; + service_h svc_handle = NULL; + + service_create(&svc_handle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL); + + service_set_operation(svc_handle, SERVICE_OPERATION_CALL); + snprintf(telnum, sizeof(telnum), "tel:%s", viewer_play_data->addr_list.addr_info[0].address); /* Number to make a call */ + service_set_uri(svc_handle, telnum); + + if ((ret = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "service_send_launch_request failed ret : %d", ret); + } else { + msg_ui_viewer_disconnect_handler(viewer_play_data); + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CALL; + } + service_destroy(svc_handle); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_toolbar_vcall_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data); + + if (viewer_play_data->addr_list.addr_cnt == 1) { + int ret = 0; + bundle *b = bundle_create(); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_TYPE, MSG_BUNDLE_VALUE_VCALL_MO); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_HANDLE, MSG_BUNDLE_VALUE_VCALL_HANDLE); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_PARTY_NUM, viewer_play_data->addr_list.addr_info[0].address); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_CLI_CAUSE, MSG_BUNDLE_VALUE_VCALL_FALSE); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_FORWARDED, MSG_BUNDLE_VALUE_VCALL_FALSE); + if ((ret = aul_launch_app(VIDEO_CALL_PKG_NAME, b)) >= 0) { + msg_ui_viewer_disconnect_handler(viewer_play_data); + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "aul_launch_app failed ret : %d", ret); + } + bundle_free(b); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_toolbar_add_to_contact_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data); + + if (viewer_play_data->addr_list.addr_cnt == 1) { + ui_gadget_h loaded_ug = NULL; + char buf[DEF_BUF_LEN_D] = { 0, }; + + service_h svc_handle = NULL; + + service_create(&svc_handle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL); + + if (strstr(viewer_play_data->addr_list.addr_info[0].address, "@")) { + snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_EMAIL); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_EMAIL, viewer_play_data->addr_list.addr_info[0].address); + } else { + snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_NUM); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_NUM, viewer_play_data->addr_list.addr_info[0].address); + } + + msg_ui_viewer_disconnect_handler(viewer_play_data); + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT; + loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_LIST, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs); + if (loaded_ug) { + msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug); + } else { + viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE; + } + + service_destroy(svc_handle); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_toolbar_view_contact_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !data || !obj); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, !viewer_play_data); + + if (viewer_play_data->addr_list.addr_cnt == 1) { + ui_gadget_h loaded_ug = NULL; + char contactId[DEF_BUF_LEN_S] = { 0, }; + char buf[DEF_BUF_LEN_D] = { 0, }; + service_h svc_handle = NULL; + + service_create(&svc_handle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL); + + snprintf(contactId, sizeof(contactId), "%d", viewer_play_data->addr_list.addr_info[0].contact_id); + snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_DETAIL); + + service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_ID, contactId); + + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT; + loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs); + + if (loaded_ug) { + msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug); + msg_ui_viewer_disconnect_handler(viewer_play_data); + } else { + viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE; + } + + service_destroy(svc_handle); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_open_title_menu_genlist(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!"); + int i = 0; + + /* create layout for title menu */ + Evas_Object *layout = elm_layout_add(viewer_play_data->play_layout); + elm_layout_theme_set(layout, "layout", "application", "noindicator"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(layout); + elm_object_part_content_set(viewer_play_data->play_layout, "viewer.titlebtn.list", layout); + + /* create box (for setting min size of genlist)*/ + Evas_Object *box = elm_box_add(layout); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box); + elm_object_part_content_set(layout, "elm.swallow.content", box); + + /* create genlist */ + Evas_Object *genlist = elm_genlist_add(box); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_genlist_homogeneous_set(genlist, EINA_TRUE); + evas_object_data_set(genlist, "viewer_play_data", viewer_play_data); + evas_object_show(genlist); + + elm_box_pack_end(box, genlist); + + /* set genlist styles */ + viewer_play_data->itc_title.item_style = "2text.1icon.2"; + viewer_play_data->itc_title.func.text_get = __msg_ui_viewer_title_menu_gl_text_get; + viewer_play_data->itc_title.func.content_get = __msg_ui_viewer_title_menu_gl_content_get; + viewer_play_data->itc_title.func.state_get = NULL; + viewer_play_data->itc_title.func.del = NULL; + + /* genlist list load */ + for (i = 0; i < viewer_play_data->addr_list.addr_cnt; i++) + elm_genlist_item_append(genlist, &(viewer_play_data->itc_title), &(viewer_play_data->addr_list.addr_info[i]), NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_title_menu_gl_sel, viewer_play_data); + + viewer_play_data->title_genlist = genlist; + viewer_play_data->title_box_layout = layout; + + /** emit signal for changing state of title menu list to open */ + elm_object_signal_emit(viewer_play_data->title_box_layout, "elm,state,titlelist,open", ""); + + /** Determine genlist size to show - it shows maxmum 3 rows */ + if (viewer_play_data->addr_list.addr_cnt >= VIEWER_TITLE_MENU_GENLIST_MAX_ITEM) + evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * VIEWER_TITLE_MENU_GENLIST_MAX_ITEM); + else + evas_object_size_hint_min_set(box, 0, VIEWER_TITLE_MENU_LINE_HEIGHT * viewer_play_data->addr_list.addr_cnt); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_close_title_menu_genlist(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!"); + + elm_object_signal_emit(viewer_play_data->title_box_layout, "elm,state,titlelist,close", ""); + + Evas_Object *layout = elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.titlebtn.list"); + if (layout) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "delete box layout"); + evas_object_del(layout); + } + + viewer_play_data->title_box_layout = NULL; + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static char *__msg_ui_viewer_title_menu_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = evas_object_data_get(obj, "viewer_play_data"); + MSG_VIEWER_ADDR_INFO *addrInfo = (MSG_VIEWER_ADDR_INFO *)data; + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, !viewer_play_data || !addrInfo, NULL); + + if (g_strcmp0(part, "elm.text.1") == 0) { + if (addrInfo->contact_id > 0 && addrInfo->name[0] != '\0') + return strdup(addrInfo->name); + else if (addrInfo->address[0] != '\0') + return strdup (addrInfo->address); + else + return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + } else if (g_strcmp0(part, "elm.text.2") == 0) { + if (addrInfo->address[0] != '\0') + return strdup(addrInfo->address); + else + return strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return NULL; +} + + +static Evas_Object * __msg_ui_viewer_title_menu_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + // Currently, this function do nothing, caller_id concept is not determined + // TODO: add callerId + return NULL; +} + +static void __msg_ui_viewer_title_menu_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL!"); + + Elm_Object_Item *item = NULL; + MSG_VIEWER_ADDR_INFO *addrInfo = NULL; + + item = (Elm_Object_Item *)event_info; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !item, "Item is NULL or Item is not Message item\n"); + + addrInfo = (MSG_VIEWER_ADDR_INFO *)elm_object_item_data_get(item); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, addrInfo == NULL, "item_data is NULL"); + + elm_genlist_item_selected_set(item, 0); + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + Evas_Object *popup = NULL; + Evas_Object *list = NULL; + Evas_Object *btn_close = NULL; + + popup = elm_popup_add(viewer_play_data->main_window); + elm_object_style_set(popup, "min_menustyle"); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + btn_close = elm_button_add(popup); + elm_object_style_set(btn_close, "popup_button/default"); + elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE")); + elm_object_part_content_set(popup, "button1", btn_close); + evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_title_menu_popup_close_clicked_cb, viewer_play_data); + + list = elm_list_add(popup); + elm_list_mode_set(list, ELM_LIST_EXPAND); + + evas_object_data_set(list, "viewer_play_data", viewer_play_data); + + if (msg_common_is_valid_phone_number(addrInfo->address)) { + elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_CALL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo); + elm_list_item_append(list, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo); + } else if (msg_common_is_valid_email_addr(addrInfo->address)) { + elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo); + } else { + D_MSG("invalid_numtype"); + } + + if (addrInfo->contact_id> 0) { + elm_object_part_text_set(popup, "title,text", addrInfo->name); + elm_list_item_append(list, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo); + } else { + elm_object_part_text_set(popup, "title,text", addrInfo->address); + elm_list_item_append(list, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, NULL, __msg_ui_viewer_title_menu_popup_selected_cb, (void *)addrInfo); + } + + elm_list_go(list); + elm_object_content_set(popup, list); + evas_object_show(popup); + + viewer_play_data->popup = popup; + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_title_menu_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_title_menu_popup_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data"); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !viewer_play_data, "viewer_play_data is NULL"); + MSG_VIEWER_ADDR_INFO *addrInfo = NULL; + addrInfo = (MSG_VIEWER_ADDR_INFO *)data; + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, !addrInfo, "addrInfo is NULL"); + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + const char *label = elm_object_item_text_get((Elm_Object_Item *) event_info); + + if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_CALL")) == 0) { + char telnum[255] = {0,}; + int ret = 0; + service_h svc_handle = NULL; + + service_create(&svc_handle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL); + + service_set_operation(svc_handle, SERVICE_OPERATION_CALL); + snprintf(telnum, sizeof(telnum), "tel:%s", addrInfo->address); /* Number to make a call */ + service_set_uri(svc_handle, telnum); + if ((ret = service_send_launch_request(svc_handle, NULL, NULL)) != SERVICE_ERROR_NONE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "appsvc_run_service failed ret : %d", ret); + } else { + msg_ui_viewer_disconnect_handler(viewer_play_data); + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_CALL; + } + + service_destroy(svc_handle); + } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL")) == 0) { + int ret = 0; + bundle *b = bundle_create(); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_TYPE, MSG_BUNDLE_VALUE_VCALL_MO); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_HANDLE, MSG_BUNDLE_VALUE_VCALL_HANDLE); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_PARTY_NUM, addrInfo->address); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_CLI_CAUSE, MSG_BUNDLE_VALUE_VCALL_FALSE); + bundle_add(b, MSG_BUNDLE_KEY_VCALL_FORWARDED, MSG_BUNDLE_VALUE_VCALL_FALSE); + if ((ret = aul_launch_app(VIDEO_CALL_PKG_NAME, b)) >= 0) { + msg_ui_viewer_disconnect_handler(viewer_play_data); + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_APP_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_VIDEO_CALL; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "aul_launch_app failed ret : %d", ret); + } + bundle_free(b); + } else if (g_strcmp0(label, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS")) == 0) { /* Add to contact with phone number string... */ + ui_gadget_h loaded_ug = NULL; + char buf[DEF_BUF_LEN_D] = { 0, }; + service_h svc_handle = NULL; + + service_create(&svc_handle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL); + + if (strstr(addrInfo->address, "@")) { + snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_EMAIL); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_EMAIL, addrInfo->address); + } else { + snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_UPDATE_WITH_NUM); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_NUM, addrInfo->address); + } + + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT; + loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_LIST, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs); + + if (loaded_ug) { + msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug); + msg_ui_viewer_disconnect_handler(viewer_play_data); + } else { + viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE; + } + service_destroy(svc_handle); + } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_OPT_VIEW_CONTACT")) == 0) { + ui_gadget_h loaded_ug = NULL; + char contactId[DEF_BUF_LEN_S] = { 0, }; + char buf[DEF_BUF_LEN_D] = { 0, }; + service_h svc_handle = NULL; + + service_create(&svc_handle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL); + + snprintf(contactId, sizeof(contactId), "%d", addrInfo->contact_id); + snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_DETAIL); + + service_add_extra_data(svc_handle, CT_UG_BUNDLE_TYPE, buf); + service_add_extra_data(svc_handle, CT_UG_BUNDLE_ID, contactId); + + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_ADD_TO_CONTACT; + loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), UG_CONTACTS_DETAILS, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs); + + if (loaded_ug) { + msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug); + msg_ui_viewer_disconnect_handler(viewer_play_data); + } else { + viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE; + } + service_destroy(svc_handle); + } else if (g_strcmp0(label, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_OPT_SEND_EMAIL")) == 0) { + ui_gadget_h loaded_ug = NULL; + service_h svc_handle = NULL; + + service_create(&svc_handle); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, svc_handle < 0 || svc_handle == NULL); + + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_RUN_TYPE, MSG_BUNDLE_VALUE_EMAIL_COMPOSE); + service_add_extra_data(svc_handle, MSG_BUNDLE_KEY_TO, addrInfo->address); + + viewer_play_data->launch_cmd = MSG_VIEWER_LOAD_OTHER_UG_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_LOAD_EMAIL_COMPOSER; + loaded_ug = ug_create(msg_ui_viewer_get_viewer_ug(viewer_play_data->viewer_main), EMAIL_COMPOSER_UG_NAME, UG_MODE_FULLVIEW, svc_handle, &viewer_play_data->cbs); + + if (loaded_ug) { + msg_ui_viewer_set_loaded_ug(viewer_play_data->viewer_main, loaded_ug); + msg_ui_viewer_disconnect_handler(viewer_play_data); + } else { + viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE; + } + service_destroy(svc_handle); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_create_save_attachments_popup(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + Elm_Object_Item *gl_item = NULL; + Evas_Object *popup = NULL; + Evas_Object *genlist = NULL; + Evas_Object *btn_save = NULL; + Evas_Object *btn_close = NULL; + int index = 0; + int total_media_count = 0; + + total_media_count = viewer_play_data->insert_count + viewer_play_data->attach_count; + + /* create popup */ + popup = elm_popup_add(viewer_play_data->main_window); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL); + + if (total_media_count > 3 ) + elm_object_style_set(popup, "menustyle"); + else + elm_object_style_set(popup, "min_menustyle"); + + /* set popup title */ + elm_object_part_text_set(popup, "title,text", (char *)"Attachments"); + + /* set select all genlist item style */ + viewer_play_data->attach_sa_class.item_style = "1text.1icon.2"; + viewer_play_data->attach_sa_class.func.text_get = __msg_ui_viewer_save_attachments_sa_gl_text_get; + viewer_play_data->attach_sa_class.func.content_get = __msg_ui_viewer_save_attachments_sa_gl_content_get; + viewer_play_data->attach_sa_class.func.state_get = NULL; + viewer_play_data->attach_sa_class.func.del = NULL; + + /* set genlist style */ + viewer_play_data->attach_item_class.item_style = "1text.2icon.2"; + viewer_play_data->attach_item_class.func.text_get = __msg_ui_viewer_save_attachments_gl_text_get; + viewer_play_data->attach_item_class.func.content_get = __msg_ui_viewer_save_attachments_gl_content_get; + viewer_play_data->attach_item_class.func.state_get = NULL; + viewer_play_data->attach_item_class.func.del = NULL; + + /* create genlist */ + genlist = elm_genlist_add(viewer_play_data->main_window); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_data_set(genlist, "viewer_play_data", viewer_play_data); + + /* add genlist item based on media count, if item's count is over 1 then 'select all' item should be inserted*/ + if (total_media_count > 1) { + /* add Select all item */ + gl_item = elm_genlist_item_append(genlist, &viewer_play_data->attach_sa_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_sa_gl_sel, NULL); + + /* add each item (order is inserted + attached) */ + for (index = 1; index < total_media_count+1; index++) { + gl_item = elm_genlist_item_append(genlist, &viewer_play_data->attach_item_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_gl_sel, NULL); + } + } else { + /* add each item (order is inserted + attached) */ + for (index = 0; index < total_media_count; index++) { + gl_item = elm_genlist_item_append(genlist, &viewer_play_data->attach_item_class, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_save_attachments_gl_sel, NULL); + } + } + + /* add save button */ + btn_save = elm_button_add(popup); + elm_object_style_set(btn_save, "popup_button/default"); + elm_object_text_set(btn_save, dgettext("sys_string", "IDS_COM_SK_SAVE")); + elm_object_part_content_set(popup, "button1", btn_save); + evas_object_smart_callback_add(btn_save, "clicked", __msg_ui_viewer_save_attachments_popup_save_clicked_cb, viewer_play_data); + viewer_play_data->save_button = btn_save; + elm_object_disabled_set(viewer_play_data->save_button, EINA_TRUE); + + /* add close button */ + btn_close = elm_button_add(popup); + elm_object_style_set(btn_close, "popup_button/default"); + elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_SK_CANCEL")); + elm_object_part_content_set(popup, "button2", btn_close); + evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb, viewer_play_data); + + /* set popup style */ + if (total_media_count > 3 ) { + /* set genlist part content in popup */ + elm_object_content_set(popup, genlist); + } else { + Evas_Object *box = NULL; + box = elm_box_add(viewer_play_data->main_window); + evas_object_size_hint_min_set(box, VIEWER_ATTACH_POPUP_WIDTH * elm_scale_get(), VIEWER_ATTACH_GL_ITEM_HEIGHT * (viewer_play_data->insert_count + viewer_play_data->attach_count + ((total_media_count > 1) ? 1 : 0)) * elm_scale_get()); + evas_object_show(genlist); + elm_box_pack_end(box, genlist); + elm_object_content_set(popup, box); + } + + /* show popup */ + evas_object_show(popup); + viewer_play_data->save_attachment_gl= genlist; + viewer_play_data->popup = popup; + + /*disconnect mouse handler*/ + msg_ui_viewer_disconnect_handler(viewer_play_data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_save_attachments_popup_cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + int index = 0; + int total_count = 0; + MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->save_button); + viewer_play_data->save_button = NULL; + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + viewer_play_data->sa_check = NULL; + } + + total_count = viewer_play_data->insert_count + viewer_play_data->attach_count; + + while (index < total_count) { + if (index < viewer_play_data->insert_count) + media_info = eina_list_nth(viewer_play_data->insert_list, index); + else if (index < total_count) + media_info = eina_list_nth(viewer_play_data->attach_list, index-viewer_play_data->insert_count); + else + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!", index); + + if (media_info ) // disable check status + media_info->isChecked = FALSE; + + index++; + } + + viewer_play_data->isSelectAll = FALSE; + + /* connect mouse handler again*/ + if (!viewer_play_data->mouse_down_event_handler) + viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_save_attachments_popup_save_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL); + + int attach_count = 0; + int insert_count = 0; + int total_count = 0; + int selected_count = 0; + + int index = 0; + int insert_index = 0; + int attach_index = 0; + int failed_count = 0; + int saved_count = 0; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->save_button); + viewer_play_data->save_button = NULL; + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + viewer_play_data->sa_check = NULL; + } + + MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_Info = NULL; + + insert_count = eina_list_count(viewer_play_data->insert_list); + attach_count = eina_list_count(viewer_play_data->attach_list); + total_count = insert_count + attach_count; + + while (index < total_count) { + if (index < insert_count) + media_Info = eina_list_nth(viewer_play_data->insert_list , insert_index++); + else if (index < total_count) + media_Info = eina_list_nth(viewer_play_data->attach_list , attach_index++); + + if (media_Info) { + bool saveCondition = (viewer_play_data->isSelectAll) ? TRUE : (media_Info->isChecked ? TRUE : FALSE); + + if (saveCondition) { + selected_count++; + + /*get default file path*/ + MSG_BOOL result = FALSE; + char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0}; + + result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path)); + if (result) { + char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,}; + snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, media_Info->pfile_name); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", media_Info->pfile_path); + + char *result_path = msg_ui_viewer_util_copy_file(media_Info->pfile_path, dst_path); + if (result_path) { + saved_count++; + free(result_path); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index); + failed_count++; + } + } else { + failed_count++; + } + + //release check status + media_Info->isChecked = FALSE; + if (viewer_play_data->isSelectAll) + viewer_play_data->isSelectAll = FALSE; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index); + } + + media_Info = NULL; + + index++; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Selected(%d) / Total(%d) [inserted(%d),attached(%d)]", selected_count, total_count, insert_count, attach_count); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Saved(%d), Failed(%d)", saved_count, failed_count); + + /* show indicator status text */ + if (failed_count == selected_count) { + status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE")); + } else { + char buf[DEF_BUF_LEN_S + 1] = {0, }; + snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, selected_count); + status_message_post(buf); + } + + /* connect mouse handler again*/ + if (!viewer_play_data->mouse_down_event_handler) + viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static char *__msg_ui_viewer_save_attachments_sa_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + int index = (int)data; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.text")) { + if (index == 0) { + return strdup(dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL")); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid index of select all(%d)", index); + return NULL; + } + } + return NULL; +} + +static Evas_Object *__msg_ui_viewer_save_attachments_sa_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data"); + int index = (int)data; + Evas_Object *check; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) { + check = elm_check_add(obj); + elm_check_state_pointer_set(check, &(viewer_play_data->isSelectAll)); + evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_smart_callback_add(check, "changed", __msg_ui_viewer_save_attachments_sa_check_changed_cb, viewer_play_data); + viewer_play_data->sa_check = check; + + return check; + } + + return NULL; +} + +static void __msg_ui_viewer_save_attachments_sa_check_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + int i = 0; + Eina_List * realized_list; + Elm_Object_Item *it; + Eina_List *l; + Eina_Bool checked; + + int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "total Count = %d", total_count); + checked = elm_check_state_get(obj); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "checked status = %d", checked); + MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL; + + for (i = 0; i < total_count; i++) { + if (i < viewer_play_data->insert_count) { + media_info = eina_list_nth(viewer_play_data->insert_list, i); + media_info->isChecked = checked; + } else if (i < total_count) { + media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count); + media_info->isChecked = checked; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!"); + } + } + + // Update realized items only + realized_list = elm_genlist_realized_items_get(viewer_play_data->save_attachment_gl); + EINA_LIST_FOREACH(realized_list, l, it) { + elm_genlist_item_update(it); + } + +} + +static void __msg_ui_viewer_save_attachments_sa_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data"); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL); + int index = 0; + int i = 0; + int total_count = viewer_play_data->insert_count + viewer_play_data->attach_count; + + Elm_Object_Item *item = (Elm_Object_Item *)event_info; + MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL; + + if (item != NULL) { + index = (int)elm_object_item_data_get(item); + elm_genlist_item_selected_set(item, EINA_FALSE); + + viewer_play_data->isSelectAll = !viewer_play_data->isSelectAll; + + //check state changed cb will be called + elm_check_state_set(viewer_play_data->sa_check, viewer_play_data->isSelectAll); + elm_genlist_item_update(item); + + if (total_count > 1) { + for (i = 0; i < total_count; i++) { + if (i < viewer_play_data->insert_count) { + tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i); + + } else if (i < total_count) { + tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!"); + continue; + } + elm_check_state_set(tmp_media_info->check_item, (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE); + tmp_media_info->isChecked = (viewer_play_data->isSelectAll) ? EINA_TRUE : EINA_FALSE; + } + } + elm_object_disabled_set(viewer_play_data->save_button, (viewer_play_data->isSelectAll) ? EINA_FALSE : EINA_TRUE); + } +} + +static char *__msg_ui_viewer_save_attachments_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data"); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL); + + int index = (int) data; + int realIndex = 0; + int insert_count = viewer_play_data->insert_count; + int attach_count = viewer_play_data->attach_count; + int total_count = insert_count + attach_count; + MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item + + // check boundary + if (realIndex < 0 ) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index); + return NULL; + } + + if (!strcmp(part, "elm.text")) { + if (realIndex < insert_count) { + media_info = eina_list_nth(viewer_play_data->insert_list, realIndex); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[INSERT MEDIA] name is = %s", media_info->pfile_name); + } else if (realIndex < insert_count+attach_count) { + media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "[ATTACH MEDIA] name is = %s", media_info->pfile_name); + } + + return strdup(media_info->pfile_name); + } + return NULL; +} + +static Evas_Object *__msg_ui_viewer_save_attachments_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data"); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, NULL); + MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL; + int index = (int)data; + Evas_Object *check; + int realIndex = index-1; + int insert_count = viewer_play_data->insert_count; + int attach_count = viewer_play_data->attach_count; + int total_count = insert_count + attach_count; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "index = %d", index); + + realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item + + // check boundary + if (realIndex < 0 ) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index); + return NULL; + } + + if (realIndex < insert_count) { + media_info = eina_list_nth(viewer_play_data->insert_list, realIndex); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex); + } else if (realIndex < total_count) { + media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count); + } + + if (strcmp(part, "elm.icon.1") == 0) { + check = elm_check_add(obj); + //set the State pointer to keep the current UI state of Checkbox. + elm_check_state_pointer_set(check, &media_info->isChecked); + evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL); + + media_info->check_item = check; + + return check; + } else if (strcmp(part, "elm.icon.2") == 0) { + Evas_Object *image = NULL; + + image = elm_icon_add(obj); + + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "media_info->pfile_path = %s", media_info->pfile_path); + + /*set attach file icon*/ + if (media_info->media_type == MSG_VIEWER_MEDIA_IMG || + media_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) { + elm_icon_file_set(image, media_info->pfile_path, NULL); + } else if (media_info->media_type == MSG_VIEWER_MEDIA_DRM) { + elm_icon_file_set(image, MSG_VIEWER_IMAGE_DRM_SMALL_ICON, NULL); + } else { + if (strlen(media_info->pfile_path)) { + const char *icon_path = NULL; + + icon_path = msg_common_get_file_icon(media_info->pfile_path); + if (icon_path) { + elm_icon_file_set(image, icon_path, NULL); + } else { + D_EMSG("icon_path is NULL"); + elm_icon_file_set(image, MSG_VIEWER_IMAGE_ATTACH_ICON, NULL); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL"); + return NULL; + } + } + + if (image) + evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + return image; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part); + } + + return NULL; +} + +static void __msg_ui_viewer_save_attachments_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)evas_object_data_get(obj, "viewer_play_data"); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL); + + int i = 0; + int index = 0; + int realIndex = 0; + int insert_count = viewer_play_data->insert_count; + int attach_count = viewer_play_data->attach_count; + int total_count = insert_count + attach_count; + bool isAllSelected = TRUE; + bool isNoneSelected = TRUE; + + Elm_Object_Item *item = (Elm_Object_Item *)event_info; + MSG_VIEWER_ATTACH_MEDIA_INFO_S *sel_media_info = NULL; + MSG_VIEWER_ATTACH_MEDIA_INFO_S *tmp_media_info = NULL; + + if (item != NULL) { + index = (int)elm_object_item_data_get(item); + realIndex = (total_count > 1) ? index-1 : index; // calculate item index considering 'select all' item + + // check boundary + if (realIndex < 0 ) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid index!!index = %d", index); + return; + } + + elm_genlist_item_selected_set(item, EINA_FALSE); + + if (realIndex < insert_count) { + sel_media_info = eina_list_nth(viewer_play_data->insert_list, realIndex); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [INSERT MEDIA] index of %d", realIndex); + } else if (realIndex < total_count) { + sel_media_info = eina_list_nth(viewer_play_data->attach_list, realIndex-insert_count); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "selected media is [ATTACH MEDIA] index of %d", realIndex-insert_count); + } + + // toggle check status + sel_media_info->isChecked = !sel_media_info->isChecked; + + elm_genlist_item_update(item); + + //check condition for set select all item + if (total_count > 1 && sel_media_info->isChecked) { + i =0; + for (i = 0; i < total_count; i++) { + if (i < viewer_play_data->insert_count) { + tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i); + if (!tmp_media_info->isChecked) { + isAllSelected = FALSE; + break; + } + } else if (i < total_count) { + tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count); + if (!tmp_media_info->isChecked) { + isAllSelected = FALSE; + break; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!"); + } + } + + if (isAllSelected) { + elm_check_state_set(viewer_play_data->sa_check, EINA_TRUE); + viewer_play_data->isSelectAll = EINA_TRUE; + } + } + + // check condition for release select all item + if (total_count > 1 && !sel_media_info->isChecked && viewer_play_data->isSelectAll) { + elm_check_state_set(viewer_play_data->sa_check, EINA_FALSE); + viewer_play_data->isSelectAll = EINA_FALSE; + } + + // check condition for enable save button item + for (i = 0; i < total_count; i++) { + if (i < viewer_play_data->insert_count) { + tmp_media_info = eina_list_nth(viewer_play_data->insert_list, i); + if (tmp_media_info->isChecked) { + isNoneSelected = FALSE; + break; + } + } else if (i < total_count) { + tmp_media_info = eina_list_nth(viewer_play_data->attach_list, i-viewer_play_data->insert_count); + if (tmp_media_info->isChecked) { + isNoneSelected = FALSE; + break; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!"); + } + } + elm_object_disabled_set(viewer_play_data->save_button, (isNoneSelected) ? EINA_TRUE : EINA_FALSE); + } +} + +static void __msg_ui_viewer_help_page_save_all_item(MSG_PLAY_DATA_S *viewer_play_data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, viewer_play_data->attach_list == NULL); + + int attach_count = eina_list_count(viewer_play_data->attach_list); + int index = 0; + int attach_index = 0; + int failed_count = 0; + int saved_count = 0; + + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttachInfo = NULL; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attach_cnt = %d", attach_count); + + while (index < attach_count) { + pAttachInfo = eina_list_nth(viewer_play_data->attach_list , attach_index++); + + if (pAttachInfo) { + /*get default file path*/ + MSG_BOOL result = FALSE; + char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0}; + + result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path)); + if (result) { + char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,}; + snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttachInfo->pfile_name); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dest pfile_path [%s]", dst_path); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "src pfile_path [%s]", pAttachInfo->pfile_path); + + char *result_path = msg_ui_viewer_util_copy_file(pAttachInfo->pfile_path, dst_path); + if (result_path) { + saved_count++; + free(result_path); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_ui_viewer_util_copy_file is failed index = %d", index); + failed_count++; + } + } else { + failed_count++; + } + + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pmedia_info is NULL index = %d", index); + failed_count++; + } + + pAttachInfo = NULL; + + index++; + } + + /* show indicator status text */ + if (failed_count == attach_count) { + status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE")); + } else { + char buf[DEF_BUF_LEN_S + 1] = {0, }; + snprintf(buf, sizeof(buf), "%s (%d/%d)", dgettext("sys_string", "IDS_COM_POP_SAVED"), saved_count, attach_count); + status_message_post(buf); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_help_page_save_button_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data; + MSG_PLAY_DATA_S *viewer_play_data = pAttach_info->viewer_play_data; + + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, viewer_play_data == NULL, "viewer_play_data is NULL"); + + if (strlen(pAttach_info->pfile_path) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pfile_path is NULL"); + if (pAttach_info->isSaveAll == FALSE) { + status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE")); + } else { //Save all + __msg_ui_viewer_help_page_save_all_item(viewer_play_data); + } + return; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "source pfile_path = [%s]", pAttach_info->pfile_path); + MSG_BOOL result = 0; + MSG_BOOL issave = TRUE; + char dir_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0}; + + /*get default file path*/ + result = msg_viewer_util_get_default_path(dir_path, sizeof(dir_path)); + if (result) { + char dst_path[MSG_VIEWER_FILEPATH_MAX_LEN + 1] = {0,}; + snprintf(dst_path, sizeof(dst_path), "%s/%s", dir_path, pAttach_info->pfile_name); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "dst_path = [%s]", dst_path); + + /*check for same file*/ + if (ecore_file_exists(dst_path) == EINA_TRUE) { + if (msg_ui_viewer_auto_rename(pAttach_info->pfile_path, dst_path) == FALSE) + issave = FALSE; + } else { + if (ecore_file_cp(pAttach_info->pfile_path, dst_path) == EINA_FALSE) + issave = FALSE; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_viewer_util_get_default_path is failed"); + status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE")); + return; + } + + if (issave) + status_message_post(dgettext("sys_string", "IDS_COM_POP_SAVED")); + else + status_message_post(dgettext("sys_string", "IDS_COM_POP_UNABLE_TO_SAVE")); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_more_ctxpopup_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + const char *label = elm_object_item_text_get((Elm_Object_Item *)event_info); + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + if (strcmp(label, (char *)"Copy message text") == 0) { + msg_ui_viewer_copy_message_text_to_clipboard(viewer_play_data); + } else if (strcmp(label, (char *)"View message details") == 0) { + msg_ui_viewer_create_msg_detail_popup(viewer_play_data); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid list type"); + return; + } + + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_more_ctxpopup_dismissed_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + diff --git a/viewer/src/msg-ui-viewer-play-view.c b/viewer/src/msg-ui-viewer-play-view.c new file mode 100755 index 0000000..bd287e8 --- /dev/null +++ b/viewer/src/msg-ui-viewer-play-view.c @@ -0,0 +1,2635 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + *==================================================================================================*/ +#include "msg-ui-viewer-play-view.h" +#include "msg-ui-viewer-main.h" +#include "msg-ui-image-resource.h" +#include "msg-ui-viewer-utility.h" +#include "msg-ui-common-utility.h" + +#include <msg.h> +#include <msg_storage.h> +#include <msg_transport.h> + +#include <aul.h> +#include <Ecore_X.h> +#include <glib.h> +#include <contacts-ug.h> +#include "contacts-svc.h" +#include "appsvc.h" +#include <sound_manager.h> +#include <status.h> + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +/* message */ +static MSG_BOOL __msg_ui_viewer_play_view_get_message_info(void *data); +static void __msg_ui_viewer_get_thread_addr_list(MSG_PLAY_DATA_S *data); +static Eina_List* __msg_ui_viewer_get_inserted_item_list(MSG_PLAY_DATA_S *data); +static Eina_List* __msg_ui_viewer_get_attach_list(MSG_PLAY_DATA_S *data); + +/* create layout */ +static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data); +static MSG_BOOL __msg_ui_viewer_create_content_layout(MSG_PLAY_DATA_S *data); +static void __msg_ui_viewer_create_play_controller(MSG_PLAY_DATA_S *data); +static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data); +static void __msg_ui_viewer_get_layout_size(MSG_PLAY_DATA_S *data, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom); + +/* help page genlist */ +static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object *__msg_ui_viewer_help_page_gl_content_get(void *data, Evas_Object *obj, const char *part); +static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_viewer_help_page_gl_del(void *data, Evas_Object *obj); + +/* message details */ +static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info); +static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object *entry); + +/*================================================================================================== + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +MSG_SMIL_ERROR_E msg_ui_viewer_smil_cb(SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus, void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, eventStatus == NULL, MSG_ERR_SMIL_UI_DISPLAY_FAIURE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, MSG_ERR_SMIL_UI_DISPLAY_FAIURE); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + char title_string[VIEWER_TITLE_FONT_LEN + 1] = {0, }; + int total_page = 0; + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "clientCbEvent : %d", eventStatus->clientCbEvent); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "isLastSlide : %d", eventStatus->isLastSlide); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pageIdx : %d", eventStatus->pageIdx); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pageCnt : %d", eventStatus->pageCnt); + + viewer_play_data->smil_eventStatus = eventStatus; + /*update prev/next button*/ + msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_UNKOWN); + + /*for Multipart.Mixed "Slide" count info.*/ + if (eventStatus->pageCnt == 0 && eventStatus->clientCbEvent != SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START) + total_page = eventStatus->pageCnt + 1; + else + total_page = eventStatus->pageCnt; + + /*update page index*/ + snprintf(title_string, sizeof(title_string), "%d/%d ", eventStatus->pageIdx + 1, total_page); + edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "page/index", title_string); + + if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE && eventStatus->isLastSlide == TRUE) { + MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE; + msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launchmode : %d", launchmode); + + if (launchmode == MSG_VIEWER_PREVIEW_MODE) { + viewer_play_data->status = MSG_VIEWER_STOP; + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL + } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE) { + viewer_play_data->status = MSG_VIEWER_STOP; + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid launchmode"); + } + } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAGE_MEDIA_PLAY_START || + eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAGE_PLAY_START) { /*slide is playing*/ + double current_slide_time = 0.0; + double remain_slide_time = 0.0; + double remain_next_slide_time = 0.0; + if (msg_smil_get_slide_time(viewer_play_data->SmilHandle, eventStatus->pageIdx, FALSE, &remain_slide_time)) { + if (msg_smil_get_slide_time(viewer_play_data->SmilHandle, eventStatus->pageIdx+1, FALSE, &remain_next_slide_time)) + current_slide_time = remain_slide_time - remain_next_slide_time; + else + current_slide_time = remain_slide_time; + } + + if (current_slide_time <= 0) { //for infinite duration slide, duration <= 0 + if (viewer_play_data->play_controller_progressbar_timer) + ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer); + } else { + if (viewer_play_data->play_controller_progressbar_timer) + ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer); + } + + //set pause icon in play controller + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*"); + + viewer_play_data->status = MSG_VIEWER_PLAY; + } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_PAUSE_CURRENT_PAGE) { + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + + viewer_play_data->status = MSG_VIEWER_PAUSE; + + if (viewer_play_data->play_controller_progressbar_timer) + ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer); + } else if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_ERROR) { + /*stop smil player*/ + if (msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP) == MSG_SMIL_SUCCESS) { + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + //do not delete progressbar timer, it will be removed automatically in timer callback with return value ECORE_CALLBACK_CANCEL + viewer_play_data->status = MSG_VIEWER_STOP; + msg_ui_viewer_update_play_controller(viewer_play_data, MSG_VIEWER_STOP); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler is failed"); + } + + /* show popup */ + if (msg_common_is_connected_call()) { + viewer_play_data->popup_mode = VIEWER_NORMAL_POPUP; + msg_ui_viewer_show_popup(viewer_play_data, viewer_play_data->main_window, dgettext(MESSAGE_PKGNAME, "IDS_MSG_POP_UNABLE_TO_PLAY_DURING_CALL")); + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return MSG_SMIL_SUCCESS; +} + +void msg_ui_viewer_update_play_controller(void *data, MSG_VIEWER_PLAY_STATUS_E status) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_BOOL bfisrt_page = FALSE; + MSG_BOOL blast_page = FALSE; + SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = viewer_play_data->smil_eventStatus; + Evas_Object *left_btn_icon = NULL; + Evas_Object *right_btn_icon = NULL; + int r = VIEWER_COLOR_255; + int g = VIEWER_COLOR_255; + int b = VIEWER_COLOR_255; + int a = VIEWER_COLOR_255; + SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle); + + if (status == MSG_VIEWER_STOP) { + elm_object_disabled_set(viewer_play_data->next_button, TRUE); + right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon"); + evas_object_color_get(right_btn_icon, &r, &g, &b, &a); + evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button"); + elm_object_disabled_set(viewer_play_data->prev_button, TRUE); + left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon"); + evas_object_color_get(left_btn_icon, &r, &g, &b, &a); + evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button"); + } else { + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, eventStatus == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_DEBUG, slide->commonData == NULL); + if (slide->commonData->pageCnt > 0) { + if (slide->pageIdx == 0) + bfisrt_page = TRUE; + + if (slide->pageIdx + 1 == slide->commonData->pageCnt) + blast_page = TRUE; + + if (bfisrt_page) { /*first page*/ + elm_object_disabled_set(viewer_play_data->prev_button, TRUE); + left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon"); + evas_object_color_get(left_btn_icon, &r, &g, &b, &a); + evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button"); + } else { + elm_object_disabled_set(viewer_play_data->prev_button, FALSE); + left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon"); + evas_object_color_get(left_btn_icon, &r, &g, &b, &a); + evas_object_color_set(left_btn_icon, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable prev_button"); + } + + if (blast_page) { /*lastpage*/ + elm_object_disabled_set(viewer_play_data->next_button, TRUE); + right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon"); + evas_object_color_get(right_btn_icon, &r, &g, &b, &a); + evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, 128); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button"); + } else { + elm_object_disabled_set(viewer_play_data->next_button, FALSE); + right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon"); + evas_object_color_get(right_btn_icon, &r, &g, &b, &a); + evas_object_color_set(right_btn_icon, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255, VIEWER_COLOR_255); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Enable next_button"); + } + + /*smil player is finished*/ + if (eventStatus->clientCbEvent == SMIL_RENDER_EVENT_LAST_PAGE_PLAY_COMPLETE && + eventStatus->isLastSlide == TRUE) { + elm_object_disabled_set(viewer_play_data->next_button, TRUE); + right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon"); + evas_object_color_get(right_btn_icon, &r, &g, &b, &a); + evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable next_button"); + + elm_object_disabled_set(viewer_play_data->prev_button, TRUE); + left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon"); + evas_object_color_get(left_btn_icon, &r, &g, &b, &a); + evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Disable prev_button"); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Multipart.mixed message"); + elm_object_disabled_set(viewer_play_data->next_button, TRUE); + right_btn_icon = elm_object_part_content_get(viewer_play_data->next_button, "icon"); + evas_object_color_get(right_btn_icon, &r, &g, &b, &a); + evas_object_color_set(right_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128); + + elm_object_disabled_set(viewer_play_data->prev_button, TRUE); + left_btn_icon = elm_object_part_content_get(viewer_play_data->prev_button, "icon"); + evas_object_color_get(left_btn_icon, &r, &g, &b, &a); + evas_object_color_set(left_btn_icon, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128, VIEWER_COLOR_128); + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_command_play_pause(void *data) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_SMIL_ERROR_E Error = MSG_SMIL_SUCCESS; + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status); + + /*prevent invalid double pressing button event after launching ug or app( call, vtcall)*/ + if (viewer_play_data->launch_cmd != MSG_VIEWER_DEFAULT_MODE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launch_cmd is not MSG_VIEWER_DEFAULT_MODE (%d)", viewer_play_data->launch_cmd); + return; + } + + /* play */ + if (viewer_play_data->status == MSG_VIEWER_PLAY) { + Error = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PAUSE); + if (Error != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error); + return; + } else { + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "play", "*"); + viewer_play_data->status = MSG_VIEWER_PAUSE; + + if (viewer_play_data->play_controller_progressbar_timer) + ecore_timer_freeze(viewer_play_data->play_controller_progressbar_timer); + } + } else if (viewer_play_data->status == MSG_VIEWER_STOP) { + Error = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY); + if (Error != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error); + } else { + if (viewer_play_data->play_controller) { + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*"); + msg_ui_viewer_create_progressbar(viewer_play_data, 0); + } + + viewer_play_data->status = MSG_VIEWER_PLAY; + } + } else if (viewer_play_data->status == MSG_VIEWER_PAUSE) { + Error = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_RESUME); + if (Error != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", Error); + return; + } else { + if (viewer_play_data->play_controller) + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*"); + viewer_play_data->status = MSG_VIEWER_PLAY; + + if (viewer_play_data->play_controller_progressbar_timer) + ecore_timer_thaw(viewer_play_data->play_controller_progressbar_timer); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid play status case"); + } + + /* hide optionheader if current viewer status has changed to MSG_VIEWER_PLAY */ + if (viewer_play_data->status == MSG_VIEWER_PLAY) { + if (viewer_play_data->title_optionheader_opened) { + elm_object_item_signal_emit(viewer_play_data->navi_item, "elm,state,optionheader,close", ""); + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + viewer_play_data->title_optionheader_opened = EINA_FALSE; + } + + if (viewer_play_data->title_box_layout) { + elm_object_signal_emit(viewer_play_data->navi_title_layout, "elm,state,title,hide", ""); + msg_ui_viewer_close_title_menu_genlist(viewer_play_data); + } + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_update_player_state_after_save(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (viewer_play_data->status == MSG_VIEWER_PAUSE && viewer_play_data->previous_status == MSG_VIEWER_PLAY) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_RESUME); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + return; + } else { + viewer_play_data->status = MSG_VIEWER_PLAY; + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->status : %d", viewer_play_data->status); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->previous_status : %d", viewer_play_data->previous_status); + } + + viewer_play_data->previous_status = MSG_VIEWER_UNKOWN; + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_play_view_init(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + viewer_play_data->main_window = NULL; + viewer_play_data->navi_frame = NULL; + viewer_play_data->navi_item = NULL; + viewer_play_data->navi_title_layout= NULL; + viewer_play_data->title_button = NULL; + viewer_play_data->ctrl_toolbar = NULL; + viewer_play_data->title_toolbar = NULL; + viewer_play_data->title_box_layout = NULL; + viewer_play_data->title_genlist = NULL; + viewer_play_data->subject_index_layout = NULL; + viewer_play_data->play_controller = NULL; + viewer_play_data->play_layout = NULL; + viewer_play_data->prev_button = NULL; + viewer_play_data->next_button = NULL; + viewer_play_data->help_page_gl = NULL; + viewer_play_data->save_attachment_gl = NULL; + viewer_play_data->save_button = NULL; + viewer_play_data->sa_check = NULL; + viewer_play_data->m_x = 0; + viewer_play_data->m_y = 0; + viewer_play_data->mouse_down_event_handler = NULL; + viewer_play_data->mouse_up_event_handler = NULL; + viewer_play_data->msgHandle = NULL; + viewer_play_data->msgID = -1; + viewer_play_data->launch_cmd = MSG_VIEWER_DEFAULT_MODE; + viewer_play_data->status = MSG_VIEWER_UNKOWN; + viewer_play_data->msg_t = NULL; + viewer_play_data->mms_t = NULL; + viewer_play_data->smil_eventStatus = NULL; + viewer_play_data->cmd_type = MSG_VIEWER_CMD_NONE; + viewer_play_data->bgcolor = 0x0; + viewer_play_data->del_idler = NULL; + viewer_play_data->play_controller_timer = NULL; + viewer_play_data->ctrl_start_x = 0; + viewer_play_data->ctrl_start_y = 0; + viewer_play_data->prev_button = NULL; + viewer_play_data->next_button = NULL; + viewer_play_data->insert_count = 0; + viewer_play_data->attach_count = 0; + viewer_play_data->insert_list = NULL; + viewer_play_data->attach_list = NULL; + viewer_play_data->title_optionheader_opened = 0; + viewer_play_data->playcontroller_opened = 0; + + viewer_play_data->title_th = elm_theme_new(); + elm_theme_ref_set(viewer_play_data->title_th, NULL); + elm_theme_extension_add(viewer_play_data->title_th, MSG_CUSTOM_WINSET_EDJ); + + viewer_play_data->progress_th = elm_theme_new(); + elm_theme_ref_set(viewer_play_data->progress_th, NULL); + elm_theme_extension_add(viewer_play_data->progress_th, MSG_VIEWER_EDJ); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_destroy_play_view(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + + if (viewer_play_data->status == MSG_VIEWER_PLAY || viewer_play_data->status == MSG_VIEWER_PAUSE) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_STOP); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + } else { + viewer_play_data->status = MSG_VIEWER_STOP; + } + } + + if (viewer_play_data->insert_list) { + int index = 0; + int ntotal = 0; + ntotal = eina_list_count(viewer_play_data->insert_list); + for (index = 0; index < ntotal; index++) { + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pMedia_info = eina_list_nth(viewer_play_data->insert_list, index); + if (pMedia_info) { + free(pMedia_info); + pMedia_info = NULL; + } + } + eina_list_free(viewer_play_data->insert_list); + viewer_play_data->insert_list = NULL; + } + + if (viewer_play_data->attach_list) { + int index = 0; + int ntotal = 0; + ntotal = eina_list_count(viewer_play_data->attach_list); + for (index = 0; index < ntotal; index++) { + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, index); + if (pAttach_info) { + free(pAttach_info); + pAttach_info = NULL; + } + } + eina_list_free(viewer_play_data->attach_list); + viewer_play_data->attach_list = NULL; + } + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + if (viewer_play_data->del_idler) { + ecore_idler_del(viewer_play_data->del_idler); + viewer_play_data->del_idler = NULL; + } + if (viewer_play_data->help_page_gl) { + evas_object_del(viewer_play_data->help_page_gl); + viewer_play_data->help_page_gl = NULL; + } + + if (viewer_play_data->play_controller_timer) { + ecore_timer_del(viewer_play_data->play_controller_timer); + viewer_play_data->play_controller_timer = NULL; + } + + if (viewer_play_data->play_controller_progressbar_timer) { + ecore_timer_del(viewer_play_data->play_controller_progressbar_timer); + viewer_play_data->play_controller_progressbar_timer = NULL; + } + + if (viewer_play_data->title_th) { + elm_theme_extension_del(viewer_play_data->title_th, MSG_CUSTOM_WINSET_EDJ); + elm_theme_free(viewer_play_data->title_th); + viewer_play_data->title_th = NULL; + } + + if (viewer_play_data->progress_th) { + elm_theme_extension_del(viewer_play_data->progress_th, EDJDIR"/msg_viewer.edj"); + elm_theme_free(viewer_play_data->progress_th); + viewer_play_data->progress_th = NULL; + } + + msg_ui_viewer_disconnect_handler(viewer_play_data); + + //unset volume key type + sound_manager_set_volume_key_type(VOLUME_KEY_TYPE_NONE); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_disconnect_handler(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (viewer_play_data->mouse_up_event_handler) { + ecore_event_handler_del(viewer_play_data->mouse_up_event_handler); + viewer_play_data->mouse_up_event_handler = NULL; + } + + if (viewer_play_data->mouse_down_event_handler) { + ecore_event_handler_del(viewer_play_data->mouse_down_event_handler); + viewer_play_data->mouse_down_event_handler = NULL; + } + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + int msg_id = viewer_play_data->msgID; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + Evas_Object *layout = NULL; + MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE; + + /*get message information like bgcolor, insert and attach count + *it should be called before __msg_ui_viewer_create_control_toolbar*/ + if (__msg_ui_viewer_play_view_get_message_info(viewer_play_data) == FALSE) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "__msg_ui_viewer_play_view_get_content_count is failed"); + + layout = msg_ui_viewer_get_main_layout(viewer_play_data->viewer_main); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, layout == NULL, FALSE); + + /* create naviframe */ + if (!viewer_play_data->navi_frame) { + viewer_play_data->navi_frame = msg_ui_viewer_create_navigation_layout(layout); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->navi_frame == NULL, FALSE); + msg_ui_viewer_set_navi_frame(viewer_play_data->viewer_main, viewer_play_data->navi_frame); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "navi_frame is already created"); + } + /*create play layout*/ + if (__msg_ui_viewer_create_content_layout(viewer_play_data) == FALSE) + return FALSE; + + msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode); + + /* create back button */ + Evas_Object *back_btn = elm_button_add(viewer_play_data->navi_frame); + elm_object_style_set(back_btn, "naviframe/back_btn/default"); + evas_object_smart_callback_add(back_btn, "clicked", msg_ui_viewer_back_button_cb, (void*)viewer_play_data); + + /* set title text & title button */ + if (launchmode == MSG_VIEWER_PREVIEW_MODE) { + /* create naviframe item and push */ + viewer_play_data->navi_item = elm_naviframe_item_push(viewer_play_data->navi_frame, dgettext(MESSAGE_PKGNAME, "IDS_MSGC_HEADER_PREVIEW"), back_btn, NULL, viewer_play_data->play_layout, NULL); + } else { + /* create naviframe item and push */ + viewer_play_data->navi_item = elm_naviframe_item_push(viewer_play_data->navi_frame, NULL, back_btn, NULL, viewer_play_data->play_layout, "empty"); + + /* create naviframe title layout and set */ + viewer_play_data->navi_title_layout = msg_ui_viewer_create_navi_title_layout(viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->navi_item, "title", viewer_play_data->navi_title_layout); + msg_ui_viewer_set_navi_title_layout(viewer_play_data); + } + + /* create subject & index layout */ + __msg_ui_viewer_create_subject_index_layout(viewer_play_data); + + /* create page navigator */ + __msg_ui_viewer_create_play_controller(viewer_play_data); + + /* create control toolbar */ + __msg_ui_viewer_create_control_toolbar(viewer_play_data); + + if (!viewer_play_data->mouse_down_event_handler) + viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data); + + /*create smil rendering layout*/ + if (msg_smil_create_smil_player_layout(viewer_play_data->SmilHandle, viewer_play_data->play_layout) == FALSE) + return FALSE; + + SMIL_POSITION_S left_top = {0,}; + SMIL_POSITION_S right_bottom = {0,}; + __msg_ui_viewer_get_layout_size(viewer_play_data, &left_top, &right_bottom); + + if (msg_smil_set_smil_player_layout_size(viewer_play_data->SmilHandle, &left_top, &right_bottom) == FALSE) + return FALSE; + + /*register help page show callback to renderer */ + if (msg_smil_set_smil_player_help_page_cb(viewer_play_data->SmilHandle, msg_ui_viewer_help_page_smilrenderer_cb, (void *)viewer_play_data) == FALSE) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_set_smil_player_help_page_cb is failed"); + + if (launchmode == MSG_VIEWER_PREVIEW_MODE) { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PREVIEW_PLAY); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE) + return FALSE; + } + } else { + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + if (err != MSG_ERR_SMIL_UI_DISPLAY_FAIURE) + return FALSE; + } + } + + if (launchmode == MSG_VIEWER_FULLVIEW_MODE) { + msg_error_t err = MSG_SUCCESS; + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed"); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return FALSE; + } + /*set read status*/ + bool readStatus = FALSE; + msg_get_bool_value(msgInfo, MSG_MESSAGE_READ_BOOL, &readStatus); + + if (!readStatus) + msg_update_read_status(viewer_play_data->msgHandle, msg_id, TRUE); + + /* send read report*/ + int folder_id = MSG_MAX_FOLDER_ID; + msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); + if (folder_id == MSG_INBOX_ID) { + msg_error_t err = MSG_SUCCESS; + + msg_struct_t rcvSetting_info = msg_create_struct(MSG_STRUCT_SETTING_MMS_RECV_OPT); + err = msg_get_mms_recv_opt(viewer_play_data->msgHandle, rcvSetting_info); + + if (err == MSG_SUCCESS) { + bool bReadReport; + msg_get_bool_value(rcvSetting_info, MSG_MMS_RECVOPT_READ_REPORT_BOOL, &bReadReport); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "bsend_read_report = %d", bReadReport); + /*read report request status and sent read report result of current message will be checked by MF after calling msg_mms_send_read_report. + *So, currently ui always call msg_mms_send_read_report when setting value of send read report is on*/ + if (bReadReport) + msg_mms_send_read_report(viewer_play_data->msgHandle, msg_id, MSG_READ_REPORT_IS_READ); + + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_config is failed!"); + } + msg_release_struct(&rcvSetting_info); + } + + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + } + + //set volume key type as MEDIA, not SYSTEM + sound_manager_set_volume_key_type(VOLUME_KEY_TYPE_MEDIA); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + + +MSG_BOOL msg_ui_viewer_show_player_view(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + + /*connect mouse down signal*/ + if (!viewer_play_data->mouse_down_event_handler) + viewer_play_data->mouse_down_event_handler = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, msg_ui_viewer_mouse_down_cb, (void *)viewer_play_data); + + /*change command bar*/ + if (viewer_play_data->play_controller) { + edje_object_signal_emit(_EDJ(viewer_play_data->play_controller), "pause", "*"); + msg_ui_viewer_create_progressbar(viewer_play_data, 0); + } + + /*Set title string*/ + if (!viewer_play_data->navi_title_layout) + viewer_play_data->navi_title_layout = msg_ui_viewer_create_navi_title_layout(viewer_play_data); + + msg_ui_viewer_set_navi_title_layout(viewer_play_data); + + /*play player view*/ + err = msg_smil_on_slide_event_handler(&(viewer_play_data->SmilHandle), PLAYER_EVENT_PLAY); + if (err != MSG_SMIL_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_on_slide_event_handler failed! : %d", err); + return FALSE; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + +Evas_Object *msg_ui_viewer_create_navigation_layout(Evas_Object *parent) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, parent == NULL, NULL); + Evas_Object *navi_frame = NULL; + + navi_frame = elm_naviframe_add(parent); + elm_object_part_content_set(parent, "elm.swallow.content", navi_frame); + evas_object_show(navi_frame); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return navi_frame; +} + +static MSG_BOOL __msg_ui_viewer_create_content_layout(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (!viewer_play_data->play_layout) { + viewer_play_data->play_layout = elm_layout_add(viewer_play_data->navi_frame); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, viewer_play_data->play_layout == NULL, FALSE); + elm_layout_file_set(viewer_play_data->play_layout, MSG_VIEWER_THEME, "viewer_main"); + evas_object_size_hint_weight_set(viewer_play_data->play_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(viewer_play_data->play_layout); + + evas_object_event_callback_add(viewer_play_data->play_layout, EVAS_CALLBACK_MOUSE_DOWN, msg_ui_viewer_play_layout_mouse_down_cb, (void *)viewer_play_data); + evas_object_event_callback_add(viewer_play_data->play_layout, EVAS_CALLBACK_MOUSE_UP, msg_ui_viewer_play_layout_mouse_up_cb, (void *)viewer_play_data); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} + +static void __msg_ui_viewer_create_subject_index_layout(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + char strSubject[MAX_SUBJECT_LEN] = {0}; + msg_error_t err = MSG_SUCCESS; + + Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame); + elm_layout_file_set(layout, MSG_VIEWER_THEME, "subject/pageindex"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(layout); + viewer_play_data->subject_index_layout = layout; + + /*get msg info struct handle */ + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + if (viewer_play_data->msgID != -1) { + err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed"); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } + + msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN); + } else { //preview data, subject string cannot be found in mms_t struct + msg_get_str_value(viewer_play_data->msg_t, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN); + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "subject text is %s", strSubject); + + if (strSubject[0] != '\0') + edje_object_part_text_set(_EDJ(viewer_play_data->subject_index_layout), "subject", strSubject); + + elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.subject", viewer_play_data->subject_index_layout); + + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_create_play_controller(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + Evas_Object *layout = elm_layout_add(viewer_play_data->navi_frame); + elm_layout_file_set(layout, MSG_VIEWER_THEME, "play_controller"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(layout); + + elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", layout); + viewer_play_data->play_controller = layout; + + //add signal callbacks + edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "volume_clicked", "", msg_ui_viewer_volume_button_cb, (void *)viewer_play_data); + edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "prev_clicked", "", msg_ui_viewer_prev_button_cb, (void *)viewer_play_data); + edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "play_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data); + edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "pause_clicked", "", msg_ui_viewer_play_pause_button_cb, (void *)viewer_play_data); + edje_object_signal_callback_add(_EDJ(viewer_play_data->play_controller), "next_clicked", "", msg_ui_viewer_next_button_cb, (void *)viewer_play_data); + + viewer_play_data->playcontroller_opened = TRUE; + + //register timer + msg_ui_viewer_create_play_controller_timer(viewer_play_data); + + //create progressbar + msg_ui_viewer_create_progressbar(viewer_play_data, 0); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_create_control_toolbar(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + Evas_Object *toolbar = NULL; + int folder_id = MSG_MAX_FOLDER_ID; + msg_error_t err = MSG_SUCCESS; + MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE; + + toolbar = elm_toolbar_add(viewer_play_data->navi_frame); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, toolbar == NULL); + + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode); + + /*get msg info struct handle */ + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed"); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } + + //All item should be empty + if (launchmode == MSG_VIEWER_PREVIEW_MODE) { + // Toolbar item empty + } else if (launchmode == MSG_VIEWER_FULLVIEW_MODE) { + viewer_play_data->ctrltoolbar_item[0] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_ATTACH, NULL, msg_ui_viewer_save_button_cb, data); + viewer_play_data->ctrltoolbar_item[1] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_DELETE, NULL, msg_ui_viewer_delete_button_cb, data); + + /* get folder ID */ + msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); //get msg folder type + + if (folder_id == MSG_SENTBOX_ID) { + viewer_play_data->ctrltoolbar_item[2] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_FORWARD, NULL, msg_ui_viewer_forward_button_cb, data); + } else if (folder_id == MSG_OUTBOX_ID) { + viewer_play_data->ctrltoolbar_item[2] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_RESEND, NULL, msg_ui_viewer_resend_button_cb, data); + } else if (folder_id == MSG_INBOX_ID) { + viewer_play_data->ctrltoolbar_item[2] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_REPLY, NULL, msg_ui_viewer_reply_button_cb, data); + } + + viewer_play_data->ctrltoolbar_item[3] = elm_toolbar_item_append(toolbar, MSG_CONTROLBAR_ICON_MORE, NULL, msg_ui_viewer_more_button_cb, data); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid launch mode"); + } + + elm_object_item_part_content_set(viewer_play_data->navi_item, "controlbar", toolbar); + + viewer_play_data->ctrl_toolbar = toolbar; + + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +Evas_Object *msg_ui_viewer_create_navi_title_layout(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + Evas_Object *title_layout = elm_layout_add(viewer_play_data->navi_frame); + elm_layout_file_set(title_layout, MSG_VIEWER_THEME, "title"); + evas_object_size_hint_weight_set(title_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(title_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(title_layout); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return title_layout; +} + +void msg_ui_viewer_set_navi_title_layout(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + int folder_id = MSG_MAX_FOLDER_ID; + char *display_name = NULL; + char title_address[MAX_ADDRESS_VAL_LEN + 1] = {0,}; + MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE; + + msg_error_t err = MSG_SUCCESS; + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed"); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } + + msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); //get msg folder type + msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode); + + if (launchmode == MSG_VIEWER_PREVIEW_MODE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "launchmode is not applicable, current mode is %d", launchmode); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "folder_id = [%d]", folder_id); + + if (folder_id == MSG_INBOX_ID) { + viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame); + elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th); + elm_object_style_set(viewer_play_data->title_button, "title_button"); + evas_object_size_hint_weight_set(viewer_play_data->title_button, 0.0, 0.0); + evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL); + + if (viewer_play_data->addr_list.addr_info[0].contact_id > 0) { + display_name = msg_viewer_util_get_display_name_by_index(viewer_play_data->addr_list.addr_info[0].contact_id); + + if (display_name) { + snprintf(title_address, sizeof(title_address), "%s", display_name); + free(display_name); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Contact added, But there is no display name"); + snprintf(title_address, sizeof(title_address), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_NAME")); + } + } else { + snprintf(title_address, sizeof(title_address), "%s", viewer_play_data->addr_list.addr_info[0].address); + } + + elm_object_text_set(viewer_play_data->title_button, title_address); + + evas_object_show(viewer_play_data->title_button); + elm_object_part_content_set(viewer_play_data->navi_title_layout, "title_btn", viewer_play_data->title_button); + evas_object_smart_callback_add(viewer_play_data->title_button, "clicked", msg_ui_viewer_title_button_clicked_cb, (void *)viewer_play_data); + } else if (folder_id == MSG_OUTBOX_ID || folder_id == MSG_SENTBOX_ID) { + viewer_play_data->title_button = elm_button_add(viewer_play_data->navi_frame); + elm_object_theme_set(viewer_play_data->title_button, viewer_play_data->title_th); + elm_object_style_set(viewer_play_data->title_button, "title_button"); + evas_object_size_hint_weight_set(viewer_play_data->title_button, 0.0, 0.0); + evas_object_size_hint_align_set(viewer_play_data->title_button, EVAS_HINT_FILL, EVAS_HINT_FILL); + + if (viewer_play_data->addr_list.addr_info[0].contact_id > 0) { + display_name = msg_viewer_util_get_display_name_by_index(viewer_play_data->addr_list.addr_info[0].contact_id); + + if (display_name) { + snprintf(title_address, sizeof(title_address), "%s", display_name); + free(display_name); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Contact added, But there is no display name"); + snprintf(title_address, sizeof(title_address), "%s", dgettext("sys_string", "IDS_COM_BODY_NO_NAME")); + } + } else { + snprintf(title_address, sizeof(title_address), "%s", viewer_play_data->addr_list.addr_info[0].address); + } + + if (viewer_play_data->addr_list.addr_cnt == 1) { + elm_object_text_set(viewer_play_data->title_button, title_address); + } else if (viewer_play_data->addr_list.addr_cnt > 1) { + char title_text[DEF_BUF_LEN+1] = {0,}; + snprintf(title_text, sizeof(title_text), "%s +%d", title_address, viewer_play_data->addr_list.addr_cnt -1); + elm_object_text_set(viewer_play_data->title_button, title_text); + } else { + elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + } + + evas_object_show(viewer_play_data->title_button); + elm_object_part_content_set(viewer_play_data->navi_title_layout, "title_btn", viewer_play_data->title_button); + evas_object_smart_callback_add(viewer_play_data->title_button, "clicked", msg_ui_viewer_title_button_clicked_cb, (void *)viewer_play_data); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Invalid type of message folder id = [%d]", folder_id); + } + } + + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +Evas_Object *msg_ui_viewer_create_title_toolbar(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + Evas_Object *toolbar = elm_toolbar_add(viewer_play_data->navi_frame); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, toolbar == NULL, NULL); + + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + elm_object_style_set(toolbar, "naviframe"); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return toolbar; +} + +Evas_Object *msg_ui_viewer_create_title_toolbar_btn(Evas_Object *parent, char *icon_path, char *button_text) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + D_MSG_RETVM_IF(parent == NULL, NULL, "parent == NULL"); + + Evas_Object *button = elm_button_add(parent); + + evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(button, EVAS_HINT_FILL, EVAS_HINT_FILL); + + elm_object_style_set(button, "naviframe_control/default"); + + if (icon_path) { + Evas_Object *icon = elm_icon_add(button); + elm_icon_file_set(icon, icon_path, NULL); + elm_object_content_set(button,icon); + evas_object_size_hint_min_set(icon, 50, 50); + evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL); + } else if (button_text) { + elm_object_text_set(button, button_text); + } + evas_object_show(button); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return button; +} + +void msg_ui_viewer_add_title_toolbar_item(Evas_Object *toolbar, void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + int i; + + /* create add/view contact button */ + Evas_Object *addcontact_button = NULL; + + /* clear toolbar items, max value is 3 */ + for (i = 0; i < 3; i++) { + if (viewer_play_data->toolbar_item[i]) + elm_object_item_del(viewer_play_data->toolbar_item[i]); + } + + if (viewer_play_data->addr_list.addr_info[0].contact_id <= 0) { + addcontact_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_TITLE_ICON_ADD_TO_CONTACT, NULL); + evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_add_to_contact_cb, (void *)viewer_play_data); + } else { + addcontact_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT, NULL); + evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_view_contact_cb, (void *)viewer_play_data); + } + + if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) { + /* create voicecall button */ + Evas_Object *voicecall_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_TITLE_ICON_VOICECALL, NULL); + evas_object_smart_callback_add(voicecall_button, "clicked", msg_ui_viewer_toolbar_call_cb, (void *)viewer_play_data); + viewer_play_data->toolbar_item[0] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->toolbar_item[0], "object", voicecall_button); + + /* create videocall button */ + Evas_Object *videocall_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, MSG_TITLE_ICON_VIDEOCALL, NULL); + evas_object_smart_callback_add(videocall_button, "clicked", msg_ui_viewer_toolbar_vcall_cb, (void *)viewer_play_data); + viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", videocall_button); + + viewer_play_data->toolbar_item[2] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->toolbar_item[2], "object", addcontact_button); + } else if (msg_common_is_valid_email_addr(viewer_play_data->addr_list.addr_info[0].address)) { + Evas_Object *email_button = msg_ui_viewer_create_title_toolbar_btn(toolbar, NULL, dgettext("sys_string","IDS_COM_BODY_EMAIL")); + evas_object_smart_callback_add(email_button, "clicked", msg_ui_viewer_toolbar_email_cb, (void *)viewer_play_data); + viewer_play_data->toolbar_item[0] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->toolbar_item[0], "object", email_button); + + viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", addcontact_button); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "given address cannot be handled : %s", viewer_play_data->addr_list.addr_info[0].address); + + viewer_play_data->toolbar_item[CONTROLBAR_ITEM_1] = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, (void *)viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->toolbar_item[0], "object", addcontact_button); + elm_object_item_disabled_set(viewer_play_data->toolbar_item[0], EINA_TRUE); + elm_object_disabled_set(addcontact_button, EINA_TRUE); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_get_layout_size(MSG_PLAY_DATA_S *data, SMIL_POSITION_S *left_top, SMIL_POSITION_S *right_bottom) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, left_top == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, right_bottom == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + int x = 0; + int y = 0; + int w = 0; + int navi_frame_height = 0; + int toolbar_height = 0; + int window_width = 0; + int window_height = 0; + + /*get window size*/ + ecore_x_window_size_get(ecore_x_window_root_first_get(), &window_width, &window_height); + viewer_play_data->window_width = window_width; + viewer_play_data->window_height = window_height; + + /*get navi_frame height*/ + double scale = elm_config_scale_get(); + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "scale = %lf", scale); + + navi_frame_height = (int)(scale * VIEWER_NAVI_FRAME_HEIGHT); + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "navi_frame_height = %d", navi_frame_height); + + /*get toolbar height*/ + edje_object_part_geometry_get(_EDJ(viewer_play_data->play_layout), "viewer.swallow.toolbar", &x, &y, &w, &toolbar_height); + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "window_width = %d, window_height = %d, toolbar_height = %d", window_width, window_height, toolbar_height); + + left_top->x = 0; + left_top->y = navi_frame_height; + right_bottom->x = window_width; + right_bottom->y = (window_height - toolbar_height); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static MSG_BOOL __msg_ui_viewer_play_view_get_message_info(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + int page_count = 0; + int media_count = 0; + int nmedia_count = 0; + int bgColor = 0; + + /*get the SMIL content*/ + if (!viewer_play_data->mms_t) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mms data struct is null"); + return FALSE; + } + + /*get bgcolor*/ + msg_get_int_value(viewer_play_data->mms_t, MSG_MMS_ROOTLAYOUT_BGCOLOR_INT, &bgColor); + viewer_play_data->bgcolor = bgColor; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "viewer_play_data->bgcolor = 0x%x", viewer_play_data->bgcolor); + + /*get attach count*/ + msg_list_handle_t attachlist_info = NULL; + msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info); + viewer_play_data->attach_count= msg_list_length(attachlist_info); + + /*get attach list */ + viewer_play_data->attach_list = __msg_ui_viewer_get_attach_list(viewer_play_data); + + /*get insert count*/ + msg_list_handle_t pagelist_info = NULL; + msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + page_count = msg_list_length(pagelist_info); + + if (page_count) { + int page_idx = 0; + for (page_idx = 0; page_idx < page_count; ++page_idx) { + msg_struct_t page_info = NULL; + page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx); + + if (!page_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL"); + return FALSE; + } + + msg_list_handle_t medialist_info = NULL; + msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info); + media_count = msg_list_length(medialist_info); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, media_count); + + int media_idx = 0; + for (media_idx = 0; media_idx < media_count; ++media_idx) { + int mediaType; + msg_struct_t media_info = NULL; + media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx); + + if (!media_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d pMedia is NULL", media_idx); + continue; + } + + msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + + if (mediaType == MMS_SMIL_MEDIA_TEXT) + continue; + + nmedia_count++; + } + } + } + viewer_play_data->insert_count = nmedia_count; + + /* get insert item list */ + viewer_play_data->insert_list = __msg_ui_viewer_get_inserted_item_list(viewer_play_data); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert count : %d, attach count : %d", viewer_play_data->insert_count, viewer_play_data->attach_count); + + /* get address list(thread) */ + __msg_ui_viewer_get_thread_addr_list(viewer_play_data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return TRUE; +} + +static void __msg_ui_viewer_get_thread_addr_list(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + msg_error_t err = MSG_SUCCESS; + msg_struct_list_s addrList; + int thread_id; + + /* get address list(thread) */ + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed"); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id); + + err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_address_list has failed"); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } + + /*initialize addr list*/ + memset(&viewer_play_data->addr_list, 0x00, sizeof(MSG_VIEWER_ADDR_LIST)); + + viewer_play_data->addr_list.addr_cnt = addrList.nCount; + + int i = 0; + for (i = 0; i < addrList.nCount; i++) { + msg_get_int_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_CONTACT_ID_INT, &viewer_play_data->addr_list.addr_info[i].contact_id); + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_DISPLAYNAME_STR, viewer_play_data->addr_list.addr_info[i].name, MAX_DISPLAY_NAME_LEN); + msg_get_str_value(addrList.msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, viewer_play_data->addr_list.addr_info[i].address, MAX_ADDRESS_VAL_LEN); + } + + msg_release_list_struct(&addrList); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + +} + +static Eina_List* __msg_ui_viewer_get_inserted_item_list(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + int page_idx = 0; + int page_count = 0; + int media_count = 0; + int insertCnt = 0; + int drmType = 0; + Eina_List *insert_list = NULL; + + char strFileName[MSG_FILENAME_LEN_MAX] = {0,}; + char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,}; + + /*get insert count*/ + msg_list_handle_t pagelist_info = NULL; + msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + page_count = msg_list_length(pagelist_info); + + for (page_idx = 0; page_idx < page_count; ++page_idx) { + msg_struct_t page_info = NULL; + page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, page_idx); + if (!page_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL"); + continue; + } + + msg_list_handle_t medialist_info = NULL; + msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info); + media_count = msg_list_length(medialist_info); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", page_idx, media_count); + + int media_idx = 0; + for (media_idx = 0; media_idx < media_count; ++media_idx) { + int mediaType; + msg_struct_t media_info = NULL; + media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx); + + if (!media_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media_info is NULL", media_idx); + continue; + } + + msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + + if (mediaType == MMS_SMIL_MEDIA_TEXT) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d pMedia is TEXT type, skip adding", media_idx); + continue; + } + + bzero(strFileName, sizeof(strFileName)); + bzero(strFilePath, sizeof(strFilePath)); + + msg_get_str_value(media_info, MSG_MMS_MEDIA_FILENAME_STR, strFileName, sizeof(strFileName)); + msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath)); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "insert media file name: %s", strFileName); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath); + + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pInsert_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S)); + if (pInsert_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + if (insert_list) + goto FREE_LIST; + else + return NULL; + } else { + if (strlen(strFileName)) { + strncpy(pInsert_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN); + } else { + const char *file_name = NULL; + file_name = ecore_file_file_get(strFilePath); + if (file_name) + strncpy(pInsert_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN); + else + strncpy(pInsert_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN); + } + + strncpy(pInsert_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN); + + pInsert_info->pfile_size = ecore_file_size(strFilePath); + + msg_get_int_value(media_info, MSG_MMS_MEDIA_DRM_TYPE_INT, &drmType); + + if (drmType != MSG_DRM_TYPE_NONE) { + pInsert_info->media_type = MSG_VIEWER_MEDIA_DRM; + } else { + switch (mediaType) { + case MMS_SMIL_MEDIA_IMG: + pInsert_info->media_type = MSG_VIEWER_MEDIA_IMG; + break; + case MMS_SMIL_MEDIA_AUDIO: + pInsert_info->media_type = MSG_VIEWER_MEDIA_AUDIO; + break; + case MMS_SMIL_MEDIA_VIDEO: + pInsert_info->media_type = MSG_VIEWER_MEDIA_VIDEO; + break; + case MMS_SMIL_MEDIA_ANIMATE: + pInsert_info->media_type = MSG_VIEWER_MEDIA_ANIMATE; + break; + case MMS_SMIL_MEDIA_IMG_OR_VIDEO: + pInsert_info->media_type = MSG_VIEWER_MEDIA_IMG_OR_VIDEO; + break; + default: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "%d type is not handled in switch!"); + pInsert_info->media_type = MSG_VIEWER_MEDIA_ATTACH; // set attach type, it's better to set attach type, not to set invalid type + break; + } + } + pInsert_info->viewer_play_data = viewer_play_data; + + /*append insert item list*/ + insert_list = eina_list_append(insert_list, pInsert_info); + insertCnt++; + } + } + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total %d insert item(s) added", insertCnt); + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return insert_list; +FREE_LIST: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Free insert item list"); + if (insert_list) { + int index = 0; + int ntotal = 0; + ntotal = eina_list_count(insert_list); + for (index = 0; index < ntotal; index++) { + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pMedia_info = eina_list_nth(insert_list, index); + if (pMedia_info) { + free(pMedia_info); + pMedia_info = NULL; + } + } + eina_list_free(insert_list); + insert_list = NULL; + } + return NULL; +} + +static Eina_List* __msg_ui_viewer_get_attach_list(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + /*get attached content list*/ + int attach_idx = 0; + int attach_count = 0; + Eina_List *attach_list = NULL; + char strFileName[MSG_FILENAME_LEN_MAX] = {0,}; + char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,}; + + /*get attach count*/ + msg_list_handle_t attachlist_info = NULL; + msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_ATTACH_LIST_HND, (void **)&attachlist_info); + attach_count = msg_list_length(attachlist_info); + + for (attach_idx = 0; attach_idx < attach_count; ++attach_idx) { + msg_struct_t attach_info = NULL; + + attach_info = (msg_struct_t)msg_list_nth_data(attachlist_info, attach_idx); + + if (attach_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach is NULL"); + continue; + } else { + bzero(strFileName, sizeof(strFileName)); + bzero(strFilePath, sizeof(strFilePath)); + + msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILENAME_STR, strFileName, sizeof(strFileName)); + msg_get_str_value(attach_info, MSG_MMS_ATTACH_FILEPATH_STR, strFilePath, sizeof(strFilePath)); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file name: %s", strFileName); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "attachment file path: %s", strFilePath); + + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S)); + if (pAttach_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + if (attach_list) + goto FREE_LIST; + else + return NULL; + } else { + if (strlen(strFileName)) { + strncpy(pAttach_info->pfile_name, strFileName, MSG_VIEWER_FILENAME_MAX_LEN); + } else { + const char *file_name = NULL; + file_name = ecore_file_file_get(strFilePath); + if (file_name) + strncpy(pAttach_info->pfile_name, file_name, MSG_VIEWER_FILENAME_MAX_LEN); + else + strncpy(pAttach_info->pfile_name, strFilePath, MSG_VIEWER_FILENAME_MAX_LEN); + } + + strncpy(pAttach_info->pfile_path, strFilePath, MSG_VIEWER_FILEPATH_MAX_LEN); + + pAttach_info->pfile_size = ecore_file_size(strFilePath); + pAttach_info->media_type = MSG_VIEWER_MEDIA_ATTACH; + pAttach_info->viewer_play_data = viewer_play_data; + + /*append attach list*/ + attach_list = eina_list_append(attach_list, pAttach_info); + attach_count++; + } + } + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total %d attach(s) added", attach_count); + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return attach_list; +FREE_LIST: + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Free attachment list"); + if (attach_list) { + int index = 0; + int ntotal = 0; + ntotal = eina_list_count(attach_list); + for (index = 0; index < ntotal; index++) { + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(attach_list, index); + if (pAttach_info) { + free(pAttach_info); + pAttach_info = NULL; + } + } + eina_list_free(attach_list); + attach_list = NULL; + } + return NULL; +} + +void msg_ui_viewer_contact_info_update(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + /* reload thread address list */ + __msg_ui_viewer_get_thread_addr_list(viewer_play_data); + + /* change control bar button */ + if (viewer_play_data->title_optionheader_opened) { + if (viewer_play_data->addr_list.addr_info[0].contact_id > 0) { + Evas_Object *addcontact_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_CONTROLBAR_ICON_VIEW_CONTACT, NULL); + evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_view_contact_cb, (void *)viewer_play_data); + + if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) { + elm_object_item_del(viewer_play_data->toolbar_item[2]); + viewer_play_data->toolbar_item[2] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->toolbar_item[2], "object", addcontact_button); + } else if (msg_common_is_valid_email_addr(viewer_play_data->addr_list.addr_info[0].address)) { + elm_object_item_del(viewer_play_data->toolbar_item[1]); + viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", addcontact_button); + } + } else { + Evas_Object *addcontact_button = msg_ui_viewer_create_title_toolbar_btn(viewer_play_data->title_toolbar, MSG_TITLE_ICON_ADD_TO_CONTACT, NULL); + evas_object_smart_callback_add(addcontact_button, "clicked", msg_ui_viewer_toolbar_add_to_contact_cb, (void *)viewer_play_data); + + if (msg_common_is_valid_phone_number(viewer_play_data->addr_list.addr_info[0].address)) { + elm_object_item_del(viewer_play_data->toolbar_item[2]); + viewer_play_data->toolbar_item[2] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->toolbar_item[2], "object", addcontact_button); + } else if (msg_common_is_valid_email_addr(viewer_play_data->addr_list.addr_info[0].address)) { + elm_object_item_del(viewer_play_data->toolbar_item[1]); + viewer_play_data->toolbar_item[1] = elm_toolbar_item_append(viewer_play_data->title_toolbar, NULL, NULL, NULL, (void *)viewer_play_data); + elm_object_item_part_content_set(viewer_play_data->toolbar_item[1], "object", addcontact_button); + } + } + } + + /* change title button */ + if (viewer_play_data->addr_list.addr_cnt == 1) { + if (viewer_play_data->addr_list.addr_info[0].name[0] != '\0') + elm_object_text_set(viewer_play_data->title_button, viewer_play_data->addr_list.addr_info[0].name); + else + elm_object_text_set(viewer_play_data->title_button, viewer_play_data->addr_list.addr_info[0].address); + } else if (viewer_play_data->addr_list.addr_cnt > 1) { + char title_text[DEF_BUF_LEN+1] = {0,}; + + if (viewer_play_data->addr_list.addr_info[0].name[0] != '\0') + snprintf(title_text, sizeof(title_text), "%s +%d", viewer_play_data->addr_list.addr_info[0].name, viewer_play_data->addr_list.addr_cnt-1); + else + snprintf(title_text, sizeof(title_text), "%s +%d", viewer_play_data->addr_list.addr_info[0].address, viewer_play_data->addr_list.addr_cnt-1); + + elm_object_text_set(viewer_play_data->title_button, title_text); + } else { + elm_object_text_set(viewer_play_data->title_button, dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + + return; +} + +void msg_ui_viewer_show_popup(void *data, Evas_Object *parent, char *pcontent) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, parent == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + Evas_Object *popup = NULL; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + popup = elm_popup_add(parent); + MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, popup == NULL, "popup is NULL"); + viewer_play_data->popup = popup; + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + if (pcontent) { + elm_object_text_set(popup, pcontent); + elm_popup_timeout_set(popup, 2); + evas_object_smart_callback_add(popup, "block,clicked", msg_ui_viewer_popup_block_clicked_cb, viewer_play_data); + evas_object_smart_callback_add(popup, "timeout", msg_ui_viewer_popup_timeout_cb, viewer_play_data); + } else { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + return; + } + + evas_object_show(popup); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (viewer_play_data->popup_mode == VIEWER_SAVE_MODE_POPUP) + msg_ui_viewer_update_player_state_after_save(data); + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_popup_timeout_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (viewer_play_data->popup_mode == VIEWER_SAVE_MODE_POPUP) { + msg_ui_viewer_update_player_state_after_save(data); + } else if (viewer_play_data->popup_mode == VIEWER_DELETE_MSG_MODE_POPUP) { + //destroy ug + if (viewer_play_data->viewer_main) { + MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main; + ug_destroy_me(viewer_main_data->viewer_ug); + return; + } + } + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +MSG_SMIL_ERROR_E msg_ui_viewer_help_page_smilrenderer_cb(MSG_PLAY_DATA_S *data, void **attach_list, void *box) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + Evas_Object *renderBox = (Evas_Object *)box; + MSG_SMIL_ERROR_E err = MSG_SMIL_SUCCESS; + int attach_count = viewer_play_data->attach_count; + + /* create box (for setting min size of genlist)*/ + Evas_Object *box2 = elm_box_add(renderBox); + evas_object_size_hint_weight_set(box2, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box2, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(box2); + + /* create genlist */ + Evas_Object *genlist = elm_genlist_add(box2); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_genlist_homogeneous_set(genlist, EINA_TRUE); + elm_genlist_scroller_policy_set(genlist, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + evas_object_show(genlist); + + elm_box_pack_end(box2, genlist); + evas_object_size_hint_min_set(box2, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT * (attach_count + 1)); + + viewer_play_data->hp_sa_class.item_style = "dialogue/1text.1icon"; + viewer_play_data->hp_sa_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get; + viewer_play_data->hp_sa_class.func.content_get = __msg_ui_viewer_help_page_gl_content_get; + viewer_play_data->hp_sa_class.func.state_get = NULL; + viewer_play_data->hp_sa_class.func.del = __msg_ui_viewer_help_page_gl_del; + + viewer_play_data->hp_class.item_style = "dialogue/1text.2icon"; + viewer_play_data->hp_class.func.text_get = __msg_ui_viewer_help_page_gl_text_get; + viewer_play_data->hp_class.func.content_get = __msg_ui_viewer_help_page_gl_content_get; + viewer_play_data->hp_class.func.state_get = NULL; + viewer_play_data->hp_class.func.del = __msg_ui_viewer_help_page_gl_del; + + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "attachment_count = %d", attach_count); + + if (attach_count > 0) { + int attach_index = 0; + + //make 'Save all' item + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S)); + memset(pItem, 0x00, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S)); + strncpy(pItem->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"), strlen(dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"))); + pItem->isSaveAll = TRUE; + pItem->viewer_play_data = viewer_play_data; + + Elm_Object_Item *item = NULL; + item = elm_genlist_item_append(genlist, &(viewer_play_data->hp_sa_class), pItem, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_help_page_gl_sel, NULL); + + elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + + for (attach_index = 0; attach_index < attach_count; attach_index++) { + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = eina_list_nth(viewer_play_data->attach_list, attach_index); + if (pAttach_info == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info is NULL"); + } else { + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pItem = (MSG_VIEWER_ATTACH_MEDIA_INFO_S*)calloc(1, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S)); + memcpy(pItem, pAttach_info, sizeof(MSG_VIEWER_ATTACH_MEDIA_INFO_S)); + + elm_genlist_item_append(genlist, &(viewer_play_data->hp_class), pItem, NULL, ELM_GENLIST_ITEM_NONE, __msg_ui_viewer_help_page_gl_sel, pItem); + } + } + } + + viewer_play_data->help_page_gl = genlist; + + elm_box_pack_end(renderBox, box2); + *attach_list = genlist; + + return err; +} + +static char *__msg_ui_viewer_help_page_gl_text_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL); + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data; + + if (strcmp(part, "elm.text") == 0) { + if (pAttach_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_name = %s", pAttach_info->pfile_name); + return strdup(pAttach_info->pfile_name); + } + } + + return NULL; +} + +static Evas_Object *__msg_ui_viewer_help_page_gl_content_get(void *data, Evas_Object *obj, const char *part) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, obj == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, part == NULL, NULL); + + if (strcmp(part, "elm.icon.2") == 0 || strcmp(part, "elm.icon") == 0) { + Evas_Object *box = elm_box_add(obj); + Evas_Object *button = elm_button_add(obj); + Evas_Object *icon = elm_icon_add(obj); + + evas_object_propagate_events_set(button, EINA_FALSE); + elm_box_pack_start(box, button); + elm_icon_file_set(icon, MSG_VIEWER_IMAGE_SAVE_ICON, NULL); + elm_object_part_content_set(button, "icon", icon); + evas_object_smart_callback_add(button, "clicked", msg_ui_viewer_help_page_save_button_clicked_cb, data); + evas_object_show(button); + evas_object_show(box); + return box; + } else if (strcmp(part, "elm.icon.1") == 0) { + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data; + Evas_Object *image = NULL; + + image = elm_icon_add(obj); + + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "pAttach_info->pfile_path = %s", pAttach_info->pfile_path); + + /*set attach file icon*/ + if (pAttach_info->media_type == MSG_VIEWER_MEDIA_IMG || + pAttach_info->media_type == MSG_VIEWER_MEDIA_ANIMATE) { + elm_icon_file_set(image, pAttach_info->pfile_path, NULL); + } else if (pAttach_info->media_type == MSG_VIEWER_MEDIA_DRM) { + elm_icon_file_set(image, MSG_VIEWER_IMAGE_DRM_SMALL_ICON, NULL); + } else { + if (strlen(pAttach_info->pfile_path)) { + const char *icon_path = NULL; + + icon_path = msg_common_get_file_icon(pAttach_info->pfile_path); + if (icon_path) { + elm_icon_file_set(image, icon_path, NULL); + } else { + D_EMSG("icon_path is NULL"); + elm_icon_file_set(image, MSG_VIEWER_IMAGE_ATTACH_ICON, NULL); + } + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "filepath is NULL"); + return NULL; + } + } + + if (image) + evas_object_size_hint_aspect_set(image, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + + return image; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid part : %s", part); + } + + return NULL; +} + +static void __msg_ui_viewer_help_page_gl_sel(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, event_info == NULL); + MSG_VIEWER_ATTACH_MEDIA_INFO_S *pAttach_info = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data; + Elm_Object_Item *pselected_item = (Elm_Object_Item *)event_info; + + elm_genlist_item_selected_set(pselected_item, FALSE); + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_name = [%s]", pAttach_info->pfile_name); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pfile_path = [%s]", pAttach_info->pfile_path); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "emedia_type = %d", pAttach_info->media_type); + + //Save all item + if (!strcmp(pAttach_info->pfile_name, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_HEADER_SAVE_ALL"))) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Save all item"); + return; + } + + char mimetype[MSG_BUFFER_SIZE_64 + 1] = {0,}; + char defapp[MSG_BUFFER_SIZE_64 + 1] = {0,}; + + bundle *b = bundle_create(); + appsvc_set_operation(b, APPSVC_OPERATION_VIEW); + appsvc_set_uri(b, pAttach_info->pfile_path); + + /*get mime type*/ + if (aul_get_mime_from_file(pAttach_info->pfile_path, mimetype, sizeof(mimetype)) < 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "mime type failed"); + + if (appsvc_run_service(b, 0, NULL, NULL) < 0) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "appsvc_run_service is failed"); + + bundle_free(b); + return; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "mime type [%s]", mimetype); + } + + /*get default app*/ + if (aul_get_defapp_from_mime(mimetype, defapp, sizeof(defapp)) < 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "default app failed"); + + if (appsvc_run_service(b, 0, NULL, NULL) < 0) + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "appsvc_run_service is failed"); + + bundle_free(b); + return; + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "default app [%s]", defapp); + } + + /*launch application*/ + if (strcmp(defapp, VIDEO_PLAYER_PKG_NAME) == 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Video content"); + bundle_add(b, MSG_BUNDLE_KEY_LAUNCH_APPLICATION, MESSAGE_PKGNAME); + } + + if (appsvc_run_service(b, 0, NULL, NULL) < 0) + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "appsvc_run_service is failed"); + + bundle_free(b); + + return; +} + +static void __msg_ui_viewer_help_page_gl_del(void *data, Evas_Object *obj) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + MSG_VIEWER_ATTACH_MEDIA_INFO_S *del_data = (MSG_VIEWER_ATTACH_MEDIA_INFO_S *)data; + if (del_data) { + free(del_data); + del_data = NULL; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_create_play_controller_timer(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + //register timer for disappear play_controller automatically when time elapsed after shown + if (viewer_play_data->play_controller_timer) { + ecore_timer_del(viewer_play_data->play_controller_timer); + viewer_play_data->play_controller_timer = NULL; + } + viewer_play_data->play_controller_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_LIFETIME, msg_ui_viewer_play_controller_timer_cb, (void *)viewer_play_data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_create_progressbar(MSG_PLAY_DATA_S *data, int slideIdx) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + Evas_Object *progressbar = NULL; + MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE; + MSG_BOOL bExcludeHp = FALSE; + double total_time = 0.0; + double remain_time = 0.0; + double elapse_time = 0.0; + int remain_second = 0.0; + int elapse_second = 0.0; + char strTimeBuf[10] = {0,}; + + if (slideIdx < 0 ) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "slideIdx = %d, slideIdx must be same or over 0", slideIdx); + return; + } + + if (!viewer_play_data->progressbar) { + progressbar = elm_progressbar_add(viewer_play_data->play_controller); + elm_object_theme_set(progressbar, viewer_play_data->progress_th); + elm_object_style_set(progressbar, "list_progress"); + elm_progressbar_horizontal_set(progressbar, EINA_TRUE); + evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + viewer_play_data->progressbar = progressbar; + evas_object_show(progressbar); + elm_object_part_content_set(viewer_play_data->play_controller,"progressbar", progressbar); + } + + msg_ui_viewer_get_viewer_launchmode(viewer_play_data->viewer_main, &launchmode); + + //In preview mode, slide time for help page should not be considered to total slide time + bExcludeHp = (launchmode == MSG_VIEWER_PREVIEW_MODE) ? TRUE : FALSE; + + if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, 0, bExcludeHp, &total_time)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", 0, bExcludeHp); + return; + } + if (!msg_smil_get_slide_time(viewer_play_data->SmilHandle, slideIdx, bExcludeHp, &remain_time)) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_smil_get_slide_time is failed, slideIdx = %d, bExcludeHp = %d", slideIdx, bExcludeHp); + return; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Total slide time is %f", total_time); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Remain slide time from current slide(%d) is %f", slideIdx, remain_time); + elapse_time = total_time-remain_time; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Elapsed slide time from first slide(0) to current slide(%d) is %f", slideIdx, elapse_time); + + viewer_play_data->totalProgressTime = remain_second = (int)total_time/1000; + elapse_second = (int)elapse_time/1000; + viewer_play_data->elapsedProgressTime = elapse_second; + + // START timer text set + snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", elapse_second/60, elapse_second%60); + edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf); + + bzero(strTimeBuf, sizeof(strTimeBuf)); + + // END timer text set + snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", remain_second/60, remain_second%60); + edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/end/time", strTimeBuf); + + elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime)); + + if (viewer_play_data->play_controller_progressbar_timer) { + ecore_timer_del(viewer_play_data->play_controller_progressbar_timer); + viewer_play_data->play_controller_progressbar_timer = NULL; + } + + viewer_play_data->play_controller_progressbar_timer = ecore_timer_add(VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME, msg_ui_viewer_play_controller_progressbar_timer_cb, viewer_play_data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +Eina_Bool msg_ui_viewer_play_controller_progressbar_timer_cb(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, data == NULL, FALSE); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + char strTimeBuf[10] = {0,}; + + viewer_play_data->elapsedProgressTime += VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME; + + // update START timer text + snprintf(strTimeBuf, sizeof(strTimeBuf), "%02d:%02d", viewer_play_data->elapsedProgressTime/60, viewer_play_data->elapsedProgressTime%60); + edje_object_part_text_set(_EDJ(viewer_play_data->play_controller), "progress/start/time", strTimeBuf); + + if (viewer_play_data->elapsedProgressTime == viewer_play_data->totalProgressTime) { + if (viewer_play_data->play_controller && evas_object_visible_get(viewer_play_data->play_controller) == EINA_FALSE) { + elm_object_part_content_set(viewer_play_data->play_layout, "viewer.swallow.play.controller", viewer_play_data->play_controller); + evas_object_show(viewer_play_data->play_controller); + viewer_play_data->playcontroller_opened = TRUE; + msg_ui_viewer_create_play_controller_timer(viewer_play_data); + } else { + // create play controller timer again + msg_ui_viewer_create_play_controller_timer(viewer_play_data); + } + + elm_progressbar_value_set(viewer_play_data->progressbar, 1.0); + viewer_play_data->play_controller_progressbar_timer = NULL; + + return ECORE_CALLBACK_CANCEL; + } + + elm_progressbar_value_set(viewer_play_data->progressbar, ((double)viewer_play_data->elapsedProgressTime)/((double)viewer_play_data->totalProgressTime)); + + return ECORE_CALLBACK_RENEW; +} + +void msg_ui_viewer_destroy_play_controller_progressbar_timer(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (viewer_play_data->play_controller_progressbar_timer) { + ecore_timer_del(viewer_play_data->play_controller_progressbar_timer); + viewer_play_data->play_controller_progressbar_timer = NULL; + viewer_play_data->elapsedProgressTime = 0; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +Eina_Bool msg_ui_viewer_play_controller_timer_cb(void *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETVM_IF(MSG_UI_LEVEL_ERR, data == NULL, EINA_FALSE, "data is NULL"); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + viewer_play_data->play_controller_timer = NULL; + + if (viewer_play_data->playcontroller_opened) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Play controller is hided after 3 seconds elapsed"); + elm_object_part_content_unset(viewer_play_data->play_layout, "viewer.swallow.play.controller"); + evas_object_hide(viewer_play_data->play_controller); + viewer_play_data->playcontroller_opened = FALSE; + } + + return ECORE_CALLBACK_CANCEL; +} + +void msg_ui_viewer_destroy_play_controller_timer(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (viewer_play_data->play_controller_timer) { + ecore_timer_del(viewer_play_data->play_controller_timer); + viewer_play_data->play_controller_timer = NULL; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_copy_message_text_to_clipboard(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + SMIL_SLIDE_CLIENT_CB_PARAM_S *eventStatus = NULL; + + int page_count = 0; + int media_count = 0; + bool is_text_copied = FALSE; + int media_idx = 0; + char strFilePath[MSG_FILEPATH_LEN_MAX] = {0,}; + FILE *fp = NULL; + + eventStatus = (SMIL_SLIDE_CLIENT_CB_PARAM_S * )viewer_play_data->smil_eventStatus; + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Current page index is %d", eventStatus->pageIdx); + + /*get page list info*/ + msg_list_handle_t pagelist_info = NULL; + msg_get_list_handle(viewer_play_data->mms_t, MSG_MMS_PAGE_LIST_HND, (void **)&pagelist_info); + page_count = msg_list_length(pagelist_info); + + msg_struct_t page_info = NULL; + page_info = (msg_struct_t)msg_list_nth_data(pagelist_info, eventStatus->pageIdx); + if (!page_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "page_info is NULL"); + return; + } + + msg_list_handle_t medialist_info = NULL; + msg_get_list_handle(page_info, MSG_MMS_PAGE_MEDIA_LIST_HND, (void **)&medialist_info); + media_count = msg_list_length(medialist_info); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "page = %d, page media count = %d", eventStatus->pageIdx, media_count); + + for (media_idx = 0; media_idx < media_count; media_idx++) { + int mediaType; + msg_struct_t media_info = NULL; + media_info = (msg_struct_t)msg_list_nth_data(medialist_info, media_idx); + + if (!media_info) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media_info is NULL", media_idx); + continue; + } + + msg_get_int_value(media_info, MSG_MMS_MEDIA_TYPE_INT, &mediaType); + + if (mediaType != MMS_SMIL_MEDIA_TEXT) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "%d media type is not TEXT", media_idx); + continue; + } + + bzero(strFilePath, sizeof(strFilePath)); + msg_get_str_value(media_info, MSG_MMS_MEDIA_FILEPATH_STR, strFilePath, sizeof(strFilePath)); + + //if text media is exist, get text and store it + fp = fopen(strFilePath, "r"); + if (fp) { + char *pszPageText = NULL; + struct stat stat_buf; + if (stat(strFilePath, &stat_buf) != 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Getting file information Error"); + fclose(fp); + return; + } + + if (stat_buf.st_size > 0) { + pszPageText = (void *)calloc(1, (size_t)stat_buf.st_size + 1); + + if (pszPageText == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "calloc is failed"); + fclose(fp); + return; + } else { + int result = fread(pszPageText, sizeof(char), stat_buf.st_size, fp); + if (result != stat_buf.st_size) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "fread is failed result : %d", result); + } + } + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "pszPageText : (%s)", (char *)pszPageText); + + if (pszPageText[0] != '\0') { + Evas_Object *entry = elm_entry_add(viewer_play_data->main_window); + elm_cnp_selection_set(entry, ELM_SEL_TYPE_CLIPBOARD, ELM_SEL_FORMAT_TEXT, pszPageText, strlen(pszPageText)); + evas_object_del(entry); + is_text_copied = TRUE; + } + + /*free message text after displaying*/ + if (pszPageText) { + free(pszPageText); + pszPageText = NULL; + } + + fclose(fp); + break; + } + + fclose(fp); + } + } + + if (is_text_copied) + status_message_post(dgettext("sys_string", "IDS_COM_POP_COPIED_P")); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +void msg_ui_viewer_create_msg_detail_popup(MSG_PLAY_DATA_S *data) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + Evas_Object *popup = NULL; + Evas_Object *layout = NULL; + Evas_Object *bg = NULL; + Evas_Object *scroller = NULL; + Evas_Object *box = NULL; + Evas_Object *entry = NULL; + Evas_Object *btn_close = NULL; + + /* create popup */ + popup = elm_popup_add(viewer_play_data->main_window); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(popup, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_style_set(popup, "menustyle"); + elm_object_part_text_set(popup, "title,text", (char *)"Message details"); + + /* create layout */ + layout = elm_layout_add(viewer_play_data->main_window); + elm_layout_file_set(layout, MSG_VIEWER_THEME, "msg/detail"); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(layout); + + /* create bg */ + bg = evas_object_rectangle_add(evas_object_evas_get(layout)); + elm_object_part_content_set(layout, "msg/detail/bg", bg); + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, 0.0); + evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, 0.0); + evas_object_show(bg); + + /* create scroller */ + scroller = elm_scroller_add(layout); + evas_object_size_hint_weight_set(scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(scroller, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_scroller_bounce_set(scroller, FALSE, TRUE); + elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + elm_object_part_content_set(layout, "msg/detail/content", scroller); + evas_object_show(scroller); + + /* create box */ + box = elm_box_add(layout); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_homogeneous_set(box, EINA_FALSE); + evas_object_show(box); + evas_object_size_hint_min_set(box, 0, VIEWER_ATTACH_GL_ITEM_HEIGHT*4); + elm_object_content_set(scroller, box); + + /*create entry */ + entry = elm_entry_add(layout); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_entry_single_line_set(entry, EINA_FALSE); + elm_entry_context_menu_disabled_set(entry, EINA_TRUE); + elm_entry_input_panel_enabled_set(entry, EINA_FALSE); + elm_entry_magnifier_disabled_set(entry, EINA_TRUE); + elm_entry_editable_set(entry, EINA_FALSE); + __msg_ui_viewer_make_details_text(viewer_play_data, entry); + elm_box_pack_end(box, entry); + evas_object_show(entry); + + /* add close button */ + btn_close = elm_button_add(popup); + elm_object_style_set(btn_close, "popup_button/default"); + elm_object_text_set(btn_close, dgettext("sys_string", "IDS_COM_BODY_CLOSE")); + elm_object_part_content_set(popup, "button1", btn_close); + evas_object_smart_callback_add(btn_close, "clicked", __msg_ui_viewer_message_details_popup_close_clicked_cb, viewer_play_data); + + viewer_play_data->popup = popup; + elm_object_content_set(popup, layout); + + evas_object_show(popup); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_make_details_text(MSG_PLAY_DATA_S *data, Evas_Object *entry) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, data == NULL); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + int folder_id = MSG_MAX_FOLDER_ID; + msg_error_t err = MSG_SUCCESS; + int thread_id = 0; + char addr_value[MAX_ADDRESS_VAL_LEN] = {0,}; + char name[MAX_DISPLAY_NAME_LEN]= {0,}; + int contact_id = 0; + msg_struct_list_s addrList; + + /********************** + * [ For sent/outbox msg] + * 1. Type: + * 2. To: + * 3. Sent time: + * 4. Subject: + * 5. Message size: + * 5. Delivery report: //TBD : FW for multistatus + * 6. Read report: //TBD : FW for multistatus + * + * [For inbox msg] + * 1. Type: + * 2. From: + * 3. To: //TBD : FW for multistatus + * 4. Received time: + * 5. Subject: + * 6. Message size: + **********************/ + + /*get msg info struct handle */ + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); + + err = msg_get_message(viewer_play_data->msgHandle, viewer_play_data->msgID, msgInfo, sendOpt); + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_message has failed"); + msg_release_struct(&msgInfo); + msg_release_struct(&sendOpt); + return; + } + + /* create str buf */ + Eina_Strbuf *text_data = eina_strbuf_new(); + + /* set font size */ + eina_strbuf_append(text_data, "<font_size=32>"); + + /*message type*/ + eina_strbuf_append(text_data, (char *)"Type : "); //TODO : change to string resource + + /*message type value - current view details is supporting only multimedia message */ + int msg_type; + msg_get_int_value(msgInfo, MSG_MESSAGE_TYPE_INT, &msg_type); + if (msg_type == MSG_TYPE_MMS || msg_type == MSG_TYPE_MMS_NOTI) + eina_strbuf_append(text_data, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MULTIMEDIA_MESSAGE")); + else if (msg_type == MSG_TYPE_SMS) + eina_strbuf_append(text_data, (char *)"Text message"); //TODO : change to string resource + else + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "invalid msg type!"); + + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + + /*get time format setting */ + int timeformat = msg_common_get_timeformat(); + + /* get folder ID */ + msg_get_int_value(msgInfo, MSG_MESSAGE_FOLDER_ID_INT, &folder_id); //get msg folder type + + if (folder_id == MSG_SENTBOX_ID || folder_id == MSG_OUTBOX_ID) { + int index = 0; + eina_strbuf_append(text_data, (char *)"To : " ); //TODO : change to string resource + + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id); + err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList); + + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address count = %d", addrList.nCount); + + for (index = 0; index<addrList.nCount; index++) { + bzero(name, sizeof(name)); + bzero(addr_value, sizeof(addr_value)); + + msg_get_int_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id); + msg_get_str_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_DISPLAYNAME_STR, name, MAX_DISPLAY_NAME_LEN); + msg_get_str_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN); + + if (name[0] != '\0') { + eina_strbuf_append(text_data, name); + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE); + eina_strbuf_append(text_data, addr_value); + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE); + } else { + eina_strbuf_append(text_data, addr_value); + } + if (index != addrList.nCount-1) + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COMMA); + } + + msg_release_list_struct(&addrList); + + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + + /*time*/ + eina_strbuf_append(text_data, (char *)"Sent : "); //TODO : change to string resource + int dptime = 0; + msg_get_int_value(msgInfo, MSG_MESSAGE_DISPLAY_TIME_INT, &dptime); + + char *str_time = NULL; + if (timeformat == MSG_TIME_FORMAT_24H) + str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM y", &dptime); + else + str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM y", &dptime); + eina_strbuf_append(text_data, str_time); + + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + } else if (folder_id == MSG_INBOX_ID) { + int index = 0; + + /*From address*/ + eina_strbuf_append(text_data, (char *)"From : " ); //TODO : change to string resource + + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id); + err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList); + + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "address count = %d", addrList.nCount); + + for (index = 0; index<addrList.nCount; index++) { + bzero(name, sizeof(name)); + bzero(addr_value, sizeof(addr_value)); + + msg_get_int_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_CONTACT_ID_INT, &contact_id); + msg_get_str_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_DISPLAYNAME_STR, name, MAX_DISPLAY_NAME_LEN); + msg_get_str_value(addrList.msg_struct_info[index], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN); + + if (name[0] != '\0') { + eina_strbuf_append(text_data, name); + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE); + eina_strbuf_append(text_data, addr_value); + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE); + } else { + eina_strbuf_append(text_data, addr_value); + } + if (index != addrList.nCount-1) + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_COMMA); + } + + msg_release_list_struct(&addrList); + + /*To addess*/ + //TODO : HOW to get?? + + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + + /*time*/ + eina_strbuf_append(text_data, (char *)"Received : "); //TODO : change to string resource + int dptime = 0; + msg_get_int_value(msgInfo, MSG_MESSAGE_DISPLAY_TIME_INT, &dptime); + + char *str_time = NULL; + if (timeformat == MSG_TIME_FORMAT_24H) + str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM y", &dptime); + else + str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM y", &dptime); + eina_strbuf_append(text_data, str_time); + + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + } + + /*subject*/ + eina_strbuf_append(text_data, (char *)"Subject : "); //TODO : change to string resource + char strSubject[MAX_SUBJECT_LEN] = {0}; + msg_get_str_value(msgInfo, MSG_MESSAGE_SUBJECT_STR, strSubject, MAX_SUBJECT_LEN); + if (strSubject[0] != '\0') + eina_strbuf_append(text_data, strSubject); + else + eina_strbuf_append(text_data, (char *)"Untitled"); //TODO : change to string resource + + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + + /*msg size - make sure what is the mms size, pdu size? or media total size??*/ + eina_strbuf_append(text_data, (char *)"Size : "); //TODO : change to string resource + + int mediaindex = 0; + long long totalSize = 0; + long long sizeKB = 0; + long long sizeB = 0; + char count_str[DEF_BUF_LEN] = {0,}; + int totalCnt = viewer_play_data->insert_count+viewer_play_data->attach_count; + + for (mediaindex = 0; mediaindex<totalCnt; mediaindex++) { + MSG_VIEWER_ATTACH_MEDIA_INFO_S *media_info = NULL; + + if (mediaindex < viewer_play_data->insert_count) { + media_info = eina_list_nth(viewer_play_data->insert_list, mediaindex); + } else if (mediaindex < totalCnt) { + media_info = eina_list_nth(viewer_play_data->attach_list, mediaindex-viewer_play_data->insert_count); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "invalid index!!", mediaindex); + continue; + } + + totalSize += ecore_file_size(media_info->pfile_path); + } + + if (totalSize < VIEWER_DETAILS_TEXT_MSG_SIZE_KB) { + snprintf(count_str, sizeof(count_str), "1 %s", dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB")); + } else { + sizeKB = (long long)totalSize/VIEWER_DETAILS_TEXT_MSG_SIZE_KB; + sizeB = (long long)totalSize%VIEWER_DETAILS_TEXT_MSG_SIZE_KB; + + if (sizeB >= (VIEWER_DETAILS_TEXT_MSG_SIZE_KB/2)) + sizeKB++; + + snprintf(count_str, sizeof(count_str), "%lld %s", sizeKB, dgettext(MESSAGE_PKGNAME, "IDS_MSGF_BODY_MSGSIZE_KB")); + } + + eina_strbuf_append(text_data, count_str); + + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + + /*report status*/ + if (folder_id == MSG_SENTBOX_ID || folder_id == MSG_OUTBOX_ID) { + msg_struct_t msg_struct = msg_create_struct(MSG_STRUCT_SETTING_MMS_SEND_OPT); + err = msg_get_mms_send_opt(viewer_play_data->msgHandle, msg_struct); + + if (err != MSG_SUCCESS) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msg_get_mms_send_opt is failed"); + eina_strbuf_free(text_data); + return; + } + /*delivery report*/ + eina_strbuf_append(text_data, (char *)"Delivery report : "); //TODO : change to string resource + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + + bool bValue = false; + err = msg_get_bool_value(msg_struct, MSG_MMS_SENDOPT_DELIVERY_REPORT_BOOL, &bValue); + if (!bValue) { + eina_strbuf_append(text_data, (char *)"Not required"); //TODO : change to string resource + } else { + //TODO : How to Get Multistatus delivery report? + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id); + err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList); + + bzero(addr_value, sizeof(addr_value)); + msg_get_str_value(addrList.msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN); + + msg_release_list_struct(&addrList); + + // now 1st address delivery status can be get only. + eina_strbuf_append(text_data, addr_value); + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_DASH); + + msg_struct_t report_status = msg_create_struct(MSG_STRUCT_REPORT_STATUS_INFO); + int msgId = 0; + msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, &msgId); + msg_get_report_status(viewer_play_data->msgHandle, msgId, report_status); + + int deliveryStatus = 0; + msg_get_int_value(report_status, MSG_REPORT_STATUS_DELIVERY_STATUS_INT, &deliveryStatus); + + if (deliveryStatus == MSG_DELIVERY_REPORT_NONE) { + eina_strbuf_append(text_data, (char *)"Requested"); //TODO : change to string resource + } else if (deliveryStatus == MSG_DELIVERY_REPORT_EXPIRED) { + eina_strbuf_append(text_data, (char *)"Expired"); //TODO : change to string resource + } else if (deliveryStatus == MSG_DELIVERY_REPORT_SUCCESS) { + eina_strbuf_append(text_data, (char *)"Received "); //TODO : change to string resource + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE); + + int dsTime = 0; + msg_get_int_value(report_status, MSG_REPORT_STATUS_DELIVERY_TIME_INT, &dsTime); + char *str_time = NULL; + if (timeformat == MSG_TIME_FORMAT_24H) + str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM", &dsTime); + else + str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM", &dsTime); + eina_strbuf_append(text_data, str_time); + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE); + } else if (deliveryStatus == MSG_DELIVERY_REPORT_REJECTED) { + eina_strbuf_append(text_data, (char *)"Rejected "); //TODO : change to string resource + } + + msg_release_struct(&report_status); + } + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + + /*read reportt*/ + eina_strbuf_append(text_data, (char *)"Read report : "); //TODO : change to string resource + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + + err = msg_get_bool_value(msg_struct, MSG_MMS_SENDOPT_READ_REPLY_BOOL, &bValue); + if (!bValue) { + eina_strbuf_append(text_data, (char *)"Not required"); //TODO : change to string resource + } else { + //TODO : How to Get Multistatus read report? + memset(&addrList, 0x00, sizeof(msg_struct_list_s)); + msg_get_int_value(msgInfo, MSG_MESSAGE_THREAD_ID_INT, &thread_id); + err = msg_get_address_list(viewer_play_data->msgHandle, thread_id, &addrList); + + bzero(addr_value, sizeof(addr_value)); + msg_get_str_value(addrList.msg_struct_info[0], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, addr_value, MAX_ADDRESS_VAL_LEN); + + msg_release_list_struct(&addrList); + + // now 1st address delivery status can be get only. + eina_strbuf_append(text_data, addr_value); + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_DASH); + + msg_struct_t report_status = msg_create_struct(MSG_STRUCT_REPORT_STATUS_INFO); + int msgId = 0; + msg_get_int_value(msgInfo, MSG_MESSAGE_ID_INT, &msgId); + msg_get_report_status(viewer_play_data->msgHandle, msgId, report_status); + + int readStatus = 0; + msg_get_int_value(report_status, MSG_REPORT_STATUS_READ_STATUS_INT, &readStatus); + + if (readStatus == MSG_READ_REPORT_NONE) { + eina_strbuf_append(text_data, (char *)"Requested "); //TODO : change to string resource + } else if (readStatus == MSG_READ_REPORT_IS_READ) { + eina_strbuf_append(text_data, (char *)"Read "); //TODO : change to string resource + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LEFT_BRACE); + + int rsTime = 0; + msg_get_int_value(report_status, MSG_REPORT_STATUS_READ_TIME_INT, &rsTime); + + char *str_time = NULL; + if (timeformat == MSG_TIME_FORMAT_24H) + str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "HH:mm, d MMM", &rsTime); + else + str_time = msg_common_get_formatted_date(msg_common_get_default_locale(), "hh:mm a, d MMM", &rsTime); + eina_strbuf_append(text_data, str_time); + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_RIGHT_BRACE); + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + } else if (readStatus == MSG_READ_REPORT_IS_DELETED) { + eina_strbuf_append(text_data, (char *)"Deleted "); //TODO : change to string resource + } + + msg_release_struct(&report_status); + } + /*line change*/ + eina_strbuf_append(text_data, VIEWER_DETAILS_TEXT_LINE_FEED); + + msg_release_struct(&msg_struct); + } + + /*display total text*/ + elm_entry_entry_set(entry, eina_strbuf_string_get(text_data)); + eina_strbuf_free(text_data); + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); +} + +static void __msg_ui_viewer_message_details_popup_close_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data; + + if (viewer_play_data->popup) { + evas_object_del(viewer_play_data->popup); + viewer_play_data->popup = NULL; + } +} diff --git a/viewer/src/msg-ui-viewer-utility.c b/viewer/src/msg-ui-viewer-utility.c new file mode 100755 index 0000000..628e0f8 --- /dev/null +++ b/viewer/src/msg-ui-viewer-utility.c @@ -0,0 +1,369 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*================================================================================================== + * INCLUDE HEADERS + * ==================================================================================================*/ +#include "msg-ui-viewer-utility.h" +#include <msg-ui-util.h> +#include "contacts-svc.h" + +#include <ctype.h> +#include <Ecore_File.h> + +/*================================================================================================== + * FUNCTION DECLARATIONS + *==================================================================================================*/ +static void __msg_viewer_util_get_color_code(int color_dec); + +/*================================================================================================== + * FUNCTION IMPLEMENTATIONS + *================================================================================================*/ +/* Note: Caller should free returned string after using it*/ +char *msg_viewer_util_get_display_name_by_index(int index) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Label Contact Index [%d]", index); + CTSstruct *contact = NULL; + CTSvalue *name = NULL; + char *first = NULL; + char *last = NULL; + char *display = NULL; + + contacts_svc_get_contact(index, &contact); + contacts_svc_struct_get_value(contact, CTS_CF_NAME_VALUE, &name); + + first = g_strdup(contacts_svc_value_get_str(name, CTS_NAME_VAL_FIRST_STR)); + last = g_strdup(contacts_svc_value_get_str(name, CTS_NAME_VAL_LAST_STR)); + + if (first != NULL && last != NULL) { + if (CTS_ORDER_NAME_FIRSTLAST == contacts_svc_get_order(CTS_ORDER_OF_DISPLAY)) { + display = g_strconcat(first, " ", last, NULL); + } else { + display = g_strconcat(last, " ", first, NULL); + } + } else if (first != NULL || last != NULL) { + display = (first != NULL) ? g_strdup(first) : g_strdup(last); + } else { + display = g_strdup(contacts_svc_value_get_str(name, CTS_NAME_VAL_FIRST_STR)); + } + + g_free(first); + g_free(last); + contacts_svc_value_free(name); + contacts_svc_struct_free(contact); + + return display; +} + +MSG_BOOL msg_viewer_util_get_file_ext(const char *filepath, char *file_ext, int ext_len) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, file_ext == NULL, FALSE); + const char *filename = NULL; + char *pdot = NULL; + + filename = (const char *)ecore_file_file_get(filepath); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filename == NULL, FALSE); + + pdot = strrchr(filename, '.'); + + if (!pdot) { + return FALSE; + } else if (pdot != filepath) { + strncpy(file_ext, pdot + 1, ext_len); + return TRUE; + } else { + return FALSE; + } +} + +int msg_viewer_util_get_next_number(char *file_name_without_ext) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, file_name_without_ext == NULL, MSG_VIEWER_INVALID_FILE_NUMBER); + int nCount = 0; + int nLength = 0; + int nUnderline = 0; + MSG_BOOL bAllDigits = TRUE; + int i = 0; + + /* check _02d format */ + nLength = strlen(file_name_without_ext); + + for (nUnderline = nLength - 1 ; nUnderline >= 0 ; nUnderline--) { + if (file_name_without_ext[nUnderline] == '_') { + break; + } + } + + if (nUnderline == 0 && file_name_without_ext[0] != '_') { + return MSG_VIEWER_DEFAULT_FILE_NUMBER; /*doesn't match*/ + } + + /* check the right characters are all digits */ + for (i = nUnderline + 1 ; i < nLength ; i++) { + if (file_name_without_ext[i] < '0' || file_name_without_ext[i] > '9') { + bAllDigits = FALSE; + break; + } + } + + if (bAllDigits) { + for (i = nUnderline + 1 ; i < nLength ; i++) { + nCount *= 10; + nCount += file_name_without_ext[i]-'0'; + } + /* truncate the last '_dd' */ + file_name_without_ext[nUnderline] = '\0'; + } + + /* increase nCount by 1*/ + nCount++; + + return nCount; +} + +char hexa_data[MSG_VIEWER_COLOR_HEXA_BUFFER_LEN]; +char hexa_value[MSG_VIEWER_HEXA_SIZE] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; +static void __msg_viewer_util_get_color_code(int color_dec) +{ + int col = color_dec; + int rem = 0; + + memset(hexa_data, 0x00, sizeof(hexa_data)); + rem = col % MSG_VIEWER_HEXA_SIZE; + col = col / MSG_VIEWER_HEXA_SIZE; + hexa_data[0] = hexa_value[col]; + hexa_data[1] = hexa_value[rem]; +} + +void msg_viewer_util_get_color_as_string(char *szcolor, int szcolor_len, int r, int g, int b) +{ + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, szcolor == NULL); + MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, szcolor_len < MSG_VIEWER_RGB_COLOR_BUF); + char col_hex[MSG_VIEWER_RGB_COLOR_BUF] = {0x0,}; + /* Get color*/ + __msg_viewer_util_get_color_code(r); + col_hex[0] = hexa_data[0]; + col_hex[1] = hexa_data[1]; + __msg_viewer_util_get_color_code(g); + col_hex[2] = hexa_data[0]; + col_hex[3] = hexa_data[1]; + __msg_viewer_util_get_color_code(b); + col_hex[4] = hexa_data[0]; + col_hex[5] = hexa_data[1]; + col_hex[6] = '\0'; + + snprintf(szcolor, MSG_VIEWER_RGB_COLOR_BUF, "%s", col_hex); +} + +MSG_BOOL msg_viewer_util_get_default_path(char *dir_path, int dir_path_len) +{ + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, dir_path == NULL, FALSE); + + if (ecore_file_is_dir(MSG_VIEWER_DOWNLOAD_PATH) == EINA_FALSE) { + if (ecore_file_mkdir(MSG_VIEWER_DOWNLOAD_PATH) == EINA_FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ecore_file_mkdir is failed"); + snprintf(dir_path, dir_path_len, "%s", MSG_VIEWER_CONTENT_PATH); + } else { + snprintf(dir_path, dir_path_len, "%s", MSG_VIEWER_DOWNLOAD_PATH); + } + } else { + snprintf(dir_path, dir_path_len, "%s", MSG_VIEWER_DOWNLOAD_PATH); + } + + return TRUE; +} + +unsigned char *msg_ui_viewer_get_buffer_from_file(const char *filepath, const char *opt, unsigned int *buffer_size) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, filepath == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, buffer_size == NULL, NULL); + + *buffer_size = 0; + FILE *pFile = NULL; + + pFile = fopen(filepath, opt); + if (pFile == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "File Open Error"); + return NULL; + } + + if (fseek(pFile, 0, SEEK_END) < 0) { + fclose(pFile); + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "File fseek Error: "); + return NULL; + } + + int file_size = ftell(pFile); + + if (file_size <= 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Filesize is error : %d", file_size); + fclose(pFile); + return NULL; + } + + unsigned char *buffer = NULL; + + buffer = (unsigned char *)malloc(file_size); + + if (fseek(pFile, 0, SEEK_SET) < 0) { + fclose(pFile); + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "File seek Error"); + return NULL; + } + if (fread(buffer, sizeof(char), file_size, pFile) != (size_t)file_size) { + fclose(pFile); + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "File Read Error"); + return NULL; + } + + *buffer_size = file_size; + fclose(pFile); + + return buffer; +} + +char *msg_ui_viewer_util_copy_file(const char *src_path, char *dst_path) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, src_path == NULL, NULL); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, dst_path == NULL, NULL); + char file_ext[MSG_VIEWER_FILE_EXT_MAX_LEN + 1] = {0}; + char file_name_without_ext[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0}; + char new_file_name[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0}; + MSG_BOOL result = FALSE; + int ncount = 0; + Eina_Bool is_exists = FALSE; + + snprintf(new_file_name, sizeof(new_file_name), "%s", dst_path); + + /*check for same file*/ + is_exists = ecore_file_exists(new_file_name); + if (is_exists == EINA_TRUE) { + strncpy(file_name_without_ext, dst_path, MSG_VIEWER_FILENAME_MAX_LEN); + result = msg_viewer_util_get_file_ext(dst_path, file_ext, MSG_VIEWER_FILE_EXT_MAX_LEN); + if (result) + file_name_without_ext[strlen(file_name_without_ext) - strlen(file_ext) - 1] = '\0'; + + ncount = MSG_VIEWER_DEFAULT_FILE_NUMBER; + memset(new_file_name, 0x00, sizeof(new_file_name)); + + /*make new filename*/ + do { + if (strlen(file_ext) > 0) + snprintf(new_file_name, sizeof(new_file_name), "%s_%02d.%s", file_name_without_ext, ncount, file_ext); + else + snprintf(new_file_name, sizeof(new_file_name), "%s_%02d", file_name_without_ext, ncount); + /*check for same file*/ + is_exists = ecore_file_exists(new_file_name); + if (is_exists == EINA_TRUE) { + memset(new_file_name, 0x00, sizeof(new_file_name)); + ncount++; + } else { + break; + } + } while (is_exists); + } + + if (ecore_file_cp(src_path, new_file_name) == EINA_FALSE) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ecore_file_cp is failed"); + return NULL; + } + + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "new_file_name = %s", new_file_name); + + return strdup(new_file_name); +} + +char *msg_ui_viewer_util_create_working_dir(void) +{ + D_ENTER; + char *base_dir = "/tmp/message"; + char working_path[DEF_PATH_MAX] = {0,}; + int i = 0; + + /*Create base dir*/ + if (ecore_file_exists(base_dir) == EINA_FALSE) { + if(ecore_file_mkdir(base_dir) == EINA_FALSE) { + return NULL; + } + } + + /*Create work dir*/ + do { + bzero(working_path, DEF_PATH_MAX); + snprintf(working_path, sizeof(working_path)-1, "%s/viewer_%d/", base_dir, i); + if (ecore_file_exists(working_path) == EINA_FALSE) { + if (ecore_file_mkdir(working_path) == EINA_FALSE) { + return NULL; + } else { + D_MSG("Success to create working path = %s", working_path); + return strdup(working_path); + } + break; + } + i++; + } while(i < 255); + + return NULL; +} + +MSG_BOOL msg_ui_viewer_auto_rename(char *src_path, char *dst_path) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, src_path == NULL, FALSE); + MSG_UI_RETV_IF(MSG_UI_LEVEL_ERR, dst_path == NULL, FALSE); + char file_ext[MSG_VIEWER_FILE_EXT_MAX_LEN + 1] = {0}; + char file_name_without_ext[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0}; + char new_file_name[MSG_VIEWER_FILENAME_MAX_LEN + 1] = {0}; + MSG_BOOL result = FALSE; + int ncount = 0; + + strncpy(file_name_without_ext, dst_path, MSG_VIEWER_FILENAME_MAX_LEN); + result = msg_viewer_util_get_file_ext(dst_path, file_ext, MSG_VIEWER_FILE_EXT_MAX_LEN); + if (result) + file_name_without_ext[strlen(file_name_without_ext) - strlen(file_ext) - 1] = '\0'; + ncount = msg_viewer_util_get_next_number(file_name_without_ext); + if (ncount < 0) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "Invalid filename"); + return FALSE; + } else { + /*find new filename*/ + Eina_Bool is_exists = FALSE; + do { + if (strlen(file_ext) > 0) + snprintf(new_file_name, sizeof(new_file_name), "%s_%d.%s", file_name_without_ext, ncount, file_ext); + else + snprintf(new_file_name, sizeof(new_file_name), "%s_%d", file_name_without_ext, ncount); + /*check for same file*/ + is_exists = ecore_file_exists(new_file_name); + if (is_exists == EINA_TRUE) { + memset(new_file_name, 0x00, sizeof(new_file_name)); + ncount++; + } else { + break; + } + } while (is_exists); + + if (ecore_file_cp(src_path, new_file_name) == EINA_FALSE) + return FALSE; + } + + MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG); + return TRUE; +} diff --git a/viewer/theme/msg_viewer.edc b/viewer/theme/msg_viewer.edc new file mode 100755 index 0000000..956e5dd --- /dev/null +++ b/viewer/theme/msg_viewer.edc @@ -0,0 +1,1051 @@ +#define MAIN_W 720 +#define BODY_TOP_PADDING_MIN_H 34 +#define SUBJECT_MIN_H 48 +#define COLOR_SUBJECT_BG 216 226 232 255 +#define COLOR_DETAIL_INFO_TEXT 108 168 199 255 +#define COLOR_PROGRESS_START_TEXT 255 255 255 255 +#define COLOR_PROGRESS_END_TEXT 142 142 142 255 + +//play controllbar attributes +#define PLAY_CTRBAR_MIN_H 218 +#define PLAY_CTRBAR_TOP_PADDING_MIN_H 48 +#define PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H 28 +#define PLAY_CTRBAR_MIDDLE_PADDING_MIN_H 54 +#define PLAY_CTRBAR_BOTTOM_PADDING_MIN_H 32 +#define PLAY_CTRBAR_PROGRESS_BAR_W 482 +#define PLAY_CTRBAR_PROGRESS_TEXT_START_X 20 +#define PLAY_CTRBAR_PROGRESS_TEXT_W 79 +#define PLAY_CTRBAR_PROGRESS_PADDING_W 22 +#define PLAY_CTRBAR_BUTTON_W 56 +#define PLAY_CTRBAR_BUTTON_PADDING_W 88 +#define PLAY_CTRBAR_BUTTON_VOLUME_START_X 44 +#define PLAY_CTRBAR_BUTTON_PREV_START_X (PLAY_CTRBAR_BUTTON_VOLUME_START_X+PLAY_CTRBAR_BUTTON_W+PLAY_CTRBAR_BUTTON_PADDING_W) +#define PLAY_CTRBAR_BUTTON_PLAY_START_X (PLAY_CTRBAR_BUTTON_PREV_START_X+PLAY_CTRBAR_BUTTON_W+PLAY_CTRBAR_BUTTON_PADDING_W) +#define PLAY_CTRBAR_BUTTON_NEXT_START_X (PLAY_CTRBAR_BUTTON_PLAY_START_X+PLAY_CTRBAR_BUTTON_W+PLAY_CTRBAR_BUTTON_PADDING_W) + +//msg details popup +#define DETAIL_PADDING_V_MIN 30 +#define DETAIL_PADDING_H_MIN 20 + +//edc images +#define PLAYER_BG "M01_player_bg.png" +#define VOL_BTN "M01_play_btn_volume.png" +#define VOL_BTN_PRESS "M01_play_btn_volume_press.png" +#define PREV_BTN "M01_play_btn_previous.png" +#define PREV_BTN_PRESS "M01_play_btn_previous_press.png" +#define PLAY_BTN "M01_play_btn_play.png" +#define PLAY_BTN_PRESS "M01_play_btn_play_press.png" +#define PAUSE_BTN "M01_play_btn_pause.png" +#define PAUSE_BTN_PRESS "M01_play_btn_pause_press.png" +#define NEXT_BTN "M01_play_btn_next.png" +#define NEXT_BTN_PRESS "M01_play_btn_next_press.png" +#define PROGRESS_BAR "M01_player_progress_bar.png" +#define PROGRESS_BG "M01_player_progress_bg.png" + +collections { + group { + name: "play_controller"; + images { + image: PLAYER_BG COMP; + image: VOL_BTN COMP; + image: VOL_BTN_PRESS COMP; + image: PREV_BTN COMP; + image: PREV_BTN_PRESS COMP; + image: PLAY_BTN COMP; + image: PLAY_BTN_PRESS COMP; + image: PAUSE_BTN COMP; + image: PAUSE_BTN_PRESS COMP; + image: NEXT_BTN COMP; + image: NEXT_BTN_PRESS COMP; + } + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 PLAY_CTRBAR_MIN_H; + } + } + part { + name: "rect/bg"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + rel1{to:"rect"; relative:0.0 0.0;} + rel2{to:"rect"; relative:1.0 1.0;} + image { normal: PLAYER_BG; } + } + } + part { + name: "rect/padding/top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + min: 0 PLAY_CTRBAR_TOP_PADDING_MIN_H; + align: 0.0 0.0; + fixed: 1 1; + rel1{to:"rect"; relative:0.0 0.0;} + rel2{to:"rect"; relative:1.0 0.0;} + } + } + part { + name: "rect/padding/progressbar"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + min: 0 PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H; + align: 0.0 0.0; + fixed: 1 1; + rel1{to:"rect/padding/top"; relative:0.0 1.0;} + rel2{to:"rect/padding/top"; relative:1.0 1.0;} + } + } + part { + name: "progress/start/time"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 0 PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H; + align: 0.5 0.5; + fixed: 1 1; + rel1{to:"rect/padding/progressbar"; relative:0.0 0.0; offset: PLAY_CTRBAR_PROGRESS_TEXT_START_X 0;} + rel2{to:"progressbar"; relative:0.0 1.0; offset: -PLAY_CTRBAR_PROGRESS_PADDING_W 0;} + color: COLOR_PROGRESS_START_TEXT; + text { + font: SLP_FONT_REGULAR; + text_class: FONT_TEXT_CLASS_REGULAR; + size: 28; + align: 0.5 0.5; + ellipsis: 0.0; + text: ""; + } + } + } + part { + name: "progressbar"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 0 PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H; + align: 0.0 0.0; + fixed: 1 1; + rel1{to:"rect/padding/progressbar"; relative:((MAIN_W-PLAY_CTRBAR_PROGRESS_BAR_W)/2)/MAIN_W 0.0;} + rel2{to:"rect/padding/progressbar"; relative:(((MAIN_W-PLAY_CTRBAR_PROGRESS_BAR_W)/2)+PLAY_CTRBAR_PROGRESS_BAR_W)/MAIN_W 0.0;} + } + } + part { + name: "progress/end/time"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 0 PLAY_CTRBAR_PROGRESSBAR_PADDING_MIN_H; + align: 0.5 0.5; + fixed: 1 1; + rel1{to:"progressbar"; relative:1.0 0.0; offset: PLAY_CTRBAR_PROGRESS_PADDING_W 0;} + rel2{to:"rect/padding/progressbar"; relative:1.0 1.0; offset: -PLAY_CTRBAR_PROGRESS_PADDING_W 0;} + color: COLOR_PROGRESS_END_TEXT; + text { + font: SLP_FONT_REGULAR; + text_class: FONT_TEXT_CLASS_REGULAR; + size: 28; + align: 0.5 0.5; + ellipsis: 0.0; + text: ""; + } + } + } + part { + name: "rect/padding/middle"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + min: 0 PLAY_CTRBAR_MIDDLE_PADDING_MIN_H; + align: 0.0 0.0; + fixed: 1 1; + rel1{to:"rect/padding/progressbar"; relative:0.0 1.0;} + rel2{to:"rect/padding/progressbar"; relative:1.0 1.0;} + } + } + part { + name: "rect/padding/buttons"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + fixed: 1 1; + rel1{to:"rect/padding/middle"; relative:0.0 1.0;} + rel2{to:"rect/padding/bottom"; relative:1.0 0.0;} + } + } + part { + name: "rect/padding/bottom"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + min: 0 PLAY_CTRBAR_BOTTOM_PADDING_MIN_H; + align: 0.0 1.0; + fixed: 1 1; + rel1{to:"rect"; relative:0.0 1.0;} + rel2{to:"rect"; relative:1.0 1.0;} + } + } + part { + name: "volume"; + type : IMAGE; + scale: 1; + mouse_events: 1; + description { state: "default" 0.0; + visible: 1; + min: 56 56; + fixed: 1 1; + align: 0.5 0.5; + rel1 { relative: PLAY_CTRBAR_BUTTON_VOLUME_START_X/MAIN_W 0.0; to, "rect/padding/buttons";} + rel2 { relative: PLAY_CTRBAR_BUTTON_VOLUME_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;} + image { normal: VOL_BTN; } + + } + description { state: "pressed" 0.0; + inherit: "default" 0.0; + image { normal: VOL_BTN_PRESS; } + } + } + part { + name: "rect/divide/line"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 1; + min: 1 56; + align: 0.0 0.0; + fixed: 1 1; + rel1{to:"volume"; relative:1.0 0.0; offset: 35 0;} + rel2{to:"volume"; relative:1.0 1.0; offset: 35 0;} + color: 144 144 144 255; + } + } + part { name: "prev"; + type : IMAGE; + scale: 1; + mouse_events: 1; + description { state: "default" 0.0; + visible: 1; + min: 56 56; + fixed: 1 1; + rel1 { relative: PLAY_CTRBAR_BUTTON_PREV_START_X/MAIN_W 0.0; to, "rect/padding/buttons";} + rel2 { relative: PLAY_CTRBAR_BUTTON_PREV_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;} + image { normal: PREV_BTN; } + } + description { state: "pressed" 0.0; + inherit: "default" 0.0; + image { normal: PREV_BTN_PRESS; } + } + } + part { name: "next"; + type : IMAGE; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + min: 56 56; + fixed: 1 1; + align: 0.5 0.5; + rel1 { relative: PLAY_CTRBAR_BUTTON_NEXT_START_X/MAIN_W 0.0; to, "rect/padding/buttons";} + rel2 { relative: PLAY_CTRBAR_BUTTON_NEXT_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;} + image { normal: NEXT_BTN; } + } + description { state: "pressed" 0.0; + inherit: "default" 0.0; + image { normal: NEXT_BTN_PRESS; } + } + } + part { name: "play_pause"; + type : IMAGE; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + visible: 1; + min: 56 56; + fixed: 1 1; + align: 0.5 0.5; + rel1 { relative: PLAY_CTRBAR_BUTTON_PLAY_START_X/MAIN_W 0.0; to, "rect/padding/buttons";} + rel2 { relative: PLAY_CTRBAR_BUTTON_PLAY_START_X/MAIN_W 1.0; to, "rect/padding/buttons"; offset: PLAY_CTRBAR_BUTTON_W 0;} + image { normal: PLAY_BTN; } + } + description { state: "default" 1.0; + inherit: "default" 0.0; + image { normal: PAUSE_BTN; } + } + description { state: "pressed" 0.0; + inherit: "default" 0.0; + image { normal: PLAY_BTN_PRESS; } + } + description { state: "pressed" 1.0; + inherit: "default" 0.0; + image { normal: PAUSE_BTN_PRESS; } + } + } + programs { + program { + name: "vol_btn_click"; + source: "volume"; + signal: "mouse,clicked,1"; + script { + emit ("volume_clicked", ""); + } + } + program { + name: "vol_btn_down"; + source: "volume"; + signal: "mouse,down,1"; + script { + set_state(PART:"volume", "pressed", 0.0); + } + } + program { + name: "vol_btn_up"; + source: "volume"; + signal: "mouse,up,1"; + script { + set_state(PART:"volume", "default", 0.0); + } + } + program { + name: "prev_btn_click"; + source: "prev"; + signal: "mouse,clicked,1"; + script { + emit ("prev_clicked", ""); + } + } + program { + name: "prev_btn_down"; + source: "prev"; + signal: "mouse,down,1"; + script { + set_state(PART:"prev", "pressed", 0.0); + } + } + program { + name: "prev_btn_up"; + source: "prev"; + signal: "mouse,up,1"; + script { + set_state(PART:"prev", "default", 0.0); + } + } + program { + name: "play_btn_click"; + source: "play_pause"; + signal: "mouse,clicked,1"; + script { + new st[31]; + new Float:vl; + get_state(PART:"play_pause", st, 30, vl) + if(vl == 0.0) + emit ("play_clicked", ""); + else + emit ("pause_clicked", ""); + } + } + program { + name: "play_btn_down"; + source: "play_pause"; + signal: "mouse,down,1"; + script { + new st[31]; + new Float:vl; + get_state(PART:"play_pause", st, 30, vl) + if(vl == 0.0) + set_state(PART:"play_pause", "pressed", 0.0); + else + set_state(PART:"play_pause", "pressed", 1.0); + } + } + program { + name: "play_btn_up"; + source: "play_pause"; + signal: "mouse,up,1"; + script { + new st[31]; + new Float:vl; + get_state(PART:"play_pause", st, 30, vl) + if(vl == 0.0) + set_state(PART:"play_pause", "default", 0.0); + else + set_state(PART:"play_pause", "default", 1.0); + } + } + program { + name: "play_btn_play"; + source: "*"; + signal: "play"; + script { + set_state(PART:"play_pause", "default", 0.0); + } + } + program { + name: "play_btn_pause"; + source: "*"; + signal: "pause"; + script { + set_state(PART:"play_pause", "default", 1.0); + } + } + program { + name: "next_btn_click"; + source: "next"; + signal: "mouse,clicked,1"; + script { + emit ("next_clicked", ""); + } + } + program { + name: "next_btn_down"; + source: "next"; + signal: "mouse,down,1"; + script { + set_state(PART:"next", "pressed", 0.0); + } + } + program { + name: "next_btn_up"; + source: "next"; + signal: "mouse,up,1"; + script { + set_state(PART:"next", "default", 0.0); + } + } + } + } + } + group { + name: "elm/progressbar/horizontal/list_progress"; + images { + image: PROGRESS_BAR COMP; + image: PROGRESS_BG COMP; + } + parts { + part { + name: "elm.padding.left"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 0; + fixed: 1 0; + rel1 { + relative: 0.0 0.0; + offset: 0 0; + } + rel2 { + relative: 0.0 1.0; + offset: 0 0; + } + color: 0 0 0 0; + align: 0.0 0.0; + } + } + part { + name: "elm.padding.right"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 0; + fixed: 1 0; + rel1 { + relative: 1.0 0.0; + offset: 0 0; + } + rel2 { + relative: 1.0 1.0; + offset: 0 0; + } + color: 0 0 0 0; + align: 1.0 0.0; + } + } + part { + name: "elm.background.progressbar"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to_x: "elm.padding.left"; + relative: 1.0 0.0; + offset: 0 0; + } + rel2 { + to_x: "elm.padding.right"; + relative: 0.0 1.0; + offset: 0 0; + } + } + } + part { + name: "elm.swallow.bar"; + mouse_events: 0; + scale: 1; + type: SWALLOW; + description { + min: 1 7; + max: 99999 7; + state: "default" 0.0; + rel1 { + to: "elm.background.progressbar"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.background.progressbar"; + relative: 1.0 1.0; + } + } + } + part { + name: "elm.swallow.content"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + align: 0.0 0.5; + rel1 { + offset: 0 0; + to_y: "elm.background.progressbar"; + } + rel2 { + offset: 0 -1; + relative: 0.0 1.0; + to_y: "elm.background.progressbar"; + } + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + rel2.offset: 4 -1; + } + } + part { + name: "background"; + mouse_events: 0; + scale: 1; + clip_to: "elm.background.progressbar"; + description { + state: "default" 0.0; + rel1 { + to: "elm.swallow.bar"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.swallow.bar"; + relative: 1.0 1.0; + } + image { + normal: PROGRESS_BG; + //border: 0 0 1 1; + } + } + } + part { + name: "elm.progress.progressbar"; + mouse_events: 0; + scale: 1; + clip_to: "elm.background.progressbar"; + description { + state: "default" 0.0; + min: 0 0; + fixed: 1 1; + rel1 { + to: "elm.swallow.bar"; + relative: 0.0 0.0; + } + rel2 { + to_y: "elm.swallow.bar"; + to_x: "elm.cur.progressbar"; + offset: -1 -1; + } + image { + normal: PROGRESS_BAR; + //border: 0 0 1 1; + } + } + description { + state: "invert" 0.0; + inherit: "default" 0.0; + rel1 { + to_y: "elm.swallow.bar"; + to_x: "elm.cur.progressbar"; + } + rel2 { + to: "elm.swallow.bar"; + relative: 1.0 1.0; + } + } + description { + state: "state_begin" 0.0; + inherit: "default" 0.0; + rel1 { + to: "elm.swallow.bar"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.swallow.bar"; + relative: 0.1 1.0; + } + } + description { + state: "state_end" 0.0; + inherit: "default" 0.0; + rel1 { + to: "elm.swallow.bar"; + relative: 0.9 0.0; + } + rel2 { + to: "elm.swallow.bar"; + relative: 1.0 1.0; + } + } + } + part { + name: "elm.cur.progressbar"; + mouse_events: 0; + scale: 1; + dragable { + confine: "background"; + x: 1 1 1; + y: 0 0 0; + } + description { + state: "default" 0.0; + min: 0 28; + fixed: 1 1; + visible: 0; + rel1 { + to: "background"; + relative: 0 0; + } + rel2.to: "background"; + } + } + part { + name: "progress-rect"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "elm.progress.progressbar"; + rel2.to: "elm.progress.progressbar"; + } + } + } + } + + group { + name: "subject/pageindex"; + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 SUBJECT_MIN_H; + color: COLOR_SUBJECT_BG; + } + } + part { + name: "subject"; + type: TEXT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + rel1{to:"rect"; relative:0.0 0.0; offset: DETAIL_PADDING_H_MIN 0; } + rel2{to:"rect"; relative:0.8 1.0;} + align: 0.0 0.5; + color: COLOR_DETAIL_INFO_TEXT; + text { + font: SLP_FONT_REGULAR; + text_class: FONT_TEXT_CLASS_REGULAR; + size: 32; + align: 0.0 0.5; + ellipsis: 0.0; + text: ""; + } + } + } + part { + name: "page/index"; + type: TEXT; + scale: 1; + mouse_events: 0; + description { + state: "default" 0.0; + align: 1.0 0.5; + rel1{to:"rect"; relative:0.8 0.0;} + rel2{to:"rect"; relative:1.0 1.0; offset: -DETAIL_PADDING_H_MIN 0;} + color: COLOR_DETAIL_INFO_TEXT; + text { + font: SLP_FONT_REGULAR; + text_class: FONT_TEXT_CLASS_REGULAR; + size: 32; + align: 1.0 0.5; + ellipsis: 0.0; + text: ""; + } + } + } + } + } + + group { + name : "viewer_main"; + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + part { + name: "viewer.body.bg"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1{to: "rect"; relative: 0.0 0.0;} + rel2{to: "rect"; relative: 1.0 1.0;} + } + } + part { + name: "viewer.swallow.subject"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + min: 0 SUBJECT_MIN_H; + fixed: 0 1; + align: 0.0 0.0; + rel1 {to: "rect"; relative:0.0 0.0;} + rel2 {to: "rect"; relative:1.0 0.0;} + } + } + part { + name: "viewer.body"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + min: 0 0; + color: 0 0 0 0; + rel1 {to: "viewer.swallow.subject"; relative: 0.02 1.0; offset: 0 BODY_TOP_PADDING_MIN_H;} + rel2 {to: "rect"; relative: 0.98 1.0;} + align: 0.0 0.0; + } + } + part { + name: "viewer.body.content"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min:0 0; + color: 0 0 0 0; + rel1 {to: "viewer.swallow.subject"; relative: 0.02 0.0;} + rel2 {to: "rect"; relative: 0.98 1.0;} + align: 0.0 0.0; + } + } + part { + name: "viewer.swallow.play.controller"; + type: SWALLOW; + scale: 1; + mouse_events: 1; + description { + state: "default" 0.0; + min: 0 PLAY_CTRBAR_MIN_H; + visible: 1; + fixed: 0 1; + align: 0.5 1.0; + rel1 {to: "rect"; relative:0.0 1.0;} + rel2 {to: "rect"; relative:1.0 1.0;} + } + } + part { + name:"viewer.titlebtn.list"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 0; + min: 0 1; + rel1 {to: "rect"; relative: 0.0 0.0;} + rel2 {to: "rect"; relative: 1.0 0.0;} + align: 0.0 0.0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + } + description { + state: "hide" 0.0; + inherit: "default" 0.0; + min: 0 0; + max: 0 0; + } + } + programs + { + program { + name: "viewer.titlebtn.list.open"; + signal: "elm,state,titlelist,open"; + source: ""; + action: STATE_SET "show" 0.0; + target: "viewer.titlebtn.list"; + transition: LINEAR 0.2; + } + program { + name: "viewer.titlebtn.list.close"; + signal: "elm,state,titlelist,close"; + source: ""; + action: STATE_SET "hide" 0.0; + target: "viewer.titlebtn.list"; + transition: LINEAR 0.2; + } + } + } + } + + group { + name : "msg/detail"; + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + part { + name: "msg/detail/bg"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1{to: "rect"; relative: 0.0 0.0;} + rel2{to: "rect"; relative: 1.0 1.0;} + } + } + part { + name: "rect/padding/top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + min: 0 DETAIL_PADDING_V_MIN; + align: 0.0 0.0; + fixed: 1 1; + rel1{to:"rect"; relative:0.0 0.0;} + rel2{to:"rect"; relative:1.0 0.0;} + } + } + part { + name: "rect/padding/left"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + min: DETAIL_PADDING_H_MIN 0; + align: 0.0 0.0; + fixed: 1 1; + rel1{to:"rect"; relative:0.0 0.0;} + rel2{to:"rect"; relative:0.0 1.0;} + } + } + part { + name: "rect/padding/right"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + min: DETAIL_PADDING_H_MIN 0; + align: 1.0 0.0; + fixed: 1 1; + rel1{to:"rect"; relative:1.0 0.0;} + rel2{to:"rect"; relative:1.0 1.0;} + } + } + part { + name: "rect/padding/bottom"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + min: 0 DETAIL_PADDING_V_MIN; + align: 0.0 1.0; + fixed: 1 1; + rel1{to:"rect"; relative:0.0 1.0;} + rel2{to:"rect"; relative:1.0 1.0;} + } + } + part { + name: "msg/detail/content"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + min: 0 0; + color: 0 0 0 0; + rel1 {relative: 1.0 1.0; to_x: "rect/padding/left"; to_y: "rect/padding/top";} + rel2 {relative: 0.0 0.0; to_x: "rect/padding/right"; to_y: "rect/padding/bottom";} + align: 0.0 0.0; + } + } + } + } + + group { + name : "item_list"; + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + part { + name: "viewer.itemlist.body"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + rel1 {to: "rect"; relative: 0.0 0.0;} + rel2 {to: "rect"; relative: 1.0 1.0;} + } + } + } + } + + group { + name : "title"; + images { + image: "optionheader_arrow.png" COMP; + } + script { + public title_show = 0; + } + parts { + part { + name: "rect"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + part { + name: "title_btn"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + min: 0 78; + align: 0 0.5; + color: 255 0 0 255; + rel1{to: "rect"; relative: 0.0 0.5;} + rel2{to: "rect"; relative: 1.0 0.5;} + } + } + part { + name: "titlebtn_arrow"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + min: 28 24; + max: 28 24; + fixed: 1 1; + align: 0.5 0.0; + rel1 { relative: 0.0 0.89; to_x: "title_btn"; } + rel2 { relative: 1.0 0.89; to_x: "title_btn"; } + image.normal: "optionheader_arrow.png"; + color: 255 255 255 0; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + } + programs { + program { + name: "title_show"; + signal: "elm,state,title,show"; + source: ""; + script { + set_int(title_show, 1); + set_state(PART:"titlebtn_arrow", "show", 0.0); + } + } + program { + name: "title_hide"; + signal: "elm,state,title,hide"; + source: ""; + script { + set_int(title_show, 0); + set_state(PART:"titlebtn_arrow", "default", 0.0); + } + } + } + } + |