From 9b868fbc021126fb22001f1fe3ac98c7b02d103b Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Tue, 25 Aug 2015 15:30:22 +0900 Subject: [PATCH] base: find the item to be focused using media id Change-Id: I849d019370453f9b64b5233d243eeaa69fd31abd Signed-off-by: Jehun Lim --- include/util/listmgr.h | 2 +- src/layout/gallery.c | 12 +---------- src/layout/movie.c | 15 ++++++-------- src/layout/music.c | 15 ++++++-------- 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; -- 2.7.4