summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyojung Jo <hj903.jo@samsung.com>2015-08-26 17:43:21 +0900
committerHyojung Jo <hj903.jo@samsung.com>2015-08-26 17:43:21 +0900
commit90d808f06df507306aacbbc4e73d5786ffd3db73 (patch)
treeadda9183efc692df3cb71e0bbf59407e984dd996
parentbad9bd9c939363172e2f1cf61ae1834868da5b81 (diff)
downloadair_favorite-90d808f06df507306aacbbc4e73d5786ffd3db73.tar.gz
air_favorite-90d808f06df507306aacbbc4e73d5786ffd3db73.tar.bz2
air_favorite-90d808f06df507306aacbbc4e73d5786ffd3db73.zip
Get favorite list everytime when menu is changed
Change-Id: I25697a82cd5c53c89c4110387c9e9aa536360ed9 Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
-rw-r--r--include/datamgr.h1
-rw-r--r--include/grid.h1
-rw-r--r--src/data/app.c14
-rw-r--r--src/data/channel.c14
-rw-r--r--src/data/media.c27
-rw-r--r--src/grid/grid_apps.c12
-rw-r--r--src/grid/grid_gallery.c12
-rw-r--r--src/grid/grid_movie.c12
-rw-r--r--src/grid/grid_music.c12
-rw-r--r--src/grid/grid_tv.c12
-rw-r--r--src/view/view_base.c70
11 files changed, 159 insertions, 28 deletions
diff --git a/include/datamgr.h b/include/datamgr.h
index be176d0..ead6b10 100644
--- a/include/datamgr.h
+++ b/include/datamgr.h
@@ -36,6 +36,7 @@ struct datamgr {
int (*get_count)(enum item_type type);
char *(*get_data)(void *data, enum data_type type);
bool (*action)(Elm_Object_Item *it, enum action_type type);
+ bool (*data_updated)(void *data1, void *data2);
};
struct datamgr *get_channel_datamgr(void);
diff --git a/include/grid.h b/include/grid.h
index bc55ff6..924d89c 100644
--- a/include/grid.h
+++ b/include/grid.h
@@ -31,6 +31,7 @@ struct grid_data {
Eina_List *(*create_item_list)(void);
void (*destroy_item_list)(Eina_List *list);
bool (*item_action)(Elm_Object_Item *it, enum action_type type);
+ bool (*item_updated)(void *pre_data, void *new_data);
};
struct grid_data *get_tv_grid_data(void);
diff --git a/src/data/app.c b/src/data/app.c
index 75fd6ab..4ba5330 100644
--- a/src/data/app.c
+++ b/src/data/app.c
@@ -193,12 +193,26 @@ static bool _action(Elm_Object_Item *it, enum action_type type)
return true;
}
+static bool _data_updated(void *data1, void *data2)
+{
+ struct app_data *adata1, *adata2;
+
+ adata1 = data1;
+ adata2 = data2;
+
+ if (!strcmp(adata1->id, adata2->id))
+ return false;
+
+ return true;
+}
+
static struct datamgr _dmgr = {
.get_data = _get_data,
.get_count = NULL,
.get_favorites = _get_favorites,
.free_favorites = _free_favorites,
.action = _action,
+ .data_updated = _data_updated,
};
struct datamgr *get_apps_datamgr(void)
diff --git a/src/data/channel.c b/src/data/channel.c
index 5d5cb50..5c0a138 100644
--- a/src/data/channel.c
+++ b/src/data/channel.c
@@ -219,12 +219,26 @@ static bool _action(Elm_Object_Item *it, enum action_type type)
return true;
}
+static bool _data_updated(void *data1, void *data2)
+{
+ struct channel_data *cdata1, *cdata2;
+
+ cdata1 = data1;
+ cdata2 = data2;
+
+ if (cdata1->id == cdata2->id)
+ return false;
+
+ return true;
+}
+
static struct datamgr _dmgr = {
.get_data = _get_data,
.get_count = NULL,
.get_favorites = _get_favorites,
.free_favorites = _free_favorites,
.action = _action,
+ .data_updated = _data_updated,
};
struct datamgr *get_channel_datamgr(void)
diff --git a/src/data/media.c b/src/data/media.c
index 7e17bbb..de3d126 100644
--- a/src/data/media.c
+++ b/src/data/media.c
@@ -275,12 +275,39 @@ static bool _action(Elm_Object_Item *it, enum action_type type)
return true;
}
+static bool _data_updated(void *data1, void *data2)
+{
+ app_media *am1, *am2;
+ app_media_info *minfo1, *minfo2;
+
+ am1 = data1;
+ am2 = data2;
+
+ minfo1 = app_media_get_info(am1);
+ if (!minfo1) {
+ _ERR("Get app_media_info failed.");
+ return false;
+ }
+
+ minfo2 = app_media_get_info(am2);
+ if (!minfo2) {
+ _ERR("Get app_media_info failed.");
+ return false;
+ }
+
+ if (!strcmp(minfo1->media_id, minfo2->media_id))
+ return false;
+
+ return true;
+}
+
static struct datamgr _dmgr = {
.get_data = _get_data,
.get_count = _get_count,
.get_favorites = _get_favorites,
.free_favorites = _free_favorites,
.action = _action,
+ .data_updated = _data_updated,
};
struct datamgr *get_media_datamgr(void)
diff --git a/src/grid/grid_apps.c b/src/grid/grid_apps.c
index 9ad702f..a7be106 100644
--- a/src/grid/grid_apps.c
+++ b/src/grid/grid_apps.c
@@ -175,6 +175,17 @@ static bool _item_action(Elm_Object_Item *it, enum action_type type)
return true;
}
+static bool _item_updated(void *pre_data, void *new_data)
+{
+ struct datamgr *dmgr;
+
+ dmgr = get_apps_datamgr();
+ if (!dmgr || !dmgr->data_updated)
+ return false;
+
+ return dmgr->data_updated(pre_data, new_data);
+}
+
static struct grid_data _gdata = {
.id = STR_APPS,
.item_size_x = ITEM_APPS_X,
@@ -183,6 +194,7 @@ static struct grid_data _gdata = {
.create_item_list = _create_item_list,
.destroy_item_list = _destroy_item_list,
.item_action = _item_action,
+ .item_updated = _item_updated,
};
struct grid_data *get_apps_grid_data(void)
diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c
index 224ec41..be85c2c 100644
--- a/src/grid/grid_gallery.c
+++ b/src/grid/grid_gallery.c
@@ -154,6 +154,17 @@ static bool _item_action(Elm_Object_Item *it, enum action_type type)
return true;
}
+static bool _item_updated(void *pre_data, void *new_data)
+{
+ struct datamgr *dmgr;
+
+ dmgr = get_media_datamgr();
+ if (!dmgr || !dmgr->data_updated)
+ return false;
+
+ return dmgr->data_updated(pre_data, new_data);
+}
+
static struct grid_data _gdata = {
.id = STR_GALLERY,
.item_size_x = ITEM_GALLERY_X,
@@ -162,6 +173,7 @@ static struct grid_data _gdata = {
.create_item_list = _create_item_list,
.destroy_item_list = _destroy_item_list,
.item_action = _item_action,
+ .item_updated = _item_updated,
};
struct grid_data *get_gallery_grid_data(void)
diff --git a/src/grid/grid_movie.c b/src/grid/grid_movie.c
index 959c1b1..5ac0356 100644
--- a/src/grid/grid_movie.c
+++ b/src/grid/grid_movie.c
@@ -178,6 +178,17 @@ static bool _item_action(Elm_Object_Item *it, enum action_type type)
return true;
}
+static bool _item_updated(void *pre_data, void *new_data)
+{
+ struct datamgr *dmgr;
+
+ dmgr = get_media_datamgr();
+ if (!dmgr || !dmgr->data_updated)
+ return false;
+
+ return dmgr->data_updated(pre_data, new_data);
+}
+
static struct grid_data _gdata = {
.id = STR_MOVIE,
.item_size_x = ITEM_MOVIE_X,
@@ -186,6 +197,7 @@ static struct grid_data _gdata = {
.create_item_list = _create_item_list,
.destroy_item_list = _destroy_item_list,
.item_action = _item_action,
+ .item_updated = _item_updated,
};
struct grid_data *get_movie_grid_data(void)
diff --git a/src/grid/grid_music.c b/src/grid/grid_music.c
index b723822..e6090c6 100644
--- a/src/grid/grid_music.c
+++ b/src/grid/grid_music.c
@@ -152,6 +152,17 @@ static bool _item_action(Elm_Object_Item *it, enum action_type type)
return true;
}
+static bool _item_updated(void *pre_data, void *new_data)
+{
+ struct datamgr *dmgr;
+
+ dmgr = get_media_datamgr();
+ if (!dmgr || !dmgr->data_updated)
+ return false;
+
+ return dmgr->data_updated(pre_data, new_data);
+}
+
static struct grid_data _gdata = {
.id = STR_MUSIC,
.item_size_x = ITEM_MUSIC_X,
@@ -160,6 +171,7 @@ static struct grid_data _gdata = {
.create_item_list = _create_item_list,
.destroy_item_list = _destroy_item_list,
.item_action = _item_action,
+ .item_updated = _item_updated,
};
struct grid_data *get_music_grid_data(void)
diff --git a/src/grid/grid_tv.c b/src/grid/grid_tv.c
index 9849ff6..8ad32b4 100644
--- a/src/grid/grid_tv.c
+++ b/src/grid/grid_tv.c
@@ -175,6 +175,17 @@ static bool _item_action(Elm_Object_Item *it, enum action_type type)
return true;
}
+static bool _item_updated(void *pre_data, void *new_data)
+{
+ struct datamgr *dmgr;
+
+ dmgr = get_channel_datamgr();
+ if (!dmgr || !dmgr->data_updated)
+ return false;
+
+ return dmgr->data_updated(pre_data, new_data);
+}
+
static struct grid_data _gdata = {
.id = STR_TV,
.item_size_x = ITEM_TV_X,
@@ -183,6 +194,7 @@ static struct grid_data _gdata = {
.create_item_list = _create_item_list,
.destroy_item_list = _destroy_item_list,
.item_action = _item_action,
+ .item_updated = _item_updated,
};
struct grid_data *get_tv_grid_data(void)
diff --git a/src/view/view_base.c b/src/view/view_base.c
index c39c01b..d3b04de 100644
--- a/src/view/view_base.c
+++ b/src/view/view_base.c
@@ -81,44 +81,66 @@ static void _draw_content_count(Evas_Object *base, int count, int id)
}
}
-static void _update_grid_item_list(struct _priv *priv, struct grid_data *gdata)
+static bool _item_list_updated(struct grid_data *gdata,
+ Eina_List *pre_list, Eina_List *new_list)
{
- gdata->list = gdata->create_item_list();
- if (!gdata->list) {
- elm_object_part_text_set(priv->base, PART_NO_CONTENTS,
- STR_NO_CONTENTS);
- return;
+ int pre_cnt, new_cnt;
+ void *pre_data, *new_data;
+ int i;
+
+ pre_cnt = eina_list_count(pre_list);
+ new_cnt = eina_list_count(new_list);
+
+ if (pre_cnt != new_cnt)
+ return true;
+
+ for (i = 0; i < new_cnt; i++) {
+ pre_data = eina_list_nth(pre_list, i);
+ new_data = eina_list_nth(new_list, i);
+
+ if (gdata->item_updated(pre_data, new_data))
+ return true;
}
- if (!gridmgr_append_list(priv->gmgr, gdata->id, gdata->list))
- _ERR("Gridmgr append list failed.");
+ return false;
}
-static bool _load_current_grid(struct _priv *priv, int id)
+static bool _update_current_grid(struct _priv *priv)
{
struct grid_data *gdata;
Evas_Object *prev_grid;
+ Eina_List *pre_list;
- if (!priv || !priv->gmgr || !priv->base) {
+ if (!priv->gmgr || !priv->base) {
_ERR("Invalid argument.");
return false;
}
- gdata = _get_grid_data[id]();
+ gdata = _get_grid_data[priv->cur_menu_id]();
if (!gdata || !gdata->id || !gdata->grid)
return false;
+ pre_list = gdata->list;
+ gdata->list = gdata->create_item_list();
+
elm_object_part_text_set(priv->base, PART_NO_CONTENTS, "");
prev_grid = elm_object_part_content_unset(priv->base, PART_GENGRID);
evas_object_hide(prev_grid);
- elm_object_part_content_set(priv->base, PART_GENGRID, gdata->grid);
- evas_object_show(gdata->grid);
+ if (!gdata->list) {
+ elm_object_part_text_set(priv->base,
+ PART_NO_CONTENTS, STR_NO_CONTENTS);
+ } else {
+ elm_object_part_content_set(priv->base,
+ PART_GENGRID, gdata->grid);
+ evas_object_show(gdata->grid);
- if (!gdata->list)
- _update_grid_item_list(priv, gdata);
+ if (_item_list_updated(gdata, pre_list, gdata->list))
+ gridmgr_append_list(priv->gmgr, gdata->id, gdata->list);
+ }
- _draw_content_count(priv->base, eina_list_count(gdata->list), id);
+ _draw_content_count(priv->base, eina_list_count(gdata->list),
+ priv->cur_menu_id);
return true;
}
@@ -158,7 +180,7 @@ static void _menu_focused_cb(int id, void *data, Evas_Object *obj,
priv->cur_menu_id = id;
- if (!_load_current_grid(priv, id))
+ if (!_update_current_grid(priv))
_ERR("Load current grid view failed.");
}
@@ -499,21 +521,13 @@ static void _hide(void *data)
static void _update(void *view_data, int update_type, void *data)
{
- struct _priv *priv;
- struct grid_data *gdata;
-
- if (!view_data || !data) {
+ if (!view_data) {
_ERR("Get data failed.");
return;
}
- priv = view_data;
- gdata = data;
- if (update_type == UPDATE_GRID) {
- _update_grid_item_list(priv, gdata);
- _draw_content_count(priv->base, eina_list_count(gdata->list),
- priv->cur_menu_id);
- }
+ if (update_type == UPDATE_GRID)
+ _update_current_grid(view_data);
}
static void _destroy(void *data)