2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "mp-play-view.h"
20 #include "mp-player-control.h"
23 #include "mp-player-drm.h"
24 #include "mp-smart-event-box.h"
25 #include "mp-file-tag-info.h"
26 #include "mp-player-mgr.h"
27 #include "mp-player-debug.h"
28 #include "mp-play-list.h"
32 #include "mp-widget.h"
34 #include "mp-ug-launch.h"
35 #include "mp-streaming-mgr.h"
37 #include "mp-minicontroller.h"
38 #include "mp-setting-ctrl.h"
40 #ifdef MP_SOUND_PLAYER
41 #include "sp-view-manager.h"
43 #include "mp-common.h"
44 #include "mp-library.h"
48 #define ABS(x) ((x) < 0 ? -(x) : (x))
54 #define HD_SCREEN_WIDTH 720.0
55 #define HD_INFO_RIGHT_WIDTH 550.0
56 #define HD_ALBUM_IMAGE_H_SCALE 720/1280
58 #define PROGRESS_BAR_POSITION 20 /*80 */
59 #define LS_PROGRESS_BAR_POSITION 340 /*400 */
61 #define CTR_EDJ_SIG_SRC "ctrl_edj"
62 #define CTR_PROG_SIG_SRC "ctrl_prog"
63 #define PLAYVIEW_TRANSIT_TIME (0.35)
64 #define FAVOUR_LONG_PRESS_TIME (1.5)
66 #define ALBUMART_IMAGE_COLOR 160
67 #define ALBUMART_IMAGE_SHADOW_RGBA 60, 60, 60, 123
68 #define ALBUMART_IMAGE_SHADOW_RGBA1 100, 100, 100, 123
69 #define ALBUMART_IMAGE_SHADOW_RGBA2 0, 0, 0, 123
70 #define EVAS_OBJ_SHOW(obj) if(obj){evas_object_show(obj);}
71 #define EVAS_OBJ_HIDE(obj) if(obj){evas_object_hide(obj);}
72 #define EVAS_OBJ_MOVE(obj, x, y) if(obj){evas_object_move(obj, x, y);}
73 static void _mp_play_view_set_album_art(void *data, char *file_path);
74 static void _mp_play_view_album_art_update(void *data);
75 Evas_Object *_mp_play_view_create_bg_map(void *data, Evas_Object * parents, music_list_item * current_item);
77 static void _mp_play_progress_val_set(void *data, double position);
78 static bool _mp_play_view_init_progress_bar(void *data);
79 static bool _mp_play_view_transit_by_item(void *data, struct music_list_item *it, bool move_left);
80 static void _mp_play_view_destory_cb(void *data, Evas * e, Evas_Object * obj, void *event_info);
81 static Evas_Object *_mp_play_view_create_ctrl_layout(void *data, Evas_Object * parents, Evas_Object ** progress,
83 #ifndef MP_SOUND_PLAYER
84 static void _mp_play_view_start_request(void *data, Evas_Object * obj, void *event_info);
86 static void _mp_play_view_glist_free_cb(gpointer data);
90 _mp_play_view_init(void *data)
94 struct appdata *ad = (struct appdata *)data;
97 mp_playing_view *playing_view = ad->playing_view;
98 MP_CHECK(playing_view);
100 ad->show_optional_menu = FALSE;
102 playing_view->layout = NULL;
103 playing_view->play_view = NULL;
104 playing_view->play_control = NULL;
105 playing_view->play_menu = NULL; //information, srs, shuffle, repeat
106 playing_view->play_progressbar = NULL;
107 playing_view->play_info = NULL;
108 playing_view->albumart_img = NULL;
110 playing_view->albumart_bg = NULL;
111 playing_view->albumart_image_reflection = NULL;
112 playing_view->pre_albumart_image_reflection = NULL;
113 playing_view->flick_direction = 0;
114 ad->volume_long_pressed = false;
116 playing_view->play_view_next = NULL;
119 playing_view->favour_longpress = 0;
120 playing_view->favourite_timer = NULL;
121 playing_view->progressbar_timer = NULL;
123 playing_view->play_view_screen_mode = MP_SCREEN_MODE_PORTRAIT;
125 playing_view->transition_state = false;
126 playing_view->b_play_all = false;
134 mp_play_view_back_clicked_cb(void *data, Evas_Object * obj, void *event_info)
136 struct appdata *ad = (struct appdata *)data;
138 mp_retm_if(ad->navi_effect_in_progress, "navi effect in progress");
140 DEBUG_TRACE("ad->loadtype: %d", ad->loadtype);
143 ad->mute_flag = false;
144 if (ad->playing_view)
145 mp_evas_object_del(ad->playing_view->play_icon);
148 #ifdef MP_SOUND_PLAYER
149 mp_play_view_unswallow_info_ug_layout(ad);
150 sp_view_mgr_pop_view_content(ad->view_mgr, FALSE);
152 view_data_t *view_data = evas_object_data_get(ad->naviframe, "view_data");
154 mp_view_manager_pop_view_content(view_data, FALSE, FALSE);
156 if (ad->music_setting_change_flag)
158 mp_util_set_library_controlbar_items(ad);
159 ad->music_setting_change_flag = false;
163 if (ad->buffering_popup)
164 mp_streaming_mgr_buffering_popup_control(ad, false);
165 evas_object_smart_callback_del(obj, "clicked", mp_play_view_back_clicked_cb);
171 _mp_play_view_clear_animator(struct appdata *ad)
176 ecore_animator_del(ad->minfo_ani);
177 ad->minfo_ani = NULL;
182 g_list_free_full(ad->minfo_list, _mp_play_view_glist_free_cb);
183 ad->minfo_list = NULL;
188 mp_play_view_info_back_cb(void *data, Evas_Object * obj, void *event_info)
191 struct appdata *ad = (struct appdata *)data;
193 mp_retm_if(ad->navi_effect_in_progress, "navi effect in progress");
194 ad->info_click_flag = FALSE;
195 mp_playing_view *playing_view = ad->playing_view;
196 //show albumart_image_reflection
197 if (playing_view && playing_view->albumart_image_reflection)
199 evas_object_show(playing_view->albumart_image_reflection);
200 evas_object_show(playing_view->albumart_image);
204 int first_view = (int)evas_object_data_get(ad->info_ug_layout, "first_view");
207 ad->info_back_play_view_flag = TRUE;
208 #ifdef MP_SOUND_PLAYER
209 mp_play_view_unswallow_info_ug_layout(ad);
210 sp_view_mgr_pop_view_content(ad->view_mgr, FALSE);
212 view_data_t *view_data = evas_object_data_get(ad->naviframe, "view_data");
213 mp_view_manager_pop_view_content(view_data, FALSE, FALSE);
216 playing_view->play_info = NULL;
220 ad->info_back_play_view_flag = FALSE;
221 mp_ug_send_message(ad, MP_UG_MESSAGE_BACK);
226 _mp_play_view_clear_animator(ad);
227 ad->info_back_play_view_flag = TRUE;
228 #ifdef MP_SOUND_PLAYER
229 mp_play_view_unswallow_info_ug_layout(ad);
230 sp_view_mgr_pop_view_content(ad->view_mgr, FALSE);
232 view_data_t *view_data = evas_object_data_get(ad->naviframe, "view_data");
233 mp_view_manager_pop_view_content(view_data, FALSE, FALSE);
236 playing_view->play_info = NULL;
242 /* callback function when click "album" image*/
244 _mp_play_view_sb_click_info_albumart(void *data, Evas * e, Evas_Object * obj, void *event_info)
247 struct appdata *ad = (struct appdata *)data;
249 mp_play_view_info_back_cb(ad, NULL, NULL);
260 _mp_play_view_info_gl_label_get(void *data, Evas_Object * obj, const char *part)
262 mp_media_info_t *info = (mp_media_info_t *)data;
265 if (!g_strcmp0(part, "elm.text.1"))
268 DEBUG_TRACE("%s", info->header);
269 if(info->header && strstr(info->header, "IDS_COM"))
270 text = GET_SYS_STR(info->header);
272 text = GET_STR(info->header);
273 return g_strdup(text);
275 else if (!g_strcmp0(part, "elm.text.2"))
278 if(info->detail && strstr(info->detail, "IDS_COM"))
279 text = GET_SYS_STR(info->detail);
281 text = GET_STR(info->detail);
282 return g_strdup(text);
289 _mp_play_view_info_gl_item_del(void *data, Evas_Object * obj)
291 mp_media_info_t *info = data;
293 IF_FREE(info->header);
294 IF_FREE(info->detail);
298 static Elm_Genlist_Item_Class info_view_info_item_class = {
299 .version = ELM_GENGRID_ITEM_CLASS_VERSION,
301 .delete_me = EINA_FALSE,
302 .item_style = "multiline/music_player/info",
303 .func.text_get = _mp_play_view_info_gl_label_get,
304 .func.del = _mp_play_view_info_gl_item_del,
305 .func.content_get = NULL,
309 _ecore_animator_cb(void *data)
311 struct appdata *ad = NULL;
312 Elm_Object_Item *item;
319 ad->minfo_list = g_list_first(ad->minfo_list);
321 item = elm_genlist_item_append(ad->minfo_genlist, &info_view_info_item_class,
322 ad->minfo_list->data,
324 ELM_GENLIST_ITEM_NONE,
327 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
329 mp_language_mgr_register_genlist_item(item);
331 ad->minfo_list = g_list_delete_link(ad->minfo_list, ad->minfo_list);
335 ad->minfo_ani = NULL;
341 _mp_play_view_create_info_item(Evas_Object * genlist, char *header, char *detail)
345 struct appdata *ad = evas_object_data_get(genlist, "ad");
348 mp_media_info_t *info = calloc(1, sizeof(mp_media_info_t));
350 info->header = g_strdup(header);
351 info->detail= g_strdup(detail);
355 DEBUG_TRACE("create animator");
356 ad->minfo_ani = ecore_animator_add(_ecore_animator_cb, ad);
357 ad->minfo_genlist = genlist;
360 ad->minfo_list = g_list_append(ad->minfo_list, info);
365 _mp_play_view_glist_free_cb(gpointer data)
368 _mp_play_view_info_gl_item_del(data, NULL);
372 _mp_play_view_append_drm_info(Evas_Object *genlist, const char *path)
378 GList *rs_list = mp_drm_get_right_status(path);
380 mp_debug("show right_status");
381 GList *current = rs_list;
383 mp_drm_right_status_t *rs = current->data;
385 _mp_play_view_create_info_item(genlist,
389 current = current->next;
392 mp_drm_free_right_status(rs_list);
398 _mp_play_view_create_info_detail(Evas_Object * parent, void *data)
400 struct appdata *ad = (struct appdata *)data;
402 music_list_item *cur_item = mp_play_list_get_current_item(ad->playing_list);
403 MP_CHECK_NULL(cur_item);
406 Evas_Object *genlist;
408 mp_media_info_h svc_audio_item;
409 char *pathname = NULL, *title = NULL, *album = NULL, *artist = NULL, *thumbname = NULL, *genre = NULL;
410 char *author = NULL, *copyright = NULL, *format = NULL, *track_num = NULL;
414 ret = mp_media_info_create(&svc_audio_item, cur_item->key_id);
416 mp_media_info_get_file_path(svc_audio_item, &pathname);
417 mp_media_info_get_title(svc_audio_item, &title);
418 mp_media_info_get_album(svc_audio_item, &album);
419 mp_media_info_get_artist(svc_audio_item, &artist);
420 mp_media_info_get_thumbnail_path(svc_audio_item, &thumbname);
421 mp_media_info_get_genre(svc_audio_item, &genre);
422 mp_media_info_get_copyright(svc_audio_item, ©right);
423 mp_media_info_get_composer(svc_audio_item, &author);
424 mp_media_info_get_duration(svc_audio_item, &duration);
425 mp_media_info_get_track_num(svc_audio_item, &track_num);
426 mp_media_info_get_format(svc_audio_item, &format);
429 _mp_play_view_clear_animator(ad);
431 genlist = elm_genlist_add(parent);
432 MP_CHECK_NULL(genlist);
433 evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
434 evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
435 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
436 evas_object_data_set(genlist, "ad", ad);
441 if (artist && strlen(artist))
442 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_ARTIST"), artist);
444 _mp_play_view_create_info_item(genlist, ("IDS_COM_BODY_DETAILS_TITLE"), title);
446 if (album && strlen(album))
447 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_ALBUM"), album);
449 char duration_format[10] = { 0, };
450 int dur_sec = duration / 1000;
451 int sec = dur_sec % 60;
452 int min = dur_sec / 60;
453 snprintf(duration_format, sizeof(duration_format), "%02u:%02u", min, sec);
455 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_TRACK_LENGTH"),
459 if (genre && strlen(genre))
460 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_GENRE"), genre);
462 if (author && strlen(author))
463 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_AUTHOR"), author);
465 if (copyright && strlen(copyright))
466 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_COPYRIGHT"), copyright);
469 if (mp_drm_get_description(ad, cur_item->filename))
470 _mp_play_view_create_info_item(genlist,
471 ("IDS_MUSIC_BODY_DESCRIPTION"),
472 ad->drm_info.description);
474 _mp_play_view_create_info_item(genlist,
475 ("IDS_MUSIC_BODY_DESCRIPTION"),
479 if (ad->drm_info.forward)
480 _mp_play_view_create_info_item(genlist,
481 ("IDS_MUSIC_BODY_FORWARDING"),
482 ("IDS_MUSIC_BODY_POSSIBLE"));
484 _mp_play_view_create_info_item(genlist,
485 ("IDS_MUSIC_BODY_FORWARDING"),
486 ("IDS_MUSIC_BODY_IMPOSSIBLE"));
489 _mp_play_view_append_drm_info(genlist, cur_item->filename);
492 if (track_num && strlen(track_num))
494 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_TRACK_NUMBER"), track_num);
497 if (format && strlen(format))
500 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_FORMAT"), format);
504 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_MUSIC_LOCATION"),
509 mp_tag_info_t tag_info;
510 mp_file_tag_info_get_all_tag(cur_item->filename, &tag_info);
512 if (tag_info.artist && strlen(tag_info.artist))
515 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_ARTIST"),
520 if (tag_info.title && strlen(tag_info.title))
523 _mp_play_view_create_info_item(genlist, ("IDS_COM_BODY_DETAILS_TITLE"),
528 if (tag_info.album && strlen(tag_info.album))
531 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_ALBUM"),
536 char duration_format[10] = { 0, };
537 int dur_sec = tag_info.duration / 1000;
538 int sec = dur_sec % 60;
539 int min = dur_sec / 60;
540 snprintf(duration_format, sizeof(duration_format), "%02u:%02u", min, sec);
543 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_TRACK_LENGTH"),
547 if (tag_info.genre && strlen(tag_info.genre))
550 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_GENRE"),
555 if (tag_info.author && strlen(tag_info.author))
558 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_AUTHOR"),
563 if (tag_info.copyright && strlen(tag_info.copyright))
566 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_COPYRIGHT"), tag_info.copyright);
571 if (mp_drm_get_description(ad, cur_item->filename))
573 _mp_play_view_create_info_item(genlist,
574 ("IDS_MUSIC_BODY_DESCRIPTION"),
575 ad->drm_info.description);
578 _mp_play_view_create_info_item(genlist,
579 ("IDS_MUSIC_BODY_DESCRIPTION"),
583 if (ad->drm_info.forward)
585 _mp_play_view_create_info_item(genlist,
586 ("IDS_MUSIC_BODY_FORWARDING"),
587 ("IDS_MUSIC_BODY_POSSIBLE"));
590 _mp_play_view_create_info_item(genlist,
591 ("IDS_MUSIC_BODY_FORWARDING"),
592 ("IDS_MUSIC_BODY_IMPOSSIBLE"));
595 _mp_play_view_append_drm_info(genlist, cur_item->filename);
598 if (tag_info.track && strlen(tag_info.track))
600 if (!strstr(tag_info.track, "-") && g_strcmp0(tag_info.track, "0"))
603 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_TRACK_NUMBER"),
609 if (tag_info.rating && strlen(tag_info.rating))
612 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_PARENT_RATING"),
617 GString *format = g_string_new("");
618 if (tag_info.audio_bitrate > 0)
619 g_string_append_printf(format, "%dkbps ", tag_info.audio_bitrate / 1000);
621 if (tag_info.audio_samplerate > 0)
622 g_string_append_printf(format, "%.1fkHz ", (double)tag_info.audio_samplerate / 1000);
624 if (tag_info.audio_channel > 0)
625 g_string_append_printf(format, "%dch", tag_info.audio_channel);
630 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_FORMAT"),
633 g_string_free(format, TRUE);
637 _mp_play_view_create_info_item(genlist, ("IDS_MUSIC_BODY_MUSIC_LOCATION"),
641 mp_file_tag_free(&tag_info);
644 evas_object_show(genlist);
646 mp_media_info_destroy(svc_audio_item);
647 elm_object_part_content_set(parent, "mi_content", genlist);
652 mp_play_view_create_info_contents(Evas_Object * parent, void *data)
654 struct appdata *ad = (struct appdata *)data;
656 mp_playing_view *playing_view = ad->playing_view;
657 MP_CHECK(playing_view);
658 music_list_item *cur_item = mp_play_list_get_current_item(ad->playing_list);
661 /***********create left area start********************/
662 Evas_Object *info_view_left_area = mp_common_load_edj(parent, PLAY_VIEW_EDJ_NAME, "info_view_left_area");
663 MP_CHECK(info_view_left_area);
664 elm_object_part_content_set(parent, "left_area", info_view_left_area);
665 evas_object_show(info_view_left_area);
667 Evas_Object *video_play_img = elm_image_add(info_view_left_area);
668 elm_image_file_set(video_play_img, ICON_DIRECTORY "/music_player/T02_Video_play.png", NULL);
669 elm_object_part_content_set(info_view_left_area, "video_play_img", video_play_img);
670 evas_object_show(video_play_img);
672 //add current albumart image
673 Evas_Object *album_image = elm_image_add(info_view_left_area);
674 if (strlen(cur_item->albumart) && mp_util_is_image_valid(ad->evas, cur_item->albumart))
676 elm_image_file_set(album_image, cur_item->albumart, NULL);
680 elm_image_file_set(album_image, DEFAULT_THUMBNAIL, NULL);
682 elm_object_part_content_set(info_view_left_area, "left_album_bg", album_image);
683 evas_object_show(album_image);
684 evas_object_event_callback_add(video_play_img, EVAS_CALLBACK_MOUSE_DOWN, NULL, NULL);
685 evas_object_event_callback_add(video_play_img, EVAS_CALLBACK_MOUSE_MOVE, NULL, NULL);
686 evas_object_event_callback_add(video_play_img, EVAS_CALLBACK_MOUSE_UP,
687 _mp_play_view_sb_click_info_albumart, ad);
688 /***********create left area end********************/
690 /***********create right area start********************/
691 Evas_Object *right_base_box = mp_common_load_edj(parent, PLAY_VIEW_EDJ_NAME, "base_box_no_xml");
692 MP_CHECK(right_base_box);
693 elm_object_part_content_set(parent, "base_box", right_base_box);
694 evas_object_show(right_base_box);
696 Evas_Object *right_base_box_detail =
697 mp_common_load_edj(right_base_box, PLAY_VIEW_EDJ_NAME, "mi_base_box_detail");
698 MP_CHECK(right_base_box_detail);
699 elm_object_part_content_set(right_base_box, "no_sim_media_content", right_base_box_detail);
700 evas_object_show(right_base_box_detail);
701 edje_object_part_text_set(_EDJ(right_base_box_detail), "title", GET_STR("IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"));
702 mp_language_mgr_register_object(right_base_box_detail, OBJ_TYPE_EDJE_OBJECT, "title", "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO");
703 Evas_Object *item = _mp_play_view_create_info_detail(right_base_box_detail, ad);
705 elm_object_part_content_set(right_base_box_detail, "mi_scroller", item);
706 /***********create right area end********************/
708 //add scroller to right area
709 elm_object_part_content_set(parent, "no_xml_no_sim_detail_scroller", right_base_box_detail);
713 _mp_play_view_popup_bt_cb(void *data, Evas_Object * obj, void *event_info)
716 struct appdata *ad = (struct appdata *)data;
718 int ret = sound_manager_set_active_route(SOUND_ROUTE_OUT_BLUETOOTH);
719 if (ret != SOUND_MANAGER_ERROR_NONE)
720 WARN_TRACE("Error: sound_manager_set_route_policy(0x%x)", ret);
722 elm_radio_value_set(ad->radio_group, MP_SND_PATH_BT);
724 mp_popup_destroy(ad);
728 _mp_play_view_popup_headphone_cb(void *data, Evas_Object * obj, void *event_info)
731 struct appdata *ad = (struct appdata *)data;
733 int ret = sound_manager_set_active_route(SOUND_ROUTE_OUT_WIRED_ACCESSORY);
734 if (ret != SOUND_MANAGER_ERROR_NONE)
735 WARN_TRACE("Error: sound_manager_set_route_policy(0x%x)", ret);
737 elm_radio_value_set(ad->radio_group, MP_SND_PATH_EARPHONE);
739 mp_popup_destroy(ad);
742 //2 merge play view at 20110118
744 _mp_play_view_popup_speaker_cb(void *data, Evas_Object * obj, void *event_info)
747 struct appdata *ad = (struct appdata *)data;
750 ret = sound_manager_set_active_route(SOUND_ROUTE_OUT_SPEAKER);
751 if (ret != SOUND_MANAGER_ERROR_NONE)
752 WARN_TRACE("Error: sound_manager_set_route_policy(0x%x)", ret);
754 elm_radio_value_set(ad->radio_group, MP_SND_PATH_SPEAKER);
756 mp_popup_destroy(ad);
760 _mp_play_view_append_snd_path_device(struct appdata *ad, char *bt_name, int bt_connected, int earjack, Evas_Object *popup)
766 mp_genlist_popup_item_append(popup, bt_name, ad->radio_group, _mp_play_view_popup_bt_cb, ad);
769 mp_genlist_popup_item_append(popup, GET_SYS_STR("IDS_COM_OPT_HEADPHONES_ABB"), ad->radio_group, _mp_play_view_popup_headphone_cb, ad);
771 mp_genlist_popup_item_append(popup, GET_SYS_STR("IDS_COM_OPT_SPEAKER_ABB"), ad->radio_group, _mp_play_view_popup_speaker_cb, ad);
773 mp_util_get_sound_path(&(ad->snd_path));
777 mp_play_view_update_snd_path(struct appdata *ad)
782 bool popup_exist = false;
783 bool bt_connected = false;
785 static char *bt_name;
787 Evas_Object *popup = NULL;
789 popup = ad->popup[MP_POPUP_GENLIST];
792 popup_exist = evas_object_data_get(popup, "sound_path");
795 //update or destroy popup..
799 ret = sound_manager_get_a2dp_status(&bt_connected, &bt_name);
800 if (ret != SOUND_MANAGER_ERROR_NONE)
802 WARN_TRACE("Fail to sound_manager_get_a2dp_status ret = [%d]", ret);
804 if (vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack))
805 WARN_TRACE("Earjack state get Fail...");
807 if (!bt_connected && !earjack)
809 evas_object_del(popup);
813 // TODO: updating list is not working now.. there is timing issue... complete it after MMFW support..
814 evas_object_del(popup);
819 mp_play_view_set_snd_path_sensitivity(ad);
824 mp_play_view_set_snd_path_cb(void *data, Evas_Object *obj, void *event_info)
828 struct appdata *ad = (struct appdata *)data;
830 Evas_Object *group = NULL;
831 Evas_Object *popup = NULL;
834 bool bt_connected = false;
837 // use bt_name as static. bt_name can be used again in gl_label_get function when genlist of popup scrolled.
838 static char *bt_name = NULL;
840 popup = mp_genlist_popup_create(ad->win_main, MP_POPUP_SOUND_PATH, ad, ad);
841 mp_retm_if(!popup, "Error: popup is null...");
843 group = elm_radio_add(popup);
844 ad->radio_group = group;
846 Evas_Object *genlist = evas_object_data_get(popup, "genlist");
848 evas_object_data_set(genlist, "ad", ad);
851 ret = sound_manager_get_a2dp_status(&bt_connected, &bt_name);
852 if (ret != SOUND_MANAGER_ERROR_NONE)
854 WARN_TRACE("Fail to sound_manager_get_a2dp_status ret = [%d]", ret);
857 if (vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack))
858 WARN_TRACE("Earjack state get Fail...");
860 _mp_play_view_append_snd_path_device(ad, bt_name, bt_connected, earjack, popup);
865 _mp_play_view_destory_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
868 mp_playing_view *playing_view = (mp_playing_view *)(data);
869 MP_CHECK(playing_view);
871 struct appdata *ad = playing_view->ad;
874 mp_evas_object_del(playing_view->albumart_image_reflection);
875 mp_evas_object_del(playing_view->pre_albumart_image_reflection);
876 playing_view->flick_direction = 0;
877 playing_view->hide_image_flag = false;
879 if (playing_view->play_view)
880 edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_HIDE, "*");
881 mp_ecore_timer_del(ad->volume_down_timer);
882 mp_ecore_timer_del(ad->mute_popup_show_timer);
884 ad->volume_long_pressed = false;
886 mp_ecore_timer_del(playing_view->favourite_timer);
887 mp_ecore_timer_del(playing_view->progressbar_timer);
888 mp_ecore_timer_del(playing_view->show_ctrl_timer);
890 if(ad->backup_playing_view == playing_view)
892 IF_FREE(ad->backup_playing_view);
893 ad->backup_layout_play_view = NULL;
895 else if(ad->playing_view == playing_view)
897 IF_FREE(ad->playing_view);
900 ERROR_TRACE("++++++++ check here ++++++++++");
902 mp_ecore_idler_del(ad->playview_show_idler);
910 mp_play_view_show_default_info(struct appdata *ad)
913 mp_playing_view *playing_view = ad->playing_view;
914 MP_CHECK(playing_view);
916 mp_evas_object_del(playing_view->play_info);
917 Evas_Object *parent = NULL;
918 #ifdef MP_SOUND_PLAYER
919 parent = sp_view_mgr_get_naviframe(ad->view_mgr);
921 parent = ad->naviframe;
923 playing_view->play_info =
924 mp_common_load_edj(parent, PLAY_VIEW_EDJ_NAME, "richinfo/test_rich_info");
926 mp_play_view_create_info_contents(playing_view->play_info, ad);
928 #ifdef MP_SOUND_PLAYER
929 sp_view_mgr_push_view_content(ad->view_mgr, playing_view->play_info, SP_VIEW_TYPE_INFO);
930 sp_view_mgr_set_title_label(ad->view_mgr, GET_STR("IDS_MUSIC_BODY_DETAILSMEADIAINFO"));
931 sp_view_mgr_set_back_button(ad->view_mgr, mp_play_view_info_back_cb, ad);
933 view_data_t *view_data = evas_object_data_get(ad->naviframe, "view_data");
934 mp_view_manager_push_view_content(view_data, playing_view->play_info, MP_VIEW_CONTENT_INFO);
935 mp_view_manager_set_title_and_buttons(view_data, "IDS_MUSIC_BODY_DETAILSMEADIAINFO",
941 mp_play_view_info_cb(void *data, Evas_Object * obj, void *event_info)
943 struct appdata *ad = (struct appdata *)data;
945 if (ad->info_click_flag && !ad->info_ug)
948 ad->info_click_flag = TRUE;
950 ad->info_click_flag = FALSE;
951 ad->info_back_play_view_flag = FALSE;
952 mp_retm_if(ad->navi_effect_in_progress, "navi effect in progress");
954 mp_playing_view *playing_view = ad->playing_view;
955 MP_CHECK(playing_view);
957 EVAS_OBJ_HIDE(playing_view->albumart_img);
958 EVAS_OBJ_HIDE(playing_view->albumart_image_reflection);
960 if (playing_view->play_view)
961 edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_HIDE, "*");
964 edje_object_signal_emit(_EDJ(playing_view->play_icon), "unmute", "volume");
966 edje_object_signal_emit(_EDJ(playing_view->play_icon), "mute", "volume");
967 mp_ecore_timer_del(ad->volume_down_timer);
968 mp_ecore_timer_del(ad->mute_popup_show_timer);
970 mp_play_view_show_default_info(ad);
975 _mp_play_view_load_track_info(void *data, music_list_item * item)
977 struct appdata *ad = (struct appdata *)data;
980 mp_playing_view *playing_view = ad->playing_view;
981 MP_CHECK_FALSE(playing_view);
986 mp_player_mgr_set_mute(true);
987 edje_object_signal_emit(_EDJ(playing_view->play_icon), "mute", "volume");
992 mp_player_mgr_set_mute(false);
993 edje_object_signal_emit(_EDJ(playing_view->play_icon), "unmute", "volume");
996 MP_CHECK_FALSE(item);
998 music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
999 MP_CHECK_FALSE(current_item);
1001 DEBUG_TRACE("category: %d", current_item->category);
1002 if (current_item->category == MP_MEDIA_TYPE_MUSIC)
1004 if (current_item->key_id > 0
1005 && current_item->favorite)
1007 edje_object_signal_emit(_EDJ(playing_view->play_menu), "favorite_on", "play_view");
1011 edje_object_signal_emit(_EDJ(playing_view->play_menu), "favorite_off", "play_view");
1016 edje_object_signal_emit(_EDJ(playing_view->play_menu), "favorite_invisible", "play_view");
1019 if (item == current_item) {
1020 #ifdef MP_SOUND_PLAYER
1021 sp_view_mgr_play_view_title_label_set(ad->view_mgr, item->title);
1023 mp_view_manager_play_view_title_label_set(ad, item->title);
1026 if(playing_view->play_head)
1027 elm_object_item_text_set(playing_view->play_head, current_item->title);
1029 edje_object_part_text_set(_EDJ(playing_view->play_title), "artist", current_item->artist);
1030 edje_object_part_text_set(_EDJ(playing_view->play_title), "album", current_item->album);
1035 static Evas_Object *
1036 _mp_play_view_create_next_item(music_list_item * next_item, void *data)
1038 Evas_Object *next_view = NULL;
1039 Evas_Object *album_img = NULL;
1041 struct appdata *ad = (struct appdata *)data;
1044 mp_playing_view *playing_view = ad->playing_view;
1045 MP_CHECK_NULL(playing_view);
1047 MP_CHECK_NULL(next_item);
1049 mp_debug("next item : %s", next_item->title);
1051 next_view = elm_layout_add(playing_view->layout);
1053 if (playing_view->play_view_screen_mode == MP_SCREEN_MODE_LANDSCAPE)
1056 (" invalid state MP_SCREEN_MODE_LANDSCAPE MP_SCREEN_MODE_LANDSCAPE MP_SCREEN_MODE_LANDSCAPE MP_SCREEN_MODE_LANDSCAPE");
1057 elm_layout_file_set(next_view, PLAY_VIEW_EDJ_NAME, "mp_play_view_landscape");
1058 evas_object_size_hint_max_set(next_view, 480 * elm_scale_get(), 480 * elm_scale_get());
1059 evas_object_size_hint_align_set(next_view, EVAS_HINT_FILL, EVAS_HINT_EXPAND);
1060 evas_object_size_hint_weight_set(next_view, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
1061 elm_win_resize_object_add(ad->win_main, next_view);
1066 next_view = mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "mp_play_view");
1067 evas_object_size_hint_max_set(next_view, 480 * elm_scale_get(), 800 * elm_scale_get());
1070 evas_object_show(next_view);
1072 if (playing_view->play_view_screen_mode == MP_SCREEN_MODE_LANDSCAPE)
1074 album_img = elm_bg_add(next_view);
1075 if (strlen(next_item->albumart) && mp_util_is_image_valid(ad->evas, next_item->albumart))
1077 elm_bg_file_set(album_img, next_item->albumart, NULL);
1081 elm_bg_file_set(album_img, DEFAULT_THUMBNAIL, NULL);
1086 album_img = evas_object_image_add(ad->evas);
1088 ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
1089 evas_object_image_load_size_set(album_img, w, h*HD_ALBUM_IMAGE_H_SCALE);
1090 evas_object_image_fill_set(album_img, 0, 0, w, h*HD_ALBUM_IMAGE_H_SCALE);
1091 if (strlen(next_item->albumart) && mp_util_is_image_valid(ad->evas, next_item->albumart))
1093 evas_object_image_file_set(album_img, next_item->albumart, NULL);
1097 evas_object_image_file_set(album_img, DEFAULT_THUMBNAIL, NULL);
1101 elm_object_part_content_set(next_view, "album_art", album_img);
1102 evas_object_show(album_img);
1104 Evas_Object *progress = NULL;
1105 Evas_Object *play_ctrl = NULL;
1107 play_ctrl = _mp_play_view_create_ctrl_layout(data, next_view, &progress, FALSE);
1108 playing_view->play_progressbar = progress;
1109 evas_object_show(progress);
1111 _mp_play_view_load_track_info(data, next_item);
1117 _mp_play_view_eventbox_clicked_cb(void *data, Evas_Object * obj, void *event_info)
1119 struct appdata *ad = (struct appdata *)data;
1122 mp_playing_view *playing_view = ad->playing_view;
1123 MP_CHECK(playing_view);
1125 DEBUG_TRACE("[%d]", ad->show_optional_menu);
1127 mp_play_view_set_menu_state(ad, !ad->show_optional_menu, true);
1133 _mp_play_view_clear_next_view(void *data)
1136 struct appdata *ad = (struct appdata *)data;
1139 mp_playing_view *playing_view = ad->playing_view;
1140 MP_CHECK_FALSE(playing_view);
1142 Evas_Object *content = elm_object_part_content_unset(playing_view->layout, "list_content_temp");
1143 evas_object_del(content);
1144 playing_view->play_view_next = NULL;
1146 edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "set_default", "list_content");
1148 IF_FREE(playing_view->playing_list_item);
1150 playing_view->transition_state = false;
1156 _mp_play_view_eventbox_flick_left_cb(void *data, Evas_Object * obj, void *event_info)
1159 struct appdata *ad = (struct appdata *)data;
1162 mp_playing_view *playing_view = ad->playing_view;
1163 MP_CHECK(playing_view);
1165 if (ad->playing_list && ad->playing_list->count <= 1)
1168 music_list_item *next_item = NULL;
1170 if (mp_play_list_get_next_item(data, ad->playing_list, &next_item, TRUE)== MP_PLST_RET_OK)
1172 playing_view->flick_direction = 1;
1173 IF_FREE(ad->latest_playing_key_id);
1174 _mp_play_view_transit_by_item(data, next_item, true);
1183 _mp_play_view_eventbox_flick_right_cb(void *data, Evas_Object * obj, void *event_info)
1186 struct appdata *ad = (struct appdata *)data;
1189 mp_playing_view *playing_view = ad->playing_view;
1190 MP_CHECK(playing_view);
1192 if (ad->playing_list && ad->playing_list->count <= 1)
1195 music_list_item *next_item = NULL;
1197 if (mp_play_list_get_prev_item(data, ad->playing_list, &next_item))
1199 playing_view->flick_direction = 2;
1200 IF_FREE(ad->latest_playing_key_id);
1201 _mp_play_view_transit_by_item(data, next_item, false);
1204 mp_error("can not get next item");
1213 _mp_play_view_favourite_timer_cb(void *data)
1215 struct appdata *ad = (struct appdata *)data;
1216 mp_retvm_if(!ad, ECORE_CALLBACK_CANCEL, "ad");
1218 mp_playing_view *playing_view = ad->playing_view;
1219 mp_retvm_if(!playing_view, ECORE_CALLBACK_CANCEL, "ad");
1221 mp_ecore_timer_del(playing_view->favourite_timer);
1223 return ECORE_CALLBACK_CANCEL;
1227 _mp_play_view_favourite_cb(void *data, Evas_Object * o, const char *emission, const char *source)
1229 struct appdata *ad = (struct appdata *)data;
1232 mp_playing_view *playing_view = ad->playing_view;
1233 MP_CHECK(playing_view);
1235 DEBUG_TRACE("%s", emission);
1237 if (!strcmp(emission, "favorite_down"))
1239 playing_view->favour_longpress = 0;
1241 mp_ecore_timer_del(playing_view->favourite_timer);
1243 playing_view->favourite_timer =
1244 ecore_timer_add(FAVOUR_LONG_PRESS_TIME, _mp_play_view_favourite_timer_cb, ad);
1246 else if (!strcmp(emission, "favorite_up"))
1248 mp_ecore_timer_del(playing_view->favourite_timer);
1250 if (playing_view->favour_longpress)
1252 playing_view->favour_longpress = 0;
1257 mp_media_info_h media = NULL;
1258 music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
1259 MP_CHECK(current_item);
1261 ret = mp_media_info_create(&media, current_item->key_id);
1263 ret = mp_media_info_set_favorite(media, !current_item->favorite);
1264 mp_media_info_destroy(media);
1267 if(current_item->favorite)
1268 mp_util_create_notify(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_ADD"));
1270 mp_util_create_notify(ad, GET_STR("IDS_MUSIC_POP_ITEM_NOT_REMOVE"));
1274 current_item->favorite = !current_item->favorite;
1276 if (!current_item->favorite)
1278 edje_object_signal_emit(_EDJ(playing_view->play_menu), "favorite_off", "play_view");
1279 mp_util_create_notify(ad, GET_SYS_STR("IDS_COM_POP_REMOVED"));
1283 edje_object_signal_emit(_EDJ(playing_view->play_menu), "favorite_on", "play_view");
1284 mp_util_create_notify(ad, GET_STR("IDS_MUSIC_POP_ADDED"));
1289 #ifndef MP_SOUND_PLAYER
1290 MP_CHECK(ad->naviframe);
1291 view_data_t *view_data = (view_data_t *) evas_object_data_get(ad->naviframe, "view_data");
1292 MP_CHECK(view_data);
1293 if (view_data->view_type == MP_VIEW_TYPE_PLAYLIST)
1294 mp_library_update_view(ad);
1300 _mp_play_view_progressbar_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
1303 if (data == NULL && obj == NULL && event_info == NULL)
1306 evas_object_data_set(obj, "pressed", (void *)1);
1308 struct appdata *ad = (struct appdata *)data;
1311 mp_playing_view *playing_view = ad->playing_view;
1312 MP_CHECK(playing_view);
1314 Evas_Event_Mouse_Down *ev = event_info;
1315 Evas_Object *progressbar = obj;
1316 int duration = 0, w = 0, current = 0, x = 0;
1319 if (ad->player_state == PLAY_STATE_INIT)
1321 ERROR_TRACE("Invaild player_state : %d", ad->player_state);
1325 mp_play_view_progress_timer_freeze(ad);
1326 evas_object_geometry_get(progressbar, &x, NULL, &w, NULL);
1327 current = ev->canvas.x - x;
1331 else if (current > w)
1334 ratio = (double)current / w;
1335 duration = mp_player_mgr_get_duration();
1337 ad->music_length = duration / 1000.;
1339 ad->music_pos = ratio * ad->music_length;
1340 mp_play_view_update_progressbar(ad);
1346 _mp_play_view_progressbar_seek_done_cb(void *data)
1349 struct appdata *ad = data;
1351 mp_play_view_progress_timer_thaw(ad);
1355 _mp_play_view_progressbar_up_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
1358 if (data == NULL && obj == NULL && event_info == NULL)
1361 evas_object_data_set(obj, "pressed", (void *)0);
1363 struct appdata *ad = (struct appdata *)data;
1366 mp_playing_view *playing_view = ad->playing_view;
1367 MP_CHECK(playing_view);
1369 Evas_Event_Mouse_Up *ev = event_info;
1370 Evas_Object *progressbar = obj;
1371 int duration = 0, w = 0, current = 0, x = 0;
1374 if (ad->player_state == PLAY_STATE_INIT)
1376 ERROR_TRACE("Invaild player_state : %d", ad->player_state);
1380 evas_object_geometry_get(progressbar, &x, NULL, &w, NULL);
1382 current = ev->canvas.x - x;
1386 else if (current > w)
1389 ratio = (double)current / w;
1391 duration = mp_player_mgr_get_duration();
1393 ad->music_length = duration / 1000.;
1395 ad->music_pos = ratio * ad->music_length;
1397 if (mp_player_mgr_set_position(ad->music_pos * 1000, _mp_play_view_progressbar_seek_done_cb, ad))
1398 mp_play_view_update_progressbar(ad);
1400 _mp_play_view_progressbar_seek_done_cb(ad);
1407 _mp_play_progressbar_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
1409 if (data == NULL && obj == NULL && event_info == NULL)
1412 int pressed = (int)evas_object_data_get(obj, "pressed");
1414 mp_debug("-_- progressbar is not pressed yet!");
1418 struct appdata *ad = (struct appdata *)data;
1421 mp_playing_view *playing_view = ad->playing_view;
1422 MP_CHECK(playing_view);
1424 Evas_Event_Mouse_Move *ev = event_info;
1426 if (ad->player_state == PLAY_STATE_INIT)
1428 ERROR_TRACE("Invaild player_state : %d", ad->player_state);
1432 Evas_Object *progressbar = obj;
1433 int w = 0, current = 0;
1438 if (ad->player_state == PLAY_STATE_INIT)
1441 evas_object_geometry_get(progressbar, &x, NULL, &w, NULL);
1443 current = ev->cur.canvas.x - x;
1447 else if (current > w)
1450 ratio = (double)current / w;
1452 new_pos= ratio * ad->music_length;
1453 if(new_pos != mp_player_mgr_get_position()/1000 )
1455 mp_player_mgr_set_position(ad->music_pos*1000, NULL, NULL);
1456 ad->music_pos = new_pos;
1457 mp_play_view_update_progressbar(ad);
1465 _mp_play_view_update_progressbar_cb(void *data)
1467 struct appdata *ad = data;
1468 MP_CHECK_CANCEL(ad);
1470 mp_playing_view *playing_view = ad->playing_view;
1471 MP_CHECK_CANCEL(playing_view);
1473 if(!ad->app_is_foreground)
1475 WARN_TRACE("Check here.. progress timer should be freezed..");
1476 ecore_timer_freeze(playing_view->progressbar_timer);
1479 int duration = 0, pos = 0;
1480 double get_length = 0., get_pos = 0.;
1482 if (ad->player_state == PLAY_STATE_PLAYING || ad->player_state == PLAY_STATE_PAUSED)
1484 duration = mp_player_mgr_get_duration();
1485 if ((duration / 1000) > 0)
1487 pos = mp_player_mgr_get_position();
1488 get_length = duration / 1000.;
1489 get_pos = pos / 1000.;
1492 if (get_length != ad->music_length || get_pos != ad->music_pos)
1494 // update only value is changed
1495 ad->music_length = get_length;
1496 ad->music_pos = get_pos;
1498 mp_play_view_update_progressbar(ad);
1502 ecore_timer_interval_set(playing_view->progressbar_timer, 0.5);
1508 _mp_play_view_menu_visible_set(void *data, bool menu_enable, bool animation)
1510 struct appdata *ad = data;
1512 mp_retm_if(ad == NULL, "appdata is NULL");
1513 mp_retm_if(ad->playing_view == NULL, "playing_view is NULL");
1514 mp_retm_if(ad->playing_view->play_view == NULL, "play_view is NULL");
1517 edje_object_signal_emit(_EDJ(ad->playing_view->layout), "option_menu_visible", "player_option_menu");
1521 edje_object_signal_emit(_EDJ(ad->playing_view->layout), "option_menu_invisible",
1522 "player_option_menu");
1524 edje_object_signal_emit(_EDJ(ad->playing_view->layout), "option_hide",
1525 "player_option_menu");
1530 _mp_play_view_progress_visible_set(void *data, bool progressbar_enable)
1532 struct appdata *ad = data;
1534 mp_retm_if(ad == NULL, "appdata is NULL");
1535 mp_retm_if(ad->playing_view == NULL, "playing_view is NULL");
1536 mp_retm_if(ad->playing_view->play_view == NULL, "play_view is NULL");
1538 if (progressbar_enable)
1539 edje_object_signal_emit(_EDJ(ad->playing_view->play_ctrl), "progressbar_visible", "player_progress");
1541 edje_object_signal_emit(_EDJ(ad->playing_view->play_ctrl), "progressbar_invisible", "player_progress");
1546 _mp_play_view_add_progress_timer(void *data)
1548 struct appdata *ad = data;
1551 mp_playing_view *playing_view = ad->playing_view;
1552 MP_CHECK(playing_view);
1554 mp_ecore_timer_del(playing_view->progressbar_timer);
1556 playing_view->progressbar_timer = ecore_timer_add(0.1, _mp_play_view_update_progressbar_cb, ad);
1557 if(ad->player_state != PLAY_STATE_PLAYING || !ad->app_is_foreground)
1558 ecore_timer_freeze(playing_view->progressbar_timer);
1564 _mp_play_view_init_progress_bar(void *data)
1566 struct appdata *ad = (struct appdata *)data;
1569 mp_playing_view *playing_view = ad->playing_view;
1570 MP_CHECK_FALSE(playing_view);
1572 int pos = 0, duration = 0;
1573 pos = mp_player_mgr_get_position();
1574 duration = mp_player_mgr_get_duration();
1575 ad->music_pos = pos / 1000.;
1576 ad->music_length = duration / 1000.;
1577 mp_play_view_update_progressbar(ad);
1578 _mp_play_view_add_progress_timer(ad);
1584 _mp_play_view_set_menu_item(void *data)
1586 struct appdata *ad = (struct appdata *)data;
1589 int shuffle_state = 0;
1590 int repeat_state = 0;
1592 if (!mp_setting_get_shuffle_state(&shuffle_state))
1594 mp_play_control_shuffle_set(ad, shuffle_state);
1595 ad->play_shuffle_state = shuffle_state;
1598 if (!mp_setting_get_repeat_state(&repeat_state))
1599 mp_play_control_repeat_set(ad, repeat_state);
1606 _mp_play_view_create_menu(void *data)
1609 struct appdata *ad = (struct appdata *)data;
1612 mp_playing_view *playing_view = ad->playing_view;
1613 MP_CHECK_FALSE(playing_view);
1615 playing_view->play_menu = mp_common_load_edj(playing_view->play_view, PLAY_VIEW_EDJ_NAME, "mp_play_menu");
1616 elm_object_part_content_set(playing_view->layout, "player_option_menu", playing_view->play_menu);
1617 edje_object_signal_callback_add(_EDJ(playing_view->play_menu), "favorite_down", "*", _mp_play_view_favourite_cb,
1619 edje_object_signal_callback_add(_EDJ(playing_view->play_menu), "favorite_up", "*", _mp_play_view_favourite_cb,
1622 if (playing_view->play_view_screen_mode == MP_SCREEN_MODE_LANDSCAPE)
1623 evas_object_size_hint_max_set(playing_view->play_menu, elm_scale_get(), 70 * elm_scale_get());
1624 edje_object_signal_callback_add(_EDJ(playing_view->play_menu), SIGNAL_SHUFFLE, "*", mp_play_control_menu_cb,
1626 edje_object_signal_callback_add(_EDJ(playing_view->play_menu), SIGNAL_SHUFNON, "*", mp_play_control_menu_cb,
1628 edje_object_signal_callback_add(_EDJ(playing_view->play_menu), SIGNAL_REPALL, "*", mp_play_control_menu_cb, ad);
1629 edje_object_signal_callback_add(_EDJ(playing_view->play_menu), SIGNAL_REPNON, "*", mp_play_control_menu_cb, ad);
1630 edje_object_signal_callback_add(_EDJ(playing_view->play_menu), SIGNAL_REP1, "*", mp_play_control_menu_cb, ad);
1632 _mp_play_view_set_menu_item(ad);
1634 _mp_play_view_menu_visible_set(ad, FALSE, false);
1641 mp_play_view_set_snd_path_sensitivity(void *data)
1644 struct appdata *ad = (struct appdata *)data;
1648 bool bt_connected = 0;
1649 char *bt_name = NULL;
1651 Elm_Object_Item *navi_item = NULL;
1652 Elm_Object_Item *land_navi_item = NULL;
1653 Evas_Object *btn = NULL;
1654 Evas_Object *land_btn = NULL;
1656 mp_playing_view *playing_view = ad->playing_view;
1657 MP_CHECK(playing_view);
1659 if (playing_view->play_view_screen_mode == MP_SCREEN_MODE_LANDSCAPE)
1662 land_navi_item = playing_view->play_head;
1664 #ifdef MP_SOUND_PLAYER
1665 navi_item = sp_view_mgr_get_play_view_navi_item(ad->view_mgr);
1667 navi_item = mp_view_manager_get_play_view_navi_item(ad);
1671 btn = elm_object_item_part_content_get(navi_item, ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN);
1674 land_btn = elm_object_item_part_content_get(land_navi_item, ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN);
1677 ret = sound_manager_get_a2dp_status(&bt_connected, &bt_name);
1678 if (ret != SOUND_MANAGER_ERROR_NONE)
1680 WARN_TRACE("Fail to sound_manager_get_a2dp_status ret = [%d]", ret);
1685 if (vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack))
1686 WARN_TRACE("Earjack state get Fail...");
1689 if (!bt_connected && !earjack)
1693 elm_object_item_part_content_unset(navi_item, ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN);
1694 evas_object_del(btn);
1698 elm_object_item_part_content_unset(land_navi_item, ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN);
1699 evas_object_del(land_btn);
1704 if(!btn && navi_item)
1706 Evas_Object *parent = NULL;
1707 #ifdef MP_SOUND_PLAYER
1708 parent = sp_view_mgr_get_naviframe(ad->view_mgr);
1710 parent = ad->naviframe;
1712 Evas_Object *btn = mp_widget_create_title_btn(parent, NULL, MP_ICON_SOUND_PATH,
1713 mp_play_view_set_snd_path_cb, ad);
1714 elm_object_item_part_content_set(navi_item, ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN, btn);
1716 if(!land_btn && land_navi_item)
1718 Evas_Object *btn = mp_widget_create_title_btn(playing_view->land_naviframe, NULL, MP_ICON_SOUND_PATH,
1719 mp_play_view_set_snd_path_cb, ad);
1720 elm_object_item_part_content_set(land_navi_item, ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN, btn);
1726 mp_play_view_back_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
1728 #ifdef MP_SOUND_PLAYER
1729 struct appdata *ad = (struct appdata *)data;
1731 view_data_t *view_data = (view_data_t *) data;
1732 MP_CHECK(view_data);
1733 MP_CHECK_VIEW_DATA(view_data);
1735 struct appdata *ad = view_data->ad;
1738 mp_retm_if(ad->navi_effect_in_progress, "navi effect in progress");
1740 #ifdef MP_SOUND_PLAYER
1741 if (ad->player_state == PLAY_STATE_PLAYING || ad->player_state == PLAY_STATE_PAUSED) {
1742 mp_debug("mm player alive");
1743 elm_win_lower(ad->win_main);
1745 mp_debug("terminate");
1749 if(ad->direct_win_minimize)
1750 elm_win_lower(ad->win_main);
1752 mp_common_back_button_cb(data, obj, NULL);
1754 if (ad->music_setting_change_flag)
1756 mp_debug("# menu update #");
1757 mp_util_set_library_controlbar_items(ad);
1758 ad->music_setting_change_flag = false;
1764 _mp_play_view_create_control_bar(void *data)
1767 struct appdata *ad = (struct appdata *)data;
1770 mp_playing_view *playing_view = ad->playing_view;
1771 MP_CHECK_FALSE(playing_view);
1773 Evas_Object *play_control = NULL, *play_icon = NULL;
1775 if (playing_view->play_view_screen_mode == MP_SCREEN_MODE_LANDSCAPE)
1777 mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "music/playing/main/control_ls");
1780 mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "music/playing/main/control");
1782 MP_CHECK_FALSE(play_control);
1784 play_icon = mp_common_load_edj(play_control, PLAY_VIEW_EDJ_NAME, "music/playing/main/control/buttons");
1788 mp_evas_object_del(play_control);
1789 MP_CHECK_FALSE(play_icon);
1792 elm_object_part_content_set(play_control, "buttons", play_icon);
1793 evas_object_data_set(play_control, "buttons", play_icon);
1794 #ifdef MP_SOUND_PLAYER
1795 edje_object_signal_callback_add(_EDJ(play_icon), "info_clicked", CTR_EDJ_SIG_SRC, mp_play_view_back_cb, ad);
1797 edje_object_signal_callback_add(_EDJ(play_icon), "info_clicked", CTR_EDJ_SIG_SRC, mp_play_view_back_cb,
1798 mp_util_get_view_data(ad));
1800 edje_object_signal_callback_add(_EDJ(play_icon), "volume_clicked", CTR_EDJ_SIG_SRC, mp_play_control_volume_cb,
1802 #ifdef MP_FEATURE_VOLMUE_MUTE
1803 edje_object_signal_callback_add(_EDJ(play_icon), "vol_btn_down", CTR_EDJ_SIG_SRC,
1804 mp_play_control_volume_down_cb, ad);
1805 edje_object_signal_callback_add(_EDJ(play_icon), "vol_btn_up", CTR_EDJ_SIG_SRC, mp_play_control_volume_up_cb,
1808 edje_object_signal_callback_add(_EDJ(play_icon), "play_clicked", CTR_EDJ_SIG_SRC, mp_play_control_play_cb, ad);
1809 edje_object_signal_callback_add(_EDJ(play_icon), "pause_clicked", CTR_EDJ_SIG_SRC, mp_play_control_play_cb, ad);
1811 edje_object_signal_callback_add(_EDJ(play_icon), "ff_btn_down", CTR_EDJ_SIG_SRC, mp_play_control_ff_cb, ad);
1812 edje_object_signal_callback_add(_EDJ(play_icon), "ff_btn_up", CTR_EDJ_SIG_SRC, mp_play_control_ff_cb, ad);
1814 edje_object_signal_callback_add(_EDJ(play_icon), "rew_btn_down", CTR_EDJ_SIG_SRC, mp_play_control_rew_cb, ad);
1815 edje_object_signal_callback_add(_EDJ(play_icon), "rew_btn_up", CTR_EDJ_SIG_SRC, mp_play_control_rew_cb, ad);
1817 player_state_e player_state = mp_player_mgr_get_state();
1818 if (player_state != PLAYER_STATE_PLAYING)
1819 edje_object_signal_emit(_EDJ(play_icon), "play", CTR_PROG_SIG_SRC);
1821 edje_object_signal_emit(_EDJ(play_icon), "pause", CTR_PROG_SIG_SRC);
1823 playing_view->play_control = play_control;
1825 //show volume button
1827 edje_object_signal_emit(_EDJ(play_icon), "unmute", "volume");
1829 edje_object_signal_emit(_EDJ(play_icon), "mute", "volume");
1830 playing_view->play_icon = play_icon;
1832 elm_object_part_content_set(playing_view->layout, "elm.swallow.controlbar", playing_view->play_control);
1840 _mp_play_progress_val_set(void *data, double position)
1842 struct appdata *ad = (struct appdata *)data;
1845 mp_playing_view *playing_view = ad->playing_view;
1846 MP_CHECK(playing_view);
1847 MP_CHECK(playing_view->play_progressbar);
1849 Evas_Object *pbar = evas_object_data_get(playing_view->play_progressbar, "progress_bar");
1851 edje_object_part_drag_value_set(_EDJ(pbar), "progressbar_control", position, 0.0);
1857 _mp_play_view_transit_by_item_complete_cb(void *data, Evas_Object * obj, const char *emission, const char *source)
1859 struct appdata *ad = (struct appdata *)data;
1862 mp_playing_view *playing_view = ad->playing_view;
1863 MP_CHECK(playing_view);
1865 DEBUG_TRACE("emission: %s, source: %s", emission, source);
1868 if (strcmp(source, "list") == 0)
1870 mp_play_item_play(ad, playing_view->playing_list_item->key_id);
1871 mp_play_view_refresh(ad);
1873 _mp_play_view_clear_next_view(data);
1875 _mp_play_view_init_progress_bar(data);
1876 evas_object_show(playing_view->layout);
1878 edje_object_signal_callback_del(elm_layout_edje_get(playing_view->layout), "transit_done", "*",
1879 _mp_play_view_transit_by_item_complete_cb);
1887 _mp_play_view_transit_by_item(void *data, struct music_list_item *it, bool move_left)
1889 struct appdata *ad = (struct appdata *)data;
1892 mp_playing_view *playing_view = ad->playing_view;
1893 MP_CHECK_FALSE(playing_view);
1895 if (playing_view->play_view)
1897 mp_ecore_timer_del(ad->mute_popup_show_timer);
1899 edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_HIDE, "*");
1900 //show volume button
1902 edje_object_signal_emit(_EDJ(playing_view->play_icon), "unmute", "volume");
1904 edje_object_signal_emit(_EDJ(playing_view->play_icon), "mute", "volume");
1907 Evas_Object *next = NULL;
1908 music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
1909 MP_CHECK_FALSE(current_item);
1911 if (!g_strcmp0(ad->latest_playing_key_id ,it->key_id))
1913 mp_debug("same file selected plz check state");
1917 if (playing_view->transition_state) // transiton(transition_state) should be transiit callback
1919 mp_debug("skip_by transiton effect");
1923 mp_play_view_stop_transit(data);
1925 mp_play_view_progress_timer_freeze(ad);
1927 mp_play_view_set_menu_state(ad, false, false);
1929 mp_debug("current index = %d, set index = %d", current_item->list_index, it->list_index);
1931 IF_FREE(playing_view->playing_list_item);
1932 mp_play_list_item_copy(&playing_view->playing_list_item, it);
1934 next = _mp_play_view_create_next_item(it, ad);
1935 MP_CHECK_FALSE(next);
1936 playing_view->play_view_next = next;
1937 elm_object_part_content_set(playing_view->layout, "list_content_temp", next);
1938 edje_object_signal_callback_add(elm_layout_edje_get(playing_view->layout), "transit_done", "*",
1939 _mp_play_view_transit_by_item_complete_cb, ad);
1943 edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "set_left", "list_content_temp");
1944 edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "flick_right", "list_content");
1948 edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "set_right", "list_content_temp");
1949 edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "flick_left", "list_content");
1952 edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "set_default", "list_content_temp");
1954 playing_view->transition_state = true;
1956 if (!playing_view->play_view_screen_mode)
1958 mp_evas_object_del(playing_view->albumart_image);
1959 playing_view->albumart_image = _mp_play_view_create_bg_map(data, playing_view->play_view, it);
1960 elm_object_part_content_set(playing_view->play_view, "album_art", playing_view->albumart_image);
1961 evas_object_show(playing_view->albumart_image);
1962 evas_object_repeat_events_set(playing_view->albumart_image, 1);
1969 _mp_play_view_push_navibar(void *data)
1971 struct appdata *ad = (struct appdata *)data;
1974 mp_playing_view *playing_view = ad->playing_view;
1975 MP_CHECK_FALSE(playing_view);
1977 elm_object_part_content_set(playing_view->layout, "list_content", playing_view->play_view);
1979 mp_playing_view *playing_view = ad->playing_view;
1980 MP_CHECK_FALSE(playing_view);
1982 #ifdef MP_SOUND_PLAYER
1983 sp_view_mgr_push_view_content(ad->view_mgr, playing_view->layout, SP_VIEW_TYPE_PLAY);
1984 sp_view_mgr_set_title_label(ad->view_mgr, GET_SYS_STR("IDS_COM_SK_PLAY"));
1985 mp_play_view_set_snd_path_sensitivity(ad);
1987 MP_CHECK_FALSE(ad->naviframe);
1989 view_data_t *view_data = NULL;
1990 view_data = evas_object_data_get(ad->naviframe, "view_data");
1991 MP_CHECK_FALSE(view_data);
1992 mp_view_manager_push_view_content(view_data, playing_view->layout, MP_VIEW_CONTENT_PLAY);
1994 MP_TA_ACUM_ITEM_BEGIN(" mp_view_manager_set_title_and_buttons", 0);
1995 mp_view_manager_set_title_and_buttons(view_data, NULL, ad);
1996 MP_TA_ACUM_ITEM_END(" mp_view_manager_set_title_and_buttons", 0);
2005 _mp_play_view_play_option_cb(void *data, Evas_Object * obj, const char *emission, const char *source)
2009 struct appdata *ad = (struct appdata *)data;
2012 if (!strcmp(emission, "option_1_clicked"))
2013 mp_menu_share_cb(data, obj, NULL);
2014 else if (!strcmp(emission, "option_2_clicked"))
2015 mp_menu_set_cb(data, obj, NULL);
2016 else if (!strcmp(emission, "option_3_clicked"))
2018 MP_CHECK(ad->playing_view);
2019 if (ad->playing_view->play_view_screen_mode != MP_SCREEN_MODE_LANDSCAPE)
2020 mp_play_view_info_cb(data, obj, NULL);
2024 static Evas_Object *
2025 _mp_play_view_create_ctrl_layout(void *data, Evas_Object * parents, Evas_Object ** progress, bool remove_signal)
2027 struct appdata *ad = (struct appdata *)data;
2030 mp_playing_view *playing_view = ad->playing_view;
2031 MP_CHECK_FALSE(playing_view);
2033 Evas_Object *ctrl_layout = NULL;
2035 ctrl_layout = mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "music/playing/play_ctrl");
2037 elm_object_part_content_set(parents, "player_info", ctrl_layout);
2039 //2 Create progress bar
2040 if (playing_view->play_view_screen_mode == MP_SCREEN_MODE_LANDSCAPE)
2042 mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "music/playing/progress_box_ls");
2044 *progress = mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "music/playing/progress_box");
2046 Evas_Object *play_progress =
2047 mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "music/playing/progress_box/progress_bar");
2048 elm_object_part_content_set(*progress, "progress_bar", play_progress);
2049 evas_object_data_set(*progress, "progress_bar", play_progress);
2053 edje_object_signal_callback_add(_EDJ(ctrl_layout), "favorite_down", "*", _mp_play_view_favourite_cb,
2055 edje_object_signal_callback_add(_EDJ(ctrl_layout), "favorite_up", "*", _mp_play_view_favourite_cb, ad);
2057 evas_object_event_callback_add(play_progress, EVAS_CALLBACK_MOUSE_DOWN,
2058 _mp_play_view_progressbar_down_cb, ad);
2059 evas_object_event_callback_add(play_progress, EVAS_CALLBACK_MOUSE_UP, _mp_play_view_progressbar_up_cb,
2061 evas_object_event_callback_add(play_progress, EVAS_CALLBACK_MOUSE_MOVE, _mp_play_progressbar_move_cb,
2065 elm_object_part_content_set(playing_view->layout, "player_progress", *progress);
2067 Evas_Object *play_info = mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "player_view_info");
2068 elm_object_part_content_set(playing_view->layout, "player_info", play_info);
2069 playing_view->play_title = play_info;
2071 if (playing_view->play_view_screen_mode != MP_SCREEN_MODE_LANDSCAPE)
2073 Evas_Object *play_options =
2074 mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "player_view_options");
2076 edje_object_part_text_set(_EDJ(play_options), "option_1", GET_SYS_STR("IDS_COM_BUTTON_SHARE"));
2077 mp_language_mgr_register_object(play_options, OBJ_TYPE_EDJE_OBJECT, "option_1", "IDS_COM_BUTTON_SHARE");
2078 edje_object_part_text_set(_EDJ(play_options), "option_2", GET_SYS_STR("IDS_COM_SK_SET"));
2079 mp_language_mgr_register_object(play_options, OBJ_TYPE_EDJE_OBJECT, "option_2", "IDS_COM_SK_SET");
2080 edje_object_part_text_set(_EDJ(play_options), "option_3", GET_SYS_STR("IDS_COM_BODY_DETAILS"));
2081 mp_language_mgr_register_object(play_options, OBJ_TYPE_EDJE_OBJECT, "option_3", "IDS_COM_BODY_DETAILS");
2083 elm_object_part_content_set(playing_view->layout, "player_options", play_options);
2085 edje_object_signal_callback_add(_EDJ(play_options), "option_1_clicked", "*", _mp_play_view_play_option_cb,
2087 edje_object_signal_callback_add(_EDJ(play_options), "option_2_clicked", "*", _mp_play_view_play_option_cb,
2089 edje_object_signal_callback_add(_EDJ(play_options), "option_3_clicked", "*", _mp_play_view_play_option_cb,
2097 _mp_play_view_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
2099 struct appdata *ad = data;
2102 mp_playing_view *playing_view = ad->playing_view;
2103 MP_CHECK(playing_view);
2106 edje_object_part_geometry_get(_EDJ(playing_view->play_view), "album_bg", NULL, NULL, &w, &h);
2107 mp_debug("album bg size = [%d * %d]", w, h);
2109 if (playing_view->albumart_bg)
2111 evas_object_image_load_size_set(playing_view->albumart_bg, w, h);
2112 evas_object_image_fill_set(playing_view->albumart_bg, 0, 0, w, h);
2118 _mp_play_view_create_playing_layout(void *data, Evas_Object * parents_layout, bool b_next)
2122 struct appdata *ad = (struct appdata *)data;
2125 mp_playing_view *playing_view = ad->playing_view;
2126 MP_CHECK_FALSE(playing_view);
2128 //2 Create playing view
2129 if (playing_view->play_view_screen_mode == MP_SCREEN_MODE_LANDSCAPE)
2130 playing_view->play_view =
2131 mp_common_load_edj(parents_layout, PLAY_VIEW_EDJ_NAME, "mp_play_view_landscape");
2133 playing_view->play_view = mp_common_load_edj(parents_layout, PLAY_VIEW_EDJ_NAME, "mp_play_view");
2135 MP_CHECK_FALSE(playing_view->play_view);
2137 evas_object_event_callback_add(playing_view->play_view, EVAS_CALLBACK_RESIZE, _mp_play_view_resize_cb, ad);
2140 edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_HIDE, "*");
2142 Evas_Object *event_box = mp_smart_event_box_add(playing_view->play_view);
2144 evas_object_size_hint_weight_set(event_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
2145 evas_object_size_hint_align_set(event_box, EVAS_HINT_FILL, EVAS_HINT_FILL);
2146 evas_object_smart_callback_add(event_box, "mouse.clicked", _mp_play_view_eventbox_clicked_cb, ad);
2147 evas_object_smart_callback_add(event_box, "mouse.flick.left", _mp_play_view_eventbox_flick_left_cb, ad);
2148 evas_object_smart_callback_add(event_box, "mouse.flick.right", _mp_play_view_eventbox_flick_right_cb, ad);
2150 evas_object_show(event_box);
2151 elm_object_part_content_set(playing_view->play_view, "event_box", event_box);
2152 evas_object_data_set(playing_view->play_view, "event_box", event_box);
2154 if (playing_view->play_view_screen_mode == MP_SCREEN_MODE_LANDSCAPE)
2156 playing_view->albumart_img = elm_bg_add(playing_view->play_view);
2157 elm_bg_load_size_set(playing_view->albumart_img, MP_PLAY_VIEW_ARTWORK_SIZE, MP_PLAY_VIEW_ARTWORK_SIZE);
2158 elm_object_part_content_set(playing_view->play_view, "album_art", playing_view->albumart_img);
2162 mp_evas_object_del(playing_view->albumart_bg);
2163 playing_view->albumart_bg = evas_object_image_add(ad->evas);
2164 elm_object_part_content_set(playing_view->play_view, "album_bg", playing_view->albumart_bg);
2167 playing_view->play_ctrl =
2168 _mp_play_view_create_ctrl_layout(ad, playing_view->play_view, &playing_view->play_progressbar, FALSE);
2170 _mp_play_view_progress_visible_set(ad, TRUE);
2171 _mp_play_progress_val_set(ad, 0.0);
2173 evas_object_show(playing_view->play_progressbar);
2181 _mp_play_view_idler_cb(void *data)
2185 struct appdata *ad = (struct appdata *)data;
2187 MP_CHECK_FALSE(ad->playing_view->albumart_bg);
2189 Evas_Coord img_x, img_y, img_w, img_h;
2190 evas_object_geometry_get(ad->playing_view->albumart_bg, &img_x, &img_y, &img_w, &img_h);
2192 ad->album_image_w = img_w;
2193 ad->album_image_h = img_h;
2195 _mp_play_view_album_art_update(ad);
2196 ad->playview_show_idler = NULL;
2203 _mp_play_view_create_layout(void *data)
2207 struct appdata *ad = (struct appdata *)data;
2210 mp_playing_view *playing_view = ad->playing_view;
2211 MP_CHECK_FALSE(playing_view);
2213 //2 Create main layout
2215 if (playing_view->layout)
2217 mp_debug("already created skip create layout");
2222 Evas_Object *parent = NULL;
2223 #ifdef MP_SOUND_PLAYER
2224 parent = sp_view_mgr_get_naviframe(ad->view_mgr);
2226 MP_CHECK_FALSE(ad->naviframe);
2227 parent = ad->naviframe;
2229 playing_view->layout =
2230 mp_common_load_edj(parent, PLAY_VIEW_EDJ_NAME, "mp_play_view_layout");
2231 MP_CHECK_FALSE(playing_view->layout);
2234 MP_CHECK_FALSE(playing_view->layout);
2235 evas_object_event_callback_add(playing_view->layout, EVAS_CALLBACK_DEL, _mp_play_view_destory_cb, playing_view);
2236 //2 Create playing view
2237 MP_TA_ACUM_ITEM_BEGIN(" mp_play_view_create_playing_layout", 0);
2238 _mp_play_view_create_playing_layout(ad, playing_view->layout, FALSE);
2239 MP_TA_ACUM_ITEM_END(" mp_play_view_create_playing_layout", 0);
2241 //2 Create menu layout
2242 _mp_play_view_create_menu(ad);
2244 //2 Create control bar
2245 _mp_play_view_create_control_bar(ad);
2248 MP_TA_ACUM_ITEM_BEGIN(" mp_play_view_push_navibar", 0);
2249 _mp_play_view_push_navibar(ad);
2250 MP_TA_ACUM_ITEM_END(" mp_play_view_push_navibar", 0);
2252 if(!ad->playview_show_idler)
2253 ad->playview_show_idler = ecore_idler_add(_mp_play_view_idler_cb, ad);
2263 _mp_play_view_delete_progress_timer(void *data)
2265 struct appdata *ad = (struct appdata *)data;
2268 mp_playing_view *playing_view = ad->playing_view;
2269 MP_CHECK(playing_view);
2271 mp_ecore_timer_del(playing_view->progressbar_timer);
2275 mp_play_view_set_menu_state(void *data, bool show, bool anim)
2277 struct appdata *ad = (struct appdata *)data;
2280 ad->show_optional_menu = show;
2284 mp_debug("set hide state");
2286 mp_ecore_timer_del(ad->longpress_timer);
2288 _mp_play_view_menu_visible_set(ad, FALSE, anim);
2292 mp_debug("set show state");
2294 _mp_play_view_menu_visible_set(ad, TRUE, anim);
2302 mp_play_view_progress_timer_thaw(void *data)
2304 struct appdata *ad = (struct appdata *)data;
2307 mp_playing_view *playing_view = ad->playing_view;
2308 MP_CHECK(playing_view);
2309 MP_CHECK(playing_view->progressbar_timer);
2311 if (ad->player_state == PLAY_STATE_PLAYING)
2313 ecore_timer_thaw(playing_view->progressbar_timer);
2315 else if (ad->player_state == PLAY_STATE_PAUSED)
2317 mp_play_view_update_progressbar(ad);
2322 mp_play_view_progress_timer_freeze(void *data)
2324 struct appdata *ad = (struct appdata *)data;
2327 mp_playing_view *playing_view = ad->playing_view;
2328 MP_CHECK(playing_view);
2330 if (playing_view->progressbar_timer)
2332 ecore_timer_freeze(playing_view->progressbar_timer);
2337 mp_play_view_update_progressbar(void *data)
2339 struct appdata *ad = (struct appdata *)data;
2342 mp_playing_view *playing_view = ad->playing_view;
2343 MP_CHECK(playing_view);
2345 music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
2346 MP_CHECK(current_item);
2348 char play_time[16] = { 0, };
2349 char total_time[16] = { 0, };
2351 if (ad->music_length > 0.)
2353 if (ad->music_length > 3600.)
2355 snprintf(total_time, sizeof(total_time), "%" MUSIC_TIME_FORMAT,
2356 MUSIC_TIME_ARGS(ad->music_length));
2357 snprintf(play_time, sizeof(play_time), "%" MUSIC_TIME_FORMAT, MUSIC_TIME_ARGS(ad->music_pos));
2361 snprintf(total_time, sizeof(total_time), "%" PLAY_TIME_FORMAT,
2362 PLAY_TIME_ARGS(ad->music_length));
2363 snprintf(play_time, sizeof(play_time), "%" PLAY_TIME_FORMAT, PLAY_TIME_ARGS(ad->music_pos));
2367 { //if the duration which is getting from mmfw is 0, it will use duration which is getting from mp-svc
2368 snprintf(total_time, sizeof(total_time), "%s", current_item->time);
2369 snprintf(play_time, sizeof(play_time), "%" PLAY_TIME_FORMAT, PLAY_TIME_ARGS(ad->music_pos));
2372 double played_ratio = 0.;
2373 if(ad->music_length > 0. && ad->music_pos > 0.)
2374 played_ratio = ad->music_pos / ad->music_length;
2375 _mp_play_progress_val_set(ad, played_ratio);
2376 edje_object_part_text_set(_EDJ(playing_view->play_progressbar), "progress_text_total", total_time);
2377 edje_object_part_text_set(_EDJ(playing_view->play_progressbar), "progress_text_playing", play_time);
2379 _mp_play_view_progress_visible_set(ad, TRUE);
2386 mp_play_view_stop_transit(void *data)
2388 struct appdata *ad = (struct appdata *)data;
2391 mp_playing_view *playing_view = ad->playing_view;
2392 MP_CHECK_FALSE(playing_view);
2394 if (playing_view->play_view_next && playing_view->playing_list_item)
2396 mp_play_list_set_current_item(ad, ad->playing_list, playing_view->playing_list_item->key_id);
2397 mp_play_view_refresh(ad);
2398 _mp_play_view_clear_next_view(data);
2399 _mp_play_view_init_progress_bar(data);
2400 edje_object_signal_callback_del(elm_layout_edje_get(playing_view->layout), "transit_done", "*",
2401 _mp_play_view_transit_by_item_complete_cb);
2408 _mp_play_view_album_art_update(void *data)
2410 struct appdata *ad = (struct appdata *)data;
2412 mp_playing_view *playing_view = ad->playing_view;
2413 MP_CHECK(playing_view);
2415 Evas_Coord img_x, img_y, img_w, img_h;
2416 evas_object_geometry_get(playing_view->albumart_image, &img_x, &img_y, &img_w, &img_h);
2417 if ( playing_view->albumart_width <= 0 && playing_view->albumart_height <= 0
2418 && ad->album_image_w > 0 && ad->album_image_h > 0
2419 && img_w == ad->album_image_w && img_h == ad->album_image_h ) {
2420 playing_view->albumart_width = img_w;
2421 playing_view->albumart_height = img_h;
2423 DEBUG_TRACE ("albumart_width=%d, albumart_height=%d", playing_view->albumart_width, playing_view->albumart_height);
2425 if (0 == img_x && playing_view->albumart_width == img_w && playing_view->albumart_height == img_h)
2427 mp_evas_object_del(playing_view->pre_albumart_image_reflection);
2429 if (ad->info_ug_base && !ad->info_back_play_view_flag)
2431 EVAS_OBJ_HIDE(playing_view->albumart_image_reflection);
2432 EVAS_OBJ_HIDE(playing_view->pre_albumart_image_reflection);
2436 EVAS_OBJ_SHOW(playing_view->albumart_image_reflection);
2437 EVAS_OBJ_SHOW(playing_view->pre_albumart_image_reflection);
2440 double zoomx = 1.0, zoomy = 1.0;
2442 int albumart_image_raw_w = 0, albumart_image_raw_h = 0;
2443 int albumart_image_x = 0, albumart_image_y = 0, albumart_image_w = 0, albumart_image_h = 0;
2445 if (playing_view->albumart_image_reflection)
2447 if (playing_view->flick_direction == 1)
2449 x = img_x + playing_view->albumart_width;
2451 else if (playing_view->flick_direction == 2)
2453 x = img_x - playing_view->albumart_width;
2455 y = img_y + playing_view->albumart_height;
2457 evas_object_geometry_get(playing_view->albumart_image_reflection, &albumart_image_x,
2458 &albumart_image_y, &albumart_image_w, &albumart_image_h);
2459 evas_object_image_size_get(playing_view->albumart_image_reflection, &albumart_image_raw_w,
2460 &albumart_image_raw_h);
2462 x = x - (albumart_image_raw_w - playing_view->albumart_width) / 2;
2463 y = y - (albumart_image_raw_h - playing_view->albumart_height) / 2;
2464 zoomx = playing_view->albumart_width / ((double)albumart_image_raw_w);
2465 zoomy = playing_view->albumart_height / ((double)albumart_image_raw_h);
2467 Evas_Map *m2 = evas_map_new(4);
2469 evas_map_smooth_set(m2, EINA_TRUE);
2470 evas_map_point_coord_set(m2, 0, x, y, 0);
2471 evas_map_point_image_uv_set(m2, 0, 0, albumart_image_raw_h);
2472 if (img_x == 0 && playing_view->hide_image_flag)
2474 evas_map_point_color_set(m2, 0, ALBUMART_IMAGE_SHADOW_RGBA1);
2478 evas_map_point_color_set(m2, 0, ALBUMART_IMAGE_SHADOW_RGBA);
2481 evas_map_point_coord_set(m2, 1, (x + albumart_image_raw_w), y, 0);
2482 evas_map_point_image_uv_set(m2, 1, albumart_image_raw_w, albumart_image_raw_h);
2483 if (img_x == 0 && playing_view->hide_image_flag)
2485 evas_map_point_color_set(m2, 1, ALBUMART_IMAGE_SHADOW_RGBA1);
2489 evas_map_point_color_set(m2, 1, ALBUMART_IMAGE_SHADOW_RGBA);
2492 evas_map_point_coord_set(m2, 2, (x + albumart_image_raw_w), (y + albumart_image_raw_h), 0);
2493 evas_map_point_image_uv_set(m2, 2, albumart_image_raw_w, 0);
2494 evas_map_point_color_set(m2, 2, ALBUMART_IMAGE_SHADOW_RGBA2);
2496 evas_map_point_coord_set(m2, 3, x, (y + albumart_image_raw_h), 0);
2497 evas_map_point_image_uv_set(m2, 3, 0, 0);
2498 evas_map_point_color_set(m2, 3, ALBUMART_IMAGE_SHADOW_RGBA2);
2500 evas_map_util_3d_rotate(m2, 0, 0, 0, x + (albumart_image_raw_w / 2), y + (albumart_image_raw_h / 2), 0);
2501 evas_map_util_3d_perspective(m2, x, y, 0, albumart_image_raw_w * 10);
2502 evas_map_util_zoom(m2, zoomx, zoomy, x + (albumart_image_raw_w / 2), y + (albumart_image_raw_h / 2));
2503 evas_object_map_enable_set(playing_view->albumart_image_reflection, EINA_TRUE);
2504 evas_object_map_set(playing_view->albumart_image_reflection, m2);
2507 evas_object_repeat_events_set(playing_view->albumart_image_reflection, 1);
2510 if (playing_view->pre_albumart_image_reflection)
2513 y = img_y + playing_view->albumart_height;
2514 evas_object_geometry_get(playing_view->pre_albumart_image_reflection, &albumart_image_x,
2515 &albumart_image_y, &albumart_image_w, &albumart_image_h);
2516 evas_object_image_size_get(playing_view->pre_albumart_image_reflection, &albumart_image_raw_w,
2517 &albumart_image_raw_h);
2518 x = x - (albumart_image_raw_w - playing_view->albumart_width) / 2;
2519 y = y - (albumart_image_raw_h - playing_view->albumart_height) / 2;
2520 zoomx = playing_view->albumart_width / ((double)albumart_image_raw_w);
2521 zoomy = playing_view->albumart_height / ((double)albumart_image_raw_h);
2523 Evas_Map *m4 = evas_map_new(4);
2525 evas_map_smooth_set(m4, EINA_TRUE);
2526 evas_map_point_coord_set(m4, 0, x, y, 0);
2527 evas_map_point_image_uv_set(m4, 0, 0, albumart_image_raw_h);
2528 if (img_x == 0 && playing_view->hide_image_flag)
2530 evas_map_point_color_set(m4, 0, ALBUMART_IMAGE_SHADOW_RGBA1);
2534 evas_map_point_color_set(m4, 0, ALBUMART_IMAGE_SHADOW_RGBA);
2537 evas_map_point_coord_set(m4, 1, (x + albumart_image_raw_w), y, 0);
2538 evas_map_point_image_uv_set(m4, 1, albumart_image_raw_w, albumart_image_raw_h);
2539 if (img_x == 0 && playing_view->hide_image_flag)
2541 evas_map_point_color_set(m4, 1, ALBUMART_IMAGE_SHADOW_RGBA1);
2545 evas_map_point_color_set(m4, 1, ALBUMART_IMAGE_SHADOW_RGBA);
2548 evas_map_point_coord_set(m4, 2, (x + albumart_image_raw_w), (y + albumart_image_raw_h), 0);
2549 evas_map_point_image_uv_set(m4, 2, albumart_image_raw_w, 0);
2550 evas_map_point_color_set(m4, 2, ALBUMART_IMAGE_SHADOW_RGBA2);
2552 evas_map_point_coord_set(m4, 3, x, (y + albumart_image_raw_h), 0);
2553 evas_map_point_image_uv_set(m4, 3, 0, 0);
2554 evas_map_point_color_set(m4, 3, ALBUMART_IMAGE_SHADOW_RGBA2);
2556 evas_map_util_3d_rotate(m4, 0, 0, 0, x + (albumart_image_raw_w / 2), y + (albumart_image_raw_h / 2), 0);
2557 evas_map_util_zoom(m4, zoomx, zoomy, x + (albumart_image_raw_w / 2), y + (albumart_image_raw_h / 2));
2558 evas_map_util_3d_perspective(m4, x, y, 0, albumart_image_raw_w * 10);
2559 evas_object_map_enable_set(playing_view->pre_albumart_image_reflection, EINA_TRUE);
2560 evas_object_map_set(playing_view->pre_albumart_image_reflection, m4);
2567 _mp_play_view_bg_map_move(void *data, Evas * e, Evas_Object * obj, void *event_info)
2569 struct appdata *ad = (struct appdata *)data;
2571 mp_playing_view *playing_view = ad->playing_view;
2572 MP_CHECK(ad->playing_view);
2574 _mp_play_view_album_art_update(data);
2576 if (playing_view->hide_image_flag && playing_view->flick_direction == 0)
2578 EVAS_OBJ_HIDE(playing_view->pre_albumart_image_reflection);
2585 _mp_play_view_bg_map_resize(void *data, Evas * e, Evas_Object * obj, void *event_info)
2589 struct appdata *ad = (struct appdata *)data;
2591 mp_playing_view *playing_view = ad->playing_view;
2592 MP_CHECK(playing_view);
2594 playing_view->hide_image_flag = true;
2596 if (playing_view->hide_image_flag && playing_view->flick_direction == 0)
2598 EVAS_OBJ_HIDE(playing_view->pre_albumart_image_reflection);
2606 _mp_play_view_bg_map_hide(void *data, Evas * e, Evas_Object * obj, void *event_info)
2614 _mp_play_view_bg_map_show(void *data, Evas * e, Evas_Object * obj, void *event_info)
2623 _mp_play_view_album_art_update(data);
2630 _mp_play_view_texture_destory_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
2633 struct appdata *ad = (struct appdata *)data;
2635 MP_CHECK(ad->playing_view);
2637 if(obj == ad->playing_view->albumart_image_reflection)
2638 ad->playing_view->albumart_image_reflection = NULL;
2639 else if(obj == ad->playing_view->pre_albumart_image_reflection)
2640 ad->playing_view->pre_albumart_image_reflection = NULL;
2642 ERROR_TRACE("++++++++ check here ++++++++++");
2645 static Evas_Object *
2646 _mp_play_view_load_texture(void *data, const char *const tex_path, const int tex_size_width, const int tex_size_height)
2648 struct appdata *ad = (struct appdata *)data;
2651 Evas_Object *o = evas_object_image_add(ad->evas);
2652 evas_object_image_file_set(o, tex_path, NULL);
2654 evas_object_image_size_get(o, &w, &h);
2655 evas_object_image_fill_set(o, 0, 0, w, h);
2656 evas_object_resize(o, w, h);
2657 evas_object_image_smooth_scale_set(o, 0);
2659 evas_object_event_callback_add(o, EVAS_CALLBACK_DEL, _mp_play_view_texture_destory_cb, ad);
2666 _mp_play_view_set_album_art(void *data, char *file_path)
2669 struct appdata *ad = (struct appdata *)data;
2671 mp_playing_view *playing_view = ad->playing_view;
2672 MP_CHECK(ad->playing_view);
2674 EVAS_OBJ_HIDE(playing_view->albumart_image);
2676 if (playing_view->albumart_image_reflection)
2678 mp_evas_object_del(playing_view->pre_albumart_image_reflection);
2679 playing_view->pre_albumart_image_reflection = playing_view->albumart_image_reflection;
2680 playing_view->albumart_image_reflection = NULL;
2681 evas_object_hide(playing_view->pre_albumart_image_reflection);
2682 playing_view->hide_image_flag = false;
2684 playing_view->albumart_image_reflection =
2685 _mp_play_view_load_texture(data, file_path, 0, 0);
2691 _mp_play_view_create_bg_map(void *data, Evas_Object * parents, music_list_item * current_item)
2694 struct appdata *ad = (struct appdata *)data;
2696 MP_CHECK_NULL(parents);
2697 mp_playing_view *playing_view = ad->playing_view;
2698 MP_CHECK_NULL(ad->playing_view);
2700 Evas_Object *obj = NULL;
2703 evas = evas_object_evas_get(parents);
2710 obj = edje_object_add(evas);
2712 MP_CHECK_NULL(current_item);
2715 if (!strstr(PREFIX, current_item->albumart) && mp_util_is_image_valid(ad->evas, current_item->albumart))
2717 mp_debug(" draw album art");
2718 _mp_play_view_set_album_art(data, current_item->albumart);
2722 _mp_play_view_set_album_art(data, DEFAULT_THUMBNAIL);
2725 if (playing_view->albumart_image_reflection)
2727 evas_object_smart_member_add(playing_view->albumart_image_reflection, obj);
2730 evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _mp_play_view_bg_map_resize, data);
2731 evas_object_event_callback_add(obj, EVAS_CALLBACK_MOVE, _mp_play_view_bg_map_move, data);
2732 evas_object_event_callback_add(obj, EVAS_CALLBACK_SHOW, _mp_play_view_bg_map_show, data);
2733 evas_object_event_callback_add(obj, EVAS_CALLBACK_HIDE, _mp_play_view_bg_map_hide, data);
2740 _mp_play_view_update_option_btn_sensitivity(struct appdata *ad)
2745 mp_playing_view *playing_view = ad->playing_view;
2746 MP_CHECK(playing_view);
2748 music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
2749 MP_CHECK(current_item);
2751 const char *filename =current_item->filename;
2753 if (playing_view->play_view_screen_mode != MP_SCREEN_MODE_LANDSCAPE)
2755 Evas_Object *play_options = elm_object_part_content_get(playing_view->layout, "player_options");
2756 MP_CHECK(play_options);
2758 const char *signal = NULL;
2759 if (mp_check_file_exist(filename))
2760 signal = "sig_enable_option_btn";
2762 signal = "sig_disable_option_btn";
2764 edje_object_signal_emit(_EDJ(play_options), signal, "c_source");
2770 mp_play_view_load_track(void *data)
2774 struct appdata *ad = (struct appdata *)data;
2777 mp_playing_view *playing_view = ad->playing_view;
2778 MP_CHECK_FALSE(playing_view);
2779 MP_CHECK_FALSE(ad->playing_list);
2781 music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
2782 MP_CHECK_FALSE(current_item);
2784 DEBUG_TRACE("ad->screen_mode=%d,flick_direction=%d", ad->screen_mode, playing_view->flick_direction);
2785 if (playing_view->play_view_screen_mode)
2788 if (!strstr(PREFIX, current_item->albumart) && mp_util_is_image_valid(ad->evas, current_item->albumart))
2790 elm_bg_file_set(playing_view->albumart_img, current_item->albumart, NULL);
2794 elm_bg_file_set(playing_view->albumart_img, DEFAULT_THUMBNAIL, NULL);
2796 evas_object_show(playing_view->albumart_img);
2800 if (playing_view->flick_direction || MP_SCREEN_MODE_PORTRAIT == ad->screen_mode)
2803 if (!strstr(PREFIX, current_item->albumart) && mp_util_is_image_valid(ad->evas, current_item->albumart))
2805 evas_object_image_file_set(playing_view->albumart_bg, current_item->albumart, NULL);
2809 evas_object_image_file_set(playing_view->albumart_bg, DEFAULT_THUMBNAIL, NULL);
2811 evas_object_show(playing_view->albumart_bg);
2813 mp_evas_object_del(playing_view->albumart_image);
2814 music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
2815 playing_view->albumart_image =
2816 _mp_play_view_create_bg_map(data, playing_view->play_view, current_item);
2817 elm_object_part_content_set(playing_view->play_view, "album_art", playing_view->albumart_image);
2818 evas_object_show(playing_view->albumart_image);
2819 evas_object_repeat_events_set(playing_view->albumart_image, 1);
2820 playing_view->flick_direction = 0;
2824 MP_TA_ACUM_ITEM_BEGIN(" _mp_play_view_load_track_info", 0);
2825 _mp_play_view_load_track_info(data, mp_play_list_get_current_item(ad->playing_list));
2826 MP_TA_ACUM_ITEM_END(" _mp_play_view_load_track_info", 0);
2828 /* disable share/set button when file do not exist */
2829 _mp_play_view_update_option_btn_sensitivity(ad);
2836 #ifndef MP_SOUND_PLAYER
2838 * load play view by path use for add to home case
2840 * @param struct appdata *ad, char *path, int fid
2841 * @return FALSE or TRUE if it success create
2842 * @author aramie.kim@samsung.com
2846 mp_play_view_load_by_path(struct appdata * ad, char *path)
2849 MP_CHECK_FALSE(path);
2851 //create play list and set playing request item
2852 mp_play_list_create_by_path(ad, &ad->playing_list, path);
2854 //reget current item
2855 music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);;
2856 MP_CHECK_FALSE(current_item);
2858 DEBUG_TRACE("current_item->artist: %s", current_item->artist);
2860 mp_setting_save_last_played(NULL);
2862 mp_play_destory(ad);
2863 ad->paused_by_user = FALSE;
2865 if (ad->playing_view)
2867 mp_evas_object_del(ad->playing_view->play_control);
2868 _mp_play_view_create_control_bar(ad);
2869 mp_play_view_play_item(ad, current_item, false, true);
2873 mp_play_view_load(ad);
2874 MP_CHECK_FALSE(ad->naviframe);
2875 evas_object_smart_callback_add(ad->naviframe, "transition,finished",
2876 _mp_play_view_start_request, ad);
2884 _mp_play_view_start_request(void *data, Evas_Object * obj, void *event_info)
2886 MP_TA_ACUM_ITEM_END("navi_frame_transition_time", 0);
2887 struct appdata *ad = (struct appdata *)data;
2888 mp_retm_if(!ad, "ad");
2890 mp_playing_view *playing_view = ad->playing_view;
2891 mp_retm_if(!playing_view, "ad");
2894 ad->paused_by_user = FALSE;
2895 mp_play_new_file(data, TRUE);
2897 _mp_play_view_init_progress_bar(data);
2899 evas_object_smart_callback_del(ad->naviframe, "transition,finished", _mp_play_view_start_request);
2908 mp_play_view_load_by_index(mp_layout_data_t * layout_data, int index, bool effect_value)
2910 MP_CHECK_FALSE(layout_data);
2911 MP_CHECK_LAYOUT_DATA(layout_data);
2913 struct appdata *ad = layout_data->ad;
2916 bool reqest_play = false;
2917 char *latest_key_id = NULL;
2918 bool result = false;
2920 music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
2923 latest_key_id = g_strdup(current_item->key_id);
2927 MP_TA_ACUM_ITEM_BEGIN(" create_play_list", 0);
2928 mp_media_list_h svc_handle = NULL;
2930 if (layout_data->view_mode == MP_VIEW_MODE_DEFAULT) {
2931 svc_handle = layout_data->svc_handle; //set current item here!!1
2932 item_count = layout_data->item_count;
2935 svc_handle = layout_data->track_handle; //use track_handle when playback started from search result...
2936 item_count = layout_data->track_count;
2939 result = mp_play_list_create_play_list(ad, svc_handle, item_count, index, layout_data->playlist_id); //set current item here!!1
2941 MP_TA_ACUM_ITEM_END(" create_play_list", 0);
2943 current_item = mp_play_list_get_current_item(ad->playing_list); //reget current item
2945 MP_CHECK_EXCEP(current_item);
2946 MP_CHECK_EXCEP(result);
2947 MP_CHECK_EXCEP(ad->playing_list);
2949 // TODO: support recent play for voice ui.
2950 if (ad->loadtype != LOAD_VOICE_UI) {
2951 MP_TA_ACUM_ITEM_BEGIN(" mp_setting_save_last_played", 0);
2952 mp_setting_save_last_played(layout_data); //store playlist info.
2953 MP_TA_ACUM_ITEM_END(" mp_setting_save_last_played", 0);
2956 if (layout_data->type_str)
2957 ad->playing_list->type_string = g_strdup(layout_data->type_str);
2958 if (layout_data->filter_str)
2959 ad->playing_list->filter_string = g_strdup(layout_data->filter_str);
2960 ad->playing_list->playlist_id = layout_data->playlist_id;
2963 ad->playing_list->item_type = layout_data->track_type;
2965 if (ad->loadtype == LOAD_VOICE_UI) //when there is no transition effect, directly play track.
2967 ad->paused_by_user = FALSE;
2968 mp_play_destory(ad);
2969 mp_play_view_load(ad);
2970 mp_play_new_file(ad, TRUE);
2971 _mp_play_view_init_progress_bar(ad);
2975 if (g_strcmp0(latest_key_id, current_item->key_id))
2978 mp_play_destory(ad);
2983 _mp_play_view_transit_by_item(ad, current_item, true);
2987 MP_TA_ACUM_ITEM_BEGIN(" mp_play_view_load", 0);
2988 mp_play_view_load(ad);
2989 MP_TA_ACUM_ITEM_END(" mp_play_view_load", 0);
2992 evas_object_smart_callback_add(ad->naviframe, "transition,finished",
2993 _mp_play_view_start_request, ad);
2999 IF_FREE(latest_key_id);
3003 IF_FREE(latest_key_id);
3010 mp_play_view_play_item(void *data, struct music_list_item * it, bool effect_value, bool move_left)
3012 struct appdata *ad = (struct appdata *)data;
3015 mp_playing_view *playing_view = ad->playing_view;
3016 MP_CHECK_FALSE(playing_view);
3019 MP_CHECK_FALSE(ad->playing_list);
3021 if (effect_value && (ad->playing_list->count > 1))
3023 if(ad->app_is_foreground)
3024 _mp_play_view_transit_by_item(data, it, move_left);
3027 IF_FREE(playing_view->playing_list_item);
3028 mp_play_list_item_copy(&playing_view->playing_list_item, it);
3029 mp_play_item_play(ad, playing_view->playing_list_item->key_id);
3030 mp_play_view_refresh(data);
3035 if (ad->playing_list)
3037 MP_CHECK_FALSE(ad->playing_list->current_item);
3038 mp_play_item_play(data, ad->playing_list->current_item->key_id);
3040 mp_play_view_refresh(data);
3049 mp_play_view_set_screen_mode(void *data, int mode)
3053 struct appdata *ad = (struct appdata *)data;
3056 if (mode == MP_SCREEN_MODE_LANDSCAPE)
3058 mp_playing_view *playing_view = ad->playing_view;
3062 playing_view->play_view_screen_mode = mode;
3064 if (playing_view->layout)
3066 evas_object_hide(playing_view->layout);
3068 mp_play_view_stop_transit(data);
3070 if (playing_view->layout)
3072 ad->backup_layout_play_view = playing_view->layout;
3073 playing_view->layout = NULL;
3076 ad->backup_playing_view = playing_view;
3077 if(playing_view->progressbar_timer)
3078 ecore_timer_freeze(playing_view->progressbar_timer);
3080 ad->playing_view = NULL;
3086 if (mp_play_list_get_current_item(ad->playing_list)
3087 && ad->backup_playing_view && ad->backup_layout_play_view)
3089 ad->playing_view = ad->backup_playing_view;
3090 ad->playing_view->layout = ad->backup_layout_play_view;
3091 ad->playing_view->play_view_screen_mode = MP_SCREEN_MODE_PORTRAIT;
3093 mp_play_view_stop_transit(ad); //reset transition effect
3095 _mp_play_view_set_menu_item(ad); //reset menu item
3097 mp_play_view_refresh(ad);
3099 evas_object_show(ad->playing_view->layout);
3100 evas_object_show(ad->base_layout_main);
3102 ad->backup_playing_view = NULL;
3103 ad->backup_layout_play_view = NULL;
3107 evas_object_show(ad->base_layout_main);
3116 #ifndef MP_SOUND_PLAYER
3118 mp_play_view_create_library(void *data)
3120 // create library view , that function use for loadtype is track , that do not support one one track view
3123 struct appdata *ad = data;
3126 if (!ad->base_layout_main)
3128 ad->request_group_type = -1;
3130 mp_library_create(ad);
3131 MP_CHECK_FALSE(ad->library);
3134 ad->b_add_tracks = 0;
3135 elm_toolbar_item_selected_set(ad->library->ctltab_songs, EINA_TRUE);
3136 Evas_Object *layout = mp_view_manager_get_last_view_layout(ad);
3137 mp_view_layout_set_edit_mode(mp_util_get_layout_data(layout), false);
3146 * @param data ,appdata
3147 * @return FALSE or TRUE if it success create
3148 * @author aramie.kim@samsung.com
3152 mp_play_view_create(void *data)
3154 struct appdata *ad = data;
3155 mp_retvm_if(!ad, FALSE, "ad is invalid");
3157 mp_retvm_if(ad->playing_view != NULL, FALSE, "ad playing_view is is valid exit create");
3159 ad->playing_view = malloc(sizeof(mp_playing_view));
3160 MP_CHECK_FALSE(ad->playing_view);
3161 memset(ad->playing_view, 0, sizeof(mp_playing_view));
3163 ad->playing_view->ad = ad;
3165 _mp_play_view_init(ad);
3171 mp_play_view_destory(void *data)
3174 struct appdata *ad = (struct appdata *)data;
3177 mp_playing_view *playing_view = ad->playing_view;
3178 MP_CHECK_FALSE(playing_view);
3180 if (playing_view->layout)
3182 mp_evas_object_del(playing_view->layout); //=> call _mp_play_view_layout_del_cb watchout
3185 IF_FREE(ad->playing_view);
3191 mp_play_view_load(void *data)
3195 struct appdata *ad = (struct appdata *)data;
3198 MP_TA_ACUM_ITEM_BEGIN(" mp_play_view_create", 0);
3199 mp_play_view_create(data);
3200 MP_TA_ACUM_ITEM_END(" mp_play_view_create", 0);
3202 mp_playing_view *playing_view = ad->playing_view;
3203 MP_CHECK_FALSE(playing_view);
3205 MP_TA_ACUM_ITEM_BEGIN(" _mp_play_view_create_layout", 0);
3206 _mp_play_view_create_layout(data);
3207 MP_TA_ACUM_ITEM_END(" _mp_play_view_create_layout", 0);
3208 MP_CHECK_FALSE(playing_view->layout);
3210 MP_TA_ACUM_ITEM_BEGIN(" mp_play_view_refresh", 0);
3211 mp_play_view_refresh(data);
3212 MP_TA_ACUM_ITEM_END(" mp_play_view_refresh", 0);
3220 mp_play_view_pop(void *data)
3223 struct appdata *ad = (struct appdata *)data;
3226 mp_playing_view *playing_view = ad->playing_view;
3227 MP_CHECK_FALSE(playing_view);
3228 #ifdef MP_SOUND_PLAYER
3229 mp_play_view_unswallow_info_ug_layout(ad);
3231 if (ad->playing_view)
3232 sp_view_mgr_pop_view_to(ad->view_mgr, SP_VIEW_TYPE_PLAY);
3234 mp_view_manager_pop_play_view(ad);
3241 mp_play_view_refresh(void *data)
3245 struct appdata *ad = (struct appdata *)data;
3248 mp_playing_view *playing_view = ad->playing_view;
3249 MP_CHECK_FALSE(playing_view);
3251 MP_TA_ACUM_ITEM_BEGIN(" mp_play_view_load_track", 0);
3252 mp_play_view_load_track(ad);
3253 MP_TA_ACUM_ITEM_END(" mp_play_view_load_track", 0);
3255 mp_play_view_set_menu_state(ad, false, false);
3257 _mp_play_view_init_progress_bar(data);
3259 const Evas_Object *play_icon = elm_object_part_content_get(ad->playing_view->play_control, "buttons");
3260 if (play_icon != NULL)
3262 player_state_e player_state = mp_player_mgr_get_state();
3263 if (player_state != PLAYER_STATE_PLAYING)
3265 edje_object_signal_emit(_EDJ(play_icon), "play", CTR_PROG_SIG_SRC);
3269 edje_object_signal_emit(_EDJ(play_icon), "pause", CTR_PROG_SIG_SRC);
3277 #ifdef MP_SOUND_PLAYER
3278 void mp_play_view_unswallow_info_ug_layout(struct appdata *ad)
3282 if(ad->info_ug_base)
3284 edje_object_part_unswallow(ad->info_ug_base, ad->info_ug_layout);
3285 evas_object_hide(ad->info_ug_layout);
3286 mp_ug_send_message(ad, MP_UG_MESSAGE_DEL);
3292 _mp_play_view_popup_response_cb(void *data, Evas_Object * obj, void *event_info)
3294 mp_evas_object_del(obj);
3299 mp_play_view_load_by_voice_ui(struct appdata *ad, const char *request_title)
3304 bool success = true;
3305 char *popup_txt = NULL;
3306 mp_layout_data_t *layout_data = NULL;
3309 switch (ad->launch_type)
3311 case MP_LAUNCH_PLAY_RECENT:
3313 if (ecore_file_exists(MP_RECENT_PLAYED_INI_FILE_NAME) || !ecore_file_exists(MP_NOWPLAYING_INI_FILE_NAME))
3315 layout_data = calloc(1, sizeof(mp_layout_data_t));
3317 MP_CHECK_FALSE(layout_data);
3318 MP_SET_LAYOUT_DATA_MAGIC(layout_data);
3319 if (mp_util_get_recent_play_data(layout_data, &index, NULL))
3321 layout_data->ad = ad;
3323 mp_play_view_load_by_index(layout_data, index, false);
3325 if (layout_data->svc_handle)
3327 mp_media_info_list_destroy(layout_data->svc_handle);
3333 popup_txt = GET_SYS_STR("IDS_COM_POP_FILE_NOT_EXIST");
3335 IF_FREE(layout_data->type_str);
3336 IF_FREE(layout_data->filter_str);
3341 if (ecore_file_exists(MP_NOWPLAYING_INI_FILE_NAME))
3344 if (mp_util_get_recent_play_data(NULL, NULL, &path))
3346 mp_play_view_load_by_path(ad, path);
3352 popup_txt = GET_SYS_STR("IDS_COM_POP_FILE_NOT_EXIST");
3358 popup_txt = GET_SYS_STR("IDS_COM_POP_FILE_NOT_EXIST");
3365 case MP_LAUNCH_PLAY_PLAYLIST:
3367 layout_data = calloc(1, sizeof(mp_layout_data_t));
3369 MP_CHECK_FALSE(layout_data);
3370 MP_SET_LAYOUT_DATA_MAGIC(layout_data);
3371 if (mp_util_get_playlist_data(layout_data, &index, request_title))
3373 layout_data->ad = ad;
3375 mp_play_view_load_by_index(layout_data, index, false);
3377 if (layout_data->svc_handle)
3379 mp_media_info_list_destroy(layout_data->svc_handle);
3385 popup_txt = GET_SYS_STR("IDS_COM_BODY_NO_CONTENTS");
3390 case MP_LAUNCH_PLAY_GROUP:
3392 layout_data = calloc(1, sizeof(mp_layout_data_t));
3393 MP_CHECK_FALSE(layout_data);
3394 MP_SET_LAYOUT_DATA_MAGIC(layout_data);
3396 layout_data->ad = ad;
3397 layout_data->filter_str = (char *)request_title;
3398 layout_data->track_type = ad->track_type;
3399 layout_data->group_type = ad->group_type;
3400 layout_data->playlist_id = -1;
3402 if (mp_util_get_list_data(layout_data))
3404 mp_play_view_load_by_index(layout_data, 0, false);
3406 if (layout_data->svc_handle)
3408 mp_media_info_group_list_destroy(layout_data->svc_handle);
3414 popup_txt = GET_SYS_STR("IDS_COM_BODY_NO_CONTENTS");
3419 case MP_LAUNCH_PLAY_SOMETHING:
3421 layout_data = calloc(1, sizeof(mp_layout_data_t));
3422 MP_CHECK_FALSE(layout_data);
3423 MP_SET_LAYOUT_DATA_MAGIC(layout_data);
3425 layout_data->ad = ad;
3426 layout_data->filter_str = (char *)request_title;
3427 layout_data->playlist_id = -1;
3429 if (mp_util_get_list_data(layout_data))
3431 layout_data->ad = ad;
3433 mp_play_view_load_by_index(layout_data, 0, false);
3435 if (layout_data->svc_handle)
3437 mp_media_info_group_list_destroy(layout_data->svc_handle);
3443 popup_txt = GET_SYS_STR("IDS_COM_BODY_NO_CONTENTS");
3450 WARN_TRACE("Unsupported type: %d", ad->launch_type);
3456 Evas_Object *popup = mp_popup_create(ad->win_main, MP_POPUP_NORMAL, NULL, ad, _mp_play_view_popup_response_cb, ad);
3457 elm_object_text_set(popup, popup_txt);
3458 mp_popup_button_set(popup, MP_POPUP_BTN_1, GET_SYS_STR("IDS_COM_SK_OK"), MP_POPUP_YES);
3459 mp_popup_timeout_set(popup, MP_POPUP_TIMEOUT);
3460 evas_object_show(ad->win_main);
3461 evas_object_show(popup);