void util_up_string(char *str);
int util_get_media_index(Eina_List *list, void *info);
+int util_get_media_index_from_id(Eina_List *list, const char *id);
app_media *util_find_media_info(Eina_List *list, const char *id);
#endif /* __AIR_MEDIAHUB_UTIL_H__ */
UPDATE_PLAY_INFO,
UPDATE_PLAYER,
UPDATE_FAVORITE,
+ UPDATE_RECENT,
UPDATE_RESUME,
};
.content_get = _grid_content_get
};
+static void _recent_item_selected(struct _priv *priv, app_media *am)
+{
+ app_media_info *info;
+ struct view_update_data vdata;
+
+ info = app_media_get_info(am);
+ if (!info) {
+ _ERR("failed to get app media info");
+ return;
+ }
+
+ vdata.list = mediadata_get_medialist(priv->md);
+ vdata.index = util_get_media_index_from_id(vdata.list, info->media_id);
+
+ viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
+ viewmgr_push_view(VIEW_VIEWER);
+}
+
static void _grid_selected_cb(void *data, Elm_Object_Item *it)
{
app_media *am;
}
priv = layout_data;
- vdata = data;
switch (update_type) {
case UPDATE_CONTENT:
_update_content_list(priv);
break;
case UPDATE_FOCUS:
- if (!vdata) {
+ if (!data) {
_ERR("invalid argument");
return;
}
+ vdata = data;
+
if (priv->cur_index != vdata->index)
update = true;
else
listmgr_focus_content_list(priv->listmgr, vdata->index, update);
break;
+ case UPDATE_RECENT:
+ if (!data) {
+ _ERR("invalid argument");
+ return;
+ }
+
+ _update_content_list(priv);
+ _recent_item_selected(priv, data);
+ break;
case UPDATE_RESUME:
listmgr_focus_content_list(priv->listmgr,
priv->cur_index, false);
return true;
}
-static void _item_selected_cb(struct _priv *priv, app_media *am)
+static void _recent_item_selected(struct _priv *priv, app_media *am)
+{
+ app_media_info *info;
+ struct view_update_data vdata;
+
+ info = app_media_get_info(am);
+ if (!info) {
+ _ERR("failed to get app media info");
+ return;
+ }
+
+ vdata.list = mediadata_get_medialist(priv->md);
+ vdata.index = util_get_media_index_from_id(vdata.list, info->media_id);
+
+ viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata);
+ viewmgr_push_view(VIEW_VIEWER);
+}
+
+static void _item_selected(struct _priv *priv, app_media *am)
{
struct view_update_data vdata;
priv = data;
- _item_selected_cb(priv, priv->recent_info);
+ _item_selected(priv, priv->recent_info);
}
static void _grid_selected_cb(void *data, Elm_Object_Item *it)
return;
}
- _item_selected_cb(priv, am);
+ _item_selected(priv, am);
}
static struct listmgr_data *_create_listmgr_data(struct _priv *priv)
}
priv = layout_data;
- vdata = data;
switch (update_type) {
case UPDATE_CONTENT:
_update_recent_item(priv, -1);
break;
case UPDATE_FOCUS:
- if (!vdata) {
+ if (!data) {
_ERR("invalid argument");
return;
}
+ vdata = data;
+
listmgr_focus_play_info(priv->listmgr);
_update_recent_item(priv, vdata->index);
break;
+ case UPDATE_RECENT:
+ if (!data) {
+ _ERR("invalid argument");
+ return;
+ }
+
+ _update_content_list(priv);
+ _recent_item_selected(priv, data);
+ break;
case UPDATE_RESUME:
listmgr_focus_content_list(priv->listmgr,
priv->cur_index, false);
return true;
}
-static void _item_selected_cb(struct _priv *priv, app_media *am)
+static void _recent_item_selected(struct _priv *priv, app_media *am)
+{
+ app_media_info *info;
+ struct view_update_data vdata;
+
+ info = app_media_get_info(am);
+ if (!info) {
+ _ERR("failed to get app media info");
+ return;
+ }
+
+ vdata.list = mediadata_get_medialist(priv->md);
+ vdata.index = util_get_media_index_from_id(vdata.list, info->media_id);
+
+ viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata);
+ viewmgr_push_view(VIEW_MPLAYER);
+}
+
+static void _item_selected(struct _priv *priv, app_media *am)
{
struct view_update_data vdata;
priv = data;
- _item_selected_cb(priv, priv->playing_info);
+ _item_selected(priv, priv->playing_info);
}
static void _grid_selected_cb(void *data, Elm_Object_Item *it)
return;
}
- _item_selected_cb(priv, am);
+ _item_selected(priv, am);
}
static struct listmgr_data *_create_listmgr_data(struct _priv *priv)
}
priv = layout_data;
- vdata = data;
switch (update_type) {
case UPDATE_CONTENT:
_update_playing_item(priv, -1);
break;
case UPDATE_PLAY_INFO:
- if (!vdata) {
+ if (!data) {
_ERR("invalid argument");
return;
}
+ vdata = data;
+
_update_playing_item(priv, vdata->index);
break;
case UPDATE_FOCUS:
listmgr_focus_play_info(priv->listmgr);
break;
+ case UPDATE_RECENT:
+ if (!data) {
+ _ERR("invalid argument");
+ return;
+ }
+
+ _update_content_list(priv);
+ _recent_item_selected(priv, data);
+ break;
case UPDATE_RESUME:
listmgr_focus_content_list(priv->listmgr,
priv->cur_index, false);
#define PARAM_SENDER_ID "sender_id"
#define APP_ID_FAVORITE "org.tizen.favorite"
+#define APP_ID_RECENT "org.tizen.home"
SET_TAG(PACKAGE)
if (!strcmp(caller_id, APP_ID_FAVORITE))
viewmgr_update_view(VIEW_BASE,
UPDATE_FAVORITE, media_id);
+ else if (!strcmp(caller_id, APP_ID_RECENT)) {
+ viewmgr_push_view(VIEW_BASE);
+ viewmgr_update_view(VIEW_BASE,
+ UPDATE_RECENT, media_id);
+ }
} else
viewmgr_push_view(VIEW_BASE);
return -1;
}
+int util_get_media_index_from_id(Eina_List *list, const char *id)
+{
+ Eina_List *l;
+ app_media *am;
+ app_media_info *info;
+ int index;
+
+ index = 0;
+ EINA_LIST_FOREACH(list, l, am) {
+ info = app_media_get_info(am);
+ if (!info)
+ continue;
+
+ if (!strcmp(id, info->media_id))
+ return index;
+
+ index++;
+ }
+
+ return -1;
+}
+
app_media *util_find_media_info(Eina_List *list, const char *id)
{
Eina_List *l;
#define VIDEO_COPYRIGHT "Unknown"
-#define MENU_BTN_SIZE 3
#define BOX_PADDING_SIZE 80
+enum _layout_type {
+ E_LAYOUT_MOVIE = 0,
+ E_LAYOUT_GALLERY,
+ E_LAYOUT_MUSIC,
+ E_LAYOUT_MAX
+};
+
struct _priv {
Evas_Object *win;
Evas_Object *base;
- Evas_Object *btn[MENU_BTN_SIZE];
+ Evas_Object *btn[E_LAYOUT_MAX];
Evas_Object *focused_btn;
layoutmgr *lmgr;
Eina_List *favorite_list;
+ app_media *recent_item;
int current_layout;
};
layout_class *(*func_get_lclass)(void);
};
-static struct _menu_item g_menu_item[MENU_BTN_SIZE] = {
- {
+static struct _menu_item g_menu_item[E_LAYOUT_MAX] = {
+ [E_LAYOUT_MOVIE] = {
"Movie",
LAYOUT_MOVIE,
layout_movie_get_lclass
},
- {
+ [E_LAYOUT_GALLERY] = {
"Gallery",
LAYOUT_GALLERY,
layout_gallery_get_lclass
},
- {
+ [E_LAYOUT_MUSIC] = {
"Music",
LAYOUT_MUSIC,
layout_music_get_lclass
}
};
+static void _set_current_layout(struct _priv *priv, int layout)
+{
+ layoutmgr_hide_layout(priv->lmgr,
+ g_menu_item[priv->current_layout].layout_id);
+ layoutmgr_show_layout(priv->lmgr, g_menu_item[layout].layout_id);
+
+ priv->focused_btn = priv->btn[layout];
+ priv->current_layout = layout;
+}
+
static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
Evas_Event_Key_Down *ev)
{
elm_object_signal_emit(priv->focused_btn, SIG_BTN_UNSELECTED,
SIG_SOURCE_SRC);
- for (i = 0; i < MENU_BTN_SIZE; i++) {
+ for (i = 0; i < E_LAYOUT_MAX; i++) {
if (priv->btn[i] == obj)
break;
}
- if (i == MENU_BTN_SIZE)
+ if (i == E_LAYOUT_MAX)
return;
- layoutmgr_hide_layout(priv->lmgr,
- g_menu_item[priv->current_layout].layout_id);
- layoutmgr_show_layout(priv->lmgr, g_menu_item[i].layout_id);
+ _set_current_layout(priv, i);
+
layoutmgr_update_layout(priv->lmgr, g_menu_item[i].layout_id,
UPDATE_CONTENT, NULL);
-
- priv->focused_btn = obj;
- priv->current_layout = i;
}
static input_handler handler = {
media_content_disconnect();
}
+static int _get_layout_type(app_media_info *info)
+{
+ int type;
+
+ type = E_LAYOUT_MAX;
+ switch (info->media_type) {
+ case MEDIA_CONTENT_TYPE_IMAGE:
+ type = E_LAYOUT_GALLERY;
+ break;
+ case MEDIA_CONTENT_TYPE_VIDEO:
+ if (_check_movie_type(info))
+ type = E_LAYOUT_MOVIE;
+ else
+ type = E_LAYOUT_GALLERY;
+ break;
+ case MEDIA_CONTENT_TYPE_MUSIC:
+ type = E_LAYOUT_MUSIC;
+ break;
+ default:
+ break;
+ }
+
+ return type;
+}
+
+static void _update_recent_view(struct _priv *priv, const char *id)
+{
+ app_media *am;
+ app_media_info *info;
+ int type;
+ int r;
+
+ r = media_content_connect();
+ if (r != MEDIA_CONTENT_ERROR_NONE) {
+ _ERR("failed to connect to media content");
+ return;
+ }
+
+ am = _get_app_media(id);
+ if (!am) {
+ _ERR("failed to get app media");
+ return;
+ }
+
+ info = app_media_get_info(am);
+ if (!info) {
+ _ERR("failed to get app media info");
+ app_media_destroy(am);
+ return;
+ }
+
+ type = _get_layout_type(info);
+
+ _set_current_layout(priv, type);
+
+ layoutmgr_update_layout(priv->lmgr, g_menu_item[type].layout_id,
+ UPDATE_RECENT, am);
+
+ priv->recent_item = am;
+
+ media_content_disconnect();
+}
+
static bool _draw_title(struct _priv *priv)
{
if (!priv)
EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
- for (i = 0; i < MENU_BTN_SIZE; i++) {
+ for (i = 0; i < E_LAYOUT_MAX; i++) {
btn = elm_button_add(box);
if (!btn) {
_ERR("failed to create button object");
elm_object_part_content_set(priv->base, PART_MENU_AREA, box);
- elm_object_focus_next_object_set(priv->btn[MENU_BTN_SIZE - 1],
+ elm_object_focus_next_object_set(priv->btn[E_LAYOUT_MAX - 1],
priv->btn[0], ELM_FOCUS_RIGHT);
elm_object_focus_next_object_set(priv->btn[0],
- priv->btn[MENU_BTN_SIZE - 1], ELM_FOCUS_LEFT);
+ priv->btn[E_LAYOUT_MAX - 1], ELM_FOCUS_LEFT);
return true;
}
}
lmgr = layoutmgr_create(base);
- for (i = 0; i < MENU_BTN_SIZE; i++)
+ for (i = 0; i < E_LAYOUT_MAX; i++)
layoutmgr_add_layout(lmgr, g_menu_item[i].func_get_lclass(),
priv->btn[i]);
case UPDATE_FAVORITE:
_update_favorite_view(priv, data);
break;
+ case UPDATE_RECENT:
+ _update_recent_view(priv, data);
+ break;
default:
break;
}
priv = view_data;
- for (i = 0; i < MENU_BTN_SIZE; i++)
+ for (i = 0; i < E_LAYOUT_MAX; i++)
inputmgr_remove_callback(priv->btn[i], &handler);
layoutmgr_remove_layout(priv->lmgr, LAYOUT_MOVIE);
if (priv->favorite_list)
_free_favorite_list(priv->favorite_list);
+ app_media_destroy(priv->recent_item);
+
evas_object_del(priv->base);
free(priv);