N_SE-24098 : Tapping volumebar is not working
authorDowon Park <dowon.park@samsung.com>
Mon, 4 Feb 2013 12:14:01 +0000 (21:14 +0900)
committerDowon Park <dowon.park@samsung.com>
Mon, 4 Feb 2013 13:28:00 +0000 (22:28 +0900)
Change-Id: I164172201f0c3c444a1f34538db0b84214043c39

12 files changed:
common/data/edj_image_list/00_slider_btn_volume01.png [new file with mode: 0644]
common/data/edj_image_list/00_slider_btn_volume02.png [new file with mode: 0644]
common/data/msg_images.edc
common/msg-ui-image-resource.h
viewer/include/msg-ui-viewer-main.h
viewer/include/msg-ui-viewer-play-view.h
viewer/src/msg-ui-viewer-callback.c
viewer/src/msg-ui-viewer-gadget.c
viewer/src/msg-ui-viewer-main.c
viewer/src/msg-ui-viewer-play-view-callback.c
viewer/src/msg-ui-viewer-play-view.c
viewer/theme/msg_viewer.edc

diff --git a/common/data/edj_image_list/00_slider_btn_volume01.png b/common/data/edj_image_list/00_slider_btn_volume01.png
new file mode 100644 (file)
index 0000000..2d9f384
Binary files /dev/null and b/common/data/edj_image_list/00_slider_btn_volume01.png differ
diff --git a/common/data/edj_image_list/00_slider_btn_volume02.png b/common/data/edj_image_list/00_slider_btn_volume02.png
new file mode 100644 (file)
index 0000000..a28bfc4
Binary files /dev/null and b/common/data/edj_image_list/00_slider_btn_volume02.png differ
index 5e42e85..7a550e8 100755 (executable)
@@ -56,4 +56,6 @@ collections {
        RESOURCE_IMAGE("M01_title_icon_attach_dim.png");
        RESOURCE_IMAGE("M01_contact_default_image.png");
        RESOURCE_IMAGE("00_icon_plus.png");
+       RESOURCE_IMAGE("00_slider_btn_volume01.png");
+       RESOURCE_IMAGE("00_slider_btn_volume02.png");
 }
index 5593f51..0217e56 100755 (executable)
@@ -26,6 +26,8 @@
 #define MSG_VIEWER_IMAGE_DRM_ICON                                      "M01_icon_DRM.png"
 #define MSG_VIEWER_IMAGE_ATTACH_LIST_ICON                                      "M01_title_icon_attach.png"
 #define MSG_VIEWER_IMAGE_ATTACH_LIST_DIM_ICON                  "M01_title_icon_attach_dim.png"
+#define MSG_VIEWER_VOLUME_MIN                          "00_slider_btn_volume01.png"
+#define MSG_VIEWER_VOLUME_MAX                          "00_slider_btn_volume02.png"
 
 /* composer image resources */
 #define MSGC_IMG_ATTACHMENT_ICON                       "60_myfiles_file_etc.png"
index 8992879..e75d8d8 100755 (executable)
@@ -89,15 +89,6 @@ typedef struct _MSG_VIEWER_MAIN_DATA {
 
        Ecore_Idler     *del_idler;
        Eina_List* drm_list;/*set invalid ro drm content*/
-
-       /* for use volume key setting */
-       Ecore_Event_Handler *volkey_release_handler;
-       Ecore_Event_Handler *volkey_press_handler;
-
-       Ecore_Timer *vol_up_key_longpress;
-       Ecore_Timer *vol_down_key_longpress;
-
-       Ecore_X_Display *xdisplay;
 } MSG_VIEWER_MAIN_DATA_S;
 
 /*==================================================================================================
@@ -176,8 +167,6 @@ 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, bool indicator);
 
-void msg_ui_viewer_grab_key_setting(void *data);
-void msg_ui_viewer_ungrab_key_setting(void *data);
 void msg_ui_viewer_change_language(void *data);
 
 /* VIEWER  CALLBACK */
@@ -185,6 +174,4 @@ 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);
-Eina_Bool msg_ui_viewer_key_release_cb(void *data, int type, void *event);
-Eina_Bool msg_ui_viewer_key_press_cb(void *data, int type, void *event);
 #endif /* __MSG_UI_VIEWER_MAIN_H__*/
index bc2465f..27a421c 100755 (executable)
@@ -24,6 +24,7 @@
 #include "msg-smil-player-interface.h"
 #include "msg-ui-viewer-types.h"
 
+#include <Ecore_X.h>
 #include <Ecore.h>
 #include <Elementary.h>
 #include <ui-gadget-module.h>
 #define VIEWER_NAVI_FRAME_HEIGHT 98
 #define VIEWER_NAVIFRAME_BOTTOM_H 114
 
-#define VIEWER_PLAY_CONTROLLER_LIFETIME 3
-#define VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME 1
+
+#define VIEWER_PLAY_CONTROLLER_LIFETIME (3.0)
+#define VIEWER_PLAY_CONTROLLER_PROGRESSBAR_TIME (1.0)
 #define VIEWER_PLAY_CONTROLLER_HEIGHT 218
 
+#define VIEWER_VOLUMEBAR_LIFETIME (3.0)
+#define VIEWER_VOLUME_KEY_FONT_LONG_PRESS_TIME (0.3)
+#define VIEWER_VOLUME_KEY_VOLUME_LONG_PRESS_TIME (0.1)
+
 #define VIEWER_DETAILS_TEXT_SPACE " "
 #define VIEWER_DETAILS_TEXT_LEFT_BRACE "("
 #define VIEWER_DETAILS_TEXT_RIGHT_BRACE ")"
@@ -134,6 +140,13 @@ typedef enum {
        MSG_VIEWER_ENTRY_NORMAL_TEXT,
        MSG_VIEWER_ENTRY_HELP_TEXT,
 } MSG_VIEWER_ENTRY_TYPE_E;
+
+typedef enum {
+       MSG_VIEWER_VOLUME_EVENT_DRAG_START,
+       MSG_VIEWER_VOLUME_EVENT_DRAG_STOP,
+} MSG_VIEWER_VOLUME_BAR_EVENT_E;
+
+typedef void (*MSG_VIEWER_VOLUMEBAR_CB)(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event);
 /*==================================================================================================
  *                                                                             STRUCTURES
  *==================================================================================================*/
@@ -149,8 +162,8 @@ typedef struct _MSG_VIEWER_ADDR_LIST_S{
 } MSG_VIEWER_ADDR_LIST;
 
 typedef struct _MSG_PLAY_DATA_S {
-       struct ug_cbs   cbs;
-       void    *viewer_main;
+       struct ug_cbs cbs;
+       void *viewer_main;
        Evas_Object *main_window;
        Evas_Object *navi_frame;
        Evas_Object *navi_title_layout;         /* navi title area layout */
@@ -162,6 +175,8 @@ typedef struct _MSG_PLAY_DATA_S {
        Evas_Object *subject_index_layout;      /* subject / page index */
        Evas_Object *play_controller;                   /* play controller */
        Evas_Object *progressbar;                               /* progressbar of play controller */
+       Evas_Object *volumebar;                         /* volumebar */
+       Evas_Object *volume_slider;             /* volumebar_slider */
 
        Evas_Object *help_page_gl;                      /* help page genlist */
        Evas_Object *save_attachment_gl;                /* save attachments genlist(controlbar menu) */
@@ -199,6 +214,9 @@ typedef struct _MSG_PLAY_DATA_S {
        Ecore_Idler *del_idler;
        Ecore_Timer *play_controller_timer;
        Ecore_Timer *play_controller_progressbar_timer;
+       Ecore_Timer *volumebar_timer;
+
+       MSG_VIEWER_VOLUMEBAR_CB volumebar_event_cb;
 
        int ctrl_start_x;               /* play controller mouse pointer */
        int ctrl_start_y;               /* play controller mouse pointer */
@@ -215,6 +233,7 @@ typedef struct _MSG_PLAY_DATA_S {
        bool playcontroller_opened;             /*check play controller is shown or not */
        bool auto_resume_state;         /* check state of auto resume availablity */
        bool msg_box_viewer;    /* TRUE is viewer is launched from message box */
+       bool drag_volume_slider; /* check do not navigate multiple page when volume bar is displayed */
 
        int totalProgressTime;          /* total progress time for all slide*/
        int elapsedProgressTime;                /*progress time from 1st slide to current slide*/
@@ -228,6 +247,15 @@ typedef struct _MSG_PLAY_DATA_S {
 
        Elm_Theme *title_th;    /* title theme */
        Elm_Theme *progress_th;         /* progressbar theme*/
+
+       /* for use volume key setting */
+       Ecore_Event_Handler *volkey_release_handler;
+       Ecore_Event_Handler *volkey_press_handler;
+
+       Ecore_Timer *vol_up_key_longpress;
+       Ecore_Timer *vol_down_key_longpress;
+
+       Ecore_X_Display *xdisplay;
 } MSG_PLAY_DATA_S;
 
 typedef struct {
@@ -277,6 +305,8 @@ 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);
+void msg_ui_viewer_create_volume_bar(void *data);
+void msg_ui_viewer_destroy_volume_bar(void *data);
 
 /* ========================VIEWER  CALLBACK========================*/
 /*
index 2121301..34421e7 100755 (executable)
@@ -38,8 +38,6 @@ void msg_ui_viewer_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
                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);
index 83949cf..1f51b33 100755 (executable)
@@ -26,7 +26,6 @@
 #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"
@@ -231,18 +230,6 @@ static void *__msg_ui_viewer_on_create(ui_gadget_h ug, enum ug_mode mode, servic
                return NULL;
        }
 
-       viewer_main_data->xdisplay = ecore_x_display_get();
-       if (viewer_main_data->xdisplay == NULL) {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ecore_x_display_get() is failed");
-               return NULL;
-       }
-
-       /* key grap setting */
-       int use_volume_key = 0;
-       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
-       if (use_volume_key)
-               msg_ui_viewer_grab_key_setting(viewer_main_data);
-
        return layout;
 }
 
@@ -265,8 +252,6 @@ static void __msg_ui_viewer_on_pause(ui_gadget_h ug, service_h svc_handle, void
        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_ui_viewer_ungrab_key_setting(viewer_main_data);
-
        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);
@@ -366,26 +351,6 @@ static void __msg_ui_viewer_on_destroy(ui_gadget_h ug, service_h svc_handle, voi
                viewer_main_data->layout_main = NULL;
        }
 
-       if (viewer_main_data->volkey_release_handler) {
-               ecore_event_handler_del(viewer_main_data->volkey_release_handler);
-               viewer_main_data->volkey_release_handler = NULL;
-       }
-
-       if (viewer_main_data->vol_up_key_longpress) {
-               ecore_timer_del(viewer_main_data->vol_up_key_longpress);
-               viewer_main_data->vol_up_key_longpress = NULL;
-       }
-
-       if (viewer_main_data->volkey_press_handler) {
-               ecore_event_handler_del(viewer_main_data->volkey_press_handler);
-               viewer_main_data->volkey_press_handler = NULL;
-       }
-
-       if (viewer_main_data->vol_down_key_longpress) {
-               ecore_timer_del(viewer_main_data->vol_down_key_longpress);
-               viewer_main_data->vol_down_key_longpress = NULL;
-       }
-
        /*destroy viewer_main data*/
        /*free the drm list*/
        if (viewer_main_data->drm_list) {
index f5b9cbc..e0ffbd9 100755 (executable)
@@ -19,7 +19,6 @@
 *==================================================================================================*/
 #include <msg.h>
 #include <msg_storage.h>
-#include <utilX.h>
 
 #include "msg-smil-player-interface.h"
 #include "msg-ui-common-utility.h"
@@ -37,8 +36,6 @@ 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);
 
-static Eina_Bool __msg_ui_viewer_up_key_long_press_cb(void *data);
-static Eina_Bool __msg_ui_viewer_down_key_long_press_cb(void *data);
 /*==================================================================================================
  *                                                     FUNCTION IMPLEMENTATIONS
  *================================================================================================*/
@@ -62,11 +59,6 @@ void msg_ui_viewer_main_init(void *data)
        viewer_main_data->player_view = NULL;
        viewer_main_data->drm_list_view = NULL;
        viewer_main_data->del_idler = NULL;
-       viewer_main_data->volkey_release_handler = NULL;
-       viewer_main_data->volkey_press_handler = NULL;
-       viewer_main_data->vol_up_key_longpress = NULL;
-       viewer_main_data->vol_down_key_longpress = NULL;
-       viewer_main_data->xdisplay = NULL;
 }
 
 MSG_BOOL msg_ui_viewer_launch(void *data)
@@ -419,141 +411,6 @@ Evas_Object *msg_ui_viewer_get_bg_layout(void *data)
        return viewer_main_data->bg;
 }
 
-void msg_ui_viewer_grab_key_setting(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;
-
-       utilx_grab_key(viewer_main_data->xdisplay, elm_win_xwindow_get(viewer_main_data->main_window), KEY_VOLUMEUP, EXCLUSIVE_GRAB);
-       utilx_grab_key(viewer_main_data->xdisplay, elm_win_xwindow_get(viewer_main_data->main_window), KEY_VOLUMEDOWN, EXCLUSIVE_GRAB);
-}
-
-void msg_ui_viewer_ungrab_key_setting(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;
-
-       utilx_ungrab_key(viewer_main_data->xdisplay, elm_win_xwindow_get(viewer_main_data->main_window), KEY_VOLUMEUP);
-       utilx_ungrab_key(viewer_main_data->xdisplay, elm_win_xwindow_get(viewer_main_data->main_window), KEY_VOLUMEDOWN);
-}
-
-Eina_Bool msg_ui_viewer_key_release_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_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
-       Ecore_Event_Key *ev = event;
-       int use_volume_key = false;
-
-       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
-
-       if (use_volume_key) {
-               if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) {    /* KEY_VOLUMEUP */
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is released");
-
-                       if (viewer_main_data->vol_up_key_longpress) {
-                               ecore_timer_del(viewer_main_data->vol_up_key_longpress);
-                               viewer_main_data->vol_up_key_longpress = NULL;
-                       }
-               } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) {   /* KEY_VOLUMEDOWN */
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is released");
-
-                       if (viewer_main_data->vol_down_key_longpress) {
-                               ecore_timer_del(viewer_main_data->vol_down_key_longpress);
-                               viewer_main_data->vol_down_key_longpress = NULL;
-                       }
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
-               }
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Use volume key setting is not activated. Do volume key action");
-       }
-
-       return EINA_TRUE;
-}
-
-Eina_Bool msg_ui_viewer_key_press_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_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
-       Ecore_Event_Key *ev = event;
-       int use_volume_key = false;
-
-       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
-
-       if (use_volume_key) {
-               if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) {    /* KEY_VOLUMEUP */
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is pressed");
-
-                       msg_common_increase_font_size();
-
-                       if (viewer_main_data->player_view && viewer_main_data->player_view->render_entry) {
-                               bool isHelpText = (!viewer_main_data->player_view->smil_eventStatus) ? false : ((viewer_main_data->player_view->smil_eventStatus->isHelpSlide) ? true : false);
-                               MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
-                               msg_ui_viewer_set_font_size(viewer_main_data->player_view, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
-                       }
-
-                       viewer_main_data->vol_up_key_longpress = ecore_timer_add(0.3, (Ecore_Task_Cb) __msg_ui_viewer_up_key_long_press_cb, (void *)viewer_main_data);
-               } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) {   /* KEY_VOLUMEDOWN */
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is pressed");
-
-                       msg_common_decrease_font_size();
-
-                       if (viewer_main_data->player_view && viewer_main_data->player_view->render_entry) {
-                               bool isHelpText = (!viewer_main_data->player_view->smil_eventStatus) ? false : ((viewer_main_data->player_view->smil_eventStatus->isHelpSlide) ? true : false);
-                               MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
-                               msg_ui_viewer_set_font_size(viewer_main_data->player_view, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
-                       }
-
-                       viewer_main_data->vol_down_key_longpress = ecore_timer_add(0.3, (Ecore_Task_Cb) __msg_ui_viewer_down_key_long_press_cb, (void *)viewer_main_data);
-               } else {
-                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
-               }
-       } else {
-               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Use volume key setting is not activated. Do volume key action");
-       }
-
-       return EINA_TRUE;
-}
-
-static Eina_Bool __msg_ui_viewer_up_key_long_press_cb(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
-       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
-
-       msg_common_increase_font_size();
-
-       if (viewer_main_data->player_view && viewer_main_data->player_view->render_entry) {
-               bool isHelpText = (!viewer_main_data->player_view->smil_eventStatus) ? false : ((viewer_main_data->player_view->smil_eventStatus->isHelpSlide) ? true : false);
-               MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
-               msg_ui_viewer_set_font_size(viewer_main_data->player_view, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
-       }
-
-       return EINA_TRUE;
-}
-static Eina_Bool __msg_ui_viewer_down_key_long_press_cb(void *data)
-{
-       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
-       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
-       MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)data;
-
-       msg_common_decrease_font_size();
-
-       if (viewer_main_data->player_view && viewer_main_data->player_view->render_entry) {
-               bool isHelpText = (!viewer_main_data->player_view->smil_eventStatus) ? false : ((viewer_main_data->player_view->smil_eventStatus->isHelpSlide) ? true : false);
-               MSG_VIEWER_ENTRY_TYPE_E entry_type = (isHelpText) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
-               msg_ui_viewer_set_font_size(viewer_main_data->player_view, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
-       }
-
-       return EINA_TRUE;
-}
-
 void msg_ui_viewer_change_language(void *data)
 {
        MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
index 6b5e3b7..d11a086 100755 (executable)
@@ -83,6 +83,11 @@ Eina_Bool msg_ui_viewer_mouse_up_cb(void *data, int type, void *event)
        int screen_width = 0;
        int rotate = 0;
 
+       if (viewer_play_data->drag_volume_slider) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "volume slider is dragging, do not navigate page!");
+               return FALSE;
+       }
+
        play_status = msg_smil_get_current_slide_status(viewer_play_data->SmilHandle);
        MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "play_status : %d", play_status);
 
@@ -813,7 +818,10 @@ void msg_ui_viewer_volume_button_cb(void *data, Evas_Object * o, const char *emi
        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);
+       if (!viewer_play_data->volumebar)
+               msg_ui_viewer_create_volume_bar((void *)viewer_play_data);
+       else
+               msg_ui_viewer_destroy_volume_bar((void *)viewer_play_data);
 
        //create play controller timer repeatedly
        msg_ui_viewer_create_play_controller_timer(viewer_play_data);
index 734b1e5..f756ad3 100755 (executable)
@@ -28,6 +28,7 @@
 #include <msg_transport.h>
 
 #include <Ecore_X.h>
+#include <utilX.h>
 #include <glib.h>
 #include <contacts.h>
 #include "appsvc.h"
@@ -60,6 +61,31 @@ 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);
 
+/* volume key action related with volume bar */
+static void __msg_ui_viewer_grab_volume_key(void *data);
+static void __msg_ui_viewer_ungrab_volume_key(void *data);
+static void __msg_ui_viewer_volumebar_volume_up(Evas_Object *obj);
+static void __msg_ui_viewer_volumebar_volume_down(Evas_Object *obj);
+
+/* volume action with volume key and slide callback */
+static Eina_Bool __msg_ui_viewer_volume_key_release_cb(void *data, int type, void *event);
+static Eina_Bool __msg_ui_viewer_volume_key_press_cb(void *data, int type, void *event);
+static Eina_Bool __msg_ui_viewer_up_key_long_press_cb(void *data);
+static Eina_Bool __msg_ui_viewer_down_key_long_press_cb(void *data);
+static Eina_Bool __msg_ui_viewer_volumebar_timer_cb(void *data);
+
+/* volume action related with volumebar slider */
+static void __msg_ui_viewer_volumebar_drag_start_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_volumebar_drag_stop_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_volumebar_changed_cb(void *data, Evas_Object *obj, void *event_info);
+static void __msg_ui_viewer_volumebar_event_cb(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event);
+static void __msg_ui_viewer_volumebar_event_callback_add(Evas_Object *obj, MSG_VIEWER_VOLUMEBAR_CB event_cb);
+
+/* volume action related with SOUNDMANAGER */
+static int __msg_ui_viewer_get_max_volume(void);
+static int __msg_ui_viewer_get_current_volume(void);
+static bool __msg_ui_viewer_set_volume(int volume);
+
 /*==================================================================================================
  *                                                             FUNCTION IMPLEMENTATIONS
  *================================================================================================*/
@@ -404,6 +430,12 @@ void msg_ui_viewer_play_view_init(void *data)
        viewer_play_data->title_menu_opened = 0;
        viewer_play_data->playcontroller_opened = 0;
        viewer_play_data->auto_resume_state = true;
+       viewer_play_data->drag_volume_slider = false;
+       viewer_play_data->volkey_release_handler = NULL;
+       viewer_play_data->volkey_press_handler = NULL;
+       viewer_play_data->vol_up_key_longpress = NULL;
+       viewer_play_data->vol_down_key_longpress = NULL;
+       viewer_play_data->xdisplay = NULL;
 
        viewer_play_data->title_th = elm_theme_new();
        elm_theme_ref_set(viewer_play_data->title_th, NULL);
@@ -507,7 +539,30 @@ void msg_ui_viewer_destroy_play_view(void *data)
                viewer_play_data->progress_th = NULL;
        }
 
-       sound_manager_set_volume_key_type(VOLUME_KEY_TYPE_NONE);
+       if (viewer_play_data->volumebar_timer) {
+               ecore_timer_del(viewer_play_data->volumebar_timer);
+               viewer_play_data->volumebar_timer = NULL;
+       }
+
+       if (viewer_play_data->volkey_release_handler) {
+               ecore_event_handler_del(viewer_play_data->volkey_release_handler);
+               viewer_play_data->volkey_release_handler = NULL;
+       }
+
+       if (viewer_play_data->vol_up_key_longpress) {
+               ecore_timer_del(viewer_play_data->vol_up_key_longpress);
+               viewer_play_data->vol_up_key_longpress = NULL;
+       }
+
+       if (viewer_play_data->volkey_press_handler) {
+               ecore_event_handler_del(viewer_play_data->volkey_press_handler);
+               viewer_play_data->volkey_press_handler = NULL;
+       }
+
+       if (viewer_play_data->vol_down_key_longpress) {
+               ecore_timer_del(viewer_play_data->vol_down_key_longpress);
+               viewer_play_data->vol_down_key_longpress = NULL;
+       }
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
@@ -522,20 +577,14 @@ void msg_ui_viewer_connect_handler(void *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);
 
-       int use_volume_key = 0;
-       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
+       __msg_ui_viewer_grab_volume_key(viewer_play_data);
 
-       if (use_volume_key && viewer_play_data->viewer_main) {
-               MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
+       /* connect key handler for volume up/down */
+       if (!viewer_play_data->volkey_release_handler)
+               viewer_play_data->volkey_release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, __msg_ui_viewer_volume_key_release_cb, (void *)viewer_play_data);
 
-               msg_ui_viewer_grab_key_setting(viewer_main_data);
-               /* connect key handler for volume up/down */
-               if (!viewer_main_data->volkey_release_handler)
-                       viewer_main_data->volkey_release_handler = ecore_event_handler_add(ECORE_EVENT_KEY_UP, msg_ui_viewer_key_release_cb, (void *)viewer_main_data);
-
-               if (!viewer_main_data->volkey_press_handler)
-                       viewer_main_data->volkey_press_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, msg_ui_viewer_key_press_cb, (void *)viewer_main_data);
-       }
+       if (!viewer_play_data->volkey_press_handler)
+               viewer_play_data->volkey_press_handler = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, __msg_ui_viewer_volume_key_press_cb, (void *)viewer_play_data);
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
@@ -556,30 +605,27 @@ void msg_ui_viewer_disconnect_handler(void *data)
                viewer_play_data->mouse_down_event_handler = NULL;
        }
 
-       if (viewer_play_data->viewer_main) {
-               MSG_VIEWER_MAIN_DATA_S *viewer_main_data = (MSG_VIEWER_MAIN_DATA_S *)viewer_play_data->viewer_main;
-               if (viewer_main_data->volkey_release_handler) {
-                       ecore_event_handler_del(viewer_main_data->volkey_release_handler);
-                       viewer_main_data->volkey_release_handler = NULL;
-               }
+       if (viewer_play_data->volkey_release_handler) {
+               ecore_event_handler_del(viewer_play_data->volkey_release_handler);
+               viewer_play_data->volkey_release_handler = NULL;
+       }
 
-               if (viewer_main_data->vol_up_key_longpress) {
-                       ecore_timer_del(viewer_main_data->vol_up_key_longpress);
-                       viewer_main_data->vol_up_key_longpress = NULL;
-               }
+       if (viewer_play_data->vol_up_key_longpress) {
+               ecore_timer_del(viewer_play_data->vol_up_key_longpress);
+               viewer_play_data->vol_up_key_longpress = NULL;
+       }
 
-               if (viewer_main_data->volkey_press_handler) {
-                       ecore_event_handler_del(viewer_main_data->volkey_press_handler);
-                       viewer_main_data->volkey_press_handler = NULL;
-               }
+       if (viewer_play_data->volkey_press_handler) {
+               ecore_event_handler_del(viewer_play_data->volkey_press_handler);
+               viewer_play_data->volkey_press_handler = NULL;
+       }
 
-               if (viewer_main_data->vol_down_key_longpress) {
-                       ecore_timer_del(viewer_main_data->vol_down_key_longpress);
-                       viewer_main_data->vol_down_key_longpress = NULL;
-               }
+       if (viewer_play_data->vol_down_key_longpress) {
+               ecore_timer_del(viewer_play_data->vol_down_key_longpress);
+               viewer_play_data->vol_down_key_longpress = NULL;
+       }
 
-               msg_ui_viewer_ungrab_key_setting(viewer_main_data);
-       }
+       __msg_ui_viewer_ungrab_volume_key(viewer_play_data);
 
        MSG_UI_LEAVE(MSG_UI_LEVEL_DEBUG);
 }
@@ -595,6 +641,12 @@ MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data)
        Evas_Object *layout = NULL;
        MSG_VIEWER_LAUNCH_VIEW_MODE_E launchmode = MSG_VIEWER_INVALID_MODE;
 
+       viewer_play_data->xdisplay = ecore_x_display_get();
+       if (viewer_play_data->xdisplay == NULL) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "ecore_x_display_get() is failed");
+               return FALSE;
+       }
+
        /*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)
@@ -725,9 +777,6 @@ MSG_BOOL msg_ui_viewer_create_player_view(MSG_PLAY_DATA_S *data)
                }
        }
 
-       /* 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;
 }
@@ -2455,3 +2504,404 @@ MSG_BOOL msg_ui_viewer_check_address_is_blocked(void *data, char *address, int *
        return FALSE;
 }
 
+static void __msg_ui_viewer_grab_volume_key(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 ret = 0;
+
+       ret = utilx_grab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEUP, TOP_POSITION_GRAB);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP utilx_grab_key() ret = %d", ret);
+
+       ret = utilx_grab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEDOWN, TOP_POSITION_GRAB);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN utilx_grab_key() ret = %d", ret);
+}
+
+static void __msg_ui_viewer_ungrab_volume_key(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 ret = 0;
+
+       ret = utilx_ungrab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEUP);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP utilx_ungrab_key() ret = %d", ret);
+
+       ret = utilx_ungrab_key(viewer_play_data->xdisplay, elm_win_xwindow_get(viewer_play_data->main_window), KEY_VOLUMEDOWN);
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN utilx_ungrab_key() ret = %d", ret);
+}
+
+static Eina_Bool __msg_ui_viewer_up_key_long_press_cb(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       int use_volume_key = false;
+
+       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
+
+       if (use_volume_key) {
+               msg_common_increase_font_size();
+
+               if (viewer_play_data->render_entry) {
+                       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
+                       msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
+               }
+       } else {
+               __msg_ui_viewer_volumebar_volume_up(viewer_play_data->volume_slider);
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __msg_ui_viewer_down_key_long_press_cb(void *data)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETV_IF(MSG_UI_LEVEL_DEBUG, data == NULL, EINA_FALSE);
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+       int use_volume_key = false;
+
+       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
+
+       if (use_volume_key) {
+               msg_common_decrease_font_size();
+
+               if (viewer_play_data->render_entry) {
+                       SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+                       MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
+                       msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
+               }
+       } else {
+               __msg_ui_viewer_volumebar_volume_down(viewer_play_data->volume_slider);
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __msg_ui_viewer_volume_key_release_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_Key *ev = event;
+       int use_volume_key = false;
+
+       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
+
+       if (!use_volume_key) {
+               if (viewer_play_data->volumebar_timer) {
+                       ecore_timer_del(viewer_play_data->volumebar_timer);
+                       viewer_play_data->volumebar_timer = NULL;
+               }
+               viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
+       }
+
+       if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) {    /* KEY_VOLUMEUP */
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is released");
+
+               if (viewer_play_data->vol_up_key_longpress) {
+                       ecore_timer_del(viewer_play_data->vol_up_key_longpress);
+                       viewer_play_data->vol_up_key_longpress = NULL;
+               }
+       } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) {   /* KEY_VOLUMEDOWN */
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is released");
+
+               if (viewer_play_data->vol_down_key_longpress) {
+                       ecore_timer_del(viewer_play_data->vol_down_key_longpress);
+                       viewer_play_data->vol_down_key_longpress = NULL;
+               }
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __msg_ui_viewer_volume_key_press_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_Key *ev = event;
+       int use_volume_key = false;
+
+       vconf_get_bool(VCONFKEY_MSG_APP_USE_VOLUME_KEY, &use_volume_key);
+
+       if (use_volume_key) {
+               if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) {    /* KEY_VOLUMEUP */
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEUP is pressed");
+
+                       msg_common_increase_font_size();
+
+                       if (viewer_play_data->render_entry) {
+                               SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+                               MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
+                               msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
+                       }
+
+                       viewer_play_data->vol_up_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_FONT_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_up_key_long_press_cb, (void *)viewer_play_data);
+               } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) {   /* KEY_VOLUMEDOWN */
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "KEY_VOLUMEDOWN is pressed");
+
+                       msg_common_decrease_font_size();
+
+                       if (viewer_play_data->render_entry) {
+                               SMIL_SLIDE_INFO_S *slide = msg_smil_get_current_slide_info(viewer_play_data->SmilHandle);
+                               MSG_VIEWER_ENTRY_TYPE_E entry_type = (slide && slide->pageInfo && slide->pageInfo->isHelpPage) ? MSG_VIEWER_ENTRY_HELP_TEXT : MSG_VIEWER_ENTRY_NORMAL_TEXT;
+                               msg_ui_viewer_set_font_size(viewer_play_data, entry_type, MSG_VIEWER_FONT_CHANGE_LOAD_SETTING);
+                       }
+
+                       viewer_play_data->vol_down_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_FONT_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_down_key_long_press_cb, (void *)viewer_play_data);
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
+               }
+       } else {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "Use volume key setting is not activated. Do volume key action");
+
+               if (!viewer_play_data->volumebar || !viewer_play_data->volume_slider)
+                       msg_ui_viewer_create_volume_bar(viewer_play_data);
+
+               if (!g_strcmp0(ev->keyname, KEY_VOLUMEUP)) {    /* KEY_VOLUMEUP */
+                       if (viewer_play_data->volumebar_timer) {
+                               ecore_timer_del(viewer_play_data->volumebar_timer);
+                               viewer_play_data->volumebar_timer = NULL;
+                       }
+                       __msg_ui_viewer_volumebar_volume_up(viewer_play_data->volume_slider);
+
+                       viewer_play_data->vol_up_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_VOLUME_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_up_key_long_press_cb, (void *)viewer_play_data);
+               } else if (!g_strcmp0(ev->keyname, KEY_VOLUMEDOWN)) {   /* KEY_VOLUMEDOWN */
+                       if (viewer_play_data->volumebar_timer) {
+                               ecore_timer_del(viewer_play_data->volumebar_timer);
+                               viewer_play_data->volumebar_timer = NULL;
+                       }
+                       __msg_ui_viewer_volumebar_volume_down(viewer_play_data->volume_slider);
+
+                       viewer_play_data->vol_down_key_longpress = ecore_timer_add(VIEWER_VOLUME_KEY_VOLUME_LONG_PRESS_TIME, (Ecore_Task_Cb) __msg_ui_viewer_down_key_long_press_cb, (void *)viewer_play_data);
+               } else {
+                       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "key_name is not applicable!");
+               }
+       }
+
+       return EINA_TRUE;
+}
+
+void msg_ui_viewer_create_volume_bar(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;
+
+       Evas_Object *layout = NULL;
+       Evas_Object *slider = NULL;
+       Evas_Object *icon_start = NULL;
+       Evas_Object *icon_end = NULL;
+
+       layout = elm_layout_add(viewer_play_data->play_layout);
+       elm_layout_file_set(layout, MSG_VIEWER_THEME, "volume_controller");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(layout);
+
+       slider = elm_slider_add(layout);
+       elm_slider_indicator_show_set(slider, EINA_TRUE);
+       evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
+       elm_slider_indicator_format_set(slider, "%1.0f");
+       evas_object_show(slider);
+
+       icon_start = elm_icon_add(layout);
+       elm_image_file_set(icon_start, MSG_IMAGES_EDJ, MSG_VIEWER_VOLUME_MIN);
+       evas_object_size_hint_aspect_set(icon_start, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+       icon_end = elm_icon_add(layout);
+       elm_image_file_set(icon_end, MSG_IMAGES_EDJ, MSG_VIEWER_VOLUME_MAX);
+       evas_object_size_hint_aspect_set(icon_end, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+
+       elm_object_content_set(slider,icon_start);
+       elm_object_part_content_set(slider, "end", icon_end);
+
+       elm_slider_min_max_set(slider, 0, __msg_ui_viewer_get_max_volume());
+       elm_slider_value_set(slider, __msg_ui_viewer_get_current_volume());
+
+       elm_object_part_content_set(layout, "slider", slider);
+
+       viewer_play_data->volumebar = layout;
+       viewer_play_data->volume_slider = slider;
+       elm_object_part_content_set(viewer_play_data->play_layout, "volume_layout", viewer_play_data->volumebar);
+
+       evas_object_data_set(slider, "viewer_play_data", viewer_play_data);
+
+       __msg_ui_viewer_volumebar_event_callback_add(slider, __msg_ui_viewer_volumebar_event_cb);
+
+       evas_object_smart_callback_add(slider, "slider,drag,start", __msg_ui_viewer_volumebar_drag_start_cb, viewer_play_data);
+       evas_object_smart_callback_add(slider, "slider,drag,stop", __msg_ui_viewer_volumebar_drag_stop_cb, viewer_play_data);
+       evas_object_smart_callback_add(slider, "changed", __msg_ui_viewer_volumebar_changed_cb, viewer_play_data);
+
+       //create timer
+       if (viewer_play_data->volumebar_timer) {
+               ecore_timer_del(viewer_play_data->volumebar_timer);
+               viewer_play_data->volumebar_timer = NULL;
+       }
+       viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
+
+}
+
+void msg_ui_viewer_destroy_volume_bar(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->volumebar_timer) {
+               ecore_timer_del(viewer_play_data->volumebar_timer);
+               viewer_play_data->volumebar_timer = NULL;
+       }
+
+       elm_object_part_content_unset(viewer_play_data->play_layout, "volume_layout");
+       evas_object_del(viewer_play_data->volumebar);
+       viewer_play_data->volumebar = NULL;
+}
+
+static Eina_Bool __msg_ui_viewer_volumebar_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;
+
+       elm_object_part_content_unset(viewer_play_data->play_layout, "volume_layout");
+       evas_object_del(viewer_play_data->volumebar);
+       viewer_play_data->volumebar = NULL;
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void __msg_ui_viewer_volumebar_drag_start_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_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->volumebar_event_cb)
+               viewer_play_data->volumebar_event_cb(viewer_play_data, obj, MSG_VIEWER_VOLUME_EVENT_DRAG_START);
+
+       viewer_play_data->drag_volume_slider = true;
+}
+
+static void __msg_ui_viewer_volumebar_drag_stop_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_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)data;
+
+       if (viewer_play_data->volumebar_event_cb)
+               viewer_play_data->volumebar_event_cb(viewer_play_data, obj, MSG_VIEWER_VOLUME_EVENT_DRAG_STOP);
+
+       viewer_play_data->drag_volume_slider = false;
+}
+
+static void __msg_ui_viewer_volumebar_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       double val = elm_slider_value_get(obj);
+
+       if ((int)val != __msg_ui_viewer_get_current_volume())
+               __msg_ui_viewer_set_volume((int)val);
+}
+
+static void __msg_ui_viewer_volumebar_event_cb(void *user_data, Evas_Object *obj, MSG_VIEWER_VOLUME_BAR_EVENT_E event)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RETM_IF(MSG_UI_LEVEL_ERR, user_data == NULL, "data is NULL");
+       MSG_PLAY_DATA_S *viewer_play_data = (MSG_PLAY_DATA_S *)user_data;
+
+       if (event == MSG_VIEWER_VOLUME_EVENT_DRAG_START) {
+               if (viewer_play_data->volumebar_timer) {
+                       ecore_timer_del(viewer_play_data->volumebar_timer);
+                       viewer_play_data->volumebar_timer = NULL;
+               }
+       } else if (event == MSG_VIEWER_VOLUME_EVENT_DRAG_STOP) {
+               viewer_play_data->volumebar_timer = ecore_timer_add(VIEWER_VOLUMEBAR_LIFETIME, __msg_ui_viewer_volumebar_timer_cb, viewer_play_data);
+       }
+}
+
+static void __msg_ui_viewer_volumebar_event_callback_add(Evas_Object *obj, MSG_VIEWER_VOLUMEBAR_CB event_cb)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       MSG_UI_RET_IF(MSG_UI_LEVEL_ERR, obj == NULL);
+       MSG_PLAY_DATA_S *viewer_play_data = evas_object_data_get(obj, "viewer_play_data");
+
+       viewer_play_data->volumebar_event_cb = event_cb;
+}
+
+static void __msg_ui_viewer_volumebar_volume_up(Evas_Object *obj)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       double max = 0.0;
+       elm_slider_min_max_get(obj, NULL, &max);
+
+       double current = elm_slider_value_get(obj);
+
+       if (current < max)
+               elm_slider_value_set(obj, (current + 1.0));
+
+       evas_object_smart_callback_call(obj, "changed", NULL);
+}
+
+static void __msg_ui_viewer_volumebar_volume_down(Evas_Object *obj)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       double min = 0.0;
+       elm_slider_min_max_get(obj, &min, NULL);
+
+       double current = elm_slider_value_get(obj);
+
+       if (current > min)
+               elm_slider_value_set(obj, (current - 1.0));
+
+       evas_object_smart_callback_call(obj, "changed", NULL);
+}
+
+static int __msg_ui_viewer_get_max_volume(void)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       int max_vol = 0;
+
+       int ret = sound_manager_get_max_volume(SOUND_TYPE_MEDIA, &max_vol);
+       if (ret != SOUND_MANAGER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_get_max_volume().. [0x%x]", ret);
+               return -1;
+       }
+
+       return max_vol;
+}
+
+static int __msg_ui_viewer_get_current_volume(void)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       int current = 0;
+
+       int ret = sound_manager_get_volume(SOUND_TYPE_MEDIA, &current);
+       if (ret != SOUND_MANAGER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_get_max_volume().. [0x%x]", ret);
+               return -1;
+       }
+
+       return current;
+}
+
+static bool __msg_ui_viewer_set_volume(int volume)
+{
+       MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG);
+       int ret = sound_manager_set_volume(SOUND_TYPE_MEDIA, volume);
+       if (ret != SOUND_MANAGER_ERROR_NONE) {
+               MSG_UI_DEBUG(MSG_UI_LEVEL_ERR,"sound_manager_set_volume().. [0x%x]", ret);
+               return false;
+       }
+
+       MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG,"set volume value = %d", volume);
+
+       return true;
+}
index 78b243e..c4e5145 100755 (executable)
@@ -36,6 +36,8 @@
 #define PLAY_CTRBAR_BUTTON_PLAY_START_X (PLAY_CTRBAR_BUTTON_PREV_START_X+PLAY_CTRBAR_NAVI_BUTTON_W+PLAY_CTRBAR_NAVI_BUTTON_PADDING_W)
 #define PLAY_CTRBAR_BUTTON_NEXT_START_X (PLAY_CTRBAR_BUTTON_PLAY_START_X+PLAY_CTRBAR_NAVI_BUTTON_W+PLAY_CTRBAR_NAVI_BUTTON_PADDING_W)
 
+#define PLAY_VOLUMEBAR_H       112
+
 //edc images
 #define PLAYER_BG "M01_player_bg.png"
 #define VOL_BTN "M01_controller_icon_volume.png"
 
 collections {
        group {
+               name: "volume_controller";
+               images {
+                       image: VOLUME_BAR_BG COMP;
+               }
+               parts {
+                       part {
+                               name: "rect";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 PLAY_VOLUMEBAR_H;
+                               }
+                       }
+                       part {
+                               name: "rect/bg";
+                               type: IMAGE;
+                               mouse_events: 0;
+                               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: TITLE_LIST_BG;
+                                               border: 11 11 11 11;
+                                               border_scale: 1;
+                                       }
+                               }
+                       }
+                       part {
+                               name: "slider";
+                               scale: 1;
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               to: "rect";
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               to: "rect";
+                                               relative: 1.0 1.0;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       group {
                name: "play_controller";
                images {
                        image: PLAYER_BG COMP;
@@ -1192,7 +1245,18 @@ collections {
                                        max: 0 0;
                                }
                        }
-
+                       part {
+                               name: "volume_layout";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 PLAY_VOLUMEBAR_H;
+                                       align: 0.5 1.0;
+                                       rel1 { to: "viewer.swallow.play.controller"; relative: 0 0;}
+                                       rel2 { to: "viewer.swallow.play.controller"; relative: 1 0;}
+                               }
+                       }
                programs
                        {
                                program {