initial tizen_2.0_beta
[apps/core/preloaded/music-player.git] / src / view / mp-library.c
index 67535fb..a480ee0 100755 (executable)
@@ -1,11 +1,11 @@
 /*
- * Copyright 2012  Samsung Electronics Co., Ltd
+ * Copyright 2012        Samsung Electronics Co., Ltd
  *
  * Licensed under the Flora License, Version 1.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  *
- *     http://www.tizenopensource.org/license
+ *  http://www.tizenopensource.org/license
  *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
@@ -14,9 +14,8 @@
  * limitations under the License.
  */
 
-
-
 #include "mp-library.h"
+#include "mp-ta.h"
 #include "mp-setting-ctrl.h"
 #include "mp-player-debug.h"
 #include "mp-common.h"
@@ -30,7 +29,7 @@
 
 static void _mp_library_init(void *data);
 static Evas_Object *_mp_library_create_layout_main(Evas_Object * parent);
-static Evas_Object *_mp_library_create_control_bar(struct appdata *ad);
+static Evas_Object *_mp_library_create_tabbar(struct appdata *ad);
 static void _mp_library_controlbar_item_append(struct appdata *ad, mp_setting_menu_t * menu_state);
 static bool _mp_library_check_request_item(struct appdata *ad);
 
@@ -52,10 +51,19 @@ _mp_library_create_layout_main(Evas_Object * parent)
        Evas_Object *layout;
 
        mp_retv_if(parent == NULL, NULL);
+       MP_TA_ACUM_ITEM_BEGIN("        elm_layout_add", 0);
        layout = elm_layout_add(parent);
+       MP_TA_ACUM_ITEM_END("        elm_layout_add", 0);
        mp_retvm_if(layout == NULL, NULL, "Failed elm_layout_add.\n");
 
-       elm_layout_theme_set(layout, "layout", "application", "default");
+       MP_TA_ACUM_ITEM_BEGIN("        elm_layout_theme_set", 0);
+       const char *profile = elm_config_profile_get();
+       mp_debug("elm_profile = %s", profile);
+       if (!g_strcmp0(profile, "desktop"))
+               elm_layout_theme_set(layout, "layout", "application", "noindicator");
+       else
+               elm_layout_theme_set(layout, "layout", "application", "default");
+       MP_TA_ACUM_ITEM_END("        elm_layout_theme_set", 0);
        evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        elm_win_resize_object_add(parent, layout);
 
@@ -65,38 +73,43 @@ _mp_library_create_layout_main(Evas_Object * parent)
 }
 
 static Evas_Object *
-_mp_library_create_control_bar(struct appdata *ad)
+_mp_library_create_tabbar(struct appdata *ad)
 {
        Evas_Object *obj;
 
-       obj = elm_toolbar_add(ad->controlbar_layout);
+       /* create controlbar */
+       MP_TA_ACUM_ITEM_BEGIN("        elm_toolbar_add()", 0);
+
+       obj = elm_toolbar_add(ad->naviframe);
        elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
-       mp_retvm_if(obj == NULL, NULL, "Fail to create control bar");
-       elm_object_style_set(obj, "music/tabbar");
        elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
+       elm_object_style_set(obj, "tabbar");
 
+       MP_TA_ACUM_ITEM_END("        elm_toolbar_add()", 0);
+       mp_retvm_if(obj == NULL, NULL, "Fail to create control bar");
+
+       MP_TA_ACUM_ITEM_BEGIN("        mp_setting_menu_get_state", 0);
        mp_setting_menu_t menu_state;
        mp_setting_menu_get_state(&menu_state);
+       MP_TA_ACUM_ITEM_END("        mp_setting_menu_get_state", 0);
 
-       ad->ctrl_bar = obj;
+       ad->tabbar = obj;
+       MP_TA_ACUM_ITEM_BEGIN("        _mp_library_controlbar_item_append", 0);
        _mp_library_controlbar_item_append(ad, &menu_state);
+       MP_TA_ACUM_ITEM_END("        _mp_library_controlbar_item_append", 0);
        evas_object_show(obj);
 
-       elm_object_part_content_set(ad->controlbar_layout, "elm.swallow.controlbar", obj);
-
        return obj;
 }
 
+// update menu when menu changed while bgm.
 static void
 _mp_library_menu_changed(mp_setting_menu_t * menu_state, void *data)
 {
        struct appdata *ad = (struct appdata *)data;
 
-       Evas_Object *obj;
-       obj = ad->ctrl_bar;
-
        MP_CHECK(ad->library->ctltab_songs);
-       MP_CHECK(obj);
+       MP_CHECK(ad->tabbar);
 
        DEBUG_TRACE("loadtype=%d", ad->loadtype);
        if (ad->loadtype == LOAD_TRACK)
@@ -105,12 +118,19 @@ _mp_library_menu_changed(mp_setting_menu_t * menu_state, void *data)
                return;
        }
 
-       ad->music_setting_change_flag = true;
+       //set data from music setting
        ad->library->albums = menu_state->albums;
        ad->library->artists = menu_state->artists;
        ad->library->genres = menu_state->genres;
        ad->library->composers = menu_state->composers;
        ad->library->years = menu_state->years;
+       ad->library->folders = menu_state->folders;
+
+       if (ad->setting_ug) {
+               mp_debug("setting ug on playing view.. reserve menu change");
+               ad->music_setting_change_flag = true;
+               return;
+       }
 
        mp_util_set_library_controlbar_items(ad);
 }
@@ -122,38 +142,83 @@ _mp_library_controlbar_item_append(struct appdata *ad, mp_setting_menu_t * menu_
 
        Evas_Object *obj;
 
-       obj = ad->ctrl_bar;
+       obj = ad->tabbar;
 
+       ad->library->first_append = true;
+       MP_TA_ACUM_ITEM_BEGIN("          CONTROLBAR_SYSTEM_ICON_SONGS", 0);
        ad->library->ctltab_songs =
                elm_toolbar_item_append(obj, MP_CTRBAR_ICON_SONGS, GET_STR(STR_MP_ALL_TRACKS), mp_library_view_change_cb, ad);
+       mp_language_mgr_register_object_item(ad->library->ctltab_songs, STR_MP_ALL_TRACKS);
+       MP_TA_ACUM_ITEM_END("          CONTROLBAR_SYSTEM_ICON_SONGS", 0);
+       MP_TA_ACUM_ITEM_BEGIN("          elm_toolbar_item_append", 0);
+       ad->library->first_append = false;
 
        ad->library->ctltab_plist =
                elm_toolbar_item_append(obj, MP_CTRBAR_ICON_PLAYLIST, GET_STR(STR_MP_PLAYLISTS), mp_library_view_change_cb, ad);
+       mp_language_mgr_register_object_item( ad->library->ctltab_plist,STR_MP_PLAYLISTS);
 
+       MP_TA_ACUM_ITEM_END("          elm_toolbar_item_append", 0);
+       MP_TA_ACUM_ITEM_BEGIN("          elm_toolbar_item_append", 0);
        if (menu_state->albums)
+       {
                ad->library->ctltab_album =
                        elm_toolbar_item_append(obj, MP_CTRBAR_ICON_ALBUM, GET_STR(STR_MP_ALBUMS), mp_library_view_change_cb, ad);
-
+               mp_language_mgr_register_object_item( ad->library->ctltab_album, STR_MP_ALBUMS);
+       }
+       MP_TA_ACUM_ITEM_END("          elm_toolbar_item_append", 0);
+       MP_TA_ACUM_ITEM_BEGIN("          elm_toolbar_item_append", 0);
        if (menu_state->artists)
+       {
                ad->library->ctltab_artist =
                        elm_toolbar_item_append(obj, MP_CTRBAR_ICON_ARTIST, GET_STR(STR_MP_ARTISTS), mp_library_view_change_cb, ad);
-
+               mp_language_mgr_register_object_item( ad->library->ctltab_artist, STR_MP_ARTISTS);
+       }
+       MP_TA_ACUM_ITEM_END("          elm_toolbar_item_append", 0);
+       MP_TA_ACUM_ITEM_BEGIN("          elm_toolbar_item_append", 0);
        if (menu_state->genres)
+       {
                ad->library->ctltab_genres =
                        elm_toolbar_item_append(obj, MP_CTRBAR_ICON_GENRE, GET_STR(STR_MP_GENRES), mp_library_view_change_cb, ad);
-
+               mp_language_mgr_register_object_item( ad->library->ctltab_genres, STR_MP_GENRES);
+       }
+       MP_TA_ACUM_ITEM_END("          elm_toolbar_item_append", 0);
+       MP_TA_ACUM_ITEM_BEGIN("          elm_toolbar_item_append", 0);
        if (menu_state->composers)
+       {
                ad->library->ctltab_composer =
                        elm_toolbar_item_append(obj, MP_CTRBAR_ICON_COMPOSER, GET_STR(STR_MP_COMPOSERS), mp_library_view_change_cb, ad);
-
+               mp_language_mgr_register_object_item( ad->library->ctltab_composer,STR_MP_COMPOSERS);
+       }
+       MP_TA_ACUM_ITEM_END("          elm_toolbar_item_append", 0);
+       MP_TA_ACUM_ITEM_BEGIN("          elm_toolbar_item_append", 0);
        if (menu_state->years)
+       {
                ad->library->ctltab_year =
                        elm_toolbar_item_append(obj, MP_CTRBAR_ICON_YEAR, GET_STR(STR_MP_YEARS), mp_library_view_change_cb, ad);
+               mp_language_mgr_register_object_item( ad->library->ctltab_year, STR_MP_YEARS);
+       }
+       MP_TA_ACUM_ITEM_END("          elm_toolbar_item_append", 0);
+       MP_TA_ACUM_ITEM_BEGIN("          elm_toolbar_item_append", 0);
+       if (menu_state->folders)
+       {
+               ad->library->ctltab_folder =
+                       elm_toolbar_item_append(obj, MP_CTRBAR_ICON_FOLDER, GET_SYS_STR(STR_MP_FOLDERS), mp_library_view_change_cb, ad);
+               mp_language_mgr_register_object_item(ad->library->ctltab_folder, STR_MP_FOLDERS);
+       }
+       MP_TA_ACUM_ITEM_END("          elm_toolbar_item_append", 0);
 
        mp_setting_menu_set_callback(_mp_library_menu_changed, ad);
 
 }
 
+/**
+ * load view  use for _mp_library_view_change_cb
+ *
+ * @param void *data, Evas_Object* navi_bar
+ * @return FALSE or TRUE if it success create
+ * @author aramie.kim@samsung.com
+ */
+
 static bool
 _mp_library_load_request_view(void *data, Evas_Object * navi_bar)
 {
@@ -169,12 +234,14 @@ _mp_library_load_request_view(void *data, Evas_Object * navi_bar)
                mp_debug("group name = %s", ad->request_group_name);
                mp_group_view_create_by_group_name(navi_bar, ad->request_group_name, ad->request_group_type);
                IF_FREE(ad->request_group_name);
+               ad->update_default_view = TRUE;
        }
        else if (ad->request_play_id > -1)
        {
                mp_debug("play list id = %d", ad->request_play_id);
                mp_playlist_view_create_by_id(navi_bar, ad->request_play_id);
                ad->request_play_id = -1;
+               ad->update_default_view = TRUE;
        }
        else
        {
@@ -187,66 +254,126 @@ _mp_library_load_request_view(void *data, Evas_Object * navi_bar)
        return true;
 }
 
+static Elm_Object_Item *
+_mp_library_get_request_control_item(struct appdata *ad)
+{
+       Elm_Object_Item *select_request_item = NULL;
+
+       if (ad->loadtype == LOAD_DEFAULT)
+       {
+               select_request_item = ad->library->ctltab_songs;
+       }
+       else if (ad->loadtype == LOAD_PLAYLIST)
+       {
+               select_request_item = ad->library->ctltab_plist;
+       }
+       else if (ad->loadtype == LOAD_GROUP)
+       {
+               mp_setting_menu_t menu_state;
+               mp_setting_menu_get_state(&menu_state);
+
+               if (ad->request_group_type == MP_GROUP_BY_ARTIST)
+               {
+                       if (menu_state.artists)
+                               select_request_item = ad->library->ctltab_artist;
+               }
+               else if (ad->request_group_type == MP_GROUP_BY_ALBUM)
+               {
+                       if (menu_state.albums)
+                               select_request_item = ad->library->ctltab_album;
+               }
+               else if (ad->request_group_type == MP_GROUP_BY_GENRE)
+               {
+                       if (menu_state.genres)
+                               select_request_item = ad->library->ctltab_genres;
+               }
+               else if (ad->request_group_type == MP_GROUP_BY_COMPOSER)
+               {
+                       if (menu_state.composers)
+                               select_request_item = ad->library->ctltab_composer;
+               }
+               else if (ad->request_group_type == MP_GROUP_BY_YEAR)
+               {
+                       if (menu_state.years)
+                               select_request_item = ad->library->ctltab_year;
+               }
+               else if (ad->request_group_type == MP_GROUP_BY_FOLDER)
+               {
+                       if (menu_state.folders)
+                               select_request_item = ad->library->ctltab_folder;
+               }
+               else
+               {
+                       mp_error("can not support that value");
+               }
+       }
+
+       return select_request_item;
+}
+
+
 static void
 _mp_library_show_selected_view(struct appdata *ad, const char *label)
 {
        MP_CHECK(ad);
-       MP_CHECK(ad->library);
        MP_CHECK(label);
 
-       Evas_Object *navi_bar = NULL;
+       Evas_Object *content = NULL;
        view_data_t *view_data = NULL;
+       mp_layout_data_t *layout_data = NULL;
 
-       DEBUG_TRACE("label: %s", label);
+       DEBUG_TRACE("selected view: %s", label);
 
-       if (ad->notify != NULL)
-       {
-               evas_object_del(ad->notify);
-       }
-       if (ad->notify_layout != NULL)
-       {
-               evas_object_del(ad->notify_layout);
-       }
+       mp_evas_object_del(ad->notify);
+       mp_evas_object_del(ad->notify_layout);
 
-       ad->notify = NULL;
-       ad->notify_layout = NULL;
+       content = elm_object_part_content_unset(ad->controlbar_layout, "elm.swallow.content");
 
-       if (ad->library->cur_view)
+       if (content)
        {
+               DEBUG_TRACE("destory previous view");
                mp_view_manager_unswallow_info_ug_layout(ad);
-               evas_object_del(ad->library->cur_view);
-               ad->library->cur_view = NULL;
-               mp_view_manager_clear(ad);
+               evas_object_del(content);
+               content = NULL;
        }
 
        if (!strcmp(label, GET_STR(STR_MP_ALL_TRACKS)))
        {
-               navi_bar = mp_track_view_create(ad);
-               mp_track_view_update_title_button(navi_bar);
+               MP_TA_ACUM_ITEM_BEGIN("       mp_track_view_create", 0);
+               content = mp_track_view_create(ad);
+               MP_TA_ACUM_ITEM_END("       mp_track_view_create", 0);
+               MP_TA_ACUM_ITEM_BEGIN("       mp_track_view_update_title_button", 0);
+               mp_track_view_update_title_button(ad->naviframe);
+               MP_TA_ACUM_ITEM_END("       mp_track_view_update_title_button", 0);
        }
        else if (!strcmp(label, GET_STR(STR_MP_ALBUMS)))
        {
-               navi_bar = mp_group_view_create(ad, MP_VIEW_TYPE_ALBUM);
+               content = mp_group_view_create(ad, MP_VIEW_TYPE_ALBUM);
        }
        else if (!strcmp(label, GET_STR(STR_MP_ARTISTS)))
        {
-               navi_bar = mp_group_view_create(ad, MP_VIEW_TYPE_ARTIST);
+               content = mp_group_view_create(ad, MP_VIEW_TYPE_ARTIST);
        }
        else if (!strcmp(label, GET_STR(STR_MP_GENRES)))
        {
-               navi_bar = mp_group_view_create(ad, MP_VIEW_TYPE_GENRE);
+               content = mp_group_view_create(ad, MP_VIEW_TYPE_GENRE);
        }
        else if (!strcmp(label, GET_STR(STR_MP_YEARS)))
        {
-               navi_bar = mp_group_view_create(ad, MP_VIEW_TYPE_YEAR);
+               content = mp_group_view_create(ad, MP_VIEW_TYPE_YEAR);
        }
        else if (!strcmp(label, GET_STR(STR_MP_COMPOSERS)))
        {
-               navi_bar = mp_group_view_create(ad, MP_VIEW_TYPE_COMPOSER);
+               content = mp_group_view_create(ad, MP_VIEW_TYPE_COMPOSER);
        }
+       else if (!strcmp(label, GET_SYS_STR(STR_MP_FOLDERS)))
+       {
+               content = mp_group_view_create(ad, MP_VIEW_TYPE_FOLDER);
+       }
+
        else if (!strcmp(label, GET_STR(STR_MP_PLAYLISTS)))
        {
-               navi_bar = mp_playlist_view_create(ad, MP_VIEW_TYPE_PLAYLIST);
+               content = mp_playlist_view_create(ad, MP_VIEW_TYPE_PLAYLIST);
        }
        else
        {
@@ -254,44 +381,55 @@ _mp_library_show_selected_view(struct appdata *ad, const char *label)
                return;
        }
 
+       MP_CHECK(content);
+
+       layout_data = evas_object_data_get(content, "layout_data");
+       MP_CHECK(layout_data);
+
        if (strcmp(label, GET_STR(STR_MP_ALL_TRACKS)))
        {
                ad->b_add_tracks = FALSE;
        }
 
-       elm_object_part_content_set(ad->controlbar_layout, "elm.swallow.content", navi_bar);
-       ad->library->cur_view = navi_bar;
+       elm_object_part_content_set(ad->controlbar_layout, "elm.swallow.content", content);
+       mp_view_layout_update(content);
 
-       if (!_mp_library_load_request_view(ad, navi_bar))
+       if (!_mp_library_load_request_view(ad, ad->naviframe))
        {
                DEBUG_TRACE("Update default layout...");
-               view_data = (view_data_t *) evas_object_data_get(ad->library->cur_view, "view_data");
+               view_data = (view_data_t *) evas_object_data_get(ad->naviframe, "view_data");
                MP_CHECK(view_data);
                MP_CHECK_VIEW_DATA(view_data);
 
-               Evas_Object *view_layout = mp_view_manager_get_last_view_layout(ad);
                if (view_data->view_type == MP_VIEW_TYPE_PLAYLIST)
                {
-                       mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
-                       if (layout_data)
-                               mp_playlist_view_update_navibutton(layout_data);
+                       mp_playlist_view_update_navibutton(layout_data);
                }
-
-               mp_view_layout_update(view_layout);
        }
 
-       evas_object_show(navi_bar);
+       evas_object_show(content);
 }
 
-void
-mp_library_view_change_cb(void *data, Evas_Object * obj, void *event_info)
+void mp_library_view_change_cb(void *data, Evas_Object * obj, void *event_info)
 {
        struct appdata *ad = (struct appdata *)data;
        Elm_Object_Item *it;
+       view_data_t *view_data = mp_util_get_view_data(ad);
 
        MP_CHECK(ad);
        DEBUG_TRACE_FUNC();
 
+       if (ad->library->first_append && ad->launch_type == MP_LAUNCH_ADD_TO_HOME) {
+               WARN_TRACE("add to home.. first view change");
+               ad->library->first_append = false;
+               return;
+       }
+
+       if(mp_view_manager_count_view_content(view_data) > 1)
+       {
+               DEBUG_TRACE("pop to first view");
+               mp_view_manager_pop_view_content(view_data, true, true);
+       }
        it = elm_toolbar_selected_item_get(obj);
        mp_retm_if(it == NULL, "tab item is NULL");
        const char *label = elm_object_item_text_get(it);
@@ -303,58 +441,6 @@ mp_library_view_change_cb(void *data, Evas_Object * obj, void *event_info)
 }
 
 
-static Elm_Object_Item *
-_mp_library_get_request_control_item(struct appdata *ad)
-{
-       Elm_Object_Item *select_request_item = NULL;
-
-       if (ad->loadtype == LOAD_DEFAULT)
-       {
-               select_request_item = ad->library->ctltab_songs;
-       }
-       else if (ad->loadtype == LOAD_PLAYLIST)
-       {
-               select_request_item = ad->library->ctltab_plist;
-       }
-       else if (ad->loadtype == LOAD_GROUP)
-       {
-               mp_setting_menu_t menu_state;
-               mp_setting_menu_get_state(&menu_state);
-
-               if (ad->request_group_type == AUDIO_SVC_GROUP_BY_ARTIST)
-               {
-                       if (menu_state.artists)
-                               select_request_item = ad->library->ctltab_artist;
-               }
-               else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_ALBUM)
-               {
-                       if (menu_state.albums)
-                               select_request_item = ad->library->ctltab_album;
-               }
-               else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_GENRE)
-               {
-                       if (menu_state.genres)
-                               select_request_item = ad->library->ctltab_genres;
-               }
-               else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_COMPOSER)
-               {
-                       if (menu_state.composers)
-                               select_request_item = ad->library->ctltab_composer;
-               }
-               else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_YEAR)
-               {
-                       if (menu_state.years)
-                               select_request_item = ad->library->ctltab_year;
-               }
-               else
-               {
-                       mp_error("can not support that value");
-               }
-       }
-
-       return select_request_item;
-}
-
 static bool
 _mp_library_check_request_item(struct appdata *ad)
 {
@@ -362,58 +448,78 @@ _mp_library_check_request_item(struct appdata *ad)
 
        char *popup_text = NULL;
        int count = -1;
-       int ret = AUDIO_SVC_ERROR_NONE;
+       int ret = 0;
        MP_CHECK_FALSE(ad);
 
        if (!ad->request_group_name && ad->request_play_id > -1)
        {
-               char plst_name[AUDIO_SVC_PLAYLIST_NAME_SIZE] = "";
-               ret = audio_svc_get_playlist_name_by_playlist_id(ad->media_svc_handle, ad->request_play_id, plst_name,
-                                                                AUDIO_SVC_PLAYLIST_NAME_SIZE);
+               int i = 0;
+               mp_media_list_h list = NULL;
+
+               ret = mp_media_info_group_list_count(MP_GROUP_BY_PLAYLIST, NULL, NULL, &count);
+               MP_CHECK_FALSE(ret == 0);
+
+               ret = mp_media_info_group_list_create(&list, MP_GROUP_BY_PLAYLIST, NULL, NULL, 0, count);
+               MP_CHECK_FALSE(ret == 0);
+
+               for(i=0; i<count; i++)
+               {
+                       int playlist_id;
+                       mp_media_info_h media = NULL;
+                       media = mp_media_info_group_list_nth_item(list, i);
+                       mp_media_info_group_get_playlist_id(media, &playlist_id);
+                       if(playlist_id == ad->request_play_id)
+                       {
+                               break;
+                       }
+               }
 
-               if (!(ret == AUDIO_SVC_ERROR_NONE && g_strcmp0(plst_name, "")))
+               if (i == count)
                {
                        IF_FREE(ad->request_group_name);
                        ad->request_play_id = -1;
                        mp_error("removed play list");
-                       popup_text = g_strdup_printf(GET_STR("IDS_MUSIC_BODY_NO_PLAYLISTS"));
+                       popup_text = g_strdup(GET_STR("IDS_MUSIC_BODY_NO_PLAYLISTS"));
                }
        }
        else if (ad->request_group_name)
        {
-               audio_svc_track_type_e list_type = AUDIO_SVC_TRACK_ALL;
+               mp_track_type_e list_type = MP_TRACK_ALL;
 
                switch (ad->request_group_type)
                {
-               case AUDIO_SVC_GROUP_BY_ALBUM:
+               case MP_GROUP_BY_ALBUM:
                        DEBUG_TRACE("create album detail view");
-                       list_type = AUDIO_SVC_TRACK_BY_ALBUM;
+                       list_type = MP_TRACK_BY_ALBUM;
                        break;
-               case AUDIO_SVC_GROUP_BY_ARTIST:
+               case MP_GROUP_BY_ARTIST:
                        DEBUG_TRACE("create artist detail view");
-                       list_type = AUDIO_SVC_TRACK_BY_ARTIST;
+                       list_type = MP_TRACK_BY_ARTIST;
                        break;
-               case AUDIO_SVC_GROUP_BY_GENRE:
+               case MP_GROUP_BY_GENRE:
                        DEBUG_TRACE("create genre detail view");
-                       list_type = AUDIO_SVC_TRACK_BY_GENRE;
+                       list_type = MP_TRACK_BY_GENRE;
                        break;
-               case AUDIO_SVC_GROUP_BY_YEAR:
+               case MP_GROUP_BY_YEAR:
                        DEBUG_TRACE("create year detail view");
-                       list_type = AUDIO_SVC_TRACK_BY_YEAR;
+                       list_type = MP_TRACK_BY_YEAR;
                        break;
-               case AUDIO_SVC_GROUP_BY_COMPOSER:
+               case MP_GROUP_BY_COMPOSER:
                        DEBUG_TRACE("create composer detail view");
-                       list_type = AUDIO_SVC_TRACK_BY_COMPOSER;
+                       list_type = MP_TRACK_BY_COMPOSER;
+                       break;
+               case MP_GROUP_BY_FOLDER:
+                       DEBUG_TRACE("create folder detail view");
+                       list_type = MP_TRACK_BY_FOLDER;
                        break;
                default:
                        break;
                }
 
-               ret = audio_svc_count_list_item(ad->media_svc_handle, list_type, ad->request_group_name, NULL, NULL, NULL, &count);
-
+               ret = mp_media_info_list_count(list_type, ad->request_group_name, NULL, NULL, 0, &count);
                mp_debug("group cout %d", count);
 
-               if (!(ret == AUDIO_SVC_ERROR_NONE && count > 0))
+               if (!(ret == 0 && count > 0))
                {
                        mp_error("removed group");
                        char *fmt = GET_STR("IDS_MUSIC_POP_PS_REMOVED");
@@ -432,14 +538,14 @@ _mp_library_check_request_item(struct appdata *ad)
                {
                        mp_error("removed file");
                        IF_FREE(ad->request_playing_path);
-                       popup_text = g_strdup(GET_SYS_STR("IDS_COM_POP_FILE_NOT_EXIST"));
+                       popup_text = g_strdup_printf(GET_SYS_STR("IDS_COM_POP_FILE_NOT_EXIST"));
                }
        }
 
        if (popup_text)
        {
                mp_widget_text_popup(ad, popup_text);
-               IF_FREE(popup_text);
+               free(popup_text);
                return false;
        }
 
@@ -451,26 +557,30 @@ _mp_library_get_control_tab_label(struct appdata *ad)
 {
        MP_CHECK_NULL(ad);
        char *label = NULL;
-       if (ad->request_group_type == AUDIO_SVC_GROUP_BY_ARTIST)
+       if (ad->request_group_type == MP_GROUP_BY_ARTIST)
        {
                label = GET_STR(STR_MP_ARTISTS);
        }
-       else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_ALBUM)
+       else if (ad->request_group_type == MP_GROUP_BY_ALBUM)
        {
                label = GET_STR(STR_MP_ALBUMS);
        }
-       else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_GENRE)
+       else if (ad->request_group_type == MP_GROUP_BY_GENRE)
        {
                label = GET_STR(STR_MP_GENRES);
        }
-       else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_COMPOSER)
+       else if (ad->request_group_type == MP_GROUP_BY_COMPOSER)
        {
                label = GET_STR(STR_MP_COMPOSERS);
        }
-       else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_YEAR)
+       else if (ad->request_group_type == MP_GROUP_BY_YEAR)
        {
                label = GET_STR(STR_MP_YEARS);
        }
+       else if (ad->request_group_type == MP_GROUP_BY_FOLDER)
+       {
+               label = GET_SYS_STR(STR_MP_FOLDERS);
+       }
        else
        {
                mp_error("can not support that value");
@@ -478,6 +588,14 @@ _mp_library_get_control_tab_label(struct appdata *ad)
        return label;
 }
 
+/**
+ * load library use for add to home case
+ *
+ * @param struct appdata *ad, char *path, int fid
+ * @return FALSE or TRUE if it success create
+ * @author aramie.kim@samsung.com
+ */
+
 bool
 mp_library_load(struct appdata * ad)
 {
@@ -491,13 +609,14 @@ mp_library_load(struct appdata * ad)
        }
        else
        {
+               //Select current tab
                Elm_Object_Item *selected_item = NULL;
                Elm_Object_Item *select_request_item = NULL;
 
-               if (!ad->ctrl_bar)
-                       _mp_library_create_control_bar(ad);
+               if (!ad->tabbar)
+                       _mp_library_create_tabbar(ad);
                else
-                       selected_item = elm_toolbar_selected_item_get(ad->ctrl_bar);
+                       selected_item = elm_toolbar_selected_item_get(ad->tabbar);
 
                select_request_item = _mp_library_get_request_control_item(ad);
 
@@ -505,14 +624,15 @@ mp_library_load(struct appdata * ad)
                {
                        view_data_t *view_data = NULL;
 
-                       if (ad->library->cur_view)
+                       if (ad->naviframe)
                        {
-                               view_data = evas_object_data_get(ad->library->cur_view, "view_data");
+                               //clear all item
+                               view_data = evas_object_data_get(ad->naviframe, "view_data");
                                MP_CHECK_FALSE(view_data);
                                MP_CHECK_VIEW_DATA(view_data);
                                mp_view_manager_pop_view_content(view_data, TRUE, TRUE);
 
-                               _mp_library_load_request_view(ad, ad->library->cur_view);
+                               _mp_library_load_request_view(ad, ad->naviframe);
                        }
                        else
                                mp_error("invalid cur_view");
@@ -528,7 +648,7 @@ mp_library_load(struct appdata * ad)
                        {
                                char *label = _mp_library_get_control_tab_label(ad);
                                MP_CHECK_FALSE(label);
-                               _mp_library_show_selected_view(ad, label);
+                               elm_toolbar_item_selected_set(ad->library->ctltab_songs, EINA_TRUE);
                        }
                        else
                                ERROR_TRACE("It shouldn't be here..");
@@ -546,18 +666,42 @@ mp_library_create(struct appdata *ad)
 {
        startfunc;
 
+       Evas_Object *tabbar = NULL;
+       view_data_t *view_data = NULL;
+
+       //init
        _mp_library_init(ad);
 
+       //create layout_main
+       MP_TA_ACUM_ITEM_BEGIN("      _mp_library_create_layout_main", 0);
        ad->base_layout_main = _mp_library_create_layout_main(ad->win_main);
        mp_retm_if(ad->base_layout_main == NULL, "library view layout is not initialized");
+       MP_TA_ACUM_ITEM_END("      _mp_library_create_layout_main", 0);
 
-       ad->controlbar_layout = mp_common_load_edj(ad->base_layout_main, EDJ_NAME, "control_layout");
+       ad->naviframe = mp_widget_navigation_new(ad->base_layout_main, ad);
+
+       view_data = calloc(sizeof(view_data_t), 1);
+       MP_SET_VIEW_DATA_MAGIC(view_data);
+       view_data->ad = ad;
+       view_data->navibar = ad->naviframe;
+
+       evas_object_data_set(ad->naviframe, "view_data", view_data);
+
+       MP_TA_ACUM_ITEM_BEGIN("      elm_layout_add", 0);
+       ad->controlbar_layout = elm_layout_add(ad->base_layout_main);
        MP_CHECK(ad->controlbar_layout);
-       mp_library_controlbar_visible_set(ad, true);
+       elm_layout_theme_set(ad->controlbar_layout, "layout", "tabbar", "default");
+       MP_TA_ACUM_ITEM_END("      elm_layout_add", 0);
 
-       elm_object_part_content_set(ad->base_layout_main, "elm.swallow.content", ad->controlbar_layout);
+       mp_view_manager_push_view_content(view_data, ad->controlbar_layout, MP_VIEW_CONTENT_LIST);
 
-       _mp_library_create_control_bar(ad);
+       elm_object_part_content_set(ad->base_layout_main, "elm.swallow.content", ad->naviframe);
+
+       //create control tab
+       MP_TA_ACUM_ITEM_BEGIN("      _mp_library_create_tabbar", 0);
+       tabbar = _mp_library_create_tabbar(ad);
+       elm_object_part_content_set(ad->controlbar_layout, "elm.swallow.tabbar", tabbar);
+       MP_TA_ACUM_ITEM_END("      _mp_library_create_tabbar", 0);
 
        if(ad->loadtype == LOAD_TRACK)
        {
@@ -566,9 +710,13 @@ mp_library_create(struct appdata *ad)
        }
 
        Elm_Object_Item *reqeust_item = _mp_library_get_request_control_item(ad);
+
+       //select tabbar item
        if (reqeust_item)
        {
+               MP_TA_ACUM_ITEM_BEGIN("      elm_toolbar_item_selected_set", 0);
                elm_toolbar_item_selected_set(reqeust_item, EINA_TRUE);
+               MP_TA_ACUM_ITEM_END("      elm_toolbar_item_selected_set", 0);
        }
        else
        {
@@ -587,11 +735,9 @@ void
 mp_library_update_view(struct appdata *ad)
 {
        MP_CHECK(ad);
-       MP_CHECK(ad->library);
-       Evas_Object *cur_view = ad->library->cur_view;
-       MP_CHECK(ad->library->cur_view);
+       MP_CHECK(ad->naviframe);
 
-       view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+       view_data_t *cur_view_data = evas_object_data_get(ad->naviframe, "view_data");
        MP_CHECK(cur_view_data);
 
        MP_CHECK_VIEW_DATA(cur_view_data);
@@ -604,7 +750,7 @@ mp_library_now_playing_hide(struct appdata *ad)
        if (ad->show_now_playing)
        {
                ad->show_now_playing = FALSE;
-               view_data_t *view_data = (view_data_t *) evas_object_data_get(ad->library->cur_view, "view_data");
+               view_data_t *view_data = (view_data_t *) evas_object_data_get(ad->naviframe, "view_data");
                MP_CHECK(view_data);
                MP_CHECK_VIEW_DATA(view_data);
 
@@ -615,7 +761,7 @@ mp_library_now_playing_hide(struct appdata *ad)
 void
 mp_library_now_playing_set(struct appdata *ad)
 {
-       view_data_t *view_data = (view_data_t *) evas_object_data_get(ad->library->cur_view, "view_data");
+       view_data_t *view_data = (view_data_t *) evas_object_data_get(ad->naviframe, "view_data");
        MP_CHECK(view_data);
        MP_CHECK_VIEW_DATA(view_data);
 
@@ -627,13 +773,4 @@ mp_library_now_playing_set(struct appdata *ad)
        mp_view_manager_set_now_playing(view_data, TRUE);
 }
 
-void
-mp_library_controlbar_visible_set(struct appdata *ad, bool visible)
-{
-       MP_CHECK(ad);
-       if(visible)
-               edje_object_signal_emit(_EDJ(ad->controlbar_layout), "show.control", "music_app");
-       else
-               edje_object_signal_emit(_EDJ(ad->controlbar_layout), "hide.control", "music_app");
-}