base: find the item to be focused using media id 14/46714/1
authorJehun Lim <jehun.lim@samsung.com>
Tue, 25 Aug 2015 06:30:22 +0000 (15:30 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Tue, 25 Aug 2015 07:32:36 +0000 (16:32 +0900)
Change-Id: I849d019370453f9b64b5233d243eeaa69fd31abd
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
include/util/listmgr.h
src/layout/gallery.c
src/layout/movie.c
src/layout/music.c
src/util/listmgr.c

index 1820593..1999de3 100644 (file)
@@ -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);
index 46fcc00..22e32e2 100644 (file)
@@ -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) {
index 9d6561c..4639e8a 100644 (file)
@@ -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) {
index e031fb6..1ff80c0 100644 (file)
@@ -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);
index 0f8b84b..a96e005 100644 (file)
@@ -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;