summaryrefslogtreecommitdiff
path: root/ug-wifidirect/src/wfd_ug_view.c
diff options
context:
space:
mode:
Diffstat (limited to 'ug-wifidirect/src/wfd_ug_view.c')
-rw-r--r--ug-wifidirect/src/wfd_ug_view.c874
1 files changed, 874 insertions, 0 deletions
diff --git a/ug-wifidirect/src/wfd_ug_view.c b/ug-wifidirect/src/wfd_ug_view.c
new file mode 100644
index 0000000..7322477
--- /dev/null
+++ b/ug-wifidirect/src/wfd_ug_view.c
@@ -0,0 +1,874 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.tizenopensource.org/license
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ * This file implements view of Wi-Fi direct UI Gadget.
+ *
+ * @file wfd_ug_view.c
+ * @author Gibyoung Kim (lastkgb.kim@samsung.com)
+ * @version 0.1
+ */
+
+
+#include <libintl.h>
+
+#include <assert.h>
+#include <glib.h>
+
+#include <Elementary.h>
+#include <vconf.h>
+#include <ui-gadget-module.h>
+#include <wifi-direct.h>
+
+#include "wfd_ug.h"
+#include "wfd_ug_view.h"
+#include "wfd_client.h"
+
+
+Elm_Gen_Item_Class sep_itc;
+Elm_Gen_Item_Class head_itc;
+Elm_Gen_Item_Class name_itc;
+Elm_Gen_Item_Class title_itc;
+Elm_Gen_Item_Class peer_itc;
+Elm_Gen_Item_Class noitem_itc;
+Elm_Gen_Item_Class help_itc;
+
+
+void _back_btn_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ if (!ugd)
+ {
+ DBG(LOG_ERROR, "The param is NULL\n");
+ return;
+ }
+
+ wfd_ug_view_free_peers(ugd);
+
+ ug_destroy_me(ugd->ug);
+
+ __FUNC_EXIT__;
+ return;
+}
+
+void _scan_btn_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+ int res;
+
+ res = wfd_client_start_discovery(ugd);
+
+ __FUNC_EXIT__;
+ return;
+}
+
+Eina_Bool _is_wifi_on()
+{
+ __FUNC_ENTER__;
+ int wifi_state;
+
+ vconf_get_int(VCONFKEY_WIFI_STATE, &wifi_state);
+
+ if (wifi_state >= VCONFKEY_WIFI_CONNECTED)
+ {
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+ __FUNC_EXIT__;
+}
+
+static void _wfd_onoff_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ ugd->wfd_status = wfd_client_get_link_status();
+ DBG(LOG_VERBOSE, "WFD state is [%d]", ugd->wfd_status);
+
+ if (!ugd->wfd_onoff)
+ {
+ if(ugd->wfd_status < 0)
+ {
+ DBG(LOG_VERBOSE, "bad wfd status\n");
+ wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_ACTIVATE_FAIL"), POPUP_TYPE_TERMINATE);
+
+ ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
+ wfd_ug_view_refresh_glitem(ugd->head);
+ return;
+ }
+
+ ugd->head_text_mode = HEAD_TEXT_TYPE_ACTIVATING;
+ wfd_client_switch_on(ugd);
+ }
+ else
+ {
+ if(ugd->wfd_status < 0)
+ {
+ DBG(LOG_VERBOSE, "bad wfd status\n");
+ wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_DEACTIVATE_FAIL"), POPUP_TYPE_TERMINATE);
+
+ ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
+ wfd_ug_view_refresh_glitem(ugd->head);
+ return;
+ }
+
+ ugd->head_text_mode = HEAD_TEXT_TYPE_DEACTIVATING;
+ wfd_client_switch_off(ugd);
+ }
+ wfd_ug_view_refresh_glitem(ugd->head);
+
+ __FUNC_EXIT__;
+}
+
+static void _gl_header_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+ int res;
+
+ if(data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return;
+ }
+
+ if(item != NULL)
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ _wfd_onoff_btn_cb(ugd, NULL, NULL);
+
+ __FUNC_EXIT__;
+}
+
+static char *_gl_header_label_get(void *data, Evas_Object * obj,
+ const char *part)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+ DBG(LOG_VERBOSE, "%s", part);
+
+ if (data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.text"))
+ {
+ DBG(LOG_VERBOSE, "Current text mode [%d]\n", ugd->head_text_mode);
+ switch (ugd->head_text_mode)
+ {
+ case HEAD_TEXT_TYPE_DIRECT:
+ return strdup(dgettext("sys_string", "IDS_COM_OPT1_WI_FI_DIRECT"));
+ break;
+ case HEAD_TEXT_TYPE_DEACTIVATING:
+ return strdup(_("IDS_WFD_BODY_DEACTIVATING"));
+ break;
+ case HEAD_TEXT_TYPE_ACTIVATING:
+ return strdup(_("IDS_WFD_BODY_ACTIVATING"));
+ break;
+ case HEAD_TEXT_TYPE_ACTIVATED:
+ return strdup(_("IDS_WFD_BODY_ACTIVATED"));
+ break;
+ case HEAD_TEXT_TYPE_SCANING:
+ return strdup(_("IDS_WFD_BODY_SCANNING"));
+ break;
+ default:
+ break;
+ }
+ }
+
+ __FUNC_EXIT__;
+ return NULL;
+}
+
+static Evas_Object *_gl_header_icon_get(void *data, Evas_Object * obj,
+ const char *part)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+ Evas_Object *onoff = NULL;
+
+ if (data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (ugd->head_text_mode == HEAD_TEXT_TYPE_ACTIVATING ||
+ ugd->head_text_mode == HEAD_TEXT_TYPE_DEACTIVATING)
+ return NULL;
+
+ DBG(LOG_VERBOSE, "%s", part);
+ onoff = elm_check_add(obj);
+ elm_object_style_set(onoff, "on&off");
+ elm_check_state_set(onoff, ugd->wfd_onoff);
+ evas_object_smart_callback_add(onoff, "changed", _wfd_onoff_btn_cb, ugd);
+ evas_object_show(onoff);
+
+ __FUNC_EXIT__;
+
+ return onoff;
+}
+
+static char *_gl_name_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+
+ if (data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ DBG(LOG_VERBOSE, "%s", part);
+
+ if (!strcmp(part, "elm.text.1"))
+ {
+ return strdup(_("IDS_WFD_BODY_DEVICE_NAME"));
+ }
+ else if (!strcmp(part, "elm.text.2"))
+ {
+ return strdup(ugd->dev_name);
+ }
+
+ __FUNC_EXIT__;
+
+ return NULL;
+}
+
+static char *_gl_title_label_get(void *data, Evas_Object * obj,
+ const char *part)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+
+ if (data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.text"))
+ {
+ if (ugd->peer_cnt)
+ return strdup(_("IDS_WFD_BODY_AVAILABLE_DEVICES"));
+ else
+ return strdup(_("IDS_WFD_BODY_WIFI_DIRECT_DEVICES"));
+ }
+
+ __FUNC_EXIT__;
+
+ return NULL;
+}
+
+static Evas_Object *_gl_noitem_icon_get(void *data, Evas_Object * obj,
+ const char *part)
+{
+ __FUNC_ENTER__;
+ Evas_Object *nocontent;
+
+ if (data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ nocontent = elm_layout_add(obj);
+ if (nocontent == NULL)
+ {
+ DBG(LOG_ERROR, "Failed to add nocontent");
+ return NULL;
+ }
+ elm_layout_theme_set(nocontent, "layout", "nocontents", "unnamed");
+ elm_object_part_text_set(nocontent, "elm.text",
+ _("IDS_WFD_BODY_NO_DEVICES"));
+ evas_object_size_hint_min_set(nocontent, 400, 200);
+ evas_object_size_hint_max_set(nocontent, 400, 200);
+ evas_object_resize(nocontent, 400, 200);
+
+ __FUNC_EXIT__;
+
+ return nocontent;
+}
+
+static void _gl_noitem_del(void *data, Evas_Object * obj)
+{
+ __FUNC_ENTER__;
+
+ __FUNC_EXIT__;
+ return;
+}
+
+static char *_gl_peer_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ __FUNC_ENTER__;
+ assertm_if(NULL == obj, "NULL!!");
+ assertm_if(NULL == part, "NULL!!");
+
+ device_type_s *peer = (device_type_s *) data;
+
+ if (data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ __FUNC_EXIT__;
+ return strdup(peer->ssid);
+}
+
+static Evas_Object *_gl_peer_icon_get(void *data, Evas_Object * obj,
+ const char *part)
+{
+ __FUNC_ENTER__;
+ assertm_if(NULL == obj, "NULL!!");
+ assertm_if(NULL == part, "NULL!!");
+
+ device_type_s *peer = (device_type_s *) data;
+ Evas_Object *icon = NULL;
+
+ if (data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.icon.2"))
+ {
+ DBG(LOG_VERBOSE, "elm.icon.2 - connection status [%d]\n",
+ peer->conn_status);
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTING)
+ {
+ icon = elm_progressbar_add(obj);
+ elm_object_style_set(icon, "list_process");
+ elm_progressbar_pulse(icon, EINA_TRUE);
+ }
+ else if (peer->conn_status == PEER_CONN_STATUS_CONNECTED)
+ {
+ icon = elm_icon_add(obj);
+ elm_icon_file_set(icon, WFD_ICON_CONNECTED, NULL);
+ }
+
+ evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+ elm_icon_resizable_set(icon, 1, 1);
+ evas_object_show(icon);
+ }
+ else if (!strcmp(part, "elm.icon.1"))
+ {
+ DBG(LOG_VERBOSE, "elm.icon.1 - category [%d]\n", peer->category);
+ char *img_path = NULL;
+ switch (peer->category)
+ {
+ case WFD_DEVICE_TYPE_COMPUTER:
+ img_path = WFD_ICON_DEVICE_PC;
+ break;
+ case WFD_DEVICE_TYPE_INPUT_DEVICE:
+ img_path = WFD_ICON_DEVICE_KEYBOARD;
+ break;
+ case WFD_DEVICE_TYPE_PRINTER:
+ img_path = WFD_ICON_DEVICE_PRINTER;
+ break;
+ case WFD_DEVICE_TYPE_CAMERA:
+ img_path = WFD_ICON_DEVICE_UNKNOWN;
+ break;
+ case WFD_DEVICE_TYPE_STORAGE:
+ case WFD_DEVICE_TYPE_NW_INFRA:
+ case WFD_DEVICE_TYPE_DISPLAYS:
+ case WFD_DEVICE_TYPE_MM_DEVICES:
+ case WFD_DEVICE_TYPE_GAME_DEVICES:
+ case WFD_DEVICE_TYPE_OTHER:
+ img_path = WFD_ICON_DEVICE_UNKNOWN;
+ break;
+ case WFD_DEVICE_TYPE_TELEPHONE:
+ img_path = WFD_ICON_DEVICE_PHONE;
+ break;
+ case WFD_DEVICE_TYPE_AUDIO:
+ img_path = WFD_ICON_DEVICE_HEADSET;
+ break;
+ default:
+ break;
+ }
+
+ if (img_path != NULL)
+ {
+ icon = elm_icon_add(obj);
+ elm_icon_file_set(icon, img_path, NULL);
+ evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL,
+ 1, 1);
+ elm_icon_resizable_set(icon, 1, 1);
+ evas_object_show(icon);
+ }
+ }
+
+ __FUNC_EXIT__;
+ return icon;
+}
+
+static void _gl_peer_del(void *data, Evas_Object * obj)
+{
+ __FUNC_ENTER__;
+ assertm_if(NULL == obj, "NULL!!");
+ assertm_if(NULL == data, "NULL!!");
+
+ __FUNC_EXIT__;
+ return;
+}
+
+static void _gl_peer_sel(void *data, Evas_Object * obj, void *event_info)
+{
+ __FUNC_ENTER__;
+ assertm_if(NULL == obj, "NULL!!");
+ assertm_if(NULL == data, "NULL!!");
+ device_type_s *peer = (device_type_s *) data;
+ Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+ int res;
+
+ if (data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return;
+ }
+
+ if (item != NULL)
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+
+ if (peer->conn_status == PEER_CONN_STATUS_DISCONNECTED)
+ {
+ DBG(LOG_VERBOSE, "Connect with peer [%s]\n", peer->mac_addr);
+ res = wfd_client_connect((const char *) peer->mac_addr);
+ if (res != 0)
+ {
+ DBG(LOG_ERROR, "Failed to send connection request. [%d]\n", res);
+ return;
+ }
+ peer->conn_status = PEER_CONN_STATUS_CONNECTING;
+ }
+ else
+ {
+ res = wfd_client_disconnect((const char *) peer->mac_addr);
+ if (res != 0)
+ {
+ DBG(LOG_ERROR, "Failed to send disconnection request. [%d]\n", res);
+ return;
+ }
+ peer->conn_status = PEER_CONN_STATUS_DISCONNECTED;
+ }
+
+ wfd_ug_view_refresh_glitem(peer->gl_item);
+
+ __FUNC_EXIT__;
+ return;
+}
+
+static char *_gl_help_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ __FUNC_ENTER__;
+ DBG(LOG_VERBOSE, "%s", part);
+ __FUNC_ENTER__;
+ return strdup("Help");
+}
+
+static Evas_Object *_create_basic_genlist(void *data)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data *) data;
+ Evas_Object *genlist;
+
+ genlist = elm_genlist_add(ugd->naviframe);
+
+ sep_itc.item_style = "grouptitle.dialogue.seperator";
+ sep_itc.func.text_get = NULL;
+ sep_itc.func.content_get = NULL;
+ sep_itc.func.state_get = NULL;
+ sep_itc.func.del = NULL;
+
+ head_itc.item_style = "dialogue/1text.1icon";
+ head_itc.func.text_get = _gl_header_label_get;
+ head_itc.func.content_get = _gl_header_icon_get;
+ head_itc.func.state_get = NULL;
+
+ name_itc.item_style = "dialogue/2text.3";
+ name_itc.func.text_get = _gl_name_label_get;
+ name_itc.func.content_get = NULL;
+ name_itc.func.state_get = NULL;
+ name_itc.func.del = NULL;
+
+ Elm_Object_Item *item;
+ elm_genlist_item_append(genlist, &sep_itc, NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ ugd->head =
+ elm_genlist_item_append(genlist, &head_itc, ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, _gl_header_sel, (void*) ugd);
+ item =
+ elm_genlist_item_append(genlist, &name_itc, ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ __FUNC_EXIT__;
+
+ return genlist;
+}
+
+static int _create_device_genlist(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+
+ title_itc.item_style = "dialogue/title";
+ title_itc.func.text_get = _gl_title_label_get;
+ title_itc.func.content_get = NULL;
+ title_itc.func.state_get = NULL;
+ title_itc.func.del = NULL;
+
+ peer_itc.item_style = "dialogue/1text.2icon.2";
+ peer_itc.func.text_get = _gl_peer_label_get;
+ peer_itc.func.content_get = _gl_peer_icon_get;
+ peer_itc.func.state_get = NULL;
+ peer_itc.func.del = _gl_peer_del;
+
+ noitem_itc.item_style = "dialogue/bg/1icon";
+ noitem_itc.func.text_get = NULL;
+ noitem_itc.func.content_get = _gl_noitem_icon_get;
+ noitem_itc.func.state_get = NULL;
+ noitem_itc.func.del = _gl_noitem_del;
+
+ sep_itc.item_style = "grouptitle.dialogue.seperator";
+ sep_itc.func.text_get = NULL;
+ sep_itc.func.content_get = NULL;
+ sep_itc.func.state_get = NULL;
+ sep_itc.func.del = NULL;
+
+ help_itc.item_style = "dialogue/1text";
+ help_itc.func.text_get = _gl_help_label_get;
+ help_itc.func.content_get = NULL;
+ help_itc.func.state_get = NULL;
+ help_itc.func.del = NULL;
+
+ Elm_Object_Item *item;
+ item =
+ elm_genlist_item_append(ugd->genlist, &title_itc, (void *) ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ ugd->noitem =
+ elm_genlist_item_append(ugd->genlist, &noitem_itc, (void *) ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(ugd->noitem,
+ ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ __FUNC_EXIT__;
+ return 0;
+}
+
+void create_wfd_ug_view(void *data)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data *) data;
+ Evas_Object *back_btn = NULL;
+ Elm_Object_Item *navi_item = NULL;
+ Evas_Object *control_bar = NULL;
+
+ if (ugd == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)");
+ return;
+ }
+
+ ugd->naviframe = elm_naviframe_add(ugd->base);
+ elm_object_part_content_set(ugd->base, "elm.swallow.content",
+ ugd->naviframe);
+ evas_object_show(ugd->naviframe);
+
+ back_btn = elm_button_add(ugd->naviframe);
+ elm_object_style_set(back_btn, "naviframe/back_btn/default");
+ evas_object_smart_callback_add(back_btn, "clicked", _back_btn_cb,
+ (void *) ugd);
+ elm_object_focus_allow_set(back_btn, EINA_FALSE);
+
+ ugd->genlist = _create_basic_genlist(ugd);
+ if (ugd->genlist == NULL)
+ {
+ DBG(LOG_ERROR, "Failed to create basic genlist");
+ return;
+ }
+ evas_object_show(ugd->genlist);
+ _create_device_genlist(ugd);
+
+ back_btn = elm_button_add(ugd->naviframe);
+ elm_object_style_set(back_btn, "naviframe/back_btn/default");
+ evas_object_smart_callback_add(back_btn, "clicked", _back_btn_cb,
+ (void *) ugd);
+ elm_object_focus_allow_set(back_btn, EINA_FALSE);
+
+ navi_item =
+ elm_naviframe_item_push(ugd->naviframe, _("IDS_WFD_HEADER_WIFI_DIRECT"),
+ back_btn, NULL, ugd->genlist, NULL);
+
+ control_bar = elm_toolbar_add(ugd->naviframe);
+ elm_toolbar_shrink_mode_set(control_bar, ELM_TOOLBAR_SHRINK_EXPAND);
+ evas_object_show(control_bar);
+
+ ugd->scan_btn =
+ elm_toolbar_item_append(control_bar, NULL, _("IDS_WFD_BUTTON_SCAN"),
+ _scan_btn_cb, (void *) ugd);
+ elm_object_item_disabled_set(ugd->scan_btn, !ugd->wfd_onoff);
+
+ elm_object_item_part_content_set(navi_item, "controlbar", control_bar);
+
+ __FUNC_EXIT__;
+}
+
+void destroy_wfd_ug_view(void *data)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data *) data;
+
+ if (ugd->genlist)
+ {
+ evas_object_del(ugd->genlist);
+ ugd->genlist = NULL;
+ }
+
+ if (ugd->naviframe)
+ {
+ evas_object_del(ugd->naviframe);
+ ugd->naviframe = NULL;
+ }
+
+ __FUNC_EXIT__;
+}
+
+void wfd_ug_view_refresh_glitem(void *obj)
+{
+ __FUNC_ENTER__;
+ elm_genlist_item_update(obj);
+ __FUNC_EXIT__;
+}
+
+void wfd_ug_view_refresh_button(void *obj, int enable)
+{
+ __FUNC_ENTER__;
+ DBG(LOG_VERBOSE, "scan button is enabling. [%d]\n", enable);
+ elm_object_item_disabled_set(obj, !enable);
+ __FUNC_EXIT__;
+}
+
+void wfd_ug_view_update_peers(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+ int i;
+
+ DBG(LOG_VERBOSE, "peer count [%d], peer instance [%x]\n", ugd->peer_cnt,
+ ugd->peers);
+
+ if (ugd->peer_cnt == 0)
+ {
+ DBG(LOG_ERROR, "There are No peers\n");
+ if (ugd->noitem == NULL)
+ ugd->noitem =
+ elm_genlist_item_append(ugd->genlist, &noitem_itc, (void *) ugd,
+ NULL, ELM_GENLIST_ITEM_NONE, NULL,
+ NULL);
+ return;
+ }
+ else if (ugd->peer_cnt > 0)
+ {
+ if (ugd->noitem)
+ {
+ elm_object_item_del(ugd->noitem);
+ ugd->noitem = NULL;
+ DBG(LOG_VERBOSE, "Noitem list is removed\n");
+ }
+
+ for (i = 0; i < ugd->peer_cnt; i++)
+ {
+ DBG(LOG_VERBOSE, "%dth peer being added on genlist\n", i);
+ ugd->peers[i].gl_item =
+ elm_genlist_item_append(ugd->genlist, &peer_itc,
+ (void *) &(ugd->peers[i]), NULL,
+ ELM_GENLIST_ITEM_NONE, _gl_peer_sel,
+ (void *) &(ugd->peers[i]));
+ }
+ }
+
+ __FUNC_EXIT__;
+}
+
+void wfd_ug_view_free_peers(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+ int i;
+
+ for (i = 0; i < ugd->peer_cnt; i++)
+ {
+ DBG(LOG_VERBOSE, "%dth peer is deleted\n", i);
+ elm_object_item_del(ugd->peers[i].gl_item);
+ }
+
+ if (ugd->peer_cnt > 0 && ugd->peers != NULL)
+ {
+ DBG(LOG_VERBOSE, "peers will be destroyed\n");
+ free(ugd->peers);
+ ugd->peers = NULL;
+ ugd->peer_cnt = 0;
+ }
+
+ __FUNC_EXIT__;
+}
+
+static void _wfd_ug_act_popup_wifi_ok_cb(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+
+ ugd->wfd_status = WFD_LINK_STATUS_DEACTIVATED;
+ wfd_wifi_off();
+
+ evas_object_del(ugd->act_popup);
+ ugd->act_popup = NULL;
+ __FUNC_EXIT__;
+}
+
+static void _wfd_ug_act_popup_wifi_cancel_cb(void *data, Evas_Object * obj,
+ void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+
+ ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
+ wfd_ug_view_refresh_glitem(ugd->head);
+
+ evas_object_del(ugd->act_popup);
+ ugd->act_popup = NULL;
+ __FUNC_EXIT__;
+}
+
+void wfd_ug_act_popup(void *data, const char *message, int popup_type)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+ Evas_Object *popup = NULL;
+ Evas_Object *btn1 = NULL, *btn2 = NULL;
+
+ popup = elm_popup_add(ugd->base);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_text_set(popup, message);
+
+ btn1 = elm_button_add(popup);
+ elm_object_text_set(btn1, S_("IDS_COM_SK_YES"));
+ elm_object_part_content_set(popup, "button1", btn1);
+ evas_object_smart_callback_add(btn1, "clicked",
+ _wfd_ug_act_popup_wifi_ok_cb, (void *) ugd);
+
+ btn2 = elm_button_add(popup);
+ elm_object_text_set(btn2, S_("IDS_COM_SK_NO"));
+ elm_object_part_content_set(popup, "button2", btn2);
+ evas_object_smart_callback_add(btn2, "clicked",
+ _wfd_ug_act_popup_wifi_cancel_cb,
+ (void *) ugd);
+
+ evas_object_show(popup);
+ ugd->act_popup = popup;
+ __FUNC_EXIT__;
+}
+
+void wfg_ug_act_popup_remove(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+
+ if (ugd->act_popup)
+ {
+ evas_object_del(ugd->act_popup);
+ ugd->act_popup = NULL;
+ }
+ __FUNC_EXIT__;
+}
+
+static void _wfd_ug_terminate_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ evas_object_del(ugd->warn_popup);
+ ugd->warn_popup = NULL;
+
+ wfd_ug_view_free_peers(ugd);
+
+ ug_destroy_me(ugd->ug);
+ __FUNC_EXIT__;
+}
+
+static void _wfd_ug_warn_popup_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ evas_object_del(ugd->warn_popup);
+ ugd->warn_popup = NULL;
+ __FUNC_EXIT__;
+}
+
+void wfd_ug_warn_popup(void *data, const char *message, int popup_type)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+ Evas_Object *popup = NULL;
+ Evas_Object *btn = NULL;
+
+ popup = elm_popup_add(ugd->base);
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_object_text_set(popup, message);
+
+ btn = elm_button_add(popup);
+ elm_object_text_set(btn, S_("IDS_COM_SK_OK"));
+ elm_object_part_content_set(popup, "button1", btn);
+ if(popup_type == POPUP_TYPE_TERMINATE)
+ evas_object_smart_callback_add(btn, "clicked", _wfd_ug_terminate_popup_cb, (void*) ugd);
+ else
+ evas_object_smart_callback_add(btn, "clicked", _wfd_ug_warn_popup_cb, (void*) ugd);
+
+ evas_object_show(popup);
+ ugd->warn_popup = popup;
+ __FUNC_EXIT__;
+}
+
+void wfg_ug_warn_popup_remove(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data *) data;
+
+ if (ugd->warn_popup)
+ {
+ evas_object_del(ugd->warn_popup);
+ ugd->warn_popup = NULL;
+ }
+ __FUNC_EXIT__;
+}