Modification for TIZENIOT-1586 [MUSIC] Playlist view page 33/237433/3
authordivyanshugautam17 <divyanshu.gm@samsung.com>
Tue, 30 Jun 2020 11:32:41 +0000 (17:02 +0530)
committerdivyanshugautam17 <divyanshu.gm@samsung.com>
Tue, 30 Jun 2020 13:34:50 +0000 (19:04 +0530)
Change-Id: Iece1d00d0736912abbca3952eabe4ebec55b1252

13 files changed:
res/edje/mp-list.edc
res/images/create_playlist.png [new file with mode: 0755]
res/images/search_button.png [new file with mode: 0755]
res/images/tizen.png [new file with mode: 0755]
src/common/include/mp-media-info.h
src/common/mp-common.c
src/common/mp-media-info.c
src/view/include/mp-all-view.h
src/view/mp-all-view.c
src/widget/include/mp-list.h
src/widget/include/mp-playlist-list.h
src/widget/mp-list.c
src/widget/mp-playlist-list.c

index 31b1158fd649a8f30a8020cafe712b38de0b588b..8055941b3530d4304443524bd05cfe452272c2c1 100755 (executable)
@@ -94,6 +94,21 @@ group {
                                rel2 { relative: 0.0 1.0; to_x:"right_pad";}
                        }
                }
+               part {
+                       name : "playlist_list_content";
+                       type: SWALLOW;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: 1.0 0.0; to: "padding.left"; offset: 0 40;}
+                               rel2 { relative: 0.0 1.0; to: "padding.right"; }
+                       }
+                       description {
+                               state: "fastscroll.visible" 0.0;
+                               rel1 { relative: 1.0 0.0; to: "padding.left"; offset: 0 40;}
+                               rel2 { relative: 0.0 1.0; to: "padding.right"; }
+                       }
+               }
                part {
                        name : "track_list_content";
                        type: SWALLOW;
@@ -163,11 +178,65 @@ group {
                        target : "list_content";
                }
                program { name: "edit_view";
-                        signal: "edit_signal";
-                        source: "edit_source";
-                        action: STATE_SET "edit" 0.0;
-                        target: "track_list_content";
-                }
+                       signal: "edit_signal";
+                       source: "edit_source";
+                       action: STATE_SET "edit" 0.0;
+                       target: "track_list_content";
+        }
+       }
+}
+
+group { name : "playlist_control_layout";
+       parts {
+               part {  name : "bg";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               color: 0 0 0 0;
+                       }
+               }
+               part {  name : "label_part";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: 0.0 0/40; to: "bg";}
+                               rel2 { relative: 500/1200 26/40; to: "bg"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {  name : "label_part_swallow";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0 0.5;
+                               rel1 { relative: 0.0 0.0; to: "label_part";}
+                               rel2 { relative: 1.0 1.0; to: "label_part"; }
+                       }
+               }
+               part {  name : "create_playlist_part";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0 0;
+                               rel1 { relative: 1168/1200 5.5/32; to: "bg";}
+                               rel2 { relative: 1194/1200 26.5/32; to: "bg"; }
+                               color: 0 0 0 0;
+                       }
+               }
+               part {  name : "create_playlist_part_swallow";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               align: 0 0;
+                               rel1 { relative: 0.0 0.0; to: "create_playlist_part";}
+                               rel2 { relative: 1.0 1.0; to: "create_playlist_part"; }
+                       }
+               }
        }
 }
 
@@ -201,44 +270,44 @@ group { name: "list_control_layout";
                                rel2 { relative: 1.0 1.0; to: "label_part"; }
                        }
                }
-               part {  name : "shuffle_part";
-                       type: RECT;
-                       scale: 1;
+               part {  name : "shuffle_part";
+               type: RECT;
+               scale: 1;
                        description {
                                state: "default" 0.0;
-                               align: 0 0;
-                               rel1 { relative: 1108.51/1200 4/40; to: "bg";}
+                               align: 0 0;
+                               rel1 { relative: 1108.51/1200 4/40; to: "bg";}
                                rel2 { relative: 1132.51/1200 28/40; to: "bg"; }
                                color: 0 0 0 0;
                        }
                }
-               part {  name : "shuffle_part_swallow";
-                       type: SWALLOW;
-                       scale: 1;
+               part {  name : "shuffle_part_swallow";
+               type: SWALLOW;
+               scale: 1;
                        description {
                                state: "default" 0.0;
-                               align: 0 0;
+                               align: 0 0;
                                rel1 { relative: 0.0 0.0; to: "shuffle_part";}
                                rel2 { relative: 1.0 1.0; to: "shuffle_part"; }
                        }
                }
-               part {  name : "play_all_part";
-                       type: RECT;
-                       scale: 1;
-                       description {
+               part {  name : "play_all_part";
+               type: RECT;
+               scale: 1;
+               description {
                                state: "default" 0.0;
-                               align: 0 0;
-                               rel1 { relative: 1168/1200 6.5/40; to: "bg";}
+                               align: 0 0;
+                               rel1 { relative: 1168/1200 6.5/40; to: "bg";}
                                rel2 { relative: 1194/1200 27.5/40; to: "bg"; }
                                color: 0 0 0 0;
                        }
                }
-               part {  name : "play_all_part_swallow";
-                       type: SWALLOW;
-                       scale: 1;
+               part {  name : "play_all_part_swallow";
+               type: SWALLOW;
+               scale: 1;
                        description {
                                state: "default" 0.0;
-                               align: 0 0;
+                               align: 0 0;
                                rel1 { relative: 0.0 0.0; to: "play_all_part";}
                                rel2 { relative: 1.0 1.0; to: "play_all_part"; }
                        }
diff --git a/res/images/create_playlist.png b/res/images/create_playlist.png
new file mode 100755 (executable)
index 0000000..17e94ae
Binary files /dev/null and b/res/images/create_playlist.png differ
diff --git a/res/images/search_button.png b/res/images/search_button.png
new file mode 100755 (executable)
index 0000000..0d73be9
Binary files /dev/null and b/res/images/search_button.png differ
diff --git a/res/images/tizen.png b/res/images/tizen.png
new file mode 100755 (executable)
index 0000000..408188a
Binary files /dev/null and b/res/images/tizen.png differ
index c9af4d27c353faf20b9ff5c573c1caf6036a7c73..d0e9b2c88148514676b6e0caa6441a0b77bdf997 100755 (executable)
@@ -93,7 +93,7 @@ extern "C" {
                MP_SYS_PLST_RECENTELY_ADDED = -3,       //-2
                MP_SYS_PLST_RECENTELY_PLAYED = -2,      //-1
                MP_SYS_PLST_QUICK_LIST = -1,    //0
-               MP_SYS_PLST_COUNT = 1,
+               MP_SYS_PLST_COUNT = 2,
        } mp_sys_playlsit_id;
 
        typedef enum {
index 96836a6ac4488f19288f57df5dc574c40ee6e159..9c1c46c7cea085bd017784a43625a331ccce7740 100755 (executable)
@@ -1931,6 +1931,41 @@ static void _mp_common_create_all_view(MpViewMgr_t * view_manager)
                mp_view_set_title((MpView_t *) view, STR_MP_MUSIC);
                PROFILE_OUT("mp_view_set_title");
 
+               Evas_Object *box;
+               Evas_Object *btn;
+               Evas_Object *img;
+
+               box = elm_box_add(view_manager->navi);
+               elm_box_horizontal_set(box, EINA_TRUE);
+               elm_box_padding_set(box, ELM_SCALE_SIZE(5), 0);
+
+               /* Icon Button */
+               btn = elm_button_add(view_manager->navi);
+               elm_object_style_set(btn, "icon");
+               evas_object_show(btn);
+
+               /* Icon Button image */
+               img = elm_image_add(btn);
+               elm_image_file_set(img, "/usr/apps/org.tizen.music-player_common/res/images/search_button.png", NULL);
+               elm_object_part_content_set(btn, "icon", img);
+
+               elm_box_pack_end(box, btn);
+
+               /* More Button */
+               btn = elm_button_add(view_manager->navi);
+               elm_object_style_set(btn, "naviframe/more");
+               evas_object_smart_callback_add(btn, "clicked",_mp_all_view_normal_more_btn_cb,view);
+               evas_object_show(btn);
+               elm_box_pack_end(box, btn);
+
+               /* Title Content */
+               elm_object_item_part_content_set(view->navi_it, "title_content", box);
+
+               /* HW More Button */
+               Evas_Object *btnt = elm_button_add(view_manager->navi);
+               elm_object_style_set(btnt, "naviframe/more/default");
+               btn = btnt;
+               elm_object_item_part_content_set(view->navi_it, "toolbar_more_btn", btn);
        }
 }
 
index 55c77f1983d1d6ed9e04f8e1207d5dd51f1e843a..6ee8951150847a57379b742b88b8cb537167dcd9 100755 (executable)
@@ -2159,11 +2159,11 @@ int mp_media_info_group_list_create(mp_media_list_h * media_list,
                MP_CHECK_VAL(*media_list, -1);
                (*media_list)->group_type = group_type;
 
-               char names[][50] = { STR_MP_FAVOURITES, STR_MP_RECENTLY_ADDED, STR_MP_MOST_PLAYED,
+               char names[][50] = { STR_MP_RECENTLY_ADDED, STR_MP_MOST_PLAYED, STR_MP_FAVOURITES,
                                STR_MP_RECENTLY_PLAYED };
 
-               char thumb[][4096] = { THUMBNAIL_QUICK_LIST, THUMBNAIL_RECENTLY_ADDED,
-                               THUMBNAIL_MOST_PLAYED, THUMBNAIL_RECENTLY_PLAYED };
+               char thumb[][4096] = { THUMBNAIL_RECENTLY_ADDED, THUMBNAIL_MOST_PLAYED, THUMBNAIL_QUICK_LIST,
+                               THUMBNAIL_RECENTLY_PLAYED };
 
                for (i = 0; i < 4; i++) {
                        media_info = calloc(1, sizeof(struct mp_media_info_s));
index 245f02fdb67f094fde2991cf1e2ffcffb5a8b41b..d7e3b64655322aaa888d75c1d65a10cf552cbba0 100755 (executable)
@@ -57,6 +57,13 @@ typedef struct {
 MpAllView_t *mp_all_view_create(Evas_Object * parent, MpTab_e init_tab);
 int mp_all_view_destory(MpAllView_t * view);
 int mp_all_view_select_tab(MpAllView_t * view, MpTab_e tab);
+void _mp_all_view_playlist_list_create_playlist_cb(void *data,
+               Evas_Object *
+               obj,
+               void
+               *event_info);
+void _mp_all_view_normal_more_btn_cb(void *data, Evas_Object * obj,
+               void *event_info);
 
 Evas_Object *mp_all_get_tabbar_layout();
 
index cd4a24b73bbd20756f5dff2239a5619f74878b64..1c3c851cd52992736f247bce2e47d19b7d8e040d 100755 (executable)
 #include "mp-edit-playlist.h"
 #include "ms-key-ctrl.h"
 
-static void _mp_all_view_playlist_list_create_playlist_cb(void *data,
-               Evas_Object *
-               obj,
-               void
-               *event_info);
 static void _mp_all_view_edit_cb(void *data, Evas_Object * obj,
                                                                 void *event_info);
 static void _mp_all_view_content_load(void *thiz, MpTab_e tab);
@@ -113,7 +108,7 @@ static void _mp_all_view_add_to_playlist_cb(void *data, Evas_Object * obj,
 
 }
 
-static void _mp_all_view_normal_more_btn_cb(void *data, Evas_Object * obj,
+void _mp_all_view_normal_more_btn_cb(void *data, Evas_Object * obj,
                void *event_info)
 {
        eventfunc;
@@ -249,7 +244,7 @@ static void _mp_all_view_update_toolbar_option(void *thiz)
 }
 
 /***************       functions for playlist list update      *******************/
-static void _mp_all_view_playlist_list_create_playlist_cb(void *data,
+void _mp_all_view_playlist_list_create_playlist_cb(void *data,
                Evas_Object *
                obj,
                void *event_info)
@@ -262,7 +257,13 @@ static void _mp_all_view_playlist_list_create_playlist_cb(void *data,
 
        Mp_Playlist_Data *mp_playlist_data =
                        mp_edit_playlist_create(MP_PLST_CREATE_TO_ADD_TRACK);
-       mp_edit_playlist_content_create(mp_playlist_data);
+       if(!mp_playlist_data) {
+               DEBUG_TRACE("mp_playlist_data is NULL");
+       } else {
+               DEBUG_TRACE("mp_playlist_data is not NULL");
+               mp_edit_playlist_content_create(mp_playlist_data);
+               DEBUG_TRACE("after mp_edit_playlist_content_create");
+       }
 }
 
 int _mp_all_view_update_options(void *thiz)
@@ -271,6 +272,15 @@ int _mp_all_view_update_options(void *thiz)
        MpAllView_t *view = (MpAllView_t *) thiz;
        MP_CHECK_VAL(view->navi_it, -1);
 
+       Evas_Object *back_button = elm_button_add(view->all_view_layout);
+       elm_object_style_set(back_button, "naviframe/end_btn/default");
+       elm_object_item_part_content_set(view->navi_it, "prev_btn",
+                       back_button);
+       /*evas_object_smart_callback_add(back_button, "clicked",
+                       _mp_all_view_normal_more_btn_cb, view);*/
+       elm_naviframe_item_pop_cb_set(view->navi_it,
+                       _mp_all_view_pop_cb, view);
+
        PROFILE_IN("mp_view_clear_options");
        mp_view_clear_options((MpView_t *) view);
        PROFILE_OUT("mp_view_clear_options");
index e3958fb43a3e9ed9735822717a8db7e930699cff..ca9acf3e1d680c3c34ceb35ebc37b18ccc09f1cf 100755 (executable)
@@ -165,7 +165,8 @@ INHERIT_MP_LIST} MpList_t;
        bool unregister_lang_mgr; \
        MpListDisplayMode_e display_mode; \
        int artist_album_page; \
-       void *plst_item;
+       void *plst_item; \
+       Evas_Object *end;
 
 typedef struct {
        // for mh_list_item_data;
index f0c72fb3874d86965426bed888dff3bb5c612cee..da94bddf31d95411ed04bee31fd9361295db78af 100755 (executable)
@@ -51,6 +51,9 @@ typedef struct __MpPlaylistList {
 
        Elm_Object_Item *group_index[MP_PLAYLIST_GROUP_INDEX_NUM + 1];
        //int edit_mode;
+       Evas_Object *playlist_control_layout;
+       Evas_Object *playlist_count_label;
+       Evas_Object *create_playlist_btn;
 
 } MpPlaylistList_t;
 
index cb1a2d90431458cb24b2699e110480191d6123a2..e998111f084753db660036e4936bb2f1c787bd75 100755 (executable)
@@ -512,10 +512,11 @@ void mp_list_init(MpList_t * list, Evas_Object * parent,
 
        if (list_type == MP_LIST_TYPE_TRACK || list_type == MP_LIST_TYPE_GROUP || list_type == MP_LIST_TYPE_ARTIST_DETAIL) {
           elm_object_part_content_set(list->layout, "track_list_content", list->box);
+       } else if (list_type == MP_LIST_TYPE_PLAYLIST) {
+               elm_object_part_content_set(list->layout, "playlist_list_content", list->box);
        } else {
                elm_object_part_content_set(list->layout, "list_content", list->box);
        }
-
        evas_object_show(list->box);
 
        //initialize method
index c92d82cc29d5db2148d1b18dadf7cd3978fcf6b7..3b69dcb0f5463479b944517ea048eb9f307fd378 100755 (executable)
@@ -28,6 +28,7 @@
 #include "mp-play.h"
 #include "mp-edit-playlist.h"
 #include "ms-key-ctrl.h"
+#include "mp-all-view.h"
 
 #define ALBUM_GRID_W 233
 #define ALBUM_GRID_H 319
@@ -103,7 +104,7 @@ static char *_mp_playlist_list_label_get(void *data, Evas_Object * obj,
                        text = g_strdup_printf(GET_STR(STR_MP_PD_SONGS), count);
                }
 
-               format_text = g_strdup_printf("%s | %s", text, time);
+               format_text = g_strdup_printf("%s", text);
                IF_FREE(text);
                return format_text;
        }
@@ -379,7 +380,7 @@ Evas_Object *_mp_playlist_list_icon_get(void *data, Evas_Object * obj,
 
        mp_media_info_group_get_playlist_id(plst, &playlist_id);
 
-       if (!strcmp(part, "elm.icon.1") || !strcmp(part, "elm.swallow.icon")) {
+       if (!strcmp(part, "elm.icon")) {
                mp_common_playlist_album_update(plst);
                ret = mp_media_info_playlist_get_thumbnail_path(plst, &thumb_path);
                mp_retvm_if(ret != 0, NULL, "Fail to get value");
@@ -959,23 +960,6 @@ static void _mp_playlist_list_gengrid_create(MpPlaylistList_t * list)
        endfunc;
 }
 
-static char *_mp_playlist_genlist_group_index_default_text_get(void *data,
-                                                                                                                          Evas_Object
-                                                                                                                          *obj,
-                                                                                                                          const char
-                                                                                                                          *part)
-{
-       mp_list_item_data_t *item_data = data;
-       MP_CHECK_NULL(item_data);
-       const char *text = NULL;
-       if (!strcmp(part, "elm.text")) {
-               if (item_data->index == 0) {
-                       text = STR_MP_DEFAULT_PLAYLIST_GROUP_TITLE;
-               }
-       }
-       return g_strdup(GET_STR(text));
-}
-
 static char *_mp_playlist_genlist_group_index_user_text_get(void *data,
                Evas_Object *
                obj,
@@ -985,28 +969,6 @@ static char *_mp_playlist_genlist_group_index_user_text_get(void *data,
        mp_list_item_data_t *item_data = data;
        MP_CHECK_NULL(item_data);
        const char *text = NULL;
-       if (!strcmp(part, "elm.text")) {
-               if (item_data->index != 0) {
-                       text = g_strdup(GET_STR(STR_MP_MY_PLAYLIST_GROUP_TITLE));
-               }
-       } else if (!strcmp(part, "elm.text.end")) {
-               MpPlaylistList_t *list = evas_object_data_get(obj, "list_data");
-               MP_CHECK_NULL(list);
-               unsigned int count =
-                       mp_list_get_editable_count((MpList_t *) list,
-                                                                          mp_list_get_edit_type((MpList_t *)
-                                                                                                                        list));
-               if (item_data->index != 0) {
-                       if (count <= 0) {
-                               text = g_strdup(GET_STR(STR_MP_NO_PLAYLISTS));
-                       } else if (count == 1) {
-                               text = g_strdup(GET_STR(STR_MP_1_PLAYLIST));
-                       } else {
-                               text =
-                                       g_strdup_printf(GET_STR(STR_MP_PD_PLAYLISTS), count);
-                       }
-               }
-       }
        return text;
 }
 
@@ -1024,11 +986,69 @@ _mp_playlist_genlist_group_index_del_cb(void *data, Evas_Object * obj)
        free(item_data);
 }
 
+static bool genlist_item_have_item_style(Elm_Object_Item *item, const char *style)
+{
+       if (!item) return false;
+       const Elm_Genlist_Item_Class *itc = elm_genlist_item_item_class_get(item);
+
+       if (!itc || !itc->item_style || strcmp(itc->item_style, style))
+               return false;
+
+       return true;
+}
+
+bool genlist_item_style_auto_apply_substyle(Elm_Object_Item *item)
+{
+       bool first_in_group = false, last_in_group = false;
+
+       if (!genlist_item_have_item_style(item, "1line") &&
+               !genlist_item_have_item_style(item, "2line") &&
+               !genlist_item_have_item_style(item, "full") &&
+               !genlist_item_have_item_style(item, "multiline"))
+               return false;
+
+       Elm_Object_Item *previous = elm_genlist_item_prev_get(item);
+       Elm_Object_Item *next = elm_genlist_item_next_get(item);
+
+       if (previous) {
+               first_in_group = genlist_item_have_item_style(previous, "group_index");
+       } else
+               first_in_group = true;
+
+       if (next) {
+               last_in_group = genlist_item_have_item_style(next, "group_index");
+       } else
+               last_in_group = true;
+
+       if (first_in_group && last_in_group) {
+               elm_object_item_signal_emit(item, "elm,state,group,single", "elm");
+       } else if (first_in_group) {
+               elm_object_item_signal_emit(item, "elm,state,group,top", "elm");
+       } else if (last_in_group) {
+               elm_object_item_signal_emit(item, "elm,state,group,bottom", "elm");
+       } else {
+               elm_object_item_signal_emit(item, "elm,state,group,middle", "elm");
+       }
+
+       return true;
+}
+
+static void gl_realized_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *it = event_info;
+       mp_list_item_data_t *id = elm_object_item_data_get(it);
+       elm_object_item_data_get(it);
+       genlist_item_style_auto_apply_substyle(it);
+}
+
 
 static void _mp_playlist_list_genlist_create(MpPlaylistList_t * list)
 {
        MP_CHECK(list);
-
+       char *text = NULL;
+       unsigned int count = mp_list_get_editable_count((MpList_t *) list,
+                                                                          mp_list_get_edit_type((MpList_t *)
+                                                                                                                        list));
        /*create new genlist */
        list->genlist = mp_widget_genlist_create(list->box);
 
@@ -1039,6 +1059,7 @@ static void _mp_playlist_list_genlist_create(MpPlaylistList_t * list)
        evas_object_size_hint_align_set(list->genlist, EVAS_HINT_FILL,
                                                                        EVAS_HINT_FILL);
        elm_genlist_homogeneous_set(list->genlist, EINA_TRUE);
+       evas_object_smart_callback_add(list->genlist, "realized", gl_realized_cb, NULL);
        elm_genlist_mode_set(list->genlist, ELM_LIST_COMPRESS);
        evas_object_show(list->genlist);
        /*packet genlist to box */
@@ -1055,16 +1076,6 @@ static void _mp_playlist_list_genlist_create(MpPlaylistList_t * list)
                list->itc_auto->func.del = _mp_playlist_list_item_del_cb;
        }
 
-       if (!list->itc_group_index_default) {
-               list->itc_group_index_default = elm_genlist_item_class_new();
-               MP_CHECK(list->itc_group_index_default);
-               list->itc_group_index_default->item_style = "group_index";
-               list->itc_group_index_default->func.text_get =
-                       _mp_playlist_genlist_group_index_default_text_get;
-               list->itc_group_index_default->func.del =
-                       _mp_playlist_genlist_group_index_del_cb;
-       }
-
        if (!list->itc_group_index_user) {
                list->itc_group_index_user = elm_genlist_item_class_new();
                MP_CHECK(list->itc_group_index_user);
@@ -1114,6 +1125,22 @@ static void _mp_playlist_list_update(void *thiz)
 
        /* load list */
        _mp_playlist_list_load_list(thiz, count_auto, count_user);
+       char *text = NULL;
+       unsigned int count = mp_list_get_editable_count((MpList_t *) list,
+                                                                          mp_list_get_edit_type((MpList_t *)
+                                                                                                                        list));
+       if (count <= 0) {
+               text = g_strdup(GET_STR(STR_MP_NO_PLAYLISTS));
+       } else if (count == 1) {
+               text = g_strdup(GET_STR(STR_MP_1_PLAYLIST));
+       } else {
+               text = g_strdup_printf(GET_STR(STR_MP_PD_PLAYLISTS), count);
+       }
+       elm_object_text_set(list->playlist_count_label, text);
+       MpAllView_t *view = (MpAllView_t *) thiz;
+       MP_CHECK(view);
+       mp_evas_object_del(view->more_btn_ctxpopup);
+       evas_object_smart_callback_add(list->create_playlist_btn, "clicked", _mp_all_view_playlist_list_create_playlist_cb, view);
 }
 
 static unsigned int
@@ -1215,6 +1242,10 @@ MpPlaylistList_t *mp_playlist_list_create(Evas_Object * parent)
        MP_CHECK_NULL(list);
 
        mp_list_init((MpList_t *) list, parent, MP_LIST_TYPE_PLAYLIST);
+       list->playlist_control_layout = mp_common_load_edj(((MpList_t *) list)->layout, MP_EDJ_NAME, "playlist_control_layout");
+       elm_object_part_content_set(((MpList_t *) list)->layout, "control_part", list->playlist_control_layout);
+       evas_object_show(list->playlist_control_layout);
+
 
        list->get_count = _mp_playlist_list_get_count;
        list->update = _mp_playlist_list_update;
@@ -1229,7 +1260,30 @@ MpPlaylistList_t *mp_playlist_list_create(Evas_Object * parent)
        list->bottom_counter_text_get_cb =
                _mp_playlist_list_bottom_counter_text_get_cb;
 
+       list->playlist_count_label = elm_label_add(list->playlist_control_layout);
+       elm_object_text_set(list->playlist_count_label, "check");
+       elm_object_part_content_set(list->playlist_control_layout, "label_part_swallow", list->playlist_count_label);
+       evas_object_show(list->playlist_count_label);
+
+       list->create_playlist_btn = elm_button_add(list->playlist_control_layout);
+       Evas_Object *img_play_all = elm_image_add(list->create_playlist_btn);
+       char buffer[1024] = {0,};
+       const char *path  = app_get_resource_path();
+       MP_CHECK_NULL(path);
+       snprintf(buffer, 1024, "%s%s%s", path, "images/", "create_playlist.png");
+       elm_image_file_set(img_play_all, buffer, NULL);
+
+       evas_object_size_hint_min_set(img_play_all, ELM_SCALE_SIZE(10), ELM_SCALE_SIZE(10));
+       evas_object_size_hint_max_set(img_play_all, ELM_SCALE_SIZE(10), ELM_SCALE_SIZE(10));
+       elm_object_part_content_set(list->create_playlist_btn, "icon", img_play_all);
+
+       elm_object_style_set(list->create_playlist_btn, "focus");
+       elm_object_part_content_set(list->playlist_control_layout, "create_playlist_part_swallow", list->create_playlist_btn);
+       evas_object_show(list->create_playlist_btn);
+       evas_object_show(list->playlist_control_layout);
+
        list->update(list);
+       free(path);
        return list;
 }