diff options
author | Hyojung Jo <hj903.jo@samsung.com> | 2015-08-26 17:43:21 +0900 |
---|---|---|
committer | Hyojung Jo <hj903.jo@samsung.com> | 2015-08-26 17:43:21 +0900 |
commit | 90d808f06df507306aacbbc4e73d5786ffd3db73 (patch) | |
tree | adda9183efc692df3cb71e0bbf59407e984dd996 | |
parent | bad9bd9c939363172e2f1cf61ae1834868da5b81 (diff) | |
download | air_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.h | 1 | ||||
-rw-r--r-- | include/grid.h | 1 | ||||
-rw-r--r-- | src/data/app.c | 14 | ||||
-rw-r--r-- | src/data/channel.c | 14 | ||||
-rw-r--r-- | src/data/media.c | 27 | ||||
-rw-r--r-- | src/grid/grid_apps.c | 12 | ||||
-rw-r--r-- | src/grid/grid_gallery.c | 12 | ||||
-rw-r--r-- | src/grid/grid_movie.c | 12 | ||||
-rw-r--r-- | src/grid/grid_music.c | 12 | ||||
-rw-r--r-- | src/grid/grid_tv.c | 12 | ||||
-rw-r--r-- | src/view/view_base.c | 70 |
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) |