summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJehun Lim <jehun.lim@samsung.com>2015-09-17 19:50:39 +0900
committerJehun Lim <jehun.lim@samsung.com>2015-09-17 20:00:55 +0900
commit396a961a66d500e29f34d45c02f8ed44df8acf07 (patch)
treedd1a3cb814634dd6b6c6603200da420510407535
parent094b7a75ddfd27cb0f352a290f7b79dbb6dd9d40 (diff)
downloadair_mediahub-396a961a66d500e29f34d45c02f8ed44df8acf07.tar.gz
air_mediahub-396a961a66d500e29f34d45c02f8ed44df8acf07.tar.bz2
air_mediahub-396a961a66d500e29f34d45c02f8ed44df8acf07.zip
music: add album and artist view mode
Change-Id: Iacf502689f966ea9f64de1c13dac9b5dabbd6d72 Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r--include/grid/grid.h14
-rw-r--r--res/edc/widgets/gengrid.edc132
-rw-r--r--src/grid/grid_music.c122
-rw-r--r--src/layout/music.c49
4 files changed, 271 insertions, 46 deletions
diff --git a/include/grid/grid.h b/include/grid/grid.h
index a03a873..e1fb94e 100644
--- a/include/grid/grid.h
+++ b/include/grid/grid.h
@@ -89,4 +89,18 @@ struct grid_data *get_music_grid_data(int type);
#define MOVIE_GENRE_ITEM_NUM GALLERY_EVENT_ITEM_NUM
#define MOVIE_GENRE_GRID_PADDING GALLERY_EVENT_GRID_PADDING
+#define STYLE_MUSIC_ALBUM "album_item"
+#define MUSIC_ALBUM_ITEM_PADDING 26
+#define MUSIC_ALBUM_ITEM_X (212 + MUSIC_ALBUM_ITEM_PADDING)
+#define MUSIC_ALBUM_ITEM_Y (294 + MUSIC_ALBUM_ITEM_PADDING)
+#define MUSIC_ALBUM_ITEM_NUM 2
+#define MUSIC_ALBUM_GRID_PADDING (62 - MUSIC_ALBUM_ITEM_PADDING)
+
+#define STYLE_MUSIC_ARTIST "album_item"
+#define MUSIC_ARTIST_ITEM_PADDING MUSIC_ALBUM_ITEM_PADDING
+#define MUSIC_ARTIST_ITEM_X MUSIC_ALBUM_ITEM_X
+#define MUSIC_ARTIST_ITEM_Y MUSIC_ALBUM_ITEM_Y
+#define MUSIC_ARTIST_ITEM_NUM MUSIC_ALBUM_ITEM_NUM
+#define MUSIC_ARTIST_GRID_PADDING MUSIC_ALBUM_GRID_PADDING
+
#endif /* __AIR_MEDIAHUB_GRID_H__ */
diff --git a/res/edc/widgets/gengrid.edc b/res/edc/widgets/gengrid.edc
index fb6f153..2b9e6fd 100644
--- a/res/edc/widgets/gengrid.edc
+++ b/res/edc/widgets/gengrid.edc
@@ -15,14 +15,11 @@
*/
group {
- name: "elm/gengrid/item/movie_item/default";
+ name: "elm/gengrid/item/album_item/default";
data.item: "selectraise" "on";
data.item: "texts" "elm.text.title";
- data.item: "contents" "elm.swallow.thumbnail elm.swallow.favorite elm.swallow.textbg";
+ data.item: "contents" "elm.swallow.thumbnail elm.swallow.textbg";
data.item: "focus_highlight" "on";
- images {
- image: IMAGE_PREVIEW_PLAY COMP;
- }
parts {
part {
name: "elm.padding.bottom_right";
@@ -111,34 +108,6 @@ group {
}
}
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_PREVIEW_PLAY;
- min: 80 80;
- fixed: 1 1;
- map {
- perspective_on: 1;
- perspective: "map";
- }
- }
- description {
- state: "selected" 0.0;
- inherit: "default" 0.0;
- map.on: 1;
- }
- }
- part {
name: "padding_favorite";
type: SPACER;
scale: 1;
@@ -433,6 +402,103 @@ group {
name: "focus,in,anim";
action: STATE_SET "selected" 0.0;
target: "defaultbg";
+ target: PART_ELM_SWALLOW_THUMBNAIL;
+ target: PART_ELM_SWALLOW_FAVORITE;
+ target: "part_focus1";
+ target: "part_focus2";
+ target: "part_focus3";
+ target: "defaultbg_text";
+ transition: TRANSITION_FOCUS;
+ }
+ program {
+ name: "go_passive";
+ signal: "elm,state,unfocused";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: PART_ELM_TEXT_TITLE;
+ after: "focus,out,anim";
+ }
+ program {
+ name: "focus,out,anim";
+ action: STATE_SET "selected_0" 0.0;
+ target: "part_focus1";
+ target: "part_focus2";
+ target: "part_focus3";
+ target: "defaultbg_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_THUMBNAIL;
+ target: PART_ELM_SWALLOW_FAVORITE;
+ target: "defaultbg";
+ target: "part_focus1";
+ target: "part_focus2";
+ target: "part_focus3";
+ target: "defaultbg_text";
+ }
+ }
+}
+
+group {
+ name: "elm/gengrid/item/movie_item/default";
+ inherit: "elm/gengrid/item/album_item/default";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text.title";
+ data.item: "contents" "elm.swallow.thumbnail elm.swallow.favorite elm.swallow.textbg";
+ data.item: "focus_highlight" "on";
+ images {
+ image: IMAGE_PREVIEW_PLAY COMP;
+ }
+ 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_PREVIEW_PLAY;
+ min: 80 80;
+ fixed: 1 1;
+ map {
+ perspective_on: 1;
+ perspective: "map";
+ }
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ map.on: 1;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "go_active";
+ signal: "elm,state,focused";
+ source: "elm";
+ action: STATE_SET "selected_0" 0.0;
+ target: "part_focus1";
+ target: "part_focus2";
+ target: "part_focus3";
+ target: "defaultbg_text";
+ target: PART_ELM_TEXT_TITLE;
+ after: "focus,in,anim";
+ }
+ program {
+ name: "focus,in,anim";
+ action: STATE_SET "selected" 0.0;
+ target: "defaultbg";
target: "default_image";
target: PART_ELM_SWALLOW_THUMBNAIL;
target: PART_ELM_SWALLOW_FAVORITE;
diff --git a/src/grid/grid_music.c b/src/grid/grid_music.c
index 7ef538f..dcdc70e 100644
--- a/src/grid/grid_music.c
+++ b/src/grid/grid_music.c
@@ -29,7 +29,7 @@
#include "grid/grid.h"
#include "util/util.h"
-static char *_grid_text_get(void *data, Evas_Object *obj, const char *part)
+static char *_media_text_get(void *data, Evas_Object *obj, const char *part)
{
app_media *am;
app_media_info *info;
@@ -55,7 +55,7 @@ static char *_grid_text_get(void *data, Evas_Object *obj, const char *part)
return NULL;
}
-static Evas_Object *_grid_content_get(void *data,
+static Evas_Object *_media_content_get(void *data,
Evas_Object *obj, const char *part)
{
Evas_Object *eo;
@@ -97,7 +97,67 @@ static Evas_Object *_grid_content_get(void *data,
return eo;
}
-static Eina_List *_get_item_list(struct datamgr *dmgr)
+static char *_album_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ struct album_info *ai;
+
+ if (!data)
+ return NULL;
+
+ ai = data;
+
+ return strdup(ai->name);
+}
+
+static char *_artist_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ struct album_info *ai;
+
+ if (!data)
+ return NULL;
+
+ ai = data;
+
+ return strdup(ai->artist);
+}
+
+static Evas_Object *_album_content_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ Evas_Object *eo;
+ struct album_info *ai;
+ struct color_data bg;
+
+ if (!data)
+ return NULL;
+
+ ai = data;
+
+ eo = NULL;
+ if (!strcmp(part, PART_ELM_SWALLOW_THUMBNAIL)) {
+ eo = util_add_image(obj, ai->album_art);
+ if (!eo) {
+ _ERR("failed to create image object");
+ return NULL;
+ }
+ } else if (!strcmp(part, PART_ELM_SWALLOW_TEXTBG)) {
+ eo = evas_object_rectangle_add(obj);
+ if (!eo) {
+ _ERR("failed to create rectangle object");
+ return NULL;
+ }
+
+ app_contents_get_color(ai->name, NULL, &bg);
+ evas_object_color_set(eo, bg.r, bg.g, bg.b, bg.a);
+ }
+
+ if (eo)
+ evas_object_show(eo);
+
+ return eo;
+}
+
+static Eina_List *_get_song_list(struct datamgr *dmgr)
{
if (!dmgr) {
_ERR("invalid argument");
@@ -107,6 +167,26 @@ static Eina_List *_get_item_list(struct datamgr *dmgr)
return dmgr->ops->get_group(dmgr->handle, E_MEDIA_NAME);
}
+static Eina_List *_get_album_list(struct datamgr *dmgr)
+{
+ if (!dmgr) {
+ _ERR("invalid argument");
+ return NULL;
+ }
+
+ return dmgr->ops->get_group(dmgr->handle, E_ALBUM_NAME);
+}
+
+static Eina_List *_get_artist_list(struct datamgr *dmgr)
+{
+ if (!dmgr) {
+ _ERR("invalid argument");
+ return NULL;
+ }
+
+ return dmgr->ops->get_group(dmgr->handle, E_ALBUM_ARTIST);
+}
+
static void _free_item_list(struct datamgr *dmgr, Eina_List *list)
{
if (!dmgr) {
@@ -176,8 +256,18 @@ static void _selected_cb(void *data, Elm_Object_Item *it)
static struct grid_class _gclass[] = {
[E_MUSIC_SONG] = {
.item_style = STYLE_MUSIC_SONG,
- .text_get = _grid_text_get,
- .content_get = _grid_content_get
+ .text_get = _media_text_get,
+ .content_get = _media_content_get
+ },
+ [E_MUSIC_ALBUM] = {
+ .item_style = STYLE_MUSIC_ALBUM,
+ .text_get = _album_text_get,
+ .content_get = _album_content_get
+ },
+ [E_MUSIC_ARTIST] = {
+ .item_style = STYLE_MUSIC_ARTIST,
+ .text_get = _artist_text_get,
+ .content_get = _album_content_get
},
/* Other view mode class will be added later */
};
@@ -189,11 +279,29 @@ static struct grid_data _gdata[] = {
.item_num = MUSIC_SONG_ITEM_NUM,
.grid_padding = MUSIC_SONG_GRID_PADDING,
.gclass = &_gclass[E_MUSIC_SONG],
- .get_item_list = _get_item_list,
+ .get_item_list = _get_song_list,
.free_item_list = _free_item_list,
.key_down_cb = _key_down_cb,
.selected_cb = _selected_cb
},
+ [E_MUSIC_ALBUM] = {
+ .item_x = MUSIC_ALBUM_ITEM_X,
+ .item_y = MUSIC_ALBUM_ITEM_Y,
+ .item_num = MUSIC_ALBUM_ITEM_NUM,
+ .grid_padding = MUSIC_ALBUM_GRID_PADDING,
+ .gclass = &_gclass[E_MUSIC_ALBUM],
+ .get_item_list = _get_album_list,
+ .free_item_list = _free_item_list,
+ },
+ [E_MUSIC_ARTIST] = {
+ .item_x = MUSIC_ARTIST_ITEM_X,
+ .item_y = MUSIC_ARTIST_ITEM_Y,
+ .item_num = MUSIC_ARTIST_ITEM_NUM,
+ .grid_padding = MUSIC_ARTIST_GRID_PADDING,
+ .gclass = &_gclass[E_MUSIC_ARTIST],
+ .get_item_list = _get_artist_list,
+ .free_item_list = _free_item_list,
+ },
/* Other view mode data will be added later */
};
@@ -204,5 +312,5 @@ struct grid_data *get_music_grid_data(int type)
return NULL;
}
- return &_gdata[E_MUSIC_SONG];
+ return &_gdata[type];
}
diff --git a/src/layout/music.c b/src/layout/music.c
index ad68f86..8c23511 100644
--- a/src/layout/music.c
+++ b/src/layout/music.c
@@ -258,13 +258,33 @@ err:
return NULL;
}
+static struct datamgr *_get_datamgr(struct _priv *priv)
+{
+ struct datamgr *dmgr;
+
+ switch (priv->view_mode) {
+ case E_MUSIC_SONG:
+ dmgr = priv->dmgr[E_DATA_MEDIA];
+ break;
+ case E_MUSIC_ALBUM:
+ case E_MUSIC_ARTIST:
+ dmgr = priv->dmgr[E_DATA_ALBUM];
+ break;
+ default:
+ dmgr = NULL;
+ break;
+ }
+
+ return dmgr;
+}
+
static void _update_content_info(struct _priv *priv)
{
struct datamgr *dmgr;
int count;
char buf[128];
- dmgr = priv->dmgr[E_DATA_MEDIA];
+ dmgr = _get_datamgr(priv);
if (!dmgr)
return;
@@ -281,9 +301,14 @@ static void _update_content_info(struct _priv *priv)
static void _clear_content_list(struct _priv *priv)
{
+ struct datamgr *dmgr;
+
if (priv->media_list) {
- priv->gdata->free_item_list(priv->dmgr[E_DATA_MEDIA],
- priv->media_list);
+ dmgr = _get_datamgr(priv);
+ if (!dmgr)
+ return;
+
+ priv->gdata->free_item_list(dmgr, priv->media_list);
priv->media_list = NULL;
}
@@ -293,6 +318,7 @@ 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);
@@ -301,14 +327,18 @@ static void _update_content_list(struct _priv *priv)
priv->gdata = get_music_grid_data(priv->view_mode);
- list = priv->gdata->get_item_list(priv->dmgr[E_DATA_MEDIA]);
+ dmgr = _get_datamgr(priv);
+ if (!dmgr)
+ return;
+
+ list = priv->gdata->get_item_list(dmgr);
if (!list) {
elm_object_part_text_set(priv->layout,
PART_NOCONTENT, TEXT_NOCONTENT);
return;
}
- priv->gdata->data = priv->dmgr[E_DATA_MEDIA];
+ priv->gdata->data = dmgr;
if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata))
_ERR("failed to update list area");
@@ -507,6 +537,7 @@ err:
static void _destroy(void *layout_data)
{
struct _priv *priv;
+ struct datamgr *dmgr;
if (!layout_data) {
_ERR("failed to get layout data");
@@ -515,7 +546,9 @@ static void _destroy(void *layout_data)
priv = layout_data;
- priv->gdata->free_item_list(priv->dmgr[E_DATA_MEDIA], priv->media_list);
+ dmgr = _get_datamgr(priv);
+
+ priv->gdata->free_item_list(dmgr, priv->media_list);
_destroy_utils(priv);
@@ -611,6 +644,10 @@ static void _update(void *layout_data, int update_type, void *data)
vdata = data;
mode = vdata->index;
+ /* Genre and folder view mode will be implemented later. */
+ if (mode == E_MUSIC_GENRE || mode == E_MUSIC_FOLDER)
+ return;
+
if (mode == priv->view_mode)
return;