#define DEFAULT_SERVICE 1
+struct _channel_history {
+ int service_id[2];
+ unsigned int idx;
+};
+
/**
* The Storage structure to used by tv related functions and events.
*/
/**< Stores service id if tune to locked channel was succeeded. */
int viewing_locked_channel;
+ /**< Stores previous service id. */
+ struct _channel_history history;
/**< The function pointer to pass tv signal event */
void (*signal_cb)(void *data, int is_signal);
free(data);
}
-void _tv_channel_add_history(int service_id)
+static void _tv_channel_add_history(int service_id)
{
char buf[128];
+ g_tv_info.history.service_id[g_tv_info.history.idx++ % 2]
+ = service_id;
+
snprintf(buf, sizeof(buf), "%d", service_id);
app_contents_recent_add(CONTENTS_CHANNEL, buf);
}
+static int _tv_channel_get_history(void)
+{
+ int service_id;
+
+ service_id = g_tv_info.history.service_id[g_tv_info.history.idx % 2];
+
+ return service_id;
+}
+
/**
* Tunes to specific channel with service id.
*
return -1;
}
+ _tv_channel_add_history(service_id);
+
+ g_tv_info.viewing_locked_channel = -1;
+
+ return 0;
+}
+
+/**
+ * Tunes to previously viewed channel.
+ *
+ * @return If the operation was sucessful 0 is returned; otherwise negative value is returned
+ */
+int tv_channel_tune_prev_channel(void)
+{
+ int service_id;
+ int r;
+
+ if (!g_tv_info.live_svc) {
+ _ERR("failed to get live service");
+ return -1;
+ }
+
+ service_id = _tv_channel_get_history();
+ if (service_id < 1) {
+ _ERR("no previous channel");
+ return -1;
+ }
+
+ r = tv_service_live_tune(g_tv_info.live_svc, service_id);
+ if (r != TVS_ERROR_OK) {
+ _ERR("failed to set service");
+ return -1;
+ }
+
+ _tv_channel_add_history(service_id);
+
g_tv_info.viewing_locked_channel = -1;
return 0;
TvServiceChannel *tvs_data;
int r;
+ if (!g_tv_info.live_svc) {
+ _ERR("failed to get live service");
+ return -1;
+ }
+
if (major > 0 && major < MAJOR_MAX) {
filter_node = _tv_channel_get_filter(
TV_SERVICE_CHANNEL_DATA_MAJOR_NUMBER,
}
/**
- * Tunes to next channel.
- *
- * Note that deleted channels and service channels will skipped.
- *
- * @return If the operation was sucessful 0 is returned; otherwise negative value is returned
- */
-int tv_channel_next(void)
-{
- TvServiceAntenna antenna_type;
- int service_id, r;
-
- if (!g_tv_info.live_svc) {
- _ERR("failed to get live service");
- return -1;
- }
-
- r = tv_service_live_get_antenna_type(g_tv_info.live_svc, &antenna_type);
- if (r < 0) {
- _ERR("failed to get antenna type");
- return -1;
- }
-
- r = tv_service_live_tune_up(g_tv_info.live_svc,
- TV_SERVICE_CHANNEL_MODE_DIGITAL_ANALOG, antenna_type);
- if (r < 0) {
- _ERR("failed to tune up");
- return -1;
- }
-
- g_tv_info.viewing_locked_channel = -1;
-
- r = tv_service_live_get_service_id(g_tv_info.live_svc, &service_id);
- if (r < 0) {
- _ERR("failed to get service id");
- return -1;
- }
-
- _tv_channel_add_history(service_id);
-
- return 0;
-}
-
-/**
- * Tunes to previous channel.
- *
- * Note that deleted channels and service channels will skipped.
- *
- * @return If the operation was sucessful 0 is returned; otherwise negative value is returned
- */
-int tv_channel_prev(void)
-{
- TvServiceAntenna antenna_type;
- int service_id, r;
-
- if (!g_tv_info.live_svc) {
- _ERR("failed to get live service");
- return -1;
- }
-
- r = tv_service_live_get_antenna_type(g_tv_info.live_svc, &antenna_type);
- if (r < 0) {
- _ERR("failed to get antenna type");
- return -1;
- }
-
- r = tv_service_live_tune_down(g_tv_info.live_svc,
- TV_SERVICE_CHANNEL_MODE_DIGITAL_ANALOG, antenna_type);
- if (r < 0) {
- _ERR("failed to tune down");
- return -1;
- }
-
- g_tv_info.viewing_locked_channel = -1;
-
- r = tv_service_live_get_service_id(g_tv_info.live_svc, &service_id);
- if (r < 0) {
- _ERR("failed to get service id");
- return -1;
- }
-
- _tv_channel_add_history(service_id);
-
- return 0;
-}
-
-/**
* Sets the channel's favorite status.
*
* @param service_id The channel id
goto err;
}
+ memset(&g_tv_info.history, 0, sizeof(g_tv_info.history));
+
return 0;
err:
tv_destroy();
if (r != TVS_ERROR_OK) {
_ERR("failed to create live service");
goto err;
- } else {
- return 1;
}
+
+ r = tv_service_live_register_callback(g_tv_info.live_svc,
+ _tv_service_event_cb, NULL);
+ if (r != TVS_ERROR_OK) {
+ _ERR("failed to register live callback");
+ goto err;
+ }
+
+ return 1;
}
r = tv_service_live_tune_resume(g_tv_info.live_svc);
static void _set_current_layout(struct _priv *priv, const char *layout_id)
{
- if (priv->current_layout && layout_id &&
- !strcmp(priv->current_layout, layout_id))
+ if (!layout_id)
return;
- if (priv->current_layout)
+ if (priv->current_layout && strcmp(priv->current_layout, layout_id))
layoutmgr_hide_layout(priv->lmgr, priv->current_layout);
layoutmgr_show_layout(priv->lmgr, layout_id);
static void _update(void *view_data, int type, void *data)
{
struct _priv *priv;
+ int r;
if (!view_data) {
_ERR("failed to get view data");
_set_current_layout(priv, LAYOUT_CHANNELINFO_LIST);
layoutmgr_update_layout(priv->lmgr,
LAYOUT_CHANNELINFO_LIST, type, ev);
- }
-
- viewmgr_show_view(VIEW_CHANNELINFO);
- } else if (type == UPDATE_TYPE_INPUT_KEY_UP) {
- Evas_Event_Key_Up *ev = data;
+ } else if (!strcmp(ev->keyname, KEY_PREVIOUS)) {
+ r = tv_channel_tune_prev_channel();
+ if (r < 0)
+ _ERR("failed to tune prev channel");
- if (!ev) {
- _ERR("failed to get ev");
- return;
+ _set_current_layout(priv, LAYOUT_CHANNELINFO);
}
- if (!strcmp(ev->keyname, KEY_CHANNELUP) ||
- !strcmp(ev->keyname, KEY_CHANNELDOWN)) {
- if (priv->current_layout &&
- !strcmp(priv->current_layout,
- LAYOUT_CHANNELINFO_SEARCH))
- return;
-
- _set_current_layout(priv, LAYOUT_CHANNELINFO_LIST);
- layoutmgr_update_layout(priv->lmgr,
- LAYOUT_CHANNELINFO_LIST, type, ev);
- }
+ viewmgr_show_view(VIEW_CHANNELINFO);
}
}