diff options
author | Jehun Lim <jehun.lim@samsung.com> | 2015-08-25 15:30:22 +0900 |
---|---|---|
committer | Jehun Lim <jehun.lim@samsung.com> | 2015-08-25 16:32:36 +0900 |
commit | 9b868fbc021126fb22001f1fe3ac98c7b02d103b (patch) | |
tree | 6830d9a17eb5d82e30cfb6e3cccb54002c6b5187 | |
parent | c37791a56c5b528eb01fb60775750d15d1e7adfe (diff) | |
download | air_mediahub-9b868fbc021126fb22001f1fe3ac98c7b02d103b.tar.gz air_mediahub-9b868fbc021126fb22001f1fe3ac98c7b02d103b.tar.bz2 air_mediahub-9b868fbc021126fb22001f1fe3ac98c7b02d103b.zip |
base: find the item to be focused using media id
Change-Id: I849d019370453f9b64b5233d243eeaa69fd31abd
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r-- | include/util/listmgr.h | 2 | ||||
-rw-r--r-- | src/layout/gallery.c | 12 | ||||
-rw-r--r-- | src/layout/movie.c | 15 | ||||
-rw-r--r-- | src/layout/music.c | 15 | ||||
-rw-r--r-- | src/util/listmgr.c | 54 |
5 files changed, 49 insertions, 49 deletions
diff --git a/include/util/listmgr.h b/include/util/listmgr.h index 1820593..1999de3 100644 --- a/include/util/listmgr.h +++ b/include/util/listmgr.h @@ -57,7 +57,7 @@ bool listmgr_update_content_item(struct listmgr *lmgr); bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list); bool listmgr_update_play_info(struct listmgr *lmgr, app_media_info *info); -bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update); +bool listmgr_focus_content_list(struct listmgr *lmgr, const char *id); bool listmgr_focus_play_info(struct listmgr *lmgr); void listmgr_set_focus_state(struct listmgr *lmgr, Eina_Bool state); diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 46fcc00..22e32e2 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -51,7 +51,6 @@ struct _priv { struct listmgr_data *ldata; struct mediadata *md; - int cur_index; Eina_List *media_list; }; @@ -182,7 +181,6 @@ static void _grid_selected_cb(void *data, Elm_Object_Item *it) vdata.list = mediadata_get_medialist(priv->md); vdata.index = util_get_media_index(vdata.list, am); - priv->cur_index = vdata.index; viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); viewmgr_push_view(VIEW_VIEWER); @@ -212,7 +210,6 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it, vdata.list = mediadata_get_medialist(priv->md); vdata.index = util_get_media_index(vdata.list, am); - priv->cur_index = vdata.index; viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); viewmgr_show_view(VIEW_ACTION_MENU); @@ -442,7 +439,6 @@ static void _update(void *layout_data, int update_type, void *data) { struct view_update_data *vdata; struct _priv *priv; - bool update; if (!layout_data) { _ERR("failed to get layout data"); @@ -466,13 +462,7 @@ static void _update(void *layout_data, int update_type, void *data) vdata = data; - if (priv->cur_index != vdata->index) - update = true; - else - update = false; - - listmgr_focus_content_list(priv->listmgr, vdata->index, update); - + listmgr_focus_content_list(priv->listmgr, vdata->id); break; case UPDATE_RECENT: if (!data) { diff --git a/src/layout/movie.c b/src/layout/movie.c index 9d6561c..4639e8a 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -59,7 +59,6 @@ struct _priv { struct progressbar *prog; Eina_List *media_list; - int cur_index; app_media *recent_info; }; @@ -340,7 +339,6 @@ static void _item_selected(struct _priv *priv, app_media *am) vdata.list = mediadata_get_medialist(priv->md); vdata.index = util_get_media_index(vdata.list, am); - priv->cur_index = vdata.index; viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); viewmgr_push_view(VIEW_VIEWER); @@ -403,7 +401,6 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it, vdata.list = mediadata_get_medialist(priv->md); vdata.index = util_get_media_index(vdata.list, am); - priv->cur_index = vdata.index; viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); viewmgr_show_view(VIEW_ACTION_MENU); @@ -523,7 +520,7 @@ static app_media *_get_recent_item(Eina_List *list) return am; } -static void _update_recent_item(struct _priv *priv, int index) +static void _update_recent_item(struct _priv *priv, const char *id) { Eina_List *list; app_media *am; @@ -531,8 +528,8 @@ static void _update_recent_item(struct _priv *priv, int index) list = mediadata_get_medialist(priv->md); - if (index >= 0) - am = eina_list_nth(list, index); + if (id) + am = util_find_media_info(list, id); else am = _get_recent_item(list); @@ -714,11 +711,11 @@ static void _update(void *layout_data, int update_type, void *data) switch (update_type) { case UPDATE_CONTENT: _update_content_list(priv); - _update_recent_item(priv, -1); + _update_recent_item(priv, NULL); break; case UPDATE_CONTENT_ITEM: listmgr_update_content_item(priv->listmgr); - _update_recent_item(priv, -1); + _update_recent_item(priv, NULL); break; case UPDATE_FOCUS: if (!data) { @@ -729,7 +726,7 @@ static void _update(void *layout_data, int update_type, void *data) vdata = data; listmgr_focus_play_info(priv->listmgr); - _update_recent_item(priv, vdata->index); + _update_recent_item(priv, vdata->id); break; case UPDATE_RECENT: if (!data) { diff --git a/src/layout/music.c b/src/layout/music.c index e031fb6..1ff80c0 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -55,7 +55,6 @@ struct _priv { struct mediadata *md; Eina_List *media_list; - int cur_index; app_media *playing_info; }; @@ -273,7 +272,6 @@ static void _item_selected(struct _priv *priv, app_media *am) vdata.list = mediadata_get_medialist(priv->md); vdata.index = util_get_media_index(vdata.list, am); - priv->cur_index = vdata.index; viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata); viewmgr_push_view(VIEW_MPLAYER); @@ -336,7 +334,6 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it, vdata.list = mediadata_get_medialist(priv->md); vdata.index = util_get_media_index(vdata.list, am); - priv->cur_index = vdata.index; viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); viewmgr_show_view(VIEW_ACTION_MENU); @@ -454,15 +451,15 @@ static app_media *_get_playing_item(Eina_List *list) return am; } -static void _update_playing_item(struct _priv *priv, int index) +static void _update_playing_item(struct _priv *priv, const char *id) { Eina_List *list; app_media *am; app_media_info *info; list = mediadata_get_medialist(priv->md); - if (index >= 0) - am = eina_list_nth(list, index); + if (id) + am = util_find_media_info(list, id); else am = _get_playing_item(list); @@ -641,11 +638,11 @@ static void _update(void *layout_data, int update_type, void *data) switch (update_type) { case UPDATE_CONTENT: _update_content_list(priv); - _update_playing_item(priv, -1); + _update_playing_item(priv, NULL); break; case UPDATE_CONTENT_ITEM: listmgr_update_content_item(priv->listmgr); - _update_playing_item(priv, -1); + _update_playing_item(priv, NULL); break; case UPDATE_PLAY_INFO: if (!data) { @@ -655,7 +652,7 @@ static void _update(void *layout_data, int update_type, void *data) vdata = data; - _update_playing_item(priv, vdata->index); + _update_playing_item(priv, vdata->id); break; case UPDATE_FOCUS: listmgr_focus_play_info(priv->listmgr); diff --git a/src/util/listmgr.c b/src/util/listmgr.c index 0f8b84b..a96e005 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -452,6 +452,29 @@ bool _focus_to_content(struct listmgr *lmgr, Evas_Object *base) return true; } +Elm_Object_Item *_get_grid_item(Evas_Object *grid, const char *id) +{ + Elm_Object_Item *it; + app_media *am; + app_media_info *mi; + + for (it = elm_gengrid_first_item_get(grid); it; + it = elm_gengrid_item_next_get(it)) { + am = elm_object_item_data_get(it); + if (!am) + continue; + + mi = app_media_get_info(am); + if (!mi) + continue; + + if (!strcmp(id, mi->media_id)) + return it; + } + + return NULL; +} + void listmgr_set_focus_state(struct listmgr *lmgr, Eina_Bool state) { if (!lmgr) { @@ -477,26 +500,26 @@ bool listmgr_focus_play_info(struct listmgr *lmgr) return true; } -bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update) +bool listmgr_focus_content_list(struct listmgr *lmgr, const char *id) { Eina_List *item, *l; Evas_Object *ly, *grid; Elm_Object_Item *it; - int count; - int r; - if (!update) { - r = _focus_to_content(lmgr, lmgr->focused); - if (!r) - _ERR("failed to focus to content"); - return r; + if (!lmgr) { + _ERR("failed to get listmgr"); + return false; + } + + if (!id) { + _ERR("invalid argument"); + return false; } item = elm_box_children_get(lmgr->box); - if (lmgr->show_play_info) - item = eina_list_next(item); grid = NULL; + it = NULL; EINA_LIST_FOREACH(item, l, ly) { grid = elm_object_part_content_get(ly, PART_ITEM_CONTENT); if (!grid) { @@ -504,18 +527,11 @@ bool listmgr_focus_content_list(struct listmgr *lmgr, int index, bool update) return false; } - count = elm_gengrid_items_count(grid); - - if (index < count) + it = _get_grid_item(grid, id); + if (it) break; - - index -= count; } - it = elm_gengrid_first_item_get(grid); - while (index--) - it = elm_gengrid_item_next_get(it); - if (!it) { _ERR("failed to get current grid item"); return false; |