summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJehun Lim <jehun.lim@samsung.com>2015-09-24 14:01:09 +0900
committerJehun Lim <jehun.lim@samsung.com>2015-09-24 17:03:48 +0900
commitc515f91444a4451832a70ba590485a238694eff9 (patch)
treedca11e27e33c72d2842769fc9e04b6d8a5041e7a
parent1a94010d6b284b65495559af15abb31e4a0caee7 (diff)
downloadair_mediahub-c515f91444a4451832a70ba590485a238694eff9.tar.gz
air_mediahub-c515f91444a4451832a70ba590485a238694eff9.tar.bz2
air_mediahub-c515f91444a4451832a70ba590485a238694eff9.zip
detail: add music album detail view
Change-Id: I4f8b17264645338b9bb7cf1ec69cd3cdaa4e985e Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r--include/grid/grid.h2
-rw-r--r--include/view.h1
-rw-r--r--res/edc/widgets/gengrid.edc223
-rw-r--r--src/grid/grid_gallery.c13
-rw-r--r--src/grid/grid_movie.c13
-rw-r--r--src/grid/grid_music.c46
-rw-r--r--src/layout/gallery.c8
-rw-r--r--src/layout/movie.c8
-rw-r--r--src/layout/music.c3
-rw-r--r--src/view/detail.c23
10 files changed, 304 insertions, 36 deletions
diff --git a/include/grid/grid.h b/include/grid/grid.h
index 60e6a92..39b2450 100644
--- a/include/grid/grid.h
+++ b/include/grid/grid.h
@@ -117,4 +117,6 @@ struct grid_data *get_music_grid_data(int type);
#define MUSIC_GENRE_ITEM_NUM MOVIE_GENRE_ITEM_NUM
#define MUSIC_GENRE_GRID_PADDING MOVIE_GENRE_GRID_PADDING
+#define STYLE_MUSIC_SONG_DETAIL "song_item_detail"
+
#endif /* __AIR_MEDIAHUB_GRID_H__ */
diff --git a/include/view.h b/include/view.h
index c7e4d9f..7422bac 100644
--- a/include/view.h
+++ b/include/view.h
@@ -59,6 +59,7 @@ enum update_type {
enum detail_view_type {
E_DETAIL_MOVIE_GENRE = 0,
+ E_DETAIL_MUSIC_ALBUM,
E_DETAIL_MAX
};
diff --git a/res/edc/widgets/gengrid.edc b/res/edc/widgets/gengrid.edc
index 2b9e6fd..4063fed 100644
--- a/res/edc/widgets/gengrid.edc
+++ b/res/edc/widgets/gengrid.edc
@@ -1650,6 +1650,229 @@ group {
}
group {
+ name: "elm/gengrid/item/song_item_detail/default";
+ inherit: "elm/gengrid/item/song_item/default";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text.title elm.text.artist elm.text.playtime";
+ data.item: "contents" "elm.swallow.favorite";
+ data.item: "focus_highlight" "on";
+ parts {
+ part {
+ name: "default_image";
+ type: IMAGE;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "defaultbg";
+ relative: 0.5 0.5;
+ }
+ rel2 {
+ to: "defaultbg";
+ relative: 0.5 0.5;
+ }
+ image.normal: IMAGE_THUMBNAIL_SONG;
+ min: 0 0;
+ fixed: 1 1;
+ map {
+ perspective_on: 1;
+ perspective: "map";
+ }
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ map.on: 1;
+ }
+ }
+ part {
+ name: "defaultbg_text";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "bg";
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to: "bg";
+ relative: 1.0 1.0;
+ }
+ color: COLOR_ITEM_BG;
+ map {
+ perspective_on: 1;
+ perspective: "map";
+ }
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: COLOR_ITEM_FOCUS;
+ map.on: 1;
+ }
+ }
+ part {
+ name: "part_focus2";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "part_focus1";
+ relative: 0.0 1.0;
+ }
+ rel2 {
+ to: "bg";
+ relative: 0.0 1.0;
+ }
+ min: 0 0;
+ align: 0.0 0.5;
+ color: COLOR_ITEM_FOCUS;
+ fixed: 1 0;
+ visible: 0;
+ map {
+ perspective_on: 1;
+ perspective: "map";
+ }
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ map.on: 1;
+ visible: 1;
+ }
+ description {
+ state: "selected_0" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: COLOR_ITEM_FOCUS_0;
+ }
+ }
+ part {
+ name: "elm.padding.artist";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: PART_ELM_TEXT_TITLE;
+ relative: 0.0 1.0;
+ }
+ rel2.to: PART_ELM_TEXT_TITLE;
+ min: 0 12;
+ align: 0.5 0.0;
+ fixed: 0 1;
+ }
+ }
+ part {
+ name: "elm.padding.playtime";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: PART_ELM_TEXT_ARTIST;
+ relative: 0.0 1.0;
+ }
+ rel2.to: PART_ELM_TEXT_ARTIST;
+ min: 0 4;
+ align: 0.5 0.0;
+ fixed: 0 1;
+ }
+ }
+ part {
+ name: PART_ELM_TEXT_PLAYTIME;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "elm.padding.playtime";
+ relative: 0.0 1.0;
+ }
+ rel2.to: "elm.padding.playtime";
+ text {
+ font: FONT_LIGHT;
+ size: 24;
+ align: 0.0 0.5;
+ }
+ min: 0 24;
+ align: 0.5 0.0;
+ color: COLOR_TEXT_INFO;
+ fixed: 0 1;
+ map {
+ perspective_on: 1;
+ perspective: "map";
+ }
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: COLOR_TEXT_FOCUS;
+ map.on: 1;
+ }
+ description {
+ state: "selected_0" 0.0;
+ inherit: "selected";
+ }
+ }
+ }
+ programs {
+ program {
+ name: "go_active";
+ signal: "elm,state,focused";
+ source: "elm";
+ action: STATE_SET "selected_0" 0.0;
+ target: "elm.bg.text";
+ target: PART_ELM_TEXT_TITLE;
+ target: PART_ELM_TEXT_ARTIST;
+ target: PART_ELM_TEXT_PLAYTIME;
+ after: "focus,in,anim";
+ }
+ program {
+ name: "focus,in,anim";
+ action: STATE_SET "selected" 0.0;
+ target: PART_ELM_SWALLOW_FAVORITE;
+ target: "elm.bg.text";
+ transition: TRANSITION_FOCUS;
+ after: "focus,in,anim,2";
+ }
+ program {
+ name: "focus,in,anim,2";
+ action: STATE_SET "selected" 0.0;
+ target: "defaultbg_text";
+ }
+ program {
+ name: "go_passive";
+ signal: "elm,state,unfocused";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: PART_ELM_TEXT_TITLE;
+ target: PART_ELM_TEXT_ARTIST;
+ target: PART_ELM_TEXT_PLAYTIME;
+ target: "defaultbg_text";
+ after: "focus,out,anim";
+ }
+ program {
+ name: "focus,out,anim";
+ action: STATE_SET "selected_0" 0.0;
+ target: "elm.bg.text";
+ transition: TRANSITION_FOCUS;
+ after: "focus,out,anim,2";
+ }
+ program {
+ name: "focus,out,anim,2";
+ action: STATE_SET "default" 0.0;
+ target: PART_ELM_SWALLOW_FAVORITE;
+ target: "elm.bg.text";
+ }
+ }
+}
+
+group {
name: "elm/gengrid/item/genre_item/default";
data.item: "selectraise" "on";
data.item: "texts" "elm.text.title elm.text.count";
diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c
index 384ec96..6f20856 100644
--- a/src/grid/grid_gallery.c
+++ b/src/grid/grid_gallery.c
@@ -143,8 +143,8 @@ static void _free_media_list(struct datamgr *dmgr, Eina_List *list)
static void _key_down_cb(void *data, Elm_Object_Item *it,
Evas_Event_Key_Down *ev)
{
- Eina_List *list;
struct view_update_data vdata;
+ struct datamgr *dmgr;
app_media *am;
if (!data || !ev) {
@@ -152,7 +152,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it,
return;
}
- list = data;
+ dmgr = data;
if (!strcmp(ev->keyname, KEY_MENU) ||
!strcmp(ev->keyname, KEY_CONTEXT_MENU)) {
@@ -162,7 +162,8 @@ static void _key_down_cb(void *data, Elm_Object_Item *it,
return;
}
- vdata.list = list;
+ vdata.list = dmgr->ops->get_list(dmgr->handle,
+ E_LIST_MEDIA, NULL);
vdata.index = util_get_media_index(vdata.list, am);
viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata);
@@ -172,8 +173,8 @@ static void _key_down_cb(void *data, Elm_Object_Item *it,
static void _selected_cb(void *data, Elm_Object_Item *it)
{
- Eina_List *list;
struct view_update_data vdata;
+ struct datamgr *dmgr;
app_media *am;
if (!data || !it) {
@@ -181,7 +182,7 @@ static void _selected_cb(void *data, Elm_Object_Item *it)
return;
}
- list = data;
+ dmgr = data;
am = elm_object_item_data_get(it);
if (!am) {
@@ -189,7 +190,7 @@ static void _selected_cb(void *data, Elm_Object_Item *it)
return;
}
- vdata.list = list;
+ vdata.list = dmgr->ops->get_list(dmgr->handle, E_LIST_MEDIA, NULL);
vdata.index = util_get_media_index(vdata.list, am);
viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
diff --git a/src/grid/grid_movie.c b/src/grid/grid_movie.c
index b4e09b9..70c54b5 100644
--- a/src/grid/grid_movie.c
+++ b/src/grid/grid_movie.c
@@ -227,8 +227,8 @@ static void _free_group_list(struct datamgr *dmgr, Eina_List *list)
static void _key_down_cb(void *data, Elm_Object_Item *it,
Evas_Event_Key_Down *ev)
{
- Eina_List *list;
struct view_update_data vdata;
+ struct datamgr *dmgr;
app_media *am;
if (!data || !ev) {
@@ -236,7 +236,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it,
return;
}
- list = data;
+ dmgr = data;
if (!strcmp(ev->keyname, KEY_MENU) ||
!strcmp(ev->keyname, KEY_CONTEXT_MENU)) {
@@ -246,7 +246,8 @@ static void _key_down_cb(void *data, Elm_Object_Item *it,
return;
}
- vdata.list = list;
+ vdata.list = dmgr->ops->get_list(dmgr->handle,
+ E_LIST_MEDIA, NULL);
vdata.index = util_get_media_index(vdata.list, am);
viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata);
@@ -256,8 +257,8 @@ static void _key_down_cb(void *data, Elm_Object_Item *it,
static void _media_selected_cb(void *data, Elm_Object_Item *it)
{
- Eina_List *list;
struct view_update_data vdata;
+ struct datamgr *dmgr;
app_media *am;
if (!data || !it) {
@@ -265,7 +266,7 @@ static void _media_selected_cb(void *data, Elm_Object_Item *it)
return;
}
- list = data;
+ dmgr = data;
am = elm_object_item_data_get(it);
if (!am) {
@@ -273,7 +274,7 @@ static void _media_selected_cb(void *data, Elm_Object_Item *it)
return;
}
- vdata.list = list;
+ vdata.list = dmgr->ops->get_list(dmgr->handle, E_LIST_MEDIA, NULL);
vdata.index = util_get_media_index(vdata.list, am);
viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
diff --git a/src/grid/grid_music.c b/src/grid/grid_music.c
index d25710f..34a9058 100644
--- a/src/grid/grid_music.c
+++ b/src/grid/grid_music.c
@@ -294,8 +294,8 @@ static void _free_group_list(struct datamgr *dmgr, Eina_List *list)
static void _key_down_cb(void *data, Elm_Object_Item *it,
Evas_Event_Key_Down *ev)
{
- Eina_List *list;
struct view_update_data vdata;
+ struct datamgr *dmgr;
app_media *am;
if (!data || !ev) {
@@ -303,7 +303,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it,
return;
}
- list = data;
+ dmgr = data;
if (!strcmp(ev->keyname, KEY_MENU) ||
!strcmp(ev->keyname, KEY_CONTEXT_MENU)) {
@@ -313,7 +313,8 @@ static void _key_down_cb(void *data, Elm_Object_Item *it,
return;
}
- vdata.list = list;
+ vdata.list = dmgr->ops->get_list(dmgr->handle,
+ E_LIST_MEDIA, NULL);
vdata.index = util_get_media_index(vdata.list, am);
viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata);
@@ -321,10 +322,10 @@ static void _key_down_cb(void *data, Elm_Object_Item *it,
}
}
-static void _selected_cb(void *data, Elm_Object_Item *it)
+static void _media_selected_cb(void *data, Elm_Object_Item *it)
{
- Eina_List *list;
struct view_update_data vdata;
+ struct datamgr *dmgr;
app_media *am;
if (!data || !it) {
@@ -332,7 +333,7 @@ static void _selected_cb(void *data, Elm_Object_Item *it)
return;
}
- list = data;
+ dmgr = data;
am = elm_object_item_data_get(it);
if (!am) {
@@ -340,13 +341,41 @@ static void _selected_cb(void *data, Elm_Object_Item *it)
return;
}
- vdata.list = list;
+ vdata.list = dmgr->ops->get_list(dmgr->handle, E_LIST_MEDIA, NULL);
vdata.index = util_get_media_index(vdata.list, am);
viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata);
viewmgr_push_view(VIEW_MPLAYER);
}
+static void _album_selected_cb(void *data, Elm_Object_Item *it)
+{
+ struct view_update_data vdata;
+ struct datamgr *dmgr;
+ struct album_info *ai;
+
+ if (!data || !it) {
+ _ERR("invalid argument");
+ return;
+ }
+
+ dmgr = data;
+
+ ai = elm_object_item_data_get(it);
+ if (!ai) {
+ _ERR("failed to get album info");
+ return;
+ }
+
+ vdata.list = dmgr->ops->get_list(dmgr->handle,
+ E_LIST_ALBUM_MEDIA, &ai->id);
+ vdata.index = E_DETAIL_MUSIC_ALBUM;
+ vdata.id = ai->name;
+
+ viewmgr_update_view(VIEW_DETAIL, UPDATE_CONTENT, &vdata);
+ viewmgr_push_view(VIEW_DETAIL);
+}
+
static struct grid_class _gclass[] = {
[E_MUSIC_SONG] = {
.item_style = STYLE_MUSIC_SONG,
@@ -381,7 +410,7 @@ static struct grid_data _gdata[] = {
.get_item_list = _get_song_list,
.free_item_list = _free_item_list,
.key_down_cb = _key_down_cb,
- .selected_cb = _selected_cb
+ .selected_cb = _media_selected_cb,
},
[E_MUSIC_ALBUM] = {
.item_x = MUSIC_ALBUM_ITEM_X,
@@ -391,6 +420,7 @@ static struct grid_data _gdata[] = {
.gclass = &_gclass[E_MUSIC_ALBUM],
.get_item_list = _get_album_list,
.free_item_list = _free_item_list,
+ .selected_cb = _album_selected_cb,
},
[E_MUSIC_ARTIST] = {
.item_x = MUSIC_ARTIST_ITEM_X,
diff --git a/src/layout/gallery.c b/src/layout/gallery.c
index be63e3b..dcb2cfe 100644
--- a/src/layout/gallery.c
+++ b/src/layout/gallery.c
@@ -137,7 +137,6 @@ static void _clear_content_list(struct _priv *priv)
static void _update_content_list(struct _priv *priv)
{
Eina_List *list;
- struct datamgr *dmgr;
if (priv->media_list) {
_update_content_info(priv);
@@ -146,17 +145,14 @@ static void _update_content_list(struct _priv *priv)
priv->gdata = get_gallery_grid_data(priv->view_mode);
- dmgr = priv->dmgr[E_DATA_MEDIA];
-
- list = priv->gdata->get_item_list(dmgr);
+ list = priv->gdata->get_item_list(priv->dmgr[E_DATA_MEDIA]);
if (!list) {
elm_object_part_text_set(priv->layout,
PART_NOCONTENT, TEXT_NOCONTENT);
return;
}
- priv->gdata->data = dmgr->ops->get_list(dmgr->handle,
- E_LIST_MEDIA, NULL);
+ priv->gdata->data = priv->dmgr[E_DATA_MEDIA];
if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata))
_ERR("failed to update list area");
diff --git a/src/layout/movie.c b/src/layout/movie.c
index 8fbe6d0..e145cd5 100644
--- a/src/layout/movie.c
+++ b/src/layout/movie.c
@@ -349,7 +349,6 @@ static void _clear_content_list(struct _priv *priv)
static void _update_content_list(struct _priv *priv)
{
Eina_List *list;
- struct datamgr *dmgr;
if (priv->media_list) {
_update_content_info(priv);
@@ -358,17 +357,14 @@ static void _update_content_list(struct _priv *priv)
priv->gdata = get_movie_grid_data(priv->view_mode);
- dmgr = priv->dmgr[E_DATA_MEDIA];
-
- list = priv->gdata->get_item_list(dmgr);
+ list = priv->gdata->get_item_list(priv->dmgr[E_DATA_MEDIA]);
if (!list) {
elm_object_part_text_set(priv->layout,
PART_NOCONTENT, TEXT_NOCONTENT);
return;
}
- priv->gdata->data = dmgr->ops->get_list(dmgr->handle,
- E_LIST_MEDIA, NULL);
+ priv->gdata->data = priv->dmgr[E_DATA_MEDIA];
if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata)) {
_ERR("failed to update list area");
diff --git a/src/layout/music.c b/src/layout/music.c
index 738f795..2ab37eb 100644
--- a/src/layout/music.c
+++ b/src/layout/music.c
@@ -339,8 +339,7 @@ static void _update_content_list(struct _priv *priv)
return;
}
- priv->gdata->data = dmgr->ops->get_list(dmgr->handle,
- E_LIST_MEDIA, NULL);
+ priv->gdata->data = dmgr;
if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata))
_ERR("failed to update list area");
diff --git a/src/view/detail.c b/src/view/detail.c
index 1df4251..5f20ecd 100644
--- a/src/view/detail.c
+++ b/src/view/detail.c
@@ -33,6 +33,7 @@ static Evas_Object *_grid_content_get(void *data, Evas_Object *obj,
const char *part);
static void _get_movie_count(char *str, int size, Eina_List *list);
+static void _get_music_count(char *str, int size, Eina_List *list);
struct _view_info {
const char *grid_style;
@@ -54,6 +55,14 @@ static struct _view_info view_info[E_DETAIL_MAX] = {
.get_grid_content = _grid_content_get,
.get_content_info = _get_movie_count,
},
+ [E_DETAIL_MUSIC_ALBUM] = {
+ .grid_style = STYLE_MUSIC_SONG_DETAIL,
+ .grid_item_x = MUSIC_SONG_ITEM_X,
+ .grid_item_y = MUSIC_SONG_ITEM_Y,
+ .get_grid_text = _grid_text_get,
+ .get_grid_content = _grid_content_get,
+ .get_content_info = _get_music_count,
+ },
};
struct _priv {
@@ -120,8 +129,13 @@ static void _selected(void *data)
vdata.list = priv->media_list;
vdata.index = util_get_media_index(vdata.list, am);
- viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
- viewmgr_push_view(VIEW_VIEWER);
+ if (priv->view_type == E_DETAIL_MOVIE_GENRE) {
+ viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
+ viewmgr_push_view(VIEW_VIEWER);
+ } else if (priv->view_type == E_DETAIL_MUSIC_ALBUM) {
+ viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata);
+ viewmgr_push_view(VIEW_MPLAYER);
+ }
}
static void _selected_cb(int id, void *data, Evas_Object *obj,
@@ -266,6 +280,11 @@ static void _get_movie_count(char *str, int size, Eina_List *list)
snprintf(str, size, "%d movies", eina_list_count(list));
}
+static void _get_music_count(char *str, int size, Eina_List *list)
+{
+ snprintf(str, size, "%d songs", eina_list_count(list));
+}
+
static void _update_title_area(struct _priv *priv, const char *title)
{
char buf[64];