summaryrefslogtreecommitdiff
path: root/ug-wifidirect
diff options
context:
space:
mode:
Diffstat (limited to 'ug-wifidirect')
-rwxr-xr-x[-rw-r--r--]ug-wifidirect/CMakeLists.txt7
-rw-r--r--ug-wifidirect/include/wfd_client.h72
-rwxr-xr-x[-rw-r--r--]ug-wifidirect/include/wfd_ug.h218
-rwxr-xr-x[-rw-r--r--]ug-wifidirect/include/wfd_ug_view.h120
-rwxr-xr-x[-rw-r--r--]ug-wifidirect/po/en.po34
-rwxr-xr-x[-rw-r--r--]ug-wifidirect/po/en_GB.po20
-rwxr-xr-x[-rw-r--r--]ug-wifidirect/po/en_US.po20
-rwxr-xr-x[-rw-r--r--]ug-wifidirect/po/ja.po20
-rwxr-xr-x[-rw-r--r--]ug-wifidirect/po/ko_KR.po18
-rwxr-xr-x[-rw-r--r--]ug-wifidirect/po/zh_CN.po64
-rwxr-xr-xug-wifidirect/resources/images/31_BT_device_headset.pngbin1591 -> 0 bytes
-rwxr-xr-xug-wifidirect/resources/images/31_BT_device_keyboard.pngbin1692 -> 0 bytes
-rwxr-xr-xug-wifidirect/resources/images/31_BT_device_mouse.pngbin889 -> 0 bytes
-rwxr-xr-xug-wifidirect/resources/images/31_BT_device_printer.pngbin647 -> 0 bytes
-rwxr-xr-xug-wifidirect/resources/images/31_BT_device_unknown.pngbin1462 -> 0 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_My_laptop.pngbin3370 -> 0 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_audio_devices.pngbin0 -> 1626 bytes
-rw-r--r--ug-wifidirect/resources/images/A09_device_audio_devices_connect.pngbin0 -> 3735 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_camera.pngbin0 -> 1678 bytes
-rw-r--r--ug-wifidirect/resources/images/A09_device_camera_connect.pngbin0 -> 3750 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_computer.pngbin3093 -> 1220 bytes
-rw-r--r--ug-wifidirect/resources/images/A09_device_computer_connect.pngbin0 -> 3249 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_display.pngbin0 -> 1275 bytes
-rw-r--r--ug-wifidirect/resources/images/A09_device_display_connect.pngbin0 -> 3246 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_gaming_devices.pngbin0 -> 1713 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_input_device.pngbin0 -> 1422 bytes
-rw-r--r--ug-wifidirect/resources/images/A09_device_input_device_connect.pngbin0 -> 3478 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_mobile.pngbin3032 -> 0 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_multimedia_devices.pngbin0 -> 1282 bytes
-rw-r--r--ug-wifidirect/resources/images/A09_device_multimedia_devices_connect.pngbin0 -> 3283 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_network_infrastructure.pngbin0 -> 1401 bytes
-rw-r--r--ug-wifidirect/resources/images/A09_device_network_infrastructure_connect.pngbin0 -> 3437 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_printer.pngbin0 -> 1414 bytes
-rw-r--r--ug-wifidirect/resources/images/A09_device_printer_connect.pngbin0 -> 3412 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_storage.pngbin0 -> 1109 bytes
-rw-r--r--ug-wifidirect/resources/images/A09_device_storage_connect.pngbin0 -> 3048 bytes
-rwxr-xr-xug-wifidirect/resources/images/A09_device_telephone.pngbin0 -> 1284 bytes
-rw-r--r--ug-wifidirect/resources/images/A09_device_telephone_connect.pngbin0 -> 3230 bytes
-rwxr-xr-x[-rw-r--r--]ug-wifidirect/src/wfd_client.c1099
-rwxr-xr-x[-rw-r--r--]ug-wifidirect/src/wfd_ug.c229
-rw-r--r--ug-wifidirect/src/wfd_ug_about_view.c128
-rwxr-xr-xug-wifidirect/src/wfd_ug_genlist.c802
-rwxr-xr-xug-wifidirect/src/wfd_ug_main_view.c1153
-rwxr-xr-xug-wifidirect/src/wfd_ug_multiconnect_view.c695
-rwxr-xr-xug-wifidirect/src/wfd_ug_popup.c399
-rw-r--r--ug-wifidirect/src/wfd_ug_view.c874
46 files changed, 4445 insertions, 1527 deletions
diff --git a/ug-wifidirect/CMakeLists.txt b/ug-wifidirect/CMakeLists.txt
index 5f901e3..e10920f 100644..100755
--- a/ug-wifidirect/CMakeLists.txt
+++ b/ug-wifidirect/CMakeLists.txt
@@ -1,5 +1,6 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
PROJECT(ug-setting-wifidirect-efl C)
+SET(PACKAGE_NAME ug-setting-wifidirect-efl)
SET(PREFIX "/opt/ug")
SET(LIBDIR "${PREFIX}/lib")
@@ -9,8 +10,12 @@ SET(IMGDIR "${RESDIR}/images/${PROJECT_NAME}")
SET(SRCS
src/wfd_ug.c
- src/wfd_ug_view.c
src/wfd_client.c
+ src/wfd_ug_popup.c
+ src/wfd_ug_genlist.c
+ src/wfd_ug_main_view.c
+ src/wfd_ug_multiconnect_view.c
+ src/wfd_ug_about_view.c
)
INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
diff --git a/ug-wifidirect/include/wfd_client.h b/ug-wifidirect/include/wfd_client.h
index fb7bf72..59eed60 100644
--- a/ug-wifidirect/include/wfd_client.h
+++ b/ug-wifidirect/include/wfd_client.h
@@ -1,26 +1,21 @@
/*
- * 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.
- */
+* WiFi-Direct UG
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
-/*
- * This file declares Wi-Fi direct client functions.
- *
- * @file wfd_client.h
- * @author Gibyoung Kim (lastkgb.kim@samsung.com)
- * @version 0.1
- */
+* 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.
+*
+*/
#ifndef __WFD_CLIENT_H__
@@ -29,52 +24,43 @@
typedef enum
{
- WFD_DEVICE_TYPE_COMPUTER = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_COMPUTER,
- WFD_DEVICE_TYPE_INPUT_DEVICE = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_INPUT_DEVICE,
+ WFD_DEVICE_TYPE_COMPUTER = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_COMPUTER, // 1
+ WFD_DEVICE_TYPE_INPUT_DEVICE= WIFI_DIRECT_PRIMARY_DEVICE_TYPE_INPUT_DEVICE,
WFD_DEVICE_TYPE_PRINTER = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_PRINTER,
WFD_DEVICE_TYPE_CAMERA = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_CAMERA,
- WFD_DEVICE_TYPE_STORAGE = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_STORAGE,
+ WFD_DEVICE_TYPE_STORAGE = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_STORAGE, // 5
WFD_DEVICE_TYPE_NW_INFRA = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_NETWORK_INFRA,
WFD_DEVICE_TYPE_DISPLAYS = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_DISPLAY,
- WFD_DEVICE_TYPE_MM_DEVICES =
- WIFI_DIRECT_PRIMARY_DEVICE_TYPE_MULTIMEDIA_DEVICE,
+ WFD_DEVICE_TYPE_MM_DEVICES = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_MULTIMEDIA_DEVICE,
WFD_DEVICE_TYPE_GAME_DEVICES = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_GAME_DEVICE,
- WFD_DEVICE_TYPE_TELEPHONE = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE,
+ WFD_DEVICE_TYPE_TELEPHONE = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_TELEPHONE, // 10
WFD_DEVICE_TYPE_AUDIO = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_AUDIO,
- WFD_DEVICE_TYPE_OTHER = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_OTHER,
+ WFD_DEVICE_TYPE_OTHER = WIFI_DIRECT_PRIMARY_DEVICE_TYPE_OTHER, // 255
} device_type_e;
-typedef enum
-{
- WFD_LINK_STATUS_DEACTIVATED = WIFI_DIRECT_STATE_DEACTIVATED,
+typedef enum {
+ WFD_LINK_STATUS_DEACTIVATED = WIFI_DIRECT_STATE_DEACTIVATED, // 0
WFD_LINK_STATUS_DEACTIVATING = WIFI_DIRECT_STATE_DEACTIVATING,
WFD_LINK_STATUS_ACTIVATING = WIFI_DIRECT_STATE_ACTIVATING,
WFD_LINK_STATUS_ACTIVATED = WIFI_DIRECT_STATE_ACTIVATED,
WFD_LINK_STATUS_DISCOVERING = WIFI_DIRECT_STATE_DISCOVERING,
- WFD_LINK_STATUS_CONNECTING = WIFI_DIRECT_STATE_CONNECTING,
+ WFD_LINK_STATUS_CONNECTING = WIFI_DIRECT_STATE_CONNECTING, // 5
WFD_LINK_STATUS_DISCONNECTING = WIFI_DIRECT_STATE_DISCONNECTING,
WFD_LINK_STATUS_CONNECTED = WIFI_DIRECT_STATE_CONNECTED,
WFD_LINK_STATUS_GROUP_OWNER = WIFI_DIRECT_STATE_GROUP_OWNER,
} link_status_e;
-typedef enum
-{
- PEER_CONN_STATUS_DISCONNECTED,
- PEER_CONN_STATUS_DISCONNECTING,
- PEER_CONN_STATUS_CONNECTING = PEER_CONN_STATUS_DISCONNECTING,
- PEER_CONN_STATUS_CONNECTED,
-} conn_status_e;
-
int wfd_get_vconf_status(void *data);
-int wfd_wifi_off();
+int wfd_wifi_off(void *data);
+int wfd_mobile_ap_off(void *data);
int init_wfd_client(void *data);
int deinit_wfd_client(void *data);
-int wfd_client_get_link_status(void);
int wfd_client_start_discovery(void *data);
int wfd_client_switch_on(void *data);
int wfd_client_switch_off(void *data);
int wfd_client_swtch_force(void *data, int onoff);
int wfd_client_connect(const char *mac_addr);
int wfd_client_disconnect(const char *mac_addr);
+int wfd_client_set_p2p_group_owner_intent(int go_intent);
-#endif /* __WFD_CLIENT_H__ */
+#endif /* __WFD_CLIENT_H__ */
diff --git a/ug-wifidirect/include/wfd_ug.h b/ug-wifidirect/include/wfd_ug.h
index 8918654..ba26de9 100644..100755
--- a/ug-wifidirect/include/wfd_ug.h
+++ b/ug-wifidirect/include/wfd_ug.h
@@ -1,32 +1,29 @@
/*
- * 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.
- */
+* WiFi-Direct UG
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
-/*
- * This file declares structure for Wi-Fi direct UI Gadget.
- *
- * @file wfd_ug.h
- * @author Gibyoung Kim (lastkgb.kim@samsung.com)
- * @version 0.1
- */
+* 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.
+*
+*/
#ifndef __WFD_UG_H__
#define __WFD_UG_H__
#include <dlog.h>
+#include <ui-gadget-module.h>
+#include <tethering.h>
#define PACKAGE "ug-setting-wifidirect-efl"
#define LOCALEDIR "/opt/ug/res/locale"
@@ -38,73 +35,216 @@
#define __FUNC_ENTER__ DBG(LOG_VERBOSE, "+\n")
#define __FUNC_EXIT__ DBG(LOG_VERBOSE, "-\n")
-#define VCONF_WFD_ONOFF "db/wifi_direct/onoff"
-#define VCONF_WFD_CONNECTION_STATUS "db/wifi_direct/connection_status"
#define VCONF_WFD_APNAME "db/setting/device_name"
-#define VCONF_WFD_PASSWORD "db/mobile_hotspot/wifi_key"
-#define VCONF_WFD_PREV_STATUS "db/wifi_direct/prev_status"
#define assertm_if(expr, fmt, arg...) do { \
if(expr) { \
DBG(LOG_VERBOSE, " ##(%s) -> %s() assert!!## "fmt, #expr, __FUNCTION__, ##arg); \
assert(1); \
} \
-} while (0)
+} while (0) // retvm if
#define MAC2STR(a) (a)[0], (a)[1], (a)[2], (a)[3], (a)[4], (a)[5]
#define MACSTR "%02x:%02x:%02x:%02x:%02x:%02x"
-#define AP_NAME_LENGTH_MAX 32
-#define AP_PASSWORD_LENGTH_MAX 64
-#define AP_PASSWORD_LENGTH_MIN 8
+#define AP_NAME_LENGTH_MAX 32 //allowed lenght is 31 + '\0'
+#define AP_PASSWORD_LENGTH_MAX 64 //allowed lenght is 63 + '\0'
+#define AP_PASSWORD_LENGTH_MIN 8 //min limit
#define AP_REJECT_CHAR_LIST "=,"
-#define DEFAULT_DEV_NAME "Tizen"
+#define DEFAULT_DEV_NAME "GT_I9500"
#define MAC_LENGTH 18
#define SSID_LENGTH 32
#define MAX_PEER_NUM 10
+#define MAX_POPUP_PEER_NUM 7
+#define MAX_POPUP_TEXT_SIZE 256
+#define MAX_DISPLAY_TIME_OUT 30
#define _(s) dgettext(PACKAGE, s)
#define N_(s) dgettext_noop(s)
#define S_(s) dgettext("sys_string", s)
+#define IDS_WFD_TITLE_ABOUT_WIFI "About Wi-Fi Direct"
+#define IDS_WFD_BODY_ABOUT_WIFI "Wi-Fi Direct enables Wi-Fi devices to<br>connect directly, making printing,"\
+ " file<br>sharing, synchronising, and screen<br>sharing much simpler and more<br>convenient.<br>"\
+ "Connecting to devices that support<br>Wi-Fi Direct makes it possible to share<br>your content,"\
+ " synchronise your data,<br>socialise with friends, play games,<br>audio, videos, and more, using various<br>applications."
+#define IDS_WFD_BODY_CONNECTED_DEVICES "Connected Devices"
+#define IDS_WFD_BODY_BUSY_DEVICES "Busy Devices"
+#define IDS_WFD_BODY_FAILED_DEVICES "Failed Devices"
+#define IDS_WFD_TAP_TO_CONNECT "Tap to connect"
+#define IDS_WFD_CONNECTED_WITH_OTHER_DEVICE "Connected with another device"
+#define IDS_WFD_CONNECTED "Connected"
+#define IDS_WFD_CONNECTING "Connecting ..."
+#define IDS_WFD_WAITING_FOR_CONNECT "Waiting for connect"
+#define IDS_WFD_FAILED_TO_CONNECT "Failed to connect"
+#define IDS_WFD_DISCONNECTING "Disconnecting ..."
+#define IDS_WFD_NOCONTENT "No device found"
+#define IDS_WFD_BUTTON_MULTI "Multi connect"
+#define IDS_WFD_BUTTON_CANCEL "Cancel connect"
+#define IDS_WFD_BUTTON_DISCONNECT_ALL "Disconnect all"
+#define IDS_WFD_BUTTON_DISCONNECT "Disconnect"
+
+#define WFD_GLOBALIZATION_STR_LENGTH 256
+
+typedef enum {
+ WFD_MULTI_CONNECT_MODE_NONE,
+ WFD_MULTI_CONNECT_MODE_IN_PROGRESS,
+ WFD_MULTI_CONNECT_MODE_COMPLETED,
+} wfd_multi_connect_mode_e;
+
+typedef enum
+{
+ PEER_CONN_STATUS_DISCONNECTED,
+ PEER_CONN_STATUS_DISCONNECTING,
+ PEER_CONN_STATUS_CONNECTING = PEER_CONN_STATUS_DISCONNECTING,
+ PEER_CONN_STATUS_CONNECTED,
+ PEER_CONN_STATUS_FAILED_TO_CONNECT,
+ PEER_CONN_STATUS_WAIT_FOR_CONNECT,
+} conn_status_e;
+
typedef struct
{
- char ssid[SSID_LENGTH];
+ char ssid[SSID_LENGTH]; // 31 + 1('\0')
unsigned int category;
char mac_addr[MAC_LENGTH];
char if_addr[MAC_LENGTH];
- int conn_status;
+ conn_status_e conn_status;
+ bool is_group_owner; /** Is an active P2P Group Owner */
+ bool is_persistent_group_owner; /** Is a stored Persistent GO */
+ bool is_connected; /** Is peer connected*/
Elm_Object_Item *gl_item;
} device_type_s;
+typedef struct
+{
+ bool dev_sel_state;
+ device_type_s peer;
+} wfd_multi_sel_data_s;
+
struct ug_data
{
Evas_Object *base;
- struct ui_gadget *ug;
+ ui_gadget_h ug;
Evas_Object *win;
Evas_Object *bg;
Evas_Object *naviframe;
Evas_Object *genlist;
- Elm_Object_Item *head;
- Elm_Object_Item *noitem;
- Elm_Object_Item *scan_btn;
+ Evas_Object *multiconn_view_genlist;
Evas_Object *popup;
Evas_Object *act_popup;
Evas_Object *warn_popup;
+ Elm_Object_Item *head;
+ Elm_Object_Item *scan_btn;
+ Elm_Object_Item *multi_scan_btn;
+ Elm_Object_Item *multi_connect_btn;
+
+ Elm_Object_Item *nodevice_title_item;
+ Elm_Object_Item *nodevice_item;
+ Elm_Object_Item *nodevice_sep_low_item;
+
+ Elm_Object_Item *about_wfd_item;
+ Elm_Object_Item *about_wfdsp_sep_end_item;
+
+ Elm_Object_Item *conn_wfd_item;
+
+ Elm_Object_Item *conn_failed_wfd_item;
+ Elm_Object_Item *conn_failed_wfd_sep_item;
+
+ Elm_Object_Item *avlbl_wfd_item;
+
+ Elm_Object_Item *busy_wfd_item;
+ Elm_Object_Item *busy_wfd_sep_item;
+
+ Elm_Object_Item *multi_connect_wfd_item;
+
+ Elm_Object_Item *multi_button_item;
+ Elm_Object_Item *multi_button_sep_high_item;
+ Elm_Object_Item *multi_button_sep_low_item;
+
+
+ Elm_Object_Item *mcview_select_all_item;
+ Elm_Object_Item *mcview_title_item;
+ Elm_Object_Item *mcview_nodevice_item;
+
+
+ Evas_Object *multi_btn;
+
int head_text_mode;
- device_type_s *peers;
- int peer_cnt;
+ // Raw peer data
+ device_type_s raw_connected_peers[MAX_PEER_NUM];
+ int raw_connected_peer_cnt;
+ device_type_s raw_discovered_peers[MAX_PEER_NUM];
+ int raw_discovered_peer_cnt;
+
+ // Peer data in the Genlist
+ device_type_s gl_connected_peers[MAX_PEER_NUM];
+ int gl_connected_peer_cnt;
+
+ device_type_s gl_connected_failed_peers[MAX_PEER_NUM];
+ int gl_connected_failed_peer_cnt;
+
+ device_type_s gl_available_peers[MAX_PEER_NUM];
+ int gl_available_peer_cnt;
+
+ device_type_s gl_busy_peers[MAX_PEER_NUM];
+ int gl_busy_peer_cnt;
+
+ device_type_s raw_multi_selected_peers[MAX_PEER_NUM];
+ int raw_multi_selected_peer_cnt;
+
+ device_type_s gl_multi_connect_peers[MAX_PEER_NUM];
+ int gl_multi_connect_peer_cnt;
+
+ // My status
+ bool I_am_group_owner;
+ bool I_am_connected;
+
+ // Following variables are used at the Multi connect view.
+ wfd_multi_connect_mode_e multi_connect_mode;
+ wfd_multi_sel_data_s multi_conn_dev_list[MAX_PEER_NUM];
+ int gl_available_dev_cnt_at_multiconn_view;
+ int g_source_multi_connect_next;
int wfd_onoff;
int wfd_status;
char *dev_name;
char *dev_pass;
+
+ // For connect failed peers
+ int last_display_time;
+ Ecore_Timer *display_timer;
+
+ //tethering
+ tethering_h hotspot_handle;
+
};
+extern Elm_Gen_Item_Class sep_itc;
+extern Elm_Gen_Item_Class sep_itc_end;
+extern Elm_Gen_Item_Class head_itc;
+extern Elm_Gen_Item_Class name_itc;
+extern Elm_Gen_Item_Class title_itc;
+extern Elm_Gen_Item_Class peer_itc;
+extern Elm_Gen_Item_Class noitem_itc;
+extern Elm_Gen_Item_Class help_itc;
+extern Elm_Gen_Item_Class button_itc;
+
+extern Elm_Gen_Item_Class title_conn_itc;
+extern Elm_Gen_Item_Class peer_conn_itc;
+
+extern Elm_Gen_Item_Class title_busy_itc;
+extern Elm_Gen_Item_Class peer_busy_itc;
+
+extern Elm_Gen_Item_Class title_multi_connect_itc;
+extern Elm_Gen_Item_Class peer_multi_connect_itc;
+
+extern Elm_Gen_Item_Class title_conn_failed_itc;
+extern Elm_Gen_Item_Class peer_conn_failed_itc;
+
-#endif /* __WFD_UG_H__ */
+#endif /* __WFD_UG_H__ */
diff --git a/ug-wifidirect/include/wfd_ug_view.h b/ug-wifidirect/include/wfd_ug_view.h
index 755dd37..2a35949 100644..100755
--- a/ug-wifidirect/include/wfd_ug_view.h
+++ b/ug-wifidirect/include/wfd_ug_view.h
@@ -1,45 +1,61 @@
/*
- * 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.
- */
+* WiFi-Direct UG
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
-/*
- * This file declares functions for view of Wi-Fi direct UI Gadget.
- *
- * @file wfd_ug_view.h
- * @author Gibyoung Kim (lastkgb.kim@samsung.com)
- * @version 0.1
- */
+* 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.
+*
+*/
#ifndef __WFD_UG_VIEW_H__
#define __WFD_UG_VIEW_H__
+#include <glib.h>
+#include <syspopup_caller.h>
+
#define EDJDIR "/opt/ug/res/edje/ug-setting-wifidirect-efl"
#define WFD_UG_EDJ_PATH EDJDIR"/wfd_ug.edj"
#define WFD_IMG_DIR "/opt/ug/res/images/ug-setting-wifidirect-efl"
+#define TICKERNOTI_SYSPOPUP "tickernoti-syspopup"
+
+
+/* Define icons */
-#define WFD_ICON_DEVICE_PC WFD_IMG_DIR"/A09_device_computer.png"
-#define WFD_ICON_DEVICE_KEYBOARD WFD_IMG_DIR"/31_BT_device_keyboard.png"
-#define WFD_ICON_DEVICE_PRINTER WFD_IMG_DIR"/31_BT_device_printer.png"
-#define WFD_ICON_DEVICE_UNKNOWN WFD_IMG_DIR"/31_BT_device_unknown.png"
-#define WFD_ICON_DEVICE_PHONE WFD_IMG_DIR"/A09_device_mobile.png"
-#define WFD_ICON_DEVICE_HEADSET WFD_IMG_DIR"/31_BT_device_headset.png"
+#define WFD_ICON_DEVICE_COMPUTER WFD_IMG_DIR"/A09_device_computer.png"
+#define WFD_ICON_DEVICE_INPUT_DEVICE WFD_IMG_DIR"/A09_device_input_device.png"
+#define WFD_ICON_DEVICE_PRINTER WFD_IMG_DIR"/A09_device_printer.png"
+#define WFD_ICON_DEVICE_CAMERA WFD_IMG_DIR"/A09_device_camera.png"
+#define WFD_ICON_DEVICE_STORAGE WFD_IMG_DIR"/A09_device_storage.png"
+#define WFD_ICON_DEVICE_NETWORK_INFRA WFD_IMG_DIR"/A09_device_network_infrastructure.png"
+#define WFD_ICON_DEVICE_DISPLAY WFD_IMG_DIR"/A09_device_display.png"
+#define WFD_ICON_DEVICE_MULTIMEDIA_DEVICE WFD_IMG_DIR"/A09_device_multimedia_devices.png"
+#define WFD_ICON_DEVICE_GAMING_DEVICE WFD_IMG_DIR"/A09_device_gaming_devices.png"
+#define WFD_ICON_DEVICE_TELEPHONE WFD_IMG_DIR"/A09_device_telephone.png"
+#define WFD_ICON_DEVICE_AUDIO_DEVICE WFD_IMG_DIR"/A09_device_audio_devices.png"
-#define WFD_ICON_DEVICE_MOUSE WFD_IMG_DIR"/31_BT_device_mouse.png"
+#define WFD_ICON_DEVICE_COMPUTER_CONNECT WFD_IMG_DIR"/A09_device_computer_connect.png"
+#define WFD_ICON_DEVICE_INPUT_DEVICE_CONNECT WFD_IMG_DIR"/A09_device_input_device_connect.png"
+#define WFD_ICON_DEVICE_PRINTER_CONNECT WFD_IMG_DIR"/A09_device_printer_connect.png"
+#define WFD_ICON_DEVICE_CAMERA_CONNECT WFD_IMG_DIR"/A09_device_camera_connect.png"
+#define WFD_ICON_DEVICE_STORAGE_CONNECT WFD_IMG_DIR"/A09_device_storage_connect.png"
+#define WFD_ICON_DEVICE_NETWORK_INFRA_CONNECT WFD_IMG_DIR"/A09_device_network_infrastructure_connect.png"
+#define WFD_ICON_DEVICE_DISPLAY_CONNECT WFD_IMG_DIR"/A09_device_display_connect.png"
+#define WFD_ICON_DEVICE_MULTIMEDIA_DEVICE_CONNECT WFD_IMG_DIR"/A09_device_multimedia_devices_connect.png"
+#define WFD_ICON_DEVICE_GAMING_DEVICE_CONNECT WFD_IMG_DIR"/A09_device_gaming_devices_connect.png"
+#define WFD_ICON_DEVICE_TELEPHONE_CONNECT WFD_IMG_DIR"/A09_device_telephone_connect.png"
+#define WFD_ICON_DEVICE_AUDIO_DEVICE_CONNECT WFD_IMG_DIR"/A09_device_audio_devices_connect.png"
-#define WFD_ICON_CONNECTED WFD_IMG_DIR"/A09_Connect.png"
+#define WFD_ICON_CONNECTED WFD_IMG_DIR"/A09_Connect.png"
enum
@@ -53,29 +69,71 @@ enum
enum
{
+ /* User confirm */
POPUP_TYPE_WIFI_OFF,
POPUP_TYPE_HOTSPOT_OFF,
+ /* Activation */
POPUP_TYPE_ACTIVATE_FAIL,
POPUP_TYPE_DEACTIVATE_FAIL,
+ /* Connection */
POPUP_TYPE_LINK_TIMEOUT,
POPUP_TYPE_AUTH_FAIL,
POPUP_TYPE_LINK_FAIL,
POPUP_TYPE_UNKNOWN_ERROR,
POPUP_TYPE_TERMINATE,
+
+ /* Disconnect */
+ POP_TYPE_DISCONNECT,
+
+ /* Disconnect All*/
+ POP_TYPE_DISCONNECT_ALL,
+
+ /* Scan again */
+ POP_TYPE_SCAN_AGAIN,
+
+ /* multi connect */
+ POP_TYPE_MULTI_CONNECT_POPUP,
+
+ /* Busy device */
+ POP_TYPE_BUSY_DEVICE_POPUP,
};
+struct ug_data *wfd_get_ug_data();
void create_wfd_ug_view(void *data);
void destroy_wfd_ug_view(void *data);
void wfd_ug_view_refresh_glitem(void *obj);
-void wfd_ug_view_refresh_button(void *obj, int enable);
+void wfd_ug_view_refresh_button(void *obj, const char *text, int enable);
void wfd_ug_view_update_peers(void *data);
void wfd_ug_view_free_peers(void *data);
void wfd_ug_act_popup(void *data, const char *message, int popup_type);
void wfg_ug_act_popup_remove(void *data);
void wfd_ug_warn_popup(void *data, const char *message, int popup_type);
void wfg_ug_warn_popup_remove(void *data);
+int _create_connected_dev_list(void *data);
+int _change_multi_button_title(void *data);
+
+void _wifid_create_about_view(struct ug_data *ugd);
+void _wifid_create_multiconnect_view(struct ug_data *ugd);
+
+void _sub_view_back_btn_cb(void *data, Evas_Object * obj, void *event_info);
+void _back_btn_cb(void *data, Evas_Object * obj, void *event_info);
+void _scan_btn_cb(void *data, Evas_Object * obj, void *event_info);
+
+void _wfd_onoff_btn_cb(void *data, Evas_Object *obj, void *event_info);
+void _wifid_create_multibutton_cb(void *data, Evas_Object * obj, void *event_info);
+
+int wfd_ug_get_discovered_peers(struct ug_data *ugd);
+int wfd_ug_get_connected_peers(struct ug_data *ugd);
+int wfd_refresh_wifi_direct_state(void* data);
+
+int wfd_multi_connect_next(void* data);
+int wfd_stop_multi_connect(void *data);
+
+gboolean wfd_multi_connect_next_cb(void* data);
+
+void wfd_ug_tickernoti_popup(char *msg);
-#endif /* __WFD_UG_VIEW_H__ */
+#endif /* __WFD_UG_VIEW_H__ */
diff --git a/ug-wifidirect/po/en.po b/ug-wifidirect/po/en.po
index 2dbaeb8..a7b10da 100644..100755
--- a/ug-wifidirect/po/en.po
+++ b/ug-wifidirect/po/en.po
@@ -7,15 +7,6 @@ msgstr "Deactivating Wi-Fi Direct..."
msgid "IDS_WFD_BODY_ACTIVATING"
msgstr "Activating Wi-Fi Direct..."
-msgid "IDS_WFD_BODY_SCANNING"
-msgstr "Scanning..."
-
-msgid "IDS_WFD_BODY_ACTIVATED"
-msgstr "Wi-Fi Direct activated"
-
-msgid "IDS_WFD_BODY_DEVICE_NAME"
-msgstr "Device name"
-
msgid "IDS_WFD_BODY_AVAILABLE_DEVICES"
msgstr "Available Devices"
@@ -34,6 +25,9 @@ msgstr "Connecting..."
msgid "IDS_WFD_POP_CONNECTED"
msgstr "Connected"
+msgid "IDS_WFD_BUTTON_CONNECT"
+msgstr "Connect"
+
msgid "IDS_WFD_BUTTON_SCAN"
msgstr "Scan"
@@ -59,13 +53,31 @@ msgid "IDS_WFD_POP_UNKNOWN_ERROR"
msgstr "Unknown error"
msgid "IDS_WFD_POP_WIFI_OFF"
-msgstr "This will turn off Wi-Fi client operation.<br>Continue?"
+msgstr "Enabling Wi-Fi Direct will disable Wi-Fi.<br>Continue?"
msgid "IDS_WFD_POP_HOTSPOT_OFF"
-msgstr "This will turn off Portable Wi-Fi hotspots operation.<br>Continue?"
+msgstr "Enabling Wi-Fi Direct will disable Wi-Fi tethering.<br>Continue?"
msgid "IDS_WFD_POP_NOT_SUPPORTED_DEVICE"
msgstr "This device do not support<br>Wi-Fi Direct Service"
msgid "IDS_WFD_POP_PROBLEM_WITH_WFD"
msgstr "This device have some problem with<br>Wi-Fi Direct Service"
+
+msgid "IDS_WFD_POP_CANCEL_CONNECT"
+msgstr "Cancel Wi-Fi direct connection.<br>Continue?"
+
+msgid "IDS_WFD_POP_DISCONNECT"
+msgstr "Current connect will be disconnected."
+
+msgid "IDS_WFD_POP_SCAN_AGAIN"
+msgstr "To start new scanning,<br>current connection will be<br>ended.Continue?"
+
+msgid "IDS_WFD_POP_MULTI_CONNECT"
+msgstr "You can connect up to<br>%d devices at the same time."
+
+msgid "IDS_WFD_POP_WARN_BUSY_DEVICE"
+msgstr "Unavailable device. Device is connected to another device."
+
+msgid "IDS_WFD_POP_SELECTED_DEVICE_NUM"
+msgstr "Selected(%d)" \ No newline at end of file
diff --git a/ug-wifidirect/po/en_GB.po b/ug-wifidirect/po/en_GB.po
index 2dbaeb8..d214083 100644..100755
--- a/ug-wifidirect/po/en_GB.po
+++ b/ug-wifidirect/po/en_GB.po
@@ -34,6 +34,9 @@ msgstr "Connecting..."
msgid "IDS_WFD_POP_CONNECTED"
msgstr "Connected"
+msgid "IDS_WFD_BUTTON_CONNECT"
+msgstr "Connect"
+
msgid "IDS_WFD_BUTTON_SCAN"
msgstr "Scan"
@@ -59,7 +62,7 @@ msgid "IDS_WFD_POP_UNKNOWN_ERROR"
msgstr "Unknown error"
msgid "IDS_WFD_POP_WIFI_OFF"
-msgstr "This will turn off Wi-Fi client operation.<br>Continue?"
+msgstr "Enabling Wi-Fi Direct will disable Wi-Fi.<br>Continue?"
msgid "IDS_WFD_POP_HOTSPOT_OFF"
msgstr "This will turn off Portable Wi-Fi hotspots operation.<br>Continue?"
@@ -69,3 +72,18 @@ msgstr "This device do not support<br>Wi-Fi Direct Service"
msgid "IDS_WFD_POP_PROBLEM_WITH_WFD"
msgstr "This device have some problem with<br>Wi-Fi Direct Service"
+
+msgid "IDS_WFD_POP_CANCEL_CONNECT"
+msgstr "Cancel Wi-Fi direct connection.<br>Continue?"
+
+msgid "IDS_WFD_POP_DISCONNECT"
+msgstr "Current connect wil be disconnected."
+
+msgid "IDS_WFD_POP_SCAN_AGAIN"
+msgstr "To start new scanning,<br>current connection will be<br>ended.Continue?"
+
+msgid "IDS_WFD_POP_MULTI_CONNECT"
+msgstr "You can connect up to<br>%d devices at the same time."
+
+msgid "IDS_WFD_POP_WARN_BUSY_DEVICE"
+msgstr "Unavailable device. Device is connected to another device." \ No newline at end of file
diff --git a/ug-wifidirect/po/en_US.po b/ug-wifidirect/po/en_US.po
index 2dbaeb8..d214083 100644..100755
--- a/ug-wifidirect/po/en_US.po
+++ b/ug-wifidirect/po/en_US.po
@@ -34,6 +34,9 @@ msgstr "Connecting..."
msgid "IDS_WFD_POP_CONNECTED"
msgstr "Connected"
+msgid "IDS_WFD_BUTTON_CONNECT"
+msgstr "Connect"
+
msgid "IDS_WFD_BUTTON_SCAN"
msgstr "Scan"
@@ -59,7 +62,7 @@ msgid "IDS_WFD_POP_UNKNOWN_ERROR"
msgstr "Unknown error"
msgid "IDS_WFD_POP_WIFI_OFF"
-msgstr "This will turn off Wi-Fi client operation.<br>Continue?"
+msgstr "Enabling Wi-Fi Direct will disable Wi-Fi.<br>Continue?"
msgid "IDS_WFD_POP_HOTSPOT_OFF"
msgstr "This will turn off Portable Wi-Fi hotspots operation.<br>Continue?"
@@ -69,3 +72,18 @@ msgstr "This device do not support<br>Wi-Fi Direct Service"
msgid "IDS_WFD_POP_PROBLEM_WITH_WFD"
msgstr "This device have some problem with<br>Wi-Fi Direct Service"
+
+msgid "IDS_WFD_POP_CANCEL_CONNECT"
+msgstr "Cancel Wi-Fi direct connection.<br>Continue?"
+
+msgid "IDS_WFD_POP_DISCONNECT"
+msgstr "Current connect wil be disconnected."
+
+msgid "IDS_WFD_POP_SCAN_AGAIN"
+msgstr "To start new scanning,<br>current connection will be<br>ended.Continue?"
+
+msgid "IDS_WFD_POP_MULTI_CONNECT"
+msgstr "You can connect up to<br>%d devices at the same time."
+
+msgid "IDS_WFD_POP_WARN_BUSY_DEVICE"
+msgstr "Unavailable device. Device is connected to another device." \ No newline at end of file
diff --git a/ug-wifidirect/po/ja.po b/ug-wifidirect/po/ja.po
index 2dbaeb8..d214083 100644..100755
--- a/ug-wifidirect/po/ja.po
+++ b/ug-wifidirect/po/ja.po
@@ -34,6 +34,9 @@ msgstr "Connecting..."
msgid "IDS_WFD_POP_CONNECTED"
msgstr "Connected"
+msgid "IDS_WFD_BUTTON_CONNECT"
+msgstr "Connect"
+
msgid "IDS_WFD_BUTTON_SCAN"
msgstr "Scan"
@@ -59,7 +62,7 @@ msgid "IDS_WFD_POP_UNKNOWN_ERROR"
msgstr "Unknown error"
msgid "IDS_WFD_POP_WIFI_OFF"
-msgstr "This will turn off Wi-Fi client operation.<br>Continue?"
+msgstr "Enabling Wi-Fi Direct will disable Wi-Fi.<br>Continue?"
msgid "IDS_WFD_POP_HOTSPOT_OFF"
msgstr "This will turn off Portable Wi-Fi hotspots operation.<br>Continue?"
@@ -69,3 +72,18 @@ msgstr "This device do not support<br>Wi-Fi Direct Service"
msgid "IDS_WFD_POP_PROBLEM_WITH_WFD"
msgstr "This device have some problem with<br>Wi-Fi Direct Service"
+
+msgid "IDS_WFD_POP_CANCEL_CONNECT"
+msgstr "Cancel Wi-Fi direct connection.<br>Continue?"
+
+msgid "IDS_WFD_POP_DISCONNECT"
+msgstr "Current connect wil be disconnected."
+
+msgid "IDS_WFD_POP_SCAN_AGAIN"
+msgstr "To start new scanning,<br>current connection will be<br>ended.Continue?"
+
+msgid "IDS_WFD_POP_MULTI_CONNECT"
+msgstr "You can connect up to<br>%d devices at the same time."
+
+msgid "IDS_WFD_POP_WARN_BUSY_DEVICE"
+msgstr "Unavailable device. Device is connected to another device." \ No newline at end of file
diff --git a/ug-wifidirect/po/ko_KR.po b/ug-wifidirect/po/ko_KR.po
index f4525a2..147a5fb 100644..100755
--- a/ug-wifidirect/po/ko_KR.po
+++ b/ug-wifidirect/po/ko_KR.po
@@ -34,6 +34,9 @@ msgstr "연결중..."
msgid "IDS_WFD_POP_CONNECTED"
msgstr "ì—°ê²°ë˜ì—ˆìŠµë‹ˆë‹¤."
+msgid "IDS_WFD_BUTTON_CONNECT"
+msgstr "Connect"
+
msgid "IDS_WFD_BUTTON_SCAN"
msgstr "검색"
@@ -69,3 +72,18 @@ msgstr "Wi-Fi Direct Service를 지ì›í•˜ì§€ 않는 장치입니다."
msgid "IDS_WFD_POP_PROBLEM_WITH_WFD"
msgstr "Wi-Fi Direct Serviceì— ë¬¸ì œê°€ 있습니다."
+
+msgid "IDS_WFD_POP_CANCEL_CONNECT"
+msgstr "Cancel Wi-Fi direct connection.<br>Continue?"
+
+msgid "IDS_WFD_POP_DISCONNECT"
+msgstr "Current connect wil be disconnected."
+
+msgid "IDS_WFD_POP_SCAN_AGAIN"
+msgstr "To start new scanning,<br>current connection will be<br>ended.Continue?"
+
+msgid "IDS_WFD_POP_MULTI_CONNECT"
+msgstr "You can connect up to<br>%d devices at the same time."
+
+msgid "IDS_WFD_POP_WARN_BUSY_DEVICE"
+msgstr "Unavailable device. Device is connected to another device." \ No newline at end of file
diff --git a/ug-wifidirect/po/zh_CN.po b/ug-wifidirect/po/zh_CN.po
index 2dbaeb8..2a0de42 100644..100755
--- a/ug-wifidirect/po/zh_CN.po
+++ b/ug-wifidirect/po/zh_CN.po
@@ -2,70 +2,88 @@ msgid "IDS_WFD_HEADER_WIFI_DIRECT"
msgstr "Wi-Fi Direct"
msgid "IDS_WFD_BODY_DEACTIVATING"
-msgstr "Deactivating Wi-Fi Direct..."
+msgstr "ÕýÔڹرÕWi-Fi Direct..."
msgid "IDS_WFD_BODY_ACTIVATING"
-msgstr "Activating Wi-Fi Direct..."
+msgstr "ÕýÔÚ´ò¿ªWi-Fi Direct..."
msgid "IDS_WFD_BODY_SCANNING"
-msgstr "Scanning..."
+msgstr "ɨÃèÖÐ..."
msgid "IDS_WFD_BODY_ACTIVATED"
-msgstr "Wi-Fi Direct activated"
+msgstr "ÒѹرÕWi-Fi Direct"
msgid "IDS_WFD_BODY_DEVICE_NAME"
-msgstr "Device name"
+msgstr "É豸Ãû"
msgid "IDS_WFD_BODY_AVAILABLE_DEVICES"
-msgstr "Available Devices"
+msgstr "ÓÐЧÉ豸"
msgid "IDS_WFD_BODY_WIFI_DIRECT_DEVICES"
-msgstr "Wi-Fi Direct Devices"
+msgstr "Wi-Fi DirectÉ豸"
msgid "IDS_WFD_BODY_NO_DEVICES"
-msgstr "No devices"
+msgstr "ûÓÐÉ豸"
msgid "IDS_WFD_BODY_HELP"
-msgstr "HELP"
+msgstr "°ïÖú"
msgid "IDS_WFD_POP_CONNECTING"
-msgstr "Connecting..."
+msgstr "Á¬½ÓÖÐ..."
msgid "IDS_WFD_POP_CONNECTED"
-msgstr "Connected"
+msgstr "ÒÑÁ¬½Ó"
+
+msgid "IDS_WFD_BUTTON_CONNECT"
+msgstr "Á¬½Ó"
msgid "IDS_WFD_BUTTON_SCAN"
-msgstr "Scan"
+msgstr "ɨÃè"
msgid "IDS_WFD_BUTTON_STOPSCAN"
-msgstr "Stop"
+msgstr "Í£Ö¹"
msgid "IDS_WFD_POP_ACTIVATE_FAIL"
-msgstr "Failed to activate Wi-Fi Direct"
+msgstr "´ò¿ªWi-Fi Directʧ°Ü"
msgid "IDS_WFD_POP_DEACTIVATE_FAIL"
-msgstr "Failed to deactivate Wi-Fi Direct"
+msgstr "¹Ø±ÕWi-Fi Directʧ°Ü"
msgid "IDS_WFD_POP_CONNECTING_TIMEOUT"
-msgstr "Connecting is timeout"
+msgstr "Á¬½Ó³¬Ê±"
msgid "IDS_WFD_POP_AUTH_FAIL"
-msgstr "Authentication failure"
+msgstr "ÈÏ֤ʧ°Ü"
msgid "IDS_WFD_POP_LINK_FAIL"
-msgstr "Link creation failure"
+msgstr "´´½¨Á¬½Óʧ°Ü"
msgid "IDS_WFD_POP_UNKNOWN_ERROR"
-msgstr "Unknown error"
+msgstr "δ֪´íÎó"
msgid "IDS_WFD_POP_WIFI_OFF"
-msgstr "This will turn off Wi-Fi client operation.<br>Continue?"
+msgstr "´ò¿ªWi-Fi Direct½«¹Ø±ÕWi-Fi.<br>ÊÇ·ñ¼ÌÐø?"
msgid "IDS_WFD_POP_HOTSPOT_OFF"
-msgstr "This will turn off Portable Wi-Fi hotspots operation.<br>Continue?"
+msgstr "Õ⽫¹Ø±Õ¶ÔWi-FiÈȵãµÄ²Ù×÷.<br>ÊÇ·ñ¼ÌÐø?"
msgid "IDS_WFD_POP_NOT_SUPPORTED_DEVICE"
-msgstr "This device do not support<br>Wi-Fi Direct Service"
+msgstr "¸ÃÉ豸²»Ö§³Ö<br>Wi-Fi Direct·þÎñ"
msgid "IDS_WFD_POP_PROBLEM_WITH_WFD"
-msgstr "This device have some problem with<br>Wi-Fi Direct Service"
+msgstr "¸ÃÉ豸<br>Wi-Fi Direct Service"
+
+msgid "IDS_WFD_POP_CANCEL_CONNECT"
+msgstr "È¡ÏûWi-Fi directÁ¬½Ó.<br>ÊÇ·ñ¼ÌÐø?"
+
+msgid "IDS_WFD_POP_DISCONNECT"
+msgstr "µ±Ç°Á¬½Ó½«±»¹Ø±Õ."
+
+msgid "IDS_WFD_POP_SCAN_AGAIN"
+msgstr "½«¿ªÊ¼ÖØÐÂɨÃè,<br>µ±Ç°Á¬½Ó½«±»<br>¹Ø±Õ.ÊÇ·ñ¼ÌÐø?"
+
+msgid "IDS_WFD_POP_MULTI_CONNECT"
+msgstr "Ä㽫ͬʱÁ¬½Ó<br>%d̨É豸."
+
+msgid "IDS_WFD_POP_WARN_BUSY_DEVICE"
+msgstr "ÎÞЧµÄÉ豸. ¸ÃÉ豸Òѱ»ÆäËüÉ豸Á¬½Ó." \ No newline at end of file
diff --git a/ug-wifidirect/resources/images/31_BT_device_headset.png b/ug-wifidirect/resources/images/31_BT_device_headset.png
deleted file mode 100755
index 0150a55..0000000
--- a/ug-wifidirect/resources/images/31_BT_device_headset.png
+++ /dev/null
Binary files differ
diff --git a/ug-wifidirect/resources/images/31_BT_device_keyboard.png b/ug-wifidirect/resources/images/31_BT_device_keyboard.png
deleted file mode 100755
index 8d16510..0000000
--- a/ug-wifidirect/resources/images/31_BT_device_keyboard.png
+++ /dev/null
Binary files differ
diff --git a/ug-wifidirect/resources/images/31_BT_device_mouse.png b/ug-wifidirect/resources/images/31_BT_device_mouse.png
deleted file mode 100755
index a994030..0000000
--- a/ug-wifidirect/resources/images/31_BT_device_mouse.png
+++ /dev/null
Binary files differ
diff --git a/ug-wifidirect/resources/images/31_BT_device_printer.png b/ug-wifidirect/resources/images/31_BT_device_printer.png
deleted file mode 100755
index ea025b1..0000000
--- a/ug-wifidirect/resources/images/31_BT_device_printer.png
+++ /dev/null
Binary files differ
diff --git a/ug-wifidirect/resources/images/31_BT_device_unknown.png b/ug-wifidirect/resources/images/31_BT_device_unknown.png
deleted file mode 100755
index 70699f1..0000000
--- a/ug-wifidirect/resources/images/31_BT_device_unknown.png
+++ /dev/null
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_My_laptop.png b/ug-wifidirect/resources/images/A09_device_My_laptop.png
deleted file mode 100755
index 5e2f10a..0000000
--- a/ug-wifidirect/resources/images/A09_device_My_laptop.png
+++ /dev/null
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_audio_devices.png b/ug-wifidirect/resources/images/A09_device_audio_devices.png
new file mode 100755
index 0000000..a9eddde
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_audio_devices.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_audio_devices_connect.png b/ug-wifidirect/resources/images/A09_device_audio_devices_connect.png
new file mode 100644
index 0000000..afc8967
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_audio_devices_connect.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_camera.png b/ug-wifidirect/resources/images/A09_device_camera.png
new file mode 100755
index 0000000..ee1cc73
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_camera.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_camera_connect.png b/ug-wifidirect/resources/images/A09_device_camera_connect.png
new file mode 100644
index 0000000..623056a
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_camera_connect.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_computer.png b/ug-wifidirect/resources/images/A09_device_computer.png
index 6c4a633..293deb7 100755
--- a/ug-wifidirect/resources/images/A09_device_computer.png
+++ b/ug-wifidirect/resources/images/A09_device_computer.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_computer_connect.png b/ug-wifidirect/resources/images/A09_device_computer_connect.png
new file mode 100644
index 0000000..8968996
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_computer_connect.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_display.png b/ug-wifidirect/resources/images/A09_device_display.png
new file mode 100755
index 0000000..87aa317
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_display.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_display_connect.png b/ug-wifidirect/resources/images/A09_device_display_connect.png
new file mode 100644
index 0000000..361009a
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_display_connect.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_gaming_devices.png b/ug-wifidirect/resources/images/A09_device_gaming_devices.png
new file mode 100755
index 0000000..8672a46
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_gaming_devices.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_input_device.png b/ug-wifidirect/resources/images/A09_device_input_device.png
new file mode 100755
index 0000000..4130993
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_input_device.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_input_device_connect.png b/ug-wifidirect/resources/images/A09_device_input_device_connect.png
new file mode 100644
index 0000000..5de49c3
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_input_device_connect.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_mobile.png b/ug-wifidirect/resources/images/A09_device_mobile.png
deleted file mode 100755
index a671a84..0000000
--- a/ug-wifidirect/resources/images/A09_device_mobile.png
+++ /dev/null
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_multimedia_devices.png b/ug-wifidirect/resources/images/A09_device_multimedia_devices.png
new file mode 100755
index 0000000..0d10f38
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_multimedia_devices.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_multimedia_devices_connect.png b/ug-wifidirect/resources/images/A09_device_multimedia_devices_connect.png
new file mode 100644
index 0000000..367209f
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_multimedia_devices_connect.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_network_infrastructure.png b/ug-wifidirect/resources/images/A09_device_network_infrastructure.png
new file mode 100755
index 0000000..f0ef92c
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_network_infrastructure.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_network_infrastructure_connect.png b/ug-wifidirect/resources/images/A09_device_network_infrastructure_connect.png
new file mode 100644
index 0000000..8699a57
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_network_infrastructure_connect.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_printer.png b/ug-wifidirect/resources/images/A09_device_printer.png
new file mode 100755
index 0000000..3b36c01
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_printer.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_printer_connect.png b/ug-wifidirect/resources/images/A09_device_printer_connect.png
new file mode 100644
index 0000000..13d860f
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_printer_connect.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_storage.png b/ug-wifidirect/resources/images/A09_device_storage.png
new file mode 100755
index 0000000..d0d94e9
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_storage.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_storage_connect.png b/ug-wifidirect/resources/images/A09_device_storage_connect.png
new file mode 100644
index 0000000..c63de69
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_storage_connect.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_telephone.png b/ug-wifidirect/resources/images/A09_device_telephone.png
new file mode 100755
index 0000000..83d7507
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_telephone.png
Binary files differ
diff --git a/ug-wifidirect/resources/images/A09_device_telephone_connect.png b/ug-wifidirect/resources/images/A09_device_telephone_connect.png
new file mode 100644
index 0000000..b6a7e14
--- /dev/null
+++ b/ug-wifidirect/resources/images/A09_device_telephone_connect.png
Binary files differ
diff --git a/ug-wifidirect/src/wfd_client.c b/ug-wifidirect/src/wfd_client.c
index 255baa9..e565b52 100644..100755
--- a/ug-wifidirect/src/wfd_client.c
+++ b/ug-wifidirect/src/wfd_client.c
@@ -1,26 +1,21 @@
/*
- * 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.
- */
+* WiFi-Direct UG
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
-/*
- * This file implements Wi-Fi direct client functions.
- *
- * @file wfd_client.c
- * @author Gibyoung Kim (lastkgb.kim@samsung.com)
- * @version 0.1
- */
+* 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.
+*
+*/
#include <stdio.h>
#include <stdbool.h>
@@ -29,6 +24,8 @@
#include <Elementary.h>
#include <pmapi.h>
#include <vconf.h>
+//#include <vconf-keys.h>
+#include <tethering.h>
#include <network-cm-intf.h>
#include <network-wifi-intf.h>
#include <wifi-direct.h>
@@ -37,9 +34,6 @@
#include "wfd_ug_view.h"
#include "wfd_client.h"
-
-
-
static void _wifi_state_cb(keynode_t *key, void *data)
{
__FUNC_ENTER__;
@@ -51,10 +45,11 @@ static void _wifi_state_cb(keynode_t *key, void *data)
if (res != 0)
{
DBG(LOG_ERROR, "Failed to get wifi state from vconf. [%d]\n", res);
+ // TODO: set genlist head item as "WiFi Direct"
return;
}
- if (wifi_state == VCONFKEY_WIFI_OFF)
+ if(wifi_state == VCONFKEY_WIFI_OFF)
{
DBG(LOG_VERBOSE, "WiFi is turned off\n");
wfd_client_swtch_force(ugd, TRUE);
@@ -65,7 +60,7 @@ static void _wifi_state_cb(keynode_t *key, void *data)
}
res = net_deregister_client();
- if (res != NET_ERR_NONE)
+ if(res != NET_ERR_NONE)
{
DBG(LOG_ERROR, "Failed to deregister network client. [%d]\n", res);
}
@@ -94,14 +89,14 @@ int wfd_wifi_off(void *data)
}
DBG(LOG_VERBOSE, "Vconf key callback is registered\n");
res = net_register_client((net_event_cb_t) _network_event_cb, NULL);
- if (res != NET_ERR_NONE)
+ if(res != NET_ERR_NONE)
{
DBG(LOG_ERROR, "Failed to register network client. [%d]\n", res);
return -1;
}
DBG(LOG_VERBOSE, "Network client is registered\n");
res = net_wifi_power_off();
- if (res != NET_ERR_NONE)
+ if(res != NET_ERR_NONE)
{
DBG(LOG_ERROR, "Failed to turn off wifi. [%d]\n", res);
return -1;
@@ -111,194 +106,350 @@ int wfd_wifi_off(void *data)
return 0;
}
+static void _hotspot_state_cb(keynode_t *key, void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+ int res;
+ int hotspot_mode;
+ tethering_error_e ret = TETHERING_ERROR_NONE;
+ tethering_h th = NULL;
+
+ res = vconf_get_int(VCONFKEY_MOBILE_HOTSPOT_MODE, &hotspot_mode);
+ if (res != 0)
+ {
+ DBG(LOG_ERROR, "Failed to get mobile hotspot state from vconf. [%d]\n", res);
+ // TODO: set genlist head item as "WiFi Direct"
+ return;
+ }
+
+ if(hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI)
+ {
+ DBG(LOG_VERBOSE, " Mobile hotspot is activated\n");
+ }
+ else
+ {
+ DBG(LOG_VERBOSE, " Mobile hotspot is deactivated\n");
+ wfd_client_swtch_force(ugd, TRUE);
+ }
+
+ th = ugd->hotspot_handle;
+
+ if(th != NULL)
+ {
+ /* Deregister cbs */
+ ret = tethering_unset_disabled_cb(th, TETHERING_TYPE_WIFI);
+ if(ret != TETHERING_ERROR_NONE)
+ DBG(LOG_ERROR, "tethering_unset_disabled_cb is failed(%d)\n", ret);
+
+ /* Destroy tethering handle */
+ ret = tethering_destroy(th);
+ if(ret != TETHERING_ERROR_NONE)
+ DBG(LOG_ERROR, "tethering_destroy is failed(%d)\n", ret);
+
+ ugd->hotspot_handle = NULL;
+ }
+
+ __FUNC_EXIT__;
+}
+
+static void __disabled_cb(tethering_error_e error, tethering_type_e type, tethering_disabled_cause_e code, void *data)
+{
+ __FUNC_ENTER__;
+
+ if (error != TETHERING_ERROR_NONE) {
+
+ if (code != TETHERING_DISABLED_BY_REQUEST) {
+ return;
+ }
+ DBG(LOG_ERROR, "error !!! TETHERING is not disabled.\n");
+ return;
+ }
+
+ DBG(LOG_VERBOSE, "TETHERING is disabled.\n");
+
+ __FUNC_EXIT__;
+
+ return;
+}
+
+
+int wfd_mobile_ap_off(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+ int res;
+ tethering_error_e ret = TETHERING_ERROR_NONE;
+ tethering_h th = NULL;
+
+ res = vconf_notify_key_changed(VCONFKEY_MOBILE_HOTSPOT_MODE, _hotspot_state_cb, ugd);
+ if (res == -1)
+ {
+ DBG(LOG_ERROR, "Failed to register vconf callback\n");
+ return -1;
+ }
+
+ /* Create tethering handle */
+ ret = tethering_create(&th);
+ if(ret != TETHERING_ERROR_NONE)
+ {
+ DBG(LOG_ERROR, "Failed to tethering_create() [%d]\n", ret);
+ return -1;
+ }
+ else
+ {
+ DBG(LOG_VERBOSE, "Succeeded to tethering_create()\n");
+ }
+
+ /* Register cbs */
+ ret = tethering_set_disabled_cb(th, TETHERING_TYPE_WIFI,
+ __disabled_cb, NULL);
+ if(ret != TETHERING_ERROR_NONE)
+ {
+ DBG(LOG_ERROR, "tethering_set_disabled_cb is failed\n", ret);
+ return -1;
+ }
+
+ /* Disable tethering */
+ ret = tethering_disable(th, TETHERING_TYPE_WIFI);
+ if(ret != TETHERING_ERROR_NONE)
+ {
+ DBG(LOG_ERROR, "Failed to turn off mobile hotspot. [%d]\n", ret);
+ return -1;
+ }
+ else
+ {
+ DBG(LOG_VERBOSE, "Succeeded to turn off mobile hotspot\n");
+ }
+
+ ugd->hotspot_handle = th;
+
+
+ __FUNC_EXIT__;
+ return 0;
+}
+
+#if 0
static device_type_s *wfd_client_find_peer_by_ssid(void *data, const char *ssid)
{
__FUNC_ENTER__;
- struct ug_data *ugd = (struct ug_data *) data;
+ struct ug_data *ugd = (struct ug_data*) data;
int i;
- if (ugd == NULL)
+ if(ugd == NULL)
{
DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
return NULL;
}
- for (i = 0; i < ugd->peer_cnt; i++)
+ for(i=0; i<ugd->gl_available_peer_cnt; i++)
{
DBG(LOG_VERBOSE, "check %dth peer\n", i);
- if (!strcmp(ugd->peers[i].ssid, ssid))
+ if(!strcmp(ugd->gl_available_peers[i].ssid, ssid))
{
DBG(LOG_VERBOSE, "found peer. [%d]\n", i);
__FUNC_EXIT__;
- return &ugd->peers[i];
+ return &ugd->gl_available_peers[i];
}
}
__FUNC_EXIT__;
return NULL;
}
+#endif
-static device_type_s *wfd_client_find_peer_by_mac(void *data,
- const char *mac_addr)
+static device_type_s *wfd_client_find_peer_by_mac(void *data, const char *mac_addr)
{
__FUNC_ENTER__;
- struct ug_data *ugd = (struct ug_data *) data;
+ struct ug_data *ugd = (struct ug_data*) data;
int i;
- if (ugd == NULL)
+ if(ugd == NULL)
{
DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
return NULL;
}
- for (i = 0; i < ugd->peer_cnt; i++)
+ if (ugd->multi_connect_mode != WFD_MULTI_CONNECT_MODE_NONE)
{
- DBG(LOG_VERBOSE, "check %dth peer\n", i);
- if (!strncmp
- (mac_addr, (const char *) ugd->peers[i].mac_addr, MAC_LENGTH))
- {
- DBG(LOG_VERBOSE, "found peer. [%d]\n", i);
- __FUNC_EXIT__;
- return &ugd->peers[i];
- }
+ for(i=0; i<ugd->raw_multi_selected_peer_cnt; i++)
+ {
+ DBG(LOG_VERBOSE, "[Multi Connect] check %dth peer\n", i);
+ if(!strncmp(mac_addr, (const char*) ugd->raw_multi_selected_peers[i].mac_addr, MAC_LENGTH))
+ {
+ DBG(LOG_VERBOSE, "selected found peer. [%d]\n", i);
+ __FUNC_EXIT__;
+ return &ugd->raw_multi_selected_peers[i];
+ }
+ }
+ }
+ else
+ {
+ for(i=0; i<ugd->raw_discovered_peer_cnt; i++)
+ {
+ DBG(LOG_VERBOSE, "check %dth peer\n", i);
+ if(!strncmp(mac_addr, (const char*) ugd->raw_discovered_peers[i].mac_addr, MAC_LENGTH))
+ {
+ DBG(LOG_VERBOSE, "found peer. [%d]\n", i);
+ __FUNC_EXIT__;
+ return &ugd->raw_discovered_peers[i];
+ }
+ }
+
}
__FUNC_EXIT__;
return NULL;
}
-void _activation_cb(int error_code, wifi_direct_device_state_e device_state,
- void *user_data)
+int _wfd_ug_view_clean_on_off(struct ug_data *ugd)
+{
+ wfd_ug_view_update_peers(ugd);
+ return 0;
+}
+
+void _activation_cb(int error_code, wifi_direct_device_state_e device_state, void *user_data)
{
__FUNC_ENTER__;
int res;
- wifi_direct_state_e wfd_status;
- struct ug_data *ugd = (struct ug_data *) user_data;
+ struct ug_data *ugd = (struct ug_data*) user_data;
- wifi_direct_get_state(&wfd_status);
- DBG(LOG_VERBOSE, "WFD status [%d]", wfd_status);
- ugd->wfd_status = wfd_status;
+ wfd_refresh_wifi_direct_state(ugd);
- switch (device_state)
+ switch(device_state)
{
- case WIFI_DIRECT_DEVICE_STATE_ACTIVATED:
- DBG(LOG_VERBOSE, "WIFI_DIRECT_DEVICE_STATE_ACTIVATED\n");
- if(error_code != WIFI_DIRECT_ERROR_NONE)
- {
- DBG(LOG_ERROR, "Error in Activation/Deactivation [%d]\n", error_code);
- wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_ACTIVATE_FAIL"), POPUP_TYPE_ACTIVATE_FAIL);
+ case WIFI_DIRECT_DEVICE_STATE_ACTIVATED:
+ DBG(LOG_VERBOSE, "WIFI_DIRECT_DEVICE_STATE_ACTIVATED\n");
+ if(error_code != WIFI_DIRECT_ERROR_NONE)
+ {
+ DBG(LOG_ERROR, "Error in Activation/Deactivation [%d]\n", error_code);
+ wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_ACTIVATE_FAIL"), POPUP_TYPE_ACTIVATE_FAIL);
- ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
- ugd->wfd_onoff = 0;
+ ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
+ ugd->wfd_onoff = 0;
+ wfd_ug_view_refresh_glitem(ugd->head);
+ return;
+ }
+
+ ugd->head_text_mode = HEAD_TEXT_TYPE_ACTIVATED;
+ ugd->wfd_onoff = 1;
wfd_ug_view_refresh_glitem(ugd->head);
- return;
- }
- ugd->head_text_mode = HEAD_TEXT_TYPE_ACTIVATED;
- ugd->wfd_onoff = 1;
- wfd_ug_view_refresh_glitem(ugd->head);
- res = vconf_set_int("db/wifi_direct/onoff", ugd->wfd_onoff);
- if (res != 0)
- {
- DBG(LOG_ERROR, "Failed to set vconf value for WFD onoff status\n");
- }
- wfg_ug_act_popup_remove(ugd);
+ wfg_ug_act_popup_remove(ugd);
- res = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE, _wifi_state_cb);
- if (res == -1)
- {
- DBG(LOG_ERROR,
- "Failed to ignore vconf key callback for wifi state\n");
- }
+ res = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE, _wifi_state_cb);
+ if(res == -1)
+ {
+ DBG(LOG_ERROR, "Failed to ignore vconf key callback for wifi state\n");
+ }
+
+ res = vconf_ignore_key_changed(VCONFKEY_MOBILE_HOTSPOT_MODE, _hotspot_state_cb);
+ if(res == -1)
+ {
+ DBG(LOG_ERROR, "Failed to ignore vconf key callback for hotspot state\n");
+ }
+
+ res = wifi_direct_start_discovery(FALSE, 0);
+ if(res != WIFI_DIRECT_ERROR_NONE)
+ {
+ DBG(LOG_ERROR, "Failed to start discovery. [%d]\n", res);
+ }
+ DBG(LOG_VERBOSE, "Discovery is started\n");
+ break;
+
+ case WIFI_DIRECT_DEVICE_STATE_DEACTIVATED:
+ DBG(LOG_VERBOSE, "WIFI_DIRECT_DEVICE_STATE_DEACTIVATED\n");
+ if(error_code != WIFI_DIRECT_ERROR_NONE)
+ {
+ DBG(LOG_ERROR, "Error in Activation/Deactivation [%d]\n", error_code);
+ wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_DEACTIVATE_FAIL"), POPUP_TYPE_DEACTIVATE_FAIL);
+ ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
+ ugd->wfd_onoff = 1;
+ wfd_ug_view_refresh_glitem(ugd->head);
+ return;
+ }
- res = wifi_direct_start_discovery(FALSE, 0);
- if (res != WIFI_DIRECT_ERROR_NONE)
- {
- DBG(LOG_ERROR, "Failed to start discovery. [%d]\n", res);
- }
- break;
- DBG(LOG_VERBOSE, "Discovery is started\n");
- case WIFI_DIRECT_DEVICE_STATE_DEACTIVATED:
- DBG(LOG_VERBOSE, "WIFI_DIRECT_DEVICE_STATE_DEACTIVATED\n");
- if(error_code != WIFI_DIRECT_ERROR_NONE)
- {
- DBG(LOG_ERROR, "Error in Activation/Deactivation [%d]\n", error_code);
- wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_DEACTIVATE_FAIL"), POPUP_TYPE_DEACTIVATE_FAIL);
ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
- ugd->wfd_onoff = 1;
- wfd_ug_view_refresh_glitem(ugd->head);
- return;
- }
+ ugd->wfd_onoff = 0;
- ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
- ugd->wfd_onoff = 0;
- wfd_ug_view_refresh_glitem(ugd->head);
- res = vconf_set_int("db/wifi_direct/onoff", ugd->wfd_onoff);
- if (res != 0)
- {
- DBG(LOG_ERROR, "Failed to set vconf value for WFD onoff status\n");
- }
- wfd_ug_view_free_peers(ugd);
- wfd_ug_view_update_peers(ugd);
- break;
- default:
- break;
+ wfd_ug_view_update_peers(ugd);
+
+ break;
+ default:
+ break;
+ }
+
+ wfd_ug_view_refresh_glitem(ugd->head);
+
+ if (ugd->scan_btn) {
+ wfd_ug_view_refresh_button(ugd->scan_btn, _("IDS_WFD_BUTTON_SCAN"), TRUE);
+ }
+
+ if (ugd->multi_connect_btn) {
+ wfd_ug_view_refresh_button(ugd->multi_scan_btn, _("IDS_WFD_BUTTON_SCAN"), TRUE);
}
- wfd_ug_view_refresh_button(ugd->scan_btn, ugd->wfd_onoff);
__FUNC_EXIT__;
return;
}
-static int peer_cnt;
-static int connected_cnt;
-static int discovered_cnt;
-
-bool _wfd_discoverd_peer_cb(wifi_direct_discovered_peer_info_s * peer,
- void *user_data)
+bool _wfd_discoverd_peer_cb(wifi_direct_discovered_peer_info_s* peer, void *user_data)
{
__FUNC_ENTER__;
- device_type_s *peers = (device_type_s *) user_data;
-
- DBG(LOG_VERBOSE, "%dth discovered peer. [%s]\n", peer_cnt, peer->ssid);
- if (peer->is_connected == TRUE)
- return FALSE;
- memcpy(peers[peer_cnt].ssid, peer->ssid, SSID_LENGTH);
- peers[peer_cnt].ssid[31] = '\0';
- DBG(LOG_VERBOSE, "\tSSID: [%s]\n", peers[peer_cnt].ssid);
- peers[peer_cnt].category = peer->primary_device_type;
- DBG(LOG_VERBOSE, "\tPeer category [%d] -> [%d]\n", peer->primary_device_type, peers[peer_cnt].category);
- strncpy(peers[peer_cnt].mac_addr, peer->mac_address, MAC_LENGTH);
- strncpy(peers[peer_cnt].if_addr, peer->interface_address, MAC_LENGTH);
- peers[peer_cnt].conn_status = PEER_CONN_STATUS_DISCONNECTED;
- DBG(LOG_VERBOSE, "\tStatus: [%d]\n", peers[peer_cnt].conn_status);
- peer_cnt++;
+
+ struct ug_data *ugd = (struct ug_data*) user_data;
+ int peer_cnt = ugd->raw_discovered_peer_cnt;
+
+ DBG(LOG_VERBOSE, "%dth discovered peer. [%s] [%s]\n", peer_cnt, peer->ssid, peer->mac_address);
+
+ strncpy(ugd->raw_discovered_peers[peer_cnt].ssid, peer->ssid, sizeof(ugd->raw_discovered_peers[peer_cnt].ssid));
+ ugd->raw_discovered_peers[peer_cnt].category = peer->primary_device_type;
+ strncpy(ugd->raw_discovered_peers[peer_cnt].mac_addr, peer->mac_address, MAC_LENGTH);
+ strncpy(ugd->raw_discovered_peers[peer_cnt].if_addr, peer->interface_address, MAC_LENGTH);
+ ugd->raw_discovered_peers[peer_cnt].is_group_owner = peer->is_group_owner;
+ ugd->raw_discovered_peers[peer_cnt].is_persistent_group_owner = peer->is_persistent_group_owner;
+ ugd->raw_discovered_peers[peer_cnt].is_connected = peer->is_connected;
+
+ if (TRUE == peer->is_connected) {
+ ugd->raw_discovered_peers[peer_cnt].conn_status = PEER_CONN_STATUS_CONNECTED;
+ } else {
+ ugd->raw_discovered_peers[peer_cnt].conn_status = PEER_CONN_STATUS_DISCONNECTED;
+ }
+
+ DBG(LOG_VERBOSE, "\tSSID: [%s]\n", ugd->raw_discovered_peers[peer_cnt].ssid);
+ DBG(LOG_VERBOSE, "\tPeer category [%d] -> [%d]\n", peer->primary_device_type, ugd->raw_discovered_peers[peer_cnt].category);
+ DBG(LOG_VERBOSE, "\tStatus: [%d]\n", ugd->raw_discovered_peers[peer_cnt].conn_status);
+
+ ugd->raw_discovered_peer_cnt ++;
free(peer->ssid);
free(peer->mac_address);
free(peer->interface_address);
free(peer);
+
__FUNC_EXIT__;
return TRUE;
}
-bool _wfd_connected_peer_cb(wifi_direct_connected_peer_info_s * peer,
- void *user_data)
+bool _wfd_connected_peer_cb(wifi_direct_connected_peer_info_s* peer, void *user_data)
{
__FUNC_ENTER__;
- device_type_s *peers = (device_type_s *) user_data;
-
- DBG(LOG_VERBOSE, "%dth connected peer. [%s]\n", peer_cnt, peer->ssid);
- memcpy(peers[peer_cnt].ssid, peer->ssid, SSID_LENGTH);
- peers[peer_cnt].ssid[31] = '\0';
- DBG(LOG_VERBOSE, "\tSSID: [%s]\n", peers[peer_cnt].ssid);
- peers[peer_cnt].category = peer->primary_device_type;
- DBG(LOG_VERBOSE, "\tCategory: [%d]\n", peers[peer_cnt].category);
- strncpy(peers[peer_cnt].mac_addr, peer->mac_address, MAC_LENGTH);
- strncpy(peers[peer_cnt].if_addr, peer->interface_address, MAC_LENGTH);
- peers[peer_cnt].conn_status = PEER_CONN_STATUS_CONNECTED;
- DBG(LOG_VERBOSE, "\tStatus: [%d]\n", peers[peer_cnt].conn_status);
- peer_cnt++;
+ struct ug_data *ugd = (struct ug_data*) user_data;
+ int peer_cnt = ugd->raw_connected_peer_cnt;
+
+ DBG(LOG_VERBOSE, "%dth connected peer. [%s] [%s]\n", peer_cnt, peer->ssid, peer->mac_address);
+
+ strncpy(ugd->raw_connected_peers[peer_cnt].ssid, peer->ssid, sizeof(ugd->raw_connected_peers[peer_cnt].ssid));
+ ugd->raw_connected_peers[peer_cnt].category = peer->primary_device_type;
+ strncpy(ugd->raw_connected_peers[peer_cnt].mac_addr, peer->mac_address, MAC_LENGTH);
+ strncpy(ugd->raw_connected_peers[peer_cnt].if_addr, peer->interface_address, MAC_LENGTH);
+ ugd->raw_connected_peers[peer_cnt].conn_status = PEER_CONN_STATUS_CONNECTED;
+
+ DBG(LOG_VERBOSE, "\tStatus: [%d]\n", ugd->raw_connected_peers[peer_cnt].conn_status);
+ DBG(LOG_VERBOSE, "\tCategory: [%d]\n", ugd->raw_connected_peers[peer_cnt].category);
+ DBG(LOG_VERBOSE, "\tSSID: [%s]\n", ugd->raw_connected_peers[peer_cnt].ssid);
+
+ ugd->raw_connected_peer_cnt++;
free(peer->ssid);
free(peer->mac_address);
@@ -308,175 +459,250 @@ bool _wfd_connected_peer_cb(wifi_direct_connected_peer_info_s * peer,
return TRUE;
}
-void _discover_cb(int error_code, wifi_direct_discovery_state_e discovery_state,
- void *user_data)
+int wfd_ug_get_discovered_peers(struct ug_data *ugd)
+{
+ int res = 0;
+
+ if (ugd==NULL)
+ return -1;
+
+ ugd->raw_discovered_peer_cnt = 0;
+ res = wifi_direct_foreach_discovered_peers(_wfd_discoverd_peer_cb, (void*) ugd);
+ if (res != WIFI_DIRECT_ERROR_NONE)
+ {
+ ugd->raw_discovered_peer_cnt = 0;
+ DBG(LOG_ERROR, "Get discovery result failed: %d\n", res);
+ }
+
+ return 0;
+}
+
+
+int wfd_ug_get_connected_peers(struct ug_data *ugd)
+{
+ int res = 0;
+
+ if (ugd==NULL)
+ return -1;
+
+ ugd->raw_connected_peer_cnt = 0;
+ res = wifi_direct_foreach_connected_peers(_wfd_connected_peer_cb, (void*) ugd);
+ if(res != WIFI_DIRECT_ERROR_NONE)
+ {
+ ugd->raw_connected_peer_cnt = 0;
+ DBG(LOG_ERROR, "Get connected peer failed: %d\n", res);
+ }
+ return 0;
+}
+
+void _discover_cb(int error_code, wifi_direct_discovery_state_e discovery_state, void *user_data)
{
__FUNC_ENTER__;
- struct ug_data *ugd = (struct ug_data *) user_data;
- int res;
- device_type_s *peers = NULL;
+ struct ug_data *ugd = (struct ug_data*) user_data;
- if (ugd == NULL)
+ if(ugd == NULL)
{
DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
return;
}
- peers = calloc(MAX_PEER_NUM, sizeof(device_type_s));
-
- if (discovery_state == WIFI_DIRECT_ONLY_LISTEN_STARTED)
+ if(discovery_state == WIFI_DIRECT_ONLY_LISTEN_STARTED)
{
ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
}
- else if (discovery_state == WIFI_DIRECT_DISCOVERY_STARTED)
+ else if(discovery_state == WIFI_DIRECT_DISCOVERY_STARTED)
{
ugd->head_text_mode = HEAD_TEXT_TYPE_SCANING;
}
- wfd_ug_view_refresh_glitem(ugd->head);
-
- if (ugd->wfd_status < WFD_LINK_STATUS_ACTIVATED
- || ugd->wfd_status > WFD_LINK_STATUS_GROUP_OWNER)
- {
- return;
- }
- else
- {
- peer_cnt = 0;
- }
-
- if (ugd->wfd_status >= WFD_LINK_STATUS_CONNECTED)
+ else if(discovery_state == WIFI_DIRECT_DISCOVERY_FOUND)
{
- DBG(LOG_VERBOSE, "getting connected peer..\n");
- res =
- wifi_direct_foreach_connected_peers(_wfd_connected_peer_cb,
- (void *) peers);
- if (res != WIFI_DIRECT_ERROR_NONE)
- {
- connected_cnt = 0;
- DBG(LOG_ERROR, "get discovery result failed: %d\n", res);
- }
+ ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
}
- if (discovery_state == WIFI_DIRECT_DISCOVERY_FOUND)
- {
- DBG(LOG_VERBOSE, "Peer is found\n");
- ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
- wfd_ug_view_refresh_glitem(ugd->head);
+ wfd_ug_view_refresh_glitem(ugd->head);
- if (ugd->wfd_status >= WFD_LINK_STATUS_ACTIVATED)
- {
- DBG(LOG_VERBOSE, "getting discovered peer..\n");
- res =
- wifi_direct_foreach_discovered_peers(_wfd_discoverd_peer_cb,
- (void *) peers);
- if (res != WIFI_DIRECT_ERROR_NONE)
- {
- discovered_cnt = 0;
- DBG(LOG_ERROR, "get discovery result failed: %d\n", res);
- }
- }
+ if (WIFI_DIRECT_DISCOVERY_STARTED == discovery_state) {
+ if (ugd->scan_btn) {
+ wfd_ug_view_refresh_button(ugd->scan_btn, _("IDS_WFD_BUTTON_STOPSCAN"), TRUE);
+ }
+
+ if (ugd->multi_connect_btn) {
+ wfd_ug_view_refresh_button(ugd->multi_scan_btn, _("IDS_WFD_BUTTON_STOPSCAN"), TRUE);
+ }
+ } else {
+ if (ugd->scan_btn) {
+ wfd_ug_view_refresh_button(ugd->scan_btn, _("IDS_WFD_BUTTON_SCAN"), TRUE);
+ }
+
+ if (ugd->multi_connect_btn) {
+ wfd_ug_view_refresh_button(ugd->multi_scan_btn, _("IDS_WFD_BUTTON_SCAN"), TRUE);
+ }
}
- wfd_ug_view_free_peers(ugd);
-
- ugd->peers = peers;
- ugd->peer_cnt = peer_cnt;
+ wfd_ug_get_discovered_peers(ugd);
+ wfd_ug_get_connected_peers(ugd);
wfd_ug_view_update_peers(ugd);
- DBG(LOG_VERBOSE, "%d peers are updated\n", peer_cnt);
+
+ _wfd_free_multiconnect_device(ugd);
+ _wfd_update_multiconnect_device(ugd);
+ //_change_multi_button_title(ugd);
__FUNC_EXIT__;
return;
}
-void _connection_cb(int error_code,
- wifi_direct_connection_state_e connection_state,
- const char *mac_address, void *user_data)
+void _connection_cb(int error_code, wifi_direct_connection_state_e connection_state, const char *mac_address, void *user_data)
{
__FUNC_ENTER__;
- DBG(LOG_VERBOSE, "Connection event [%d], error_code [%d]\n",
- connection_state, error_code);
- struct ug_data *ugd = (struct ug_data *) user_data;
+
+ struct ug_data *ugd = (struct ug_data*) user_data;
device_type_s *peer = NULL;
bool owner = FALSE;
int res = 0;
- if (mac_address == NULL)
+ DBG(LOG_VERBOSE, "Connection event [%d], error_code [%d]\n", connection_state, error_code);
+
+ if(mac_address == NULL)
{
DBG(LOG_ERROR, "Incorrect parameter(peer mac is NULL)\n");
return;
}
DBG(LOG_VERBOSE, "Connection event from %s", mac_address);
- peer = wfd_client_find_peer_by_mac(ugd, mac_address);
- if (peer == NULL)
+ if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_IN_PROGRESS)
{
- DBG(LOG_ERROR, "Failed to find peer [mac: %s]\n", mac_address);
- return;
+ peer = wfd_client_find_peer_by_mac(ugd, mac_address);
+ if (peer != NULL)
+ {
+ switch(connection_state)
+ {
+ case WIFI_DIRECT_CONNECTION_RSP:
+ if(error_code == WIFI_DIRECT_ERROR_NONE)
+ {
+ ugd->wfd_status = WFD_LINK_STATUS_CONNECTED;
+ peer->conn_status = PEER_CONN_STATUS_CONNECTED;
+ }
+ else
+ {
+ peer->conn_status = PEER_CONN_STATUS_FAILED_TO_CONNECT;
+ }
+ ugd->g_source_multi_connect_next = g_timeout_add(1000, wfd_multi_connect_next_cb, ugd);
+ break;
+ default:
+ break;
+ }
+ wfd_ug_get_connected_peers(ugd);
+ wfd_ug_view_update_peers(ugd);
+ }
+ else
+ {
+ DBG(LOG_VERBOSE, "peer is not found [%s]", mac_address);
+ }
+ goto refresh_button;
+ }
+
+
+ peer = wfd_client_find_peer_by_mac(ugd, mac_address);
+
+ if (NULL == peer || NULL == peer->ssid) {
+ DBG(LOG_ERROR, "SSID from connection is NULL !!\n");
+ goto refresh_button;
}
- switch (connection_state)
+ switch(connection_state)
{
- case WIFI_DIRECT_CONNECTION_RSP:
- DBG(LOG_VERBOSE, "WIFI_DIRECT_CONNECTION_RSP\n");
+ case WIFI_DIRECT_CONNECTION_RSP:
+ DBG(LOG_VERBOSE, "WIFI_DIRECT_CONNECTION_RSP\n");
- if (error_code == WIFI_DIRECT_ERROR_NONE)
- {
- ugd->wfd_status = WFD_LINK_STATUS_CONNECTED;
- peer->conn_status = PEER_CONN_STATUS_CONNECTED;
- res = wifi_direct_is_group_owner(&owner);
- if (res == WIFI_DIRECT_ERROR_NONE)
+ if(error_code == WIFI_DIRECT_ERROR_NONE)
{
- if (!owner)
- wfd_ug_view_refresh_button(ugd->scan_btn, FALSE);
+ ugd->wfd_status = WFD_LINK_STATUS_CONNECTED;
+ peer->conn_status = PEER_CONN_STATUS_CONNECTED;
}
else
{
- DBG(LOG_ERROR,
- "Failed to get whether client is group owner. [%d]\n", res);
+ peer->conn_status = PEER_CONN_STATUS_FAILED_TO_CONNECT;
}
- }
- else
- {
- peer->conn_status = PEER_CONN_STATUS_DISCONNECTED;
+
+ wfd_ug_get_connected_peers(ugd);
+ wfd_ug_view_update_peers(ugd);
+ break;
+ case WIFI_DIRECT_DISCONNECTION_RSP:
+ case WIFI_DIRECT_DISCONNECTION_IND:
+ case WIFI_DIRECT_DISASSOCIATION_IND:
+ DBG(LOG_VERBOSE, "WIFI_DIRECT_DISCONNECTION_X\n");
+ if(error_code != WIFI_DIRECT_ERROR_NONE)
+ {
+ // TODO: show disconnection error popup
+ return;
+ }
+
+ if (peer!=NULL)
+ peer->conn_status = PEER_CONN_STATUS_DISCONNECTED;
+ else
+ {
+ // In case of disconnect_all(), no specific peer is found.
+ }
+
wifi_direct_start_discovery(FALSE, 0);
- }
- break;
- case WIFI_DIRECT_DISCONNECTION_RSP:
- case WIFI_DIRECT_DISCONNECTION_IND:
- case WIFI_DIRECT_DISASSOCIATION_IND:
- DBG(LOG_VERBOSE, "WIFI_DIRECT_DISCONNECTION_X\n");
- if (error_code != WIFI_DIRECT_ERROR_NONE)
- {
- return;
- }
+ ugd->wfd_status = WFD_LINK_STATUS_DISCOVERING;
+ ugd->head_text_mode = HEAD_TEXT_TYPE_SCANING;
- peer->conn_status = PEER_CONN_STATUS_DISCONNECTED;
+ wfd_ug_view_refresh_glitem(ugd->head);
- ugd->wfd_status = WFD_LINK_STATUS_ACTIVATED;
- ugd->head_text_mode = HEAD_TEXT_TYPE_ACTIVATED;
+ wfd_ug_get_discovered_peers(ugd);
+ wfd_ug_get_connected_peers(ugd);
+ wfd_ug_view_update_peers(ugd);
+ break;
+
+ case WIFI_DIRECT_CONNECTION_IN_PROGRESS:
+ DBG(LOG_VERBOSE, "WIFI_DIRECT_CONNECTION_IN_PROGRESS\n");
+ peer->conn_status = PEER_CONN_STATUS_CONNECTING;
+ break;
+ case WIFI_DIRECT_CONNECTION_REQ:
+ case WIFI_DIRECT_CONNECTION_WPS_REQ:
+ DBG(LOG_VERBOSE, "WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ\n");
+ break;
+ default:
+ break;
+ }
- wfd_ug_view_refresh_button(ugd->scan_btn, TRUE);
- wifi_direct_start_discovery(FALSE, 0);
- ugd->wfd_status = WFD_LINK_STATUS_DISCOVERING;
- ugd->head_text_mode = HEAD_TEXT_TYPE_SCANING;
- wfd_ug_view_refresh_glitem(ugd->head);
- break;
- case WIFI_DIRECT_CONNECTION_IN_PROGRESS:
- DBG(LOG_VERBOSE, "WIFI_DIRECT_CONNECTION_IN_PROGRESS\n");
- peer->conn_status = PEER_CONN_STATUS_CONNECTING;
- break;
- case WIFI_DIRECT_CONNECTION_REQ:
- case WIFI_DIRECT_CONNECTION_WPS_REQ:
- DBG(LOG_VERBOSE, "WIFI_DIRECT_CLI_EVENT_CONNECTION_REQ\n");
- break;
- default:
- break;
- }
-
- if (peer != NULL)
+ if(peer != NULL)
wfd_ug_view_refresh_glitem(peer->gl_item);
+ _change_multi_button_title(ugd);
+
+refresh_button:
+ /* refresh the scan button */
+ wfd_refresh_wifi_direct_state(ugd);
+ if (WIFI_DIRECT_STATE_CONNECTING == ugd->wfd_status ||
+ WIFI_DIRECT_STATE_DISCONNECTING == ugd->wfd_status) {
+
+ res = wifi_direct_is_group_owner(&owner);
+ if (res == WIFI_DIRECT_ERROR_NONE) {
+ if (!owner) {
+ if (ugd->scan_btn) {
+ wfd_ug_view_refresh_button(ugd->scan_btn, _("IDS_WFD_BUTTON_SCAN"), FALSE);
+ }
+
+ if (ugd->multi_connect_btn) {
+ wfd_ug_view_refresh_button(ugd->multi_scan_btn, _("IDS_WFD_BUTTON_SCAN"), FALSE);
+ }
+ }
+ } else {
+ DBG(LOG_ERROR, "Failed to get whether client is group owner. [%d]\n", res);
+ }
+ } else {
+ if (ugd->scan_btn) {
+ wfd_ug_view_refresh_button(ugd->scan_btn, _("IDS_WFD_BUTTON_SCAN"), TRUE);
+ }
+
+ if (ugd->multi_connect_btn) {
+ wfd_ug_view_refresh_button(ugd->multi_scan_btn, _("IDS_WFD_BUTTON_SCAN"), TRUE);
+ }
+ }
+
__FUNC_EXIT__;
return;
}
@@ -484,18 +710,13 @@ void _connection_cb(int error_code,
int wfd_get_vconf_status(void *data)
{
__FUNC_ENTER__;
- struct ug_data *ugd = (struct ug_data *) data;
- int res;
+ struct ug_data *ugd = (struct ug_data*) data;
char *dev_name;
- res = vconf_get_int("db/wifi_direct/onoff", &ugd->wfd_onoff);
- if (res != 0)
- {
- DBG(LOG_ERROR, "vconf_get_int is failed\n");
- }
- DBG(LOG_VERBOSE, "VCONF_WFD_ONOFF : %d\n", ugd->wfd_onoff);
+ // TODO: get wifi direct status from vconf
+ // db/mobile_hotspot/wifi_key (string)
- dev_name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR);
+ dev_name = vconf_get_str(VCONFKEY_SETAPPL_DEVICE_NAME_STR); // "db/setting/device_name" (VCONF_WFD_APNAME)
if (dev_name == NULL)
{
ugd->dev_name = strdup(DEFAULT_DEV_NAME);
@@ -512,159 +733,125 @@ int wfd_get_vconf_status(void *data)
return 0;
}
-int init_wfd_client(void *data)
+int wfd_refresh_wifi_direct_state(void *data)
{
- __FUNC_ENTER__;
- struct ug_data *ugd = (struct ug_data *) data;
- int res = 0;
- wifi_direct_state_e wfd_status;
-
- res = wifi_direct_initialize();
- if (res != WIFI_DIRECT_ERROR_NONE)
- {
- DBG(LOG_ERROR, "Failed to initialize wifi direct. [%d]\n", res);
- return -1;
- }
-
- res = wifi_direct_set_device_state_changed_cb(_activation_cb, (void *) ugd);
- res =
- wifi_direct_set_discovery_state_changed_cb(_discover_cb, (void *) ugd);
- res =
- wifi_direct_set_connection_state_changed_cb(_connection_cb,
- (void *) ugd);
-
+ struct ug_data *ugd = (struct ug_data*) data;
+ int res;
+ wifi_direct_state_e wfd_status;
res = wifi_direct_get_state(&wfd_status);
- if (res != WIFI_DIRECT_ERROR_NONE)
+ if(res != WIFI_DIRECT_ERROR_NONE)
{
DBG(LOG_ERROR, "Failed to get link status. [%d]\n", res);
return -1;
}
+ DBG(LOG_VERBOSE, "WFD status [%d]", wfd_status);
ugd->wfd_status = wfd_status;
- DBG(LOG_VERBOSE, "WFD link status. [%d]\n", wfd_status);
-
- if (wfd_status > WIFI_DIRECT_STATE_ACTIVATING)
- {
- vconf_set_int("db/wifi_direct/onoff", 1);
- ugd->wfd_onoff = 1;
- }
- else
- {
- vconf_set_int("db/wifi_direct/onoff", 0);
- ugd->wfd_onoff = 0;
- }
- wfd_ug_view_refresh_glitem(ugd->head);
- wfd_ug_view_refresh_button(ugd->scan_btn, ugd->wfd_onoff);
-
- if(wfd_status >= WIFI_DIRECT_STATE_CONNECTED)
- {
- device_type_s *peers = NULL;
-
- peers = calloc(MAX_PEER_NUM, sizeof(device_type_s));
- res = wifi_direct_foreach_connected_peers(_wfd_connected_peer_cb, (void*) peers);
- if(res != WIFI_DIRECT_ERROR_NONE)
- {
- connected_cnt = 0;
- DBG(LOG_ERROR, "get discovery result failed: %d\n", res);
- }
- wfd_ug_view_free_peers(ugd);
-
- ugd->peers = peers;
- ugd->peer_cnt = peer_cnt;
-
- wfd_ug_view_update_peers(ugd);
- DBG(LOG_VERBOSE, "%d peers are updated\n", peer_cnt);
- }
-
- if (wfd_status > WIFI_DIRECT_STATE_ACTIVATING)
- {
- int wifi_state;
- vconf_get_int(VCONFKEY_WIFI_STATE, &wifi_state);
-
- if (wifi_state < VCONFKEY_WIFI_CONNECTED)
- {
- res = wifi_direct_start_discovery(FALSE, 0);
- if (res != WIFI_DIRECT_ERROR_NONE)
- {
- DBG(LOG_ERROR, "Failed to start discovery. [%d]\n", res);
- }
- DBG(LOG_VERBOSE, "Discovery is started\n");
- }
- else
- {
- wfd_ug_act_popup(ugd, _("IDS_WFD_POP_WIFI_OFF"),
- POPUP_TYPE_WIFI_OFF);
- }
- }
-
- __FUNC_EXIT__;
-
return 0;
}
-int deinit_wfd_client(void *data)
+int init_wfd_client(void *data)
{
__FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
int res = 0;
- wifi_direct_state_e status = 0;
-
- wifi_direct_get_state(&status);
- if (status == WIFI_DIRECT_STATE_DISCOVERING)
- {
- DBG(LOG_VERBOSE, "Stop discovery before deregister client\n");
- wifi_direct_cancel_discovery();
- }
-
- res = wifi_direct_deinitialize();
- if (res != WIFI_DIRECT_ERROR_NONE)
+ res = wifi_direct_initialize();
+ if(res != WIFI_DIRECT_ERROR_NONE)
{
- DBG(LOG_ERROR, "Failed to deregister client. [%d]\n", res);
+ DBG(LOG_ERROR, "Failed to initialize wifi direct. [%d]\n", res);
+ return -1;
}
- res = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE, _wifi_state_cb);
- if (res == -1)
- {
- DBG(LOG_ERROR, "Failed to ignore vconf key callback for wifi state\n");
- }
+ res = wifi_direct_set_device_state_changed_cb(_activation_cb, (void*) ugd);
+ res = wifi_direct_set_discovery_state_changed_cb(_discover_cb, (void*) ugd);
+ res = wifi_direct_set_connection_state_changed_cb(_connection_cb, (void*) ugd);
- res = net_deregister_client();
- if (res != NET_ERR_NONE)
- {
- DBG(LOG_ERROR, "Failed to deregister network client. [%d]\n", res);
- }
+ /* update WFD status */
+ wfd_refresh_wifi_direct_state(ugd);
+ if (ugd->wfd_status > WIFI_DIRECT_STATE_ACTIVATING)
+ ugd->wfd_onoff = 1;
+ else
+ ugd->wfd_onoff = 0;
+ DBG(LOG_VERBOSE, "WFD link status. [%d]\n", ugd->wfd_status);
__FUNC_EXIT__;
return 0;
}
-int wfd_client_get_link_status()
+int deinit_wfd_client(void *data)
{
- __FUNC_ENTER__;
- wifi_direct_state_e status;
- int res;
-
- res = wifi_direct_get_state(&status);
- if (res != WIFI_DIRECT_ERROR_NONE)
- {
- DBG(LOG_ERROR, "Failed to get link status from wfd-server. [%d]", res);
- return -1;
- }
-
- __FUNC_EXIT__;
- return status;
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+ int res = 0;
+ tethering_error_e ret = TETHERING_ERROR_NONE;
+ tethering_h th = NULL;
+
+ wfd_refresh_wifi_direct_state(ugd);
+
+ if(ugd->wfd_status == WIFI_DIRECT_STATE_DISCOVERING)
+ {
+ DBG(LOG_VERBOSE, "Stop discovery before deregister client\n");
+ wifi_direct_cancel_discovery();
+ }
+
+ res = wifi_direct_deinitialize();
+ if(res != WIFI_DIRECT_ERROR_NONE)
+ {
+ DBG(LOG_ERROR, "Failed to deregister client. [%d]\n", res);
+ }
+
+ res = vconf_ignore_key_changed(VCONFKEY_WIFI_STATE, _wifi_state_cb);
+ if(res == -1)
+ {
+ DBG(LOG_ERROR, "Failed to ignore vconf key callback for wifi state\n");
+ }
+
+ res = net_deregister_client();
+ if(res != NET_ERR_NONE)
+ {
+ DBG(LOG_ERROR, "Failed to deregister network client. [%d]\n", res);
+ }
+
+ res = vconf_ignore_key_changed(VCONFKEY_MOBILE_HOTSPOT_MODE, _hotspot_state_cb);
+ if(res == -1)
+ {
+ DBG(LOG_ERROR, "Failed to ignore vconf key callback for hotspot state\n");
+ }
+
+ th = ugd->hotspot_handle;
+
+ if(th != NULL)
+ {
+ /* Deregister cbs */
+ ret = tethering_unset_disabled_cb(th, TETHERING_TYPE_WIFI);
+ if(ret != TETHERING_ERROR_NONE)
+ DBG(LOG_ERROR, "tethering_unset_disabled_cb is failed(%d)\n", ret);
+
+ /* Destroy tethering handle */
+ ret = tethering_destroy(th);
+ if(ret != TETHERING_ERROR_NONE)
+ DBG(LOG_ERROR, "tethering_destroy is failed(%d)\n", ret);
+
+ ugd->hotspot_handle = NULL;
+
+ }
+
+ __FUNC_EXIT__;
+
+ return 0;
}
int wfd_client_switch_on(void *data)
{
__FUNC_ENTER__;
- struct ug_data *ugd = (struct ug_data *) data;
+ struct ug_data *ugd = (struct ug_data*) data;
int res;
DBG(LOG_VERBOSE, "WFD status [%d]\n", ugd->wfd_status);
- if (ugd->wfd_status < WFD_LINK_STATUS_ACTIVATING)
+ if(ugd->wfd_status < WFD_LINK_STATUS_ACTIVATING)
{
ugd->wfd_status = WFD_LINK_STATUS_ACTIVATING;
@@ -673,23 +860,35 @@ int wfd_client_switch_on(void *data)
if (res != 0)
{
DBG(LOG_ERROR, "Failed to get wifi state from vconf. [%d]\n", res);
+ // TODO: set genlist head item as "WiFi Direct"
+ return -1;
+ }
+
+ int hotspot_mode;
+ res = vconf_get_int(VCONFKEY_MOBILE_HOTSPOT_MODE, &hotspot_mode);
+ if (res != 0)
+ {
+ DBG(LOG_ERROR, "Failed to get mobile hotspot state from vconf. [%d]\n", res);
+ // TODO: set genlist head item as "WiFi Direct"
return -1;
}
- if (wifi_state > VCONFKEY_WIFI_OFF)
+ if(wifi_state > VCONFKEY_WIFI_OFF)
{
DBG(LOG_VERBOSE, "WiFi is connected, so have to turn off WiFi");
- wfd_ug_act_popup(ugd, _("IDS_WFD_POP_WIFI_OFF"),
- POPUP_TYPE_WIFI_OFF);
+ wfd_ug_act_popup(ugd, _("IDS_WFD_POP_WIFI_OFF"), POPUP_TYPE_WIFI_OFF); // "This will turn off Wi-Fi client operation.<br>Continue?"
}
- else
+ else if(hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI)
+ {
+ DBG(LOG_VERBOSE, "WiFi is connected, so have to turn off WiFi");
+ wfd_ug_act_popup(ugd, _("IDS_WFD_POP_HOTSPOT_OFF"), POPUP_TYPE_HOTSPOT_OFF); // "This will turn off Portable Wi-Fi hotspots operation.<br>Continue?"
+ }
+ else // (wifi_state < VCONFKEY_WIFI_CONNECTED && !(hotspot_mode & VCONFKEY_MOBILE_HOTSPOT_MODE_WIFI))
{
res = wifi_direct_activate();
- if (res != WIFI_DIRECT_ERROR_NONE)
+ if(res != WIFI_DIRECT_ERROR_NONE)
{
- DBG(LOG_ERROR,
- "Failed to activate Wi-Fi Direct. error code = [%d]\n",
- res);
+ DBG(LOG_ERROR, "Failed to activate Wi-Fi Direct. error code = [%d]\n", res);
wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_ACTIVATE_FAIL"), POPUP_TYPE_TERMINATE);
ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
@@ -710,12 +909,12 @@ int wfd_client_switch_on(void *data)
int wfd_client_switch_off(void *data)
{
__FUNC_ENTER__;
- struct ug_data *ugd = (struct ug_data *) data;
+ struct ug_data *ugd = (struct ug_data*) data;
int res;
DBG(LOG_VERBOSE, "WFD status [%d]\n", ugd->wfd_status);
- if (ugd->wfd_status < WFD_LINK_STATUS_ACTIVATING)
+ if(ugd->wfd_status < WFD_LINK_STATUS_ACTIVATING)
{
DBG(LOG_VERBOSE, "Wi-Fi Direct is already deactivated\n");
}
@@ -724,10 +923,9 @@ int wfd_client_switch_off(void *data)
ugd->wfd_status = WFD_LINK_STATUS_DEACTIVATING;
res = wifi_direct_deactivate();
- if (res != WIFI_DIRECT_ERROR_NONE)
+ if(res != WIFI_DIRECT_ERROR_NONE)
{
- DBG(LOG_ERROR,
- "Failed to deactivate Wi-Fi Direct. error code = [%d]\n", res);
+ DBG(LOG_ERROR, "Failed to deactivate Wi-Fi Direct. error code = [%d]\n", res);
wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_DEACTIVATE_FAIL"), POPUP_TYPE_TERMINATE);
ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
@@ -746,13 +944,12 @@ int wfd_client_swtch_force(void *data, int onoff)
struct ug_data *ugd = (struct ug_data*) data;
int res;
- if (onoff)
+ if(onoff)
{
res = wifi_direct_activate();
- if (res != WIFI_DIRECT_ERROR_NONE)
+ if(res != WIFI_DIRECT_ERROR_NONE)
{
- DBG(LOG_ERROR,
- "Failed to activate Wi-Fi Direct. error code = [%d]\n", res);
+ DBG(LOG_ERROR, "Failed to activate Wi-Fi Direct. error code = [%d]\n", res);
wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_ACTIVATE_FAIL"), POPUP_TYPE_TERMINATE);
ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
@@ -763,10 +960,9 @@ int wfd_client_swtch_force(void *data, int onoff)
else
{
res = wifi_direct_deactivate();
- if (res != WIFI_DIRECT_ERROR_NONE)
+ if(res != WIFI_DIRECT_ERROR_NONE)
{
- DBG(LOG_ERROR,
- "Failed to deactivate Wi-Fi Direct. error code = [%d]\n", res);
+ DBG(LOG_ERROR, "Failed to deactivate Wi-Fi Direct. error code = [%d]\n", res);
wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_DEACTIVATE_FAIL"), POPUP_TYPE_TERMINATE);
ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
@@ -781,20 +977,45 @@ int wfd_client_swtch_force(void *data, int onoff)
int wfd_client_start_discovery(void *data)
{
__FUNC_ENTER__;
- int res;
- wifi_direct_state_e status;
+ struct ug_data *ugd = (struct ug_data*) data;
+ int res = -1;
+
+#if 0
+ ret = wifi_direct_cancel_discovery();
+// ret = wifi_direct_cancel_discovery();
+ if (ret != WIFI_DIRECT_ERROR_NONE) {
+ DBG(LOG_ERROR, "Failed wfd discover() : %d", ret);
+ return FALSE;
+ }
+
- wifi_direct_get_state(&status);
- if (status >= WIFI_DIRECT_STATE_ACTIVATED)
+ if(ugd->wfd_status >= WIFI_DIRECT_STATE_ACTIVATED)
{
- res = wifi_direct_start_discovery(FALSE, 0);
+ res = wifi_direct_start_discovery(FALSE, 30);
if (res != WIFI_DIRECT_ERROR_NONE)
{
DBG(LOG_ERROR, "Failed to start wfd discovery. [%d]", res);
+ return -1;
}
}
- __FUNC_EXIT__;
+#endif
+
+ ugd->wfd_status = WIFI_DIRECT_DISCOVERY_STARTED;
+ wfd_refresh_wifi_direct_state(ugd);
+ ugd->head_text_mode = HEAD_TEXT_TYPE_SCANING;
+ wfd_ug_view_refresh_glitem(ugd->head);
+ wifi_direct_cancel_discovery();
+
+ res = wifi_direct_start_discovery(FALSE, 0);
+ if (res != WIFI_DIRECT_ERROR_NONE) {
+ DBG(LOG_ERROR, "Fail to restart scanning. %d\n", res);
+ return -1;
+ }
+
+ ugd->wfd_status = WIFI_DIRECT_DISCOVERY_FOUND;
+ wfd_refresh_wifi_direct_state(ugd);
+ __FUNC_EXIT__;
return 0;
}
@@ -803,8 +1024,9 @@ int wfd_client_connect(const char *mac_addr)
__FUNC_ENTER__;
int res;
+ DBG(LOG_ERROR, "connect to peer=[%s]\n", mac_addr);
res = wifi_direct_connect(mac_addr);
- if (res != WIFI_DIRECT_ERROR_NONE)
+ if(res != WIFI_DIRECT_ERROR_NONE)
{
DBG(LOG_ERROR, "Failed to send connection request. [%d]\n", res);
return -1;
@@ -818,20 +1040,19 @@ int wfd_client_disconnect(const char *mac_addr)
__FUNC_ENTER__;
int res;
- if (mac_addr == NULL)
+ if(mac_addr == NULL)
{
res = wifi_direct_disconnect_all();
- if (res != WIFI_DIRECT_ERROR_NONE)
+ if(res != WIFI_DIRECT_ERROR_NONE)
{
- DBG(LOG_ERROR,
- "Failed to send disconnection request to all. [%d]\n", res);
+ DBG(LOG_ERROR, "Failed to send disconnection request to all. [%d]\n", res);
return -1;
}
}
else
{
res = wifi_direct_disconnect(mac_addr);
- if (res != WIFI_DIRECT_ERROR_NONE)
+ if(res != WIFI_DIRECT_ERROR_NONE)
{
DBG(LOG_ERROR, "Failed to send disconnection request. [%d]\n", res);
return -1;
@@ -840,3 +1061,43 @@ int wfd_client_disconnect(const char *mac_addr)
__FUNC_EXIT__;
return 0;
}
+
+int wfd_client_set_p2p_group_owner_intent(int go_intent)
+{
+ __FUNC_ENTER__;
+ int res;
+
+ res = wifi_direct_set_group_owner_intent(go_intent);
+ if(res != WIFI_DIRECT_ERROR_NONE)
+ {
+ DBG(LOG_ERROR, "Failed to wifi_direct_set_go_intent(%d). [%d]\n", go_intent, res);
+ return -1;
+ }
+ __FUNC_EXIT__;
+ return 0;
+}
+
+int wfd_client_get_peers(struct ug_data *ugd)
+{
+
+ if(ugd->wfd_status < WFD_LINK_STATUS_ACTIVATED)
+ {
+ ugd->raw_discovered_peer_cnt = 0;
+ ugd->raw_connected_peer_cnt = 0;
+ return 0;
+ }
+
+ if(ugd->wfd_status > WIFI_DIRECT_STATE_ACTIVATING)
+ {
+ wfd_ug_get_discovered_peers(ugd);
+ }
+
+ if(ugd->wfd_status >= WIFI_DIRECT_STATE_CONNECTED)
+ {
+ wfd_ug_get_connected_peers(ugd);
+ }
+
+ wfd_ug_view_update_peers(ugd);
+ _change_multi_button_title(ugd);
+ return 0;
+}
diff --git a/ug-wifidirect/src/wfd_ug.c b/ug-wifidirect/src/wfd_ug.c
index cfbbf49..9c43fca 100644..100755
--- a/ug-wifidirect/src/wfd_ug.c
+++ b/ug-wifidirect/src/wfd_ug.c
@@ -1,26 +1,21 @@
/*
- * 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.
- */
+* WiFi-Direct UG
+*
+* Copyright 2012 Samsung Electronics Co., Ltd
-/*
- * This file implements Wi-Fi direct UI Gadget.
- *
- * @file wfd_ug.c
- * @author Gibyoung Kim (lastkgb.kim@samsung.com)
- * @version 0.1
- */
+* 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.
+*
+*/
#ifndef UG_MODULE_API
@@ -40,6 +35,15 @@
#include "wfd_ug_view.h"
#include "wfd_client.h"
+void initialize_gen_item_class();
+
+struct ug_data *global_ugd = NULL;
+
+struct ug_data *wfd_get_ug_data()
+{
+ return global_ugd;
+}
+
static Evas_Object *_create_bg(Evas_Object *parent, char *style)
{
@@ -61,14 +65,15 @@ static Evas_Object *_create_fullview(Evas_Object *parent, struct ug_data *ugd)
__FUNC_ENTER__;
Evas_Object *base;
- if (parent == NULL)
+ if(parent == NULL)
{
DBG(LOG_ERROR, "Incorrenct parameter");
return NULL;
}
+ /* Create Full view */
base = elm_layout_add(parent);
- if (!base)
+ if(!base)
{
DBG(LOG_ERROR, "Failed to add layout");
return NULL;
@@ -82,19 +87,20 @@ static Evas_Object *_create_fullview(Evas_Object *parent, struct ug_data *ugd)
return base;
}
-static Evas_Object *_create_frameview(Evas_Object * parent, struct ug_data *ugd)
+static Evas_Object *_create_frameview(Evas_Object *parent, struct ug_data *ugd)
{
__FUNC_ENTER__;
Evas_Object *base;
- if (parent == NULL)
+ if(parent == NULL)
{
DBG(LOG_ERROR, "Incorrenct parameter");
return NULL;
}
+ /* Create Frame view */
base = elm_layout_add(parent);
- if (!base)
+ if(!base)
{
DBG(LOG_ERROR, "Failed to add layout");
return NULL;
@@ -108,11 +114,34 @@ static Evas_Object *_create_frameview(Evas_Object * parent, struct ug_data *ugd)
return base;
}
-static void *on_create(struct ui_gadget *ug, enum ug_mode mode, bundle * data,
- void *priv)
+
+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__;
+}
+
+static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service,
+ void *priv)
{
__FUNC_ENTER__;
struct ug_data *ugd;
+ int res = 0;
if (!ug || !priv)
return NULL;
@@ -122,7 +151,7 @@ static void *on_create(struct ui_gadget *ug, enum ug_mode mode, bundle * data,
bindtextdomain(PACKAGE, LOCALEDIR);
- ugd->win = ug_get_parent_layout(ug);
+ ugd->win = ug_get_window();
if (!ugd->win)
return NULL;
@@ -131,7 +160,7 @@ static void *on_create(struct ui_gadget *ug, enum ug_mode mode, bundle * data,
else
ugd->base = _create_frameview(ugd->win, ugd);
- if (ugd->base)
+ if(ugd->base)
{
ugd->bg = _create_bg(ugd->win, "group_list");
elm_object_part_content_set(ugd->base, "elm.swallow.bg", ugd->bg);
@@ -144,18 +173,55 @@ static void *on_create(struct ui_gadget *ug, enum ug_mode mode, bundle * data,
wfd_get_vconf_status(ugd);
+ initialize_gen_item_class();
+
+ res = init_wfd_client(ugd);
+ if(res != 0)
+ {
+ DBG(LOG_ERROR, "Failed to initialize WFD client library\n");
+ wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_PROBLEM_WITH_WFD"), POPUP_TYPE_TERMINATE);
+ }
+
create_wfd_ug_view(ugd);
+
+ wfd_ug_view_refresh_glitem(ugd->head);
+ if (ugd->scan_btn) {
+ wfd_ug_view_refresh_button(ugd->scan_btn, _("IDS_WFD_BUTTON_SCAN"), TRUE);
+ }
+
+ if(ugd->wfd_status > WIFI_DIRECT_STATE_ACTIVATING)
+ {
+ wfd_ug_get_discovered_peers(ugd);
+ }
+
+ if(ugd->wfd_status >= WIFI_DIRECT_STATE_CONNECTED)
+ {
+ wfd_ug_get_connected_peers(ugd);
+ }
+
+ wfd_ug_view_update_peers(ugd);
+
+ if (ugd->wfd_status == WIFI_DIRECT_STATE_ACTIVATED)
+ {
+ res = wifi_direct_start_discovery(FALSE, 0);
+ if(res != WIFI_DIRECT_ERROR_NONE)
+ {
+ DBG(LOG_ERROR, "Failed to start discovery. [%d]\n", res);
+ }
+ DBG(LOG_VERBOSE, "Discovery is started\n");
+ }
+
evas_object_show(ugd->base);
__FUNC_EXIT__;
return ugd->base;
}
-static void on_start(struct ui_gadget *ug, bundle * data, void *priv)
+static void on_start(ui_gadget_h ug, service_h service, void *priv)
{
__FUNC_ENTER__;
struct ug_data *ugd;
- int res;
+ int res;
if (!ug || !priv)
return;
@@ -170,39 +236,29 @@ static void on_start(struct ui_gadget *ug, bundle * data, void *priv)
}
else
{
- DBG(LOG_VERBOSE, "Node name of this device [%s]\n", kernel_info.nodename);
DBG(LOG_VERBOSE, "HW ID of this device [%s]\n", kernel_info.machine);
- if(strcmp(kernel_info.nodename, "SLP_PQ") == 0 ||
- strncmp(kernel_info.machine, "arm", 3) != 0)
+ if(strncmp(kernel_info.machine, "arm", 3) != 0)
{
wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_NOT_SUPPORTED_DEVICE"), POPUP_TYPE_TERMINATE);
return;
}
}
-
- res = init_wfd_client(ugd);
- if(res != 0)
- {
- DBG(LOG_ERROR, "Failed to initialize WFD client library\n");
- wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_PROBLEM_WITH_WFD"), POPUP_TYPE_TERMINATE);
- }
-
__FUNC_EXIT__;
}
-static void on_pause(struct ui_gadget *ug, bundle * data, void *priv)
+static void on_pause(ui_gadget_h ug, service_h service, void *priv)
{
__FUNC_ENTER__;
__FUNC_EXIT__;
}
-static void on_resume(struct ui_gadget *ug, bundle * data, void *priv)
+static void on_resume(ui_gadget_h ug, service_h service, void *priv)
{
__FUNC_ENTER__;
__FUNC_EXIT__;
}
-static void on_destroy(struct ui_gadget *ug, bundle * data, void *priv)
+static void on_destroy(ui_gadget_h ug, service_h service, void *priv)
{
__FUNC_ENTER__;
@@ -223,14 +279,19 @@ static void on_destroy(struct ui_gadget *ug, bundle * data, void *priv)
DBG(LOG_VERBOSE, "WFD client deregistered");
destroy_wfd_ug_view(ugd);
+ DBG(LOG_VERBOSE, "Destroying About item");
+
+ wfd_ug_view_free_peers(ugd);
- if (ugd->bg)
+ DBG(LOG_VERBOSE, "WFD client deregistered");
+ if(ugd->bg)
{
evas_object_del(ugd->bg);
ugd->bg = NULL;
}
+ DBG(LOG_VERBOSE, "WFD client deregistered");
- if (ugd->base)
+ if(ugd->base)
{
evas_object_del(ugd->base);
ugd->base = NULL;
@@ -240,15 +301,15 @@ static void on_destroy(struct ui_gadget *ug, bundle * data, void *priv)
return;
}
-static void on_message(struct ui_gadget *ug, bundle * msg, bundle * data,
- void *priv)
+static void on_message(ui_gadget_h ug, service_h msg, service_h service,
+ void *priv)
{
__FUNC_ENTER__;
__FUNC_EXIT__;
}
-static void on_event(struct ui_gadget *ug, enum ug_event event, bundle * data,
- void *priv)
+static void on_event(ui_gadget_h ug, enum ug_event event, service_h service,
+ void *priv)
{
__FUNC_ENTER__;
@@ -260,37 +321,37 @@ static void on_event(struct ui_gadget *ug, enum ug_event event, bundle * data,
switch (event)
{
- case UG_EVENT_LOW_MEMORY:
- DBG(LOG_VERBOSE, "UG_EVENT_LOW_MEMORY\n");
- break;
- case UG_EVENT_LOW_BATTERY:
- DBG(LOG_VERBOSE, "UG_EVENT_LOW_BATTERY\n");
- break;
- case UG_EVENT_LANG_CHANGE:
- DBG(LOG_VERBOSE, "UG_EVENT_LANG_CHANGE\n");
- break;
- case UG_EVENT_ROTATE_PORTRAIT:
- DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_PORTRAIT\n");
- break;
- case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
- DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN\n");
- break;
- case UG_EVENT_ROTATE_LANDSCAPE:
- DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_LANDSCAPE\n");
- break;
- case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
- DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN\n");
- break;
- default:
- DBG(LOG_VERBOSE, "default\n");
- break;
+ case UG_EVENT_LOW_MEMORY:
+ DBG(LOG_VERBOSE, "UG_EVENT_LOW_MEMORY\n");
+ break;
+ case UG_EVENT_LOW_BATTERY:
+ DBG(LOG_VERBOSE, "UG_EVENT_LOW_BATTERY\n");
+ break;
+ case UG_EVENT_LANG_CHANGE:
+ DBG(LOG_VERBOSE, "UG_EVENT_LANG_CHANGE\n");
+ break;
+ case UG_EVENT_ROTATE_PORTRAIT:
+ DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_PORTRAIT\n");
+ break;
+ case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN:
+ DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN\n");
+ break;
+ case UG_EVENT_ROTATE_LANDSCAPE:
+ DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_LANDSCAPE\n");
+ break;
+ case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN:
+ DBG(LOG_VERBOSE, "UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN\n");
+ break;
+ default:
+ DBG(LOG_VERBOSE, "default\n");
+ break;
}
__FUNC_EXIT__;
}
-static void on_key_event(struct ui_gadget *ug, enum ug_key_event event,
- bundle * data, void *priv)
+static void on_key_event(ui_gadget_h ug, enum ug_key_event event,
+ service_h service, void *priv)
{
__FUNC_ENTER__;
@@ -302,11 +363,11 @@ static void on_key_event(struct ui_gadget *ug, enum ug_key_event event,
switch (event)
{
- case UG_KEY_EVENT_END:
- DBG(LOG_VERBOSE, "UG_KEY_EVENT_END\n");
- break;
- default:
- break;
+ case UG_KEY_EVENT_END:
+ DBG(LOG_VERBOSE, "UG_KEY_EVENT_END\n");
+ break;
+ default:
+ break;
}
__FUNC_EXIT__;
@@ -330,6 +391,8 @@ UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops)
return -1;
}
+ global_ugd = ugd;
+
ops->create = on_create;
ops->start = on_start;
ops->pause = on_pause;
diff --git a/ug-wifidirect/src/wfd_ug_about_view.c b/ug-wifidirect/src/wfd_ug_about_view.c
new file mode 100644
index 0000000..5139920
--- /dev/null
+++ b/ug-wifidirect/src/wfd_ug_about_view.c
@@ -0,0 +1,128 @@
+/*
+* WiFi-Direct UG
+*
+* 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.
+*
+*/
+
+#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"
+
+static Elm_Genlist_Item_Class itc;
+
+static char *_wfd_gl_label_help_dialogue_get(void *data, Evas_Object *obj, const char *part)
+{
+ DBG(LOG_VERBOSE, "Adding text");
+
+ if (!strcmp(part, "elm.text.2")) {
+ return strdup(IDS_WFD_BODY_ABOUT_WIFI);
+ }
+ return NULL;
+}
+
+static Evas_Object *_wfd_gl_help_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+ __FUNC_ENTER__;
+
+ DBG(LOG_VERBOSE, "Current part: %s\n", part);
+ Evas_Object *label = NULL;
+ char content[1024] = {0};
+
+ label = elm_label_add(obj);
+ snprintf(content, 1024, "<color=#7C7C7CFF><font_size=32>%s</font_size></color>", IDS_WFD_BODY_ABOUT_WIFI);
+ elm_label_line_wrap_set(label, ELM_WRAP_WORD);
+ elm_object_text_set(label, content);
+ evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(label, EVAS_HINT_FILL, 0.0);
+ evas_object_show(label);
+
+ __FUNC_EXIT__;
+ return label;
+}
+
+void _about_view_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;
+ }
+
+ elm_naviframe_item_pop(ugd->naviframe);
+
+ __FUNC_EXIT__;
+ return;
+}
+
+void _wifid_create_about_view(struct ug_data *ugd)
+{
+
+ Evas_Object *back_btn = NULL;
+ Elm_Object_Item *navi_item = NULL;
+ Evas_Object *control_bar = NULL;
+ Elm_Object_Item *item = NULL;
+ Evas_Object *genlist = NULL;
+ if(ugd == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)");
+ return;
+ }
+
+ genlist = elm_genlist_add(ugd->naviframe);
+ elm_object_style_set(genlist, "dialogue");
+
+ DBG(LOG_VERBOSE, "creating about view");
+ elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+#if 0
+ itc.item_style = "multiline/1text";
+ itc.func.text_get = _wfd_gl_label_help_dialogue_get;
+ itc.func.content_get = NULL;
+#else
+ itc.item_style = "1icon";
+ itc.func.text_get = NULL;
+ itc.func.content_get = _wfd_gl_help_icon_get;
+#endif
+ itc.func.state_get = NULL;
+ itc.func.del = NULL;
+ 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", _about_view_back_btn_cb, (void*) ugd);
+ elm_object_focus_allow_set(back_btn, EINA_FALSE);
+
+ item = elm_genlist_item_append(genlist, &itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ evas_object_show(genlist);
+ navi_item = elm_naviframe_item_push(ugd->naviframe, IDS_WFD_TITLE_ABOUT_WIFI, back_btn, NULL, 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);
+ elm_object_item_part_content_set(navi_item, "controlbar", control_bar);
+
+}
diff --git a/ug-wifidirect/src/wfd_ug_genlist.c b/ug-wifidirect/src/wfd_ug_genlist.c
new file mode 100755
index 0000000..fc5aa93
--- /dev/null
+++ b/ug-wifidirect/src/wfd_ug_genlist.c
@@ -0,0 +1,802 @@
+/*
+* WiFi-Direct UG
+*
+* 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.
+*
+*/
+
+#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 sep_itc_end;
+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;
+Elm_Gen_Item_Class button_itc;
+
+Elm_Gen_Item_Class title_conn_itc;
+Elm_Gen_Item_Class peer_conn_itc;
+
+Elm_Gen_Item_Class title_busy_itc;
+Elm_Gen_Item_Class peer_busy_itc;
+
+Elm_Gen_Item_Class title_multi_connect_itc;
+Elm_Gen_Item_Class peer_multi_connect_itc;
+
+Elm_Gen_Item_Class title_conn_failed_itc;
+Elm_Gen_Item_Class peer_conn_failed_itc;
+
+
+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.1"))
+ {
+ DBG(LOG_VERBOSE, "Current text mode [%d]\n", ugd->head_text_mode);
+ switch(ugd->head_text_mode)
+ {
+ case HEAD_TEXT_TYPE_DIRECT:
+ case HEAD_TEXT_TYPE_ACTIVATED:
+ case HEAD_TEXT_TYPE_SCANING:
+ return strdup(dgettext("sys_string", "IDS_COM_OPT1_WI_FI_DIRECT"));
+ break;
+ case HEAD_TEXT_TYPE_DEACTIVATING:
+ return strdup(_("IDS_WFD_BODY_DEACTIVATING")); // "Deactivating Wi-Fi Direct..."
+ break;
+ case HEAD_TEXT_TYPE_ACTIVATING:
+ return strdup(_("IDS_WFD_BODY_ACTIVATING")); //"Activating Wi-Fi Direct..."
+ break;
+ default:
+ break;
+ }
+ }
+ else if(!strcmp(part, "elm.text.1"))
+ {
+ return strdup(dgettext("sys_string", "IDS_COM_OPT1_WI_FI_DIRECT"));
+ } else if(!strcmp(part, "elm.text.2"))
+ {
+ return strdup(ugd->dev_name);
+ }
+
+ __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"))
+ {
+ return strdup(IDS_WFD_TITLE_ABOUT_WIFI); // "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->multiconn_view_genlist != NULL)
+ {
+ // It's called at Multi connect view...
+ if(ugd->gl_available_dev_cnt_at_multiconn_view > 0)
+ return strdup(_("IDS_WFD_BODY_AVAILABLE_DEVICES")); // "Available devices"
+ else
+ return strdup(_("IDS_WFD_BODY_WIFI_DIRECT_DEVICES")); // "Wi-Fi Direct devices"
+ }
+ else
+ {
+ // It's called at Main View
+ if(ugd->gl_available_peer_cnt > 0)
+ return strdup(_("IDS_WFD_BODY_AVAILABLE_DEVICES")); // "Available devices"
+ else
+ return strdup(_("IDS_WFD_BODY_WIFI_DIRECT_DEVICES")); // "Wi-Fi Direct devices"
+ }
+ }
+
+ __FUNC_EXIT__;
+
+ return NULL;
+}
+
+static Evas_Object *_gl_title_content_get(void *data, Evas_Object *obj, const char *part)
+{
+ Evas_Object *progressbar = NULL;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ if (data == NULL) {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.icon")) {
+ if (HEAD_TEXT_TYPE_SCANING == ugd->head_text_mode) {
+ progressbar = elm_progressbar_add(obj);
+ elm_object_style_set(progressbar, "list_process_small");
+ elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+ elm_progressbar_pulse(progressbar, EINA_TRUE);
+ evas_object_show(progressbar);
+ } else {
+ return NULL;
+ }
+ }
+
+ return progressbar;
+}
+
+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;
+ char buf[WFD_GLOBALIZATION_STR_LENGTH] = { 0, };
+ DBG(LOG_VERBOSE, "%s", part);
+ if(data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.text.1"))
+ {
+ __FUNC_EXIT__;
+ return strdup(peer->ssid);
+ }
+ else if (!strcmp(part, "elm.text.2"))
+ {
+ switch (peer->conn_status) {
+ case PEER_CONN_STATUS_DISCONNECTED:
+ g_strlcpy(buf, IDS_WFD_TAP_TO_CONNECT,
+ WFD_GLOBALIZATION_STR_LENGTH);
+ break;
+
+ case PEER_CONN_STATUS_CONNECTING:
+ g_strlcpy(buf, IDS_WFD_CONNECTING,
+ WFD_GLOBALIZATION_STR_LENGTH);
+ break;
+
+ case PEER_CONN_STATUS_CONNECTED:
+ g_strlcpy(buf, IDS_WFD_CONNECTED,
+ WFD_GLOBALIZATION_STR_LENGTH);
+ break;
+
+ case PEER_CONN_STATUS_FAILED_TO_CONNECT:
+ g_strlcpy(buf, IDS_WFD_FAILED_TO_CONNECT,
+ WFD_GLOBALIZATION_STR_LENGTH);
+ break;
+
+ case PEER_CONN_STATUS_WAIT_FOR_CONNECT:
+ g_strlcpy(buf, IDS_WFD_WAITING_FOR_CONNECT,
+ WFD_GLOBALIZATION_STR_LENGTH);
+ break;
+
+ default:
+ g_strlcpy(buf, IDS_WFD_TAP_TO_CONNECT,
+ WFD_GLOBALIZATION_STR_LENGTH);
+ break;
+ }
+ }
+ else
+ {
+ __FUNC_EXIT__;
+ return NULL;
+ }
+
+ __FUNC_EXIT__;
+ return strdup(buf);
+}
+
+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)
+ {
+#if 0
+ icon = elm_icon_add(obj);
+ elm_icon_file_set(icon, WFD_ICON_CONNECTED, NULL);
+#endif
+ return 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:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_COMPUTER_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_COMPUTER;
+ }
+ break;
+ case WFD_DEVICE_TYPE_INPUT_DEVICE:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_INPUT_DEVICE_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_INPUT_DEVICE;
+ }
+ break;
+ case WFD_DEVICE_TYPE_PRINTER:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_PRINTER_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_PRINTER;
+ }
+ break;
+ case WFD_DEVICE_TYPE_CAMERA:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_CAMERA_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_CAMERA;
+ }
+ break;
+ case WFD_DEVICE_TYPE_STORAGE:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_STORAGE_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_STORAGE;
+ }
+ break;
+ case WFD_DEVICE_TYPE_NW_INFRA:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_NETWORK_INFRA_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_NETWORK_INFRA;
+ }
+ break;
+ case WFD_DEVICE_TYPE_DISPLAYS:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_DISPLAY_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_DISPLAY;
+ }
+ break;
+ case WFD_DEVICE_TYPE_MM_DEVICES:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_MULTIMEDIA_DEVICE_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_MULTIMEDIA_DEVICE;
+ }
+ break;
+ case WFD_DEVICE_TYPE_GAME_DEVICES:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_GAMING_DEVICE_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_GAMING_DEVICE;
+ }
+ break;
+ case WFD_DEVICE_TYPE_TELEPHONE:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_TELEPHONE_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_TELEPHONE;
+ }
+ break;
+ case WFD_DEVICE_TYPE_AUDIO:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_AUDIO_DEVICE_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_AUDIO_DEVICE;
+ }
+ break;
+ default:
+ if (peer->conn_status == PEER_CONN_STATUS_CONNECTED) {
+ img_path = WFD_ICON_DEVICE_COMPUTER_CONNECT;
+ } else {
+ img_path = WFD_ICON_DEVICE_COMPUTER;
+ }
+ 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);
+ }
+ else
+ {
+ return NULL;
+ }
+ }
+
+ __FUNC_EXIT__;
+ return icon;
+}
+
+
+static char *_gl_noitem_text_get(void *data, Evas_Object * obj,
+ const char *part)
+{
+ __FUNC_ENTER__;
+
+ if(data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ __FUNC_EXIT__;
+ return strdup(IDS_WFD_NOCONTENT);
+}
+
+
+static char *_gl_help_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ __FUNC_ENTER__;
+ DBG(LOG_VERBOSE, "%s", part);
+ __FUNC_EXIT__;
+ return strdup("Help");
+}
+
+
+static Evas_Object *_gl_button_get(void *data, Evas_Object * obj, const char *part)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+
+ DBG(LOG_VERBOSE, "%s", part);
+
+ ugd->multi_btn = elm_button_add(obj);
+
+ wfd_refresh_wifi_direct_state(ugd);
+
+ if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_COMPLETED)
+ {
+ elm_object_text_set(ugd->multi_btn, IDS_WFD_BUTTON_DISCONNECT);
+ DBG(LOG_VERBOSE, "button: Disconnect\n");
+
+ // Don't connect "clicked" callback.
+ return ugd->multi_btn;
+ }
+
+ if (ugd->wfd_status == WFD_LINK_STATUS_CONNECTING)
+ {
+ elm_object_text_set(ugd->multi_btn, IDS_WFD_BUTTON_CANCEL);
+ DBG(LOG_VERBOSE, "button: Cancel connect\n");
+ }
+ else if (ugd->wfd_status >= WFD_LINK_STATUS_CONNECTED)
+ {
+ if (ugd->gl_connected_peer_cnt > 1)
+ {
+ elm_object_text_set(ugd->multi_btn, IDS_WFD_BUTTON_DISCONNECT_ALL);
+ DBG(LOG_VERBOSE, "button: Disconnect All\n");
+ }
+ else
+ {
+ elm_object_text_set(ugd->multi_btn, IDS_WFD_BUTTON_DISCONNECT);
+ DBG(LOG_VERBOSE, "button: Disconnect\n");
+ }
+ }
+ else
+ {
+ elm_object_text_set(ugd->multi_btn, IDS_WFD_BUTTON_MULTI);
+ DBG(LOG_VERBOSE, "button: Multi connect\n");
+ }
+
+ evas_object_smart_callback_add(ugd->multi_btn, "clicked", _wifid_create_multibutton_cb, ugd);
+ evas_object_show(ugd->multi_btn);
+
+ __FUNC_EXIT__;
+
+ return ugd->multi_btn;
+}
+
+
+static char *_gl_conn_dev_title_label_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ __FUNC_ENTER__;
+
+ if(data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.text"))
+ {
+ return strdup(IDS_WFD_BODY_CONNECTED_DEVICES);
+ }
+
+ __FUNC_EXIT__;
+
+ return NULL;
+}
+
+
+static char *_gl_peer_conn_dev_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;
+
+ char buf[WFD_GLOBALIZATION_STR_LENGTH] = { 0, };
+ DBG(LOG_VERBOSE, "%s", part);
+ if(data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.text.1"))
+ {
+ return strdup(peer->ssid);
+ }
+ else
+ {
+ g_strlcpy(buf, IDS_WFD_CONNECTED,
+ WFD_GLOBALIZATION_STR_LENGTH);
+ __FUNC_EXIT__;
+ return strdup(buf);
+ }
+}
+
+static char *_gl_conn_failed_dev_title_label_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ __FUNC_ENTER__;
+
+ if(data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.text"))
+ {
+ return strdup(IDS_WFD_BODY_FAILED_DEVICES);
+ }
+
+ __FUNC_EXIT__;
+
+ return NULL;
+}
+
+
+static char *_gl_peer_conn_failed_dev_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;
+
+ char buf[WFD_GLOBALIZATION_STR_LENGTH] = { 0, };
+ DBG(LOG_VERBOSE, "%s", part);
+ if(data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.text.1"))
+ {
+ return strdup(peer->ssid);
+ }
+ else
+ {
+ g_strlcpy(buf, IDS_WFD_FAILED_TO_CONNECT,
+ WFD_GLOBALIZATION_STR_LENGTH);
+ __FUNC_EXIT__;
+ return strdup(buf);
+ }
+}
+
+static char *_gl_multi_connect_dev_title_label_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = wfd_get_ug_data();
+
+ if(data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.text"))
+ {
+ if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_IN_PROGRESS)
+ return strdup(_("IDS_WFD_BODY_AVAILABLE_DEVICES")); // "Available devices"
+ else if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_COMPLETED)
+ return strdup(IDS_WFD_BODY_FAILED_DEVICES); // "Available devices"
+ }
+
+ __FUNC_EXIT__;
+
+ return NULL;
+}
+
+
+static char *_gl_busy_dev_title_label_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ __FUNC_ENTER__;
+
+ if(data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+
+ if (!strcmp(part, "elm.text"))
+ {
+ return strdup(IDS_WFD_BODY_BUSY_DEVICES);
+ }
+
+ __FUNC_EXIT__;
+
+ return NULL;
+}
+
+
+static char *_gl_peer_busy_dev_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;
+ char buf[WFD_GLOBALIZATION_STR_LENGTH] = { 0, };
+ DBG(LOG_VERBOSE, "%s", part);
+ if(data == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return NULL;
+ }
+ DBG(LOG_VERBOSE, "peer->ssid = %s", peer->ssid);
+ if (!strcmp(part, "elm.text.1"))
+ {
+ return strdup(peer->ssid);
+ }
+ else
+ {
+ g_strlcpy(buf, IDS_WFD_CONNECTED_WITH_OTHER_DEVICE,
+ WFD_GLOBALIZATION_STR_LENGTH);
+ __FUNC_EXIT__;
+ return strdup(buf);
+ }
+}
+
+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;
+}
+
+void initialize_gen_item_class()
+{
+ sep_itc.item_style = "dialogue/separator";
+ sep_itc.func.text_get = NULL;
+ sep_itc.func.content_get = NULL;
+ sep_itc.func.state_get = NULL;
+ sep_itc.func.del = NULL;
+
+ sep_itc_end.item_style = "dialogue/separator/end";
+ sep_itc_end.func.text_get = NULL;
+ sep_itc_end.func.content_get = NULL;
+ sep_itc_end.func.state_get = NULL;
+ sep_itc_end.func.del = NULL;
+
+ head_itc.item_style = "dialogue/2text.1icon.6";
+ 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/1text";
+ 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;
+
+ title_itc.item_style = "dialogue/title";
+ title_itc.func.text_get = _gl_title_label_get;
+ title_itc.func.content_get = _gl_title_content_get;
+ title_itc.func.state_get = NULL;
+ title_itc.func.del = NULL;
+
+ peer_itc.item_style = "dialogue/2text.2icon.3";
+ 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/1text";
+ noitem_itc.func.text_get = _gl_noitem_text_get;
+ noitem_itc.func.content_get = NULL;
+ noitem_itc.func.state_get = NULL;
+ noitem_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;
+
+ button_itc.item_style = "1icon";
+ button_itc.func.text_get = NULL;
+ button_itc.func.content_get = _gl_button_get;
+ button_itc.func.state_get = NULL;
+ button_itc.func.del = NULL;
+
+ title_conn_itc.item_style = "dialogue/title";
+ title_conn_itc.func.text_get = _gl_conn_dev_title_label_get;
+ title_conn_itc.func.content_get = NULL;
+ title_conn_itc.func.state_get = NULL;
+ title_conn_itc.func.del = NULL;
+
+ peer_conn_itc.item_style = "dialogue/2text.2icon.3";
+ peer_conn_itc.func.text_get = _gl_peer_conn_dev_label_get;
+ peer_conn_itc.func.content_get = _gl_peer_icon_get;
+ peer_conn_itc.func.state_get = NULL;
+ peer_conn_itc.func.del = _gl_peer_del;
+
+ title_conn_failed_itc.item_style = "dialogue/title";
+ title_conn_failed_itc.func.text_get = _gl_conn_failed_dev_title_label_get;
+ title_conn_failed_itc.func.content_get = NULL;
+ title_conn_failed_itc.func.state_get = NULL;
+ title_conn_failed_itc.func.del = NULL;
+
+ peer_conn_failed_itc.item_style = "dialogue/2text.2icon.3";
+ peer_conn_failed_itc.func.text_get = _gl_peer_conn_failed_dev_label_get;
+ peer_conn_failed_itc.func.content_get = _gl_peer_icon_get;
+ peer_conn_failed_itc.func.state_get = NULL;
+ peer_conn_failed_itc.func.del = _gl_peer_del;
+
+ title_busy_itc.item_style = "dialogue/title";
+ title_busy_itc.func.text_get = _gl_busy_dev_title_label_get;
+ title_busy_itc.func.content_get = NULL;
+ title_busy_itc.func.state_get = NULL;
+ title_busy_itc.func.del = NULL;
+
+ peer_busy_itc.item_style = "dialogue/2text.2icon.3";
+ peer_busy_itc.func.text_get = _gl_peer_busy_dev_label_get;
+ peer_busy_itc.func.content_get = _gl_peer_icon_get;
+ peer_busy_itc.func.state_get = NULL;
+ peer_busy_itc.func.del = _gl_peer_del;
+
+ title_multi_connect_itc.item_style = "dialogue/title";
+ title_multi_connect_itc.func.text_get = _gl_multi_connect_dev_title_label_get;
+ title_multi_connect_itc.func.content_get = NULL;
+ title_multi_connect_itc.func.state_get = NULL;
+ title_multi_connect_itc.func.del = NULL;
+
+#if 0
+ peer_multi_connect_itc.item_style = "dialogue/2text.2icon.3";
+ peer_multi_connect_itc.func.text_get = _gl_peer_label_get;
+ peer_multi_connect_itc.func.content_get = _gl_peer_icon_get;
+ peer_multi_connect_itc.func.state_get = NULL;
+ peer_multi_connect_itc.func.del = _gl_peer_del;
+#endif
+}
diff --git a/ug-wifidirect/src/wfd_ug_main_view.c b/ug-wifidirect/src/wfd_ug_main_view.c
new file mode 100755
index 0000000..e502ad6
--- /dev/null
+++ b/ug-wifidirect/src/wfd_ug_main_view.c
@@ -0,0 +1,1153 @@
+/*
+* WiFi-Direct UG
+*
+* 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.
+*
+*/
+
+
+#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"
+
+void _wfd_onoff_btn_cb(void *data, Evas_Object *obj, void *event_info);
+
+
+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);
+#if 0
+ bundle *b;
+ b = bundle_create();
+ if(!b)
+ {
+ DBG(LOG_ERROR, "Failed to create bundle");
+ return;
+ }
+
+ wfd_refresh_wifi_direct_state(ugd);
+ if (ugd->wfd_status > WIFI_DIRECT_STATE_CONNECTING)
+ bundle_add(b, "Connection", "TRUE");
+ else
+ bundle_add(b, "Connection", "FALSE");
+
+ ug_send_result(ugd->ug, b);
+
+ bundle_free(b);
+#else
+ int ret = -1;
+ service_h service = NULL;
+ ret = service_create(&service);
+ if(ret)
+ {
+ DBG(LOG_ERROR, "Failed to create service");
+ return;
+ }
+
+ wfd_refresh_wifi_direct_state(ugd);
+ if (ugd->wfd_status > WIFI_DIRECT_STATE_CONNECTING)
+ service_add_extra_data(service, "Connection", "TRUE");
+ else
+ service_add_extra_data(service, "Connection", "FALSE");
+
+ ug_send_result(ugd->ug, service);
+ service_destroy(service);
+#endif
+ 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;
+ Elm_Object_Item *btn = event_info;
+ char *btn_text = NULL;
+
+ if (NULL == ugd || NULL == btn) {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return;
+ }
+
+ btn_text = elm_object_item_text_get(btn);
+ if (0 == strcmp(btn_text, _("IDS_WFD_BUTTON_SCAN"))) {
+ wfd_refresh_wifi_direct_state(ugd);
+ DBG(LOG_VERBOSE, "Start discovery again, status: %d\n", ugd->wfd_status);
+
+ /* if connected, show the popup*/
+ if (ugd->wfd_status >= WIFI_DIRECT_STATE_CONNECTED) {
+ wfd_ug_act_popup(ugd, _("IDS_WFD_POP_SCAN_AGAIN"), POP_TYPE_SCAN_AGAIN);
+ } else if (WIFI_DIRECT_STATE_ACTIVATED == ugd->wfd_status) {
+ wfd_client_start_discovery(ugd);
+ } else if (WIFI_DIRECT_STATE_DEACTIVATED == ugd->wfd_status) {
+ _wfd_onoff_btn_cb(ugd, NULL, NULL);
+ __FUNC_EXIT__;
+ return;
+ }
+
+ if (ugd->scan_btn) {
+ wfd_ug_view_refresh_button(ugd->scan_btn, _("IDS_WFD_BUTTON_STOPSCAN"), TRUE);
+ }
+
+ if (ugd->multi_scan_btn) {
+ wfd_ug_view_refresh_button(ugd->multi_scan_btn, _("IDS_WFD_BUTTON_STOPSCAN"), TRUE);
+ }
+ } else if (0 == strcmp(btn_text, _("IDS_WFD_BUTTON_STOPSCAN"))) {
+ DBG(LOG_VERBOSE, "Stop discoverying.\n");
+ ugd->wfd_status = WIFI_DIRECT_STATE_ACTIVATED;
+ wfd_refresh_wifi_direct_state(ugd);
+ ugd->head_text_mode = HEAD_TEXT_TYPE_DIRECT;
+ wfd_ug_view_refresh_glitem(ugd->head);
+ wifi_direct_cancel_discovery();
+ }
+
+ __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__;
+}
+
+void _wfd_onoff_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ wfd_refresh_wifi_direct_state(ugd);
+
+ 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;
+ }
+ DBG(LOG_VERBOSE, "wifi-direct switch on\n");
+ 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;
+ }
+ DBG(LOG_VERBOSE, "wifi-direct switch off\n");
+ ugd->head_text_mode = HEAD_TEXT_TYPE_DEACTIVATING;
+ wfd_client_switch_off(ugd);
+ }
+
+ wfd_ug_view_refresh_glitem(ugd->head);
+
+ if (ugd->scan_btn) {
+ wfd_ug_view_refresh_button(ugd->scan_btn, _("IDS_WFD_BUTTON_SCAN"), FALSE);
+ }
+
+ if (ugd->multi_scan_btn) {
+ wfd_ug_view_refresh_button(ugd->multi_scan_btn, _("IDS_WFD_BUTTON_SCAN"), FALSE);
+ }
+
+
+ __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;
+
+ 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__;
+}
+
+#if 0
+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;
+ }
+
+#if 1 // use nocontent
+ 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;
+#else // use image
+ Evas_Object *icon;
+ icon = elm_icon_add(obj);
+ elm_icon_file_set(icon, "/opt/ug/res/images/ug-wifi-direct/A09_NoDevice.png", NULL);
+ evas_object_size_hint_min_set(icon, 400, 200);
+ evas_object_size_hint_max_set(icon, 400, 200);
+ evas_object_resize(icon, 400, 200);
+
+ return icon;
+#endif
+}
+#endif
+
+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;
+ struct ug_data* ugd = wfd_get_ug_data();
+ 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)
+ {
+#if 0 // for new connection during link_status is CONNECTING
+ wfd_refresh_wifi_direct_state(ugd);
+ if(ugd->wfd_status == WFD_LINK_STATUS_CONNECTING)
+ {
+ res = wfd_client_disconnect(NULL);
+ if(res != 0)
+ {
+ DBG(LOG_ERROR, "Failed to send disconnection request. [%d]\n", res);
+ return;
+ }
+ }
+#endif
+ 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 // PEER_CONN_STATUS_CONNECTED or PEER_CONN_STATUS_CONNECTING)
+ {
+ 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);
+ wfd_ug_view_refresh_glitem(ugd->multi_button_item);
+
+ __FUNC_EXIT__;
+ return;
+}
+
+static void _gl_busy_peer_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
+
+ DBG(LOG_VERBOSE, "Busy device is clicked");
+
+ wfd_ug_warn_popup(ugd, _("IDS_WFD_POP_WARN_BUSY_DEVICE"), POP_TYPE_BUSY_DEVICE_POPUP);
+
+ __FUNC_EXIT__;
+}
+
+static void _gl_about_wifi_sel(void *data, Evas_Object *obj, void *event_info)
+{
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ DBG(LOG_VERBOSE, "About wifi clicked");
+
+ _wifid_create_about_view(ugd);
+ elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
+}
+
+void _wifid_create_multibutton_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ struct ug_data *ugd = (struct ug_data*) data;
+ const char *text_lbl = NULL;
+
+ text_lbl = elm_object_text_get(ugd->multi_btn);
+ DBG(LOG_VERBOSE, "text_lbl = %s", text_lbl);
+
+ if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_IN_PROGRESS)
+ {
+ ugd->multi_connect_mode = WFD_MULTI_CONNECT_MODE_NONE;
+ if (0 == strcmp(IDS_WFD_BUTTON_CANCEL, text_lbl))
+ {
+ wfd_ug_act_popup(ugd, _("IDS_WFD_POP_CANCEL_CONNECT"), POP_TYPE_DISCONNECT_ALL);
+ }
+ else
+ {
+ DBG(LOG_VERBOSE, "Invalid Case\n");
+ }
+ }
+ else
+ {
+ if (0 == strcmp(IDS_WFD_BUTTON_MULTI, text_lbl))
+ {
+ _wifid_create_multiconnect_view(ugd);
+ }
+ else if (0 == strcmp(IDS_WFD_BUTTON_CANCEL, text_lbl))
+ {
+ wfd_ug_act_popup(ugd, _("IDS_WFD_POP_CANCEL_CONNECT"), POP_TYPE_DISCONNECT_ALL);
+ }
+ else if (0 == strcmp(IDS_WFD_BUTTON_DISCONNECT_ALL, text_lbl))
+ {
+ wfd_ug_act_popup(ugd, _("IDS_WFD_POP_DISCONNECT"), POP_TYPE_DISCONNECT_ALL);
+ }
+ else if (0 == strcmp(IDS_WFD_BUTTON_DISCONNECT, text_lbl))
+ {
+ wfd_ug_act_popup(ugd, _("IDS_WFD_POP_DISCONNECT"), POP_TYPE_DISCONNECT);
+ }
+ else
+ {
+ DBG(LOG_VERBOSE, "Invalid Case\n");
+ }
+ }
+}
+
+
+int _change_multi_button_title(void *data)
+{
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ if(ugd->multi_button_item == NULL) /*Needs to be check as the peer count is not getting updated*/
+ {
+ return -1;
+ }
+
+ wfd_refresh_wifi_direct_state(ugd);
+ if (ugd->wfd_status == WFD_LINK_STATUS_CONNECTING)
+ {
+ //if (conn_prog_count > 0)
+ elm_object_text_set(ugd->multi_btn, IDS_WFD_BUTTON_CANCEL);
+ }
+ else if (ugd->wfd_status > WFD_LINK_STATUS_CONNECTING)
+ {
+ if (ugd->gl_connected_peer_cnt > 1)
+ elm_object_text_set(ugd->multi_btn, IDS_WFD_BUTTON_DISCONNECT_ALL);
+ else
+ elm_object_text_set(ugd->multi_btn, IDS_WFD_BUTTON_DISCONNECT);
+ }
+ else
+ {
+ elm_object_text_set(ugd->multi_btn, IDS_WFD_BUTTON_MULTI);
+ }
+
+ evas_object_show(ugd->multi_btn);
+
+ return 0;
+}
+
+
+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, const char *text, int enable)
+{
+ __FUNC_ENTER__;
+
+ if (NULL == obj || NULL == text) {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return;
+ }
+
+ DBG(LOG_VERBOSE, "Set the attributes of button: text[%s], enabled[%d]\n", text, enable);
+ elm_object_item_text_set(obj, text);
+ elm_object_item_disabled_set(obj, !enable);
+
+ __FUNC_EXIT__;
+}
+
+static bool __wfd_is_device_connected_with_me(struct ug_data *ugd, device_type_s *dev)
+{
+ int i;
+
+ for(i=0; i<ugd->raw_connected_peer_cnt; i++)
+ {
+ if (strncmp(ugd->raw_connected_peers[i].mac_addr, dev->mac_addr, strlen(ugd->raw_connected_peers[i].mac_addr)) == 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool __wfd_is_device_busy(struct ug_data *ugd, device_type_s *dev)
+{
+ if (__wfd_is_device_connected_with_me(ugd, dev) == TRUE)
+ return FALSE;
+
+ if (ugd->I_am_group_owner == TRUE)
+ {
+ if (dev->is_connected || dev->is_group_owner)
+ return TRUE;
+ else
+ return FALSE;
+ }
+ else
+ {
+ if (dev->is_connected == TRUE && dev->is_group_owner == TRUE)
+ return FALSE;
+ if (dev->is_connected == TRUE && dev->is_group_owner == FALSE)
+ return TRUE;
+ if (dev->is_connected == FALSE)
+ return FALSE;
+ }
+
+ return FALSE;
+}
+
+static bool __wfd_is_any_device_available(struct ug_data *ugd, int* no_of_available_dev)
+{
+ int i =0 ;
+ for (i = 0; i < ugd->raw_discovered_peer_cnt; i++)
+ {
+ if (!__wfd_is_device_busy(ugd, &ugd->raw_discovered_peers[i]) &&
+ ugd->raw_discovered_peers[i].conn_status == PEER_CONN_STATUS_DISCONNECTED)
+ (*no_of_available_dev)++;
+ }
+ return TRUE;
+}
+
+static bool __wfd_is_any_device_busy(struct ug_data *ugd, int* no_of_busy_dev)
+{
+ int i =0 ;
+ for (i = 0; i < ugd->raw_discovered_peer_cnt; i++)
+ {
+ if (__wfd_is_device_busy(ugd, &ugd->raw_discovered_peers[i]))
+ (*no_of_busy_dev)++;
+ }
+ return TRUE;
+}
+
+static bool __wfd_is_any_device_connect_failed(struct ug_data *ugd, int* no_of_connect_failed_dev)
+{
+ int i =0 ;
+ for (i = 0; i < ugd->raw_discovered_peer_cnt; i++)
+ {
+ if (!__wfd_is_device_busy(ugd, &ugd->raw_discovered_peers[i]) &&
+ ugd->raw_discovered_peers[i].conn_status == PEER_CONN_STATUS_FAILED_TO_CONNECT)
+ (*no_of_connect_failed_dev)++;
+
+ }
+ return TRUE;
+}
+
+static Evas_Object *_create_basic_genlist(void *data)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data*) data;
+ Evas_Object *genlist;
+ Elm_Object_Item *separator_item;
+
+
+ genlist = elm_genlist_add(ugd->naviframe);
+
+
+ separator_item = elm_genlist_item_append(genlist, &sep_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(separator_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ ugd->head = elm_genlist_item_append(genlist, &head_itc, ugd, NULL, ELM_GENLIST_ITEM_NONE, _gl_header_sel, (void*) ugd);
+
+ //elm_genlist_item_select_mode_set(ugd->head, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ __FUNC_EXIT__;
+
+ return genlist;
+}
+
+static Evas_Object *_create_about_genlist(void *data)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ ugd->about_wfd_item = elm_genlist_item_append(ugd->genlist, &name_itc, ugd, NULL, ELM_GENLIST_ITEM_NONE, _gl_about_wifi_sel, (void*) ugd);
+
+ /* add end separator */
+ ugd->about_wfdsp_sep_end_item = elm_genlist_item_append(ugd->genlist, &sep_itc_end, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(ugd->about_wfdsp_sep_end_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ __FUNC_EXIT__;
+
+ return ugd->genlist;
+}
+
+static Evas_Object *_create_no_device_genlist(void *data)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ ugd->nodevice_title_item = elm_genlist_item_append(ugd->genlist, &title_itc, (void*)ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ ugd->nodevice_item = elm_genlist_item_append(ugd->genlist, &noitem_itc, (void*)ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ ugd->nodevice_sep_low_item = elm_genlist_item_append(ugd->genlist, &sep_itc, NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ elm_genlist_item_select_mode_set(ugd->nodevice_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ __FUNC_EXIT__;
+ return ugd->genlist;
+}
+
+int _create_multi_button_genlist(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ ugd->multi_button_sep_high_item = elm_genlist_item_append(ugd->genlist, &sep_itc, NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ /* if not connected and number of devices is less than 2, don't show the button */
+ if (ugd->raw_multi_selected_peer_cnt > 1 ||
+ ugd->gl_available_peer_cnt > 1 ||
+ ugd->gl_connected_peer_cnt > 0) {
+ ugd->multi_button_item = elm_genlist_item_append(ugd->genlist, &button_itc, ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ ugd->multi_button_sep_low_item = elm_genlist_item_append(ugd->genlist, &sep_itc, NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ }
+
+ evas_object_show(ugd->multi_btn);
+ __FUNC_EXIT__;
+ return 0;
+}
+
+
+int _create_busy_dev_list(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ ugd->busy_wfd_item = elm_genlist_item_append(ugd->genlist, &title_busy_itc, (void*)ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ elm_genlist_item_select_mode_set(ugd->busy_wfd_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+
+ __FUNC_EXIT__;
+ return 0;
+}
+
+static int _create_available_dev_genlist(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ ugd->avlbl_wfd_item = elm_genlist_item_append(ugd->genlist, &title_itc, (void*)ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ // elm_genlist_item_select_mode_set(ugd->avlbl_wfd_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ __FUNC_EXIT__;
+ return 0;
+}
+
+static int _create_multi_connect_dev_genlist(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ ugd->multi_connect_wfd_item = elm_genlist_item_append(ugd->genlist, &title_multi_connect_itc, (void*)ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ // elm_genlist_item_select_mode_set(ugd->avlbl_wfd_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ __FUNC_EXIT__;
+ return 0;
+}
+
+int _create_connected_dev_genlist(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ ugd->conn_wfd_item = elm_genlist_item_append(ugd->genlist, &title_conn_itc, (void*)ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ elm_genlist_item_select_mode_set(ugd->conn_wfd_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ __FUNC_EXIT__;
+ return 0;
+}
+
+int _create_connected_failed_dev_genlist(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ ugd->conn_failed_wfd_item = elm_genlist_item_append(ugd->genlist, &title_conn_failed_itc, (void*)ugd, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ elm_genlist_item_select_mode_set(ugd->conn_failed_wfd_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ __FUNC_EXIT__;
+ return 0;
+}
+
+static Eina_Bool _connect_failed_peers_display_cb(void *user_data)
+{
+ int interval = 0;
+ struct ug_data *ugd = (struct ug_data*) user_data;
+
+ if (NULL == ugd) {
+ DBG(LOG_ERROR, "NULL parameters.\n");
+ return ECORE_CALLBACK_CANCEL;
+ }
+
+ /* check the timeout, if not timeout, keep the cb */
+ interval = time(NULL) - ugd->last_display_time;
+ if (interval < MAX_DISPLAY_TIME_OUT) {
+ return ECORE_CALLBACK_RENEW;
+ }
+
+ /* re-discovery */
+ wfd_client_start_discovery(ugd);
+
+ /* get peers and update the view */
+ wfd_ug_get_discovered_peers(ugd);
+ wfd_ug_get_connected_peers(ugd);
+ wfd_ug_view_update_peers(ugd);
+
+ return ECORE_CALLBACK_CANCEL;
+}
+
+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->gl_connected_peer_cnt; i++)
+ {
+ DBG(LOG_VERBOSE, "%dth connected peer = %x is deleted\n", i, ugd->gl_connected_peers[i]);
+ if (ugd->gl_connected_peers[i].gl_item != NULL)
+ {
+ elm_object_item_del(ugd->gl_connected_peers[i].gl_item);
+ ugd->gl_connected_peers[i].gl_item = NULL;
+ DBG(LOG_VERBOSE, "Deleted item\n");
+ }
+ }
+ ugd->gl_connected_peer_cnt = 0;
+
+ for(i = 0; i < ugd->gl_connected_failed_peer_cnt; i++)
+ {
+ DBG(LOG_VERBOSE, "%dth connected failed peer = %x is deleted\n", i, ugd->gl_connected_failed_peers[i]);
+ if (ugd->gl_connected_failed_peers[i].gl_item != NULL)
+ {
+ elm_object_item_del(ugd->gl_connected_failed_peers[i].gl_item);
+ ugd->gl_connected_failed_peers[i].gl_item = NULL;
+ DBG(LOG_VERBOSE, "Deleted item\n");
+ }
+ }
+
+ ugd->gl_connected_failed_peer_cnt = 0;
+
+ for(i = 0; i < ugd->gl_available_peer_cnt; i++)
+ {
+ DBG(LOG_VERBOSE, "%dth discovered peer = %x is deleted\n", i, ugd->gl_available_peers[i]);
+ if (ugd->gl_available_peers[i].gl_item != NULL)
+ {
+ elm_object_item_del(ugd->gl_available_peers[i].gl_item);
+ ugd->gl_available_peers[i].gl_item = NULL;
+ DBG(LOG_VERBOSE, "Deleted item\n");
+ }
+ }
+ ugd->gl_available_peer_cnt = 0;
+
+ for(i = 0; i < ugd->gl_busy_peer_cnt; i++)
+ {
+ DBG(LOG_VERBOSE, "%dth busy peer = %x is deleted\n", i, ugd->gl_busy_peers[i]);
+ if (ugd->gl_busy_peers[i].gl_item != NULL)
+ {
+ elm_object_item_del(ugd->gl_busy_peers[i].gl_item);
+ ugd->gl_busy_peers[i].gl_item = NULL;
+ DBG(LOG_VERBOSE, "Deleted item\n");
+ }
+ }
+ ugd->gl_busy_peer_cnt = 0;
+
+ for(i = 0; i < ugd->gl_multi_connect_peer_cnt; i++)
+ {
+ DBG(LOG_VERBOSE, "%dth busy peer = %x is deleted\n", i, ugd->gl_multi_connect_peers[i]);
+ if (ugd->gl_multi_connect_peers[i].gl_item != NULL)
+ {
+ elm_object_item_del(ugd->gl_multi_connect_peers[i].gl_item);
+ ugd->gl_multi_connect_peers[i].gl_item = NULL;
+ DBG(LOG_VERBOSE, "Deleted item\n");
+ }
+ }
+ ugd->gl_multi_connect_peer_cnt = 0;
+
+ if(ugd->nodevice_title_item != NULL)
+ {
+ elm_object_item_del(ugd->nodevice_title_item);
+ ugd->nodevice_title_item = NULL;
+ }
+ if(ugd->nodevice_item != NULL)
+ {
+ elm_object_item_del(ugd->nodevice_item);
+ ugd->nodevice_item = NULL;
+ }
+ if(ugd->nodevice_sep_low_item != NULL)
+ {
+ elm_object_item_del(ugd->nodevice_sep_low_item);
+ ugd->nodevice_sep_low_item = NULL;
+ }
+ if(ugd->about_wfd_item != NULL)
+ {
+ elm_object_item_del(ugd->about_wfd_item);
+ ugd->about_wfd_item = NULL;
+ }
+
+ if(ugd->conn_wfd_item != NULL)
+ {
+ elm_object_item_del(ugd->conn_wfd_item);
+ ugd->conn_wfd_item = NULL;
+ }
+ if(ugd->conn_failed_wfd_item != NULL)
+ {
+ elm_object_item_del(ugd->conn_failed_wfd_item);
+ ugd->conn_failed_wfd_item = NULL;
+ }
+ if(ugd->conn_failed_wfd_sep_item != NULL)
+ {
+ elm_object_item_del(ugd->conn_failed_wfd_sep_item);
+ ugd->conn_failed_wfd_sep_item = NULL;
+ }
+ if(ugd->display_timer != NULL)
+ {
+ elm_object_item_del(ugd->display_timer);
+ ugd->display_timer = NULL;
+ }
+ if(ugd->multi_connect_wfd_item != NULL)
+ {
+ elm_object_item_del(ugd->multi_connect_wfd_item);
+ ugd->multi_connect_wfd_item = NULL;
+ }
+ if(ugd->avlbl_wfd_item != NULL)
+ {
+ elm_object_item_del(ugd->avlbl_wfd_item);
+ ugd->avlbl_wfd_item = NULL;
+ }
+ if(ugd->busy_wfd_item != NULL)
+ {
+ elm_object_item_del(ugd->busy_wfd_item);
+ ugd->busy_wfd_item = NULL;
+ }
+ if(ugd->busy_wfd_sep_item != NULL)
+ {
+ elm_object_item_del(ugd->busy_wfd_sep_item);
+ ugd->busy_wfd_sep_item = NULL;
+ }
+
+ if(ugd->multi_button_item != NULL)
+ {
+ elm_object_item_del(ugd->multi_button_item);
+ ugd->multi_button_item = NULL;
+ }
+ if(ugd->multi_button_sep_high_item != NULL)
+ {
+ elm_object_item_del(ugd->multi_button_sep_high_item);
+ ugd->multi_button_sep_high_item = NULL;
+ }
+ if(ugd->multi_button_sep_low_item != NULL)
+ {
+ elm_object_item_del(ugd->multi_button_sep_low_item);
+ ugd->multi_button_sep_low_item = NULL;
+ }
+ if(ugd->about_wfdsp_sep_end_item != NULL)
+ {
+ elm_object_item_del(ugd->about_wfdsp_sep_end_item);
+ ugd->about_wfdsp_sep_end_item = NULL;
+ }
+
+ __FUNC_EXIT__;
+}
+
+
+void wfd_ug_view_update_peers(void *data)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data*) data;
+ int no_of_busy_dev = 0;
+ int no_of_available_dev = 0;
+ int no_of_conn_dev = 0;
+ int no_of_conn_failed_dev = 0;
+ int i = 0 ;
+ int res = 0;
+ bool is_group_owner = FALSE;
+ int count = 0;
+
+ wfd_ug_view_free_peers(ugd);
+
+ if(ugd->wfd_status == WFD_LINK_STATUS_DEACTIVATED)
+ {
+ DBG(LOG_VERBOSE, "Device is deactivated, no need to update UI.");
+ // Add seperator...
+ ugd->multi_button_sep_high_item = elm_genlist_item_append(ugd->genlist, &sep_itc, NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ _create_about_genlist(ugd);
+ return;
+ }
+
+ res = wifi_direct_is_group_owner(&is_group_owner);
+ if (res != WIFI_DIRECT_ERROR_NONE)
+ {
+ DBG(LOG_VERBOSE, "Fail to get group_owner_state. ret=[%d]", res);
+ ugd->I_am_group_owner = FALSE;
+ // continue...
+ }
+ else
+ {
+ ugd->I_am_group_owner = is_group_owner;
+ }
+
+ __wfd_is_any_device_busy(ugd, &no_of_busy_dev);
+ __wfd_is_any_device_available(ugd, &no_of_available_dev);
+ __wfd_is_any_device_connect_failed(ugd, &no_of_conn_failed_dev);
+ no_of_conn_dev = ugd->raw_connected_peer_cnt;
+
+ ugd->gl_available_peer_cnt = no_of_available_dev;
+ ugd->gl_connected_peer_cnt = no_of_conn_dev;
+ ugd->gl_connected_failed_peer_cnt = no_of_conn_failed_dev;
+ ugd->gl_busy_peer_cnt = no_of_busy_dev;
+
+ DBG(LOG_VERBOSE, "conn_dev=[%d], conn_failed_dev=[%d], avail_dev=[%d], busy_dev=[%d], GO=[%d]\n",
+ no_of_conn_dev, no_of_conn_failed_dev, no_of_available_dev, no_of_busy_dev, is_group_owner);
+
+ if (no_of_conn_dev == 0 && no_of_conn_failed_dev == 0 &&
+ no_of_available_dev == 0 && no_of_busy_dev == 0)
+ {
+ DBG(LOG_ERROR, "There are No peers\n");
+ _create_no_device_genlist(ugd);
+ _create_about_genlist(ugd);
+ return;
+ }
+
+ if (no_of_conn_dev > 0)
+ {
+ if (!ugd->conn_wfd_item)
+ _create_connected_dev_genlist(ugd);
+
+ count = 0;
+ for(i = 0; i < ugd->raw_connected_peer_cnt; i++)
+ {
+ if (ugd->gl_connected_peers[count].gl_item)
+ elm_object_item_del(ugd->gl_connected_peers[count].gl_item);
+
+ memcpy(&ugd->gl_connected_peers[count], &ugd->raw_connected_peers[i], sizeof(device_type_s));
+
+ ugd->gl_connected_peers[count].gl_item =
+ elm_genlist_item_append(ugd->genlist, &peer_conn_itc, (void*) &(ugd->gl_connected_peers[i]), NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(ugd->gl_connected_peers[count].gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ count++;
+ }
+ }
+
+ if (ugd->multi_connect_mode != WFD_MULTI_CONNECT_MODE_NONE)
+ {
+ if (ugd->raw_multi_selected_peer_cnt > 0)
+ {
+ if (ugd->avlbl_wfd_item == NULL)
+ _create_multi_connect_dev_genlist(ugd);
+
+ count = 0;
+ for (i = 0; i < ugd->raw_multi_selected_peer_cnt; i++)
+ {
+ if (ugd->raw_multi_selected_peers[i].conn_status != PEER_CONN_STATUS_CONNECTED)
+ {
+ if (ugd->gl_multi_connect_peers[count].gl_item)
+ elm_object_item_del(ugd->gl_multi_connect_peers[count].gl_item);
+
+ memcpy(&ugd->gl_multi_connect_peers[count], &ugd->raw_multi_selected_peers[i], sizeof(device_type_s));
+
+ ugd->gl_multi_connect_peers[count].gl_item =
+ elm_genlist_item_append(ugd->genlist, &peer_itc, (void*) &(ugd->gl_multi_connect_peers[count]), NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ count++;
+ }
+ else
+ {
+ // device is connected..
+ // skip it...
+ }
+ }
+ ugd->gl_multi_connect_peer_cnt = count;
+ }
+
+ _create_multi_button_genlist(ugd);
+ }
+ else
+ {
+ // Note that
+ // If GC, no display available peers
+ // Otherwise, display available peers
+#if 0
+ if (no_of_available_dev > 0 && (no_of_conn_dev == 0 || is_group_owner==TRUE))
+#else
+ // display available peers
+ if (no_of_available_dev > 0)
+#endif
+ {
+ if (ugd->avlbl_wfd_item == NULL)
+ _create_available_dev_genlist(ugd);
+
+ count = 0;
+ for (i = 0; i < ugd->raw_discovered_peer_cnt; i++)
+ {
+ if (!__wfd_is_device_busy(ugd, &ugd->raw_discovered_peers[i]) &&
+ ugd->raw_discovered_peers[i].conn_status == PEER_CONN_STATUS_DISCONNECTED)
+ {
+ if (ugd->gl_available_peers[count].gl_item)
+ elm_object_item_del(ugd->gl_available_peers[count].gl_item);
+
+ memcpy(&ugd->gl_available_peers[count], &ugd->raw_discovered_peers[i], sizeof(device_type_s));
+
+ ugd->gl_available_peers[count].gl_item =
+ elm_genlist_item_append(ugd->genlist, &peer_itc, (void*) &(ugd->gl_available_peers[count]), NULL,
+ ELM_GENLIST_ITEM_NONE, _gl_peer_sel, (void*) &(ugd->gl_available_peers[count]));
+ count++;
+ }
+ else
+ {
+ // device is busy or connected..
+ // skip it...
+ }
+ }
+ }
+
+ _create_multi_button_genlist(ugd);
+
+ // If connected, not display busy device...
+ if (no_of_conn_dev == 0 && no_of_busy_dev > 0)
+ {
+ if (ugd->busy_wfd_item == NULL)
+ _create_busy_dev_list(ugd);
+
+ count = 0;
+ for (i = 0; i < ugd->raw_discovered_peer_cnt; i++)
+ {
+ if (__wfd_is_device_busy(ugd, &ugd->raw_discovered_peers[i]) == TRUE)
+ {
+ if (ugd->gl_busy_peers[count].gl_item)
+ elm_object_item_del(ugd->gl_busy_peers[count].gl_item);
+
+ memcpy(&ugd->gl_busy_peers[count], &ugd->raw_discovered_peers[i], sizeof(device_type_s));
+
+ ugd->gl_busy_peers[count].gl_item =
+ elm_genlist_item_append(ugd->genlist, &peer_busy_itc, (void*) &(ugd->gl_busy_peers[count]), NULL,
+ ELM_GENLIST_ITEM_NONE, _gl_busy_peer_sel, ugd);
+ //elm_genlist_item_select_mode_set(ugd->gl_busy_peers[count].gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ count++;
+ }
+ else
+ {
+ // device is available or connected..
+ // skip it...
+ }
+ }
+ ugd->busy_wfd_sep_item = elm_genlist_item_append(ugd->genlist, &sep_itc, NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ }
+
+ /* display connect failed peers */
+ if (no_of_conn_failed_dev > 0)
+ {
+ if (!ugd->conn_failed_wfd_item)
+ _create_connected_failed_dev_genlist(ugd);
+
+ /* add timer for disappearing failed peers after N secs */
+ if (NULL == ugd->display_timer) {
+ ugd->last_display_time = time(NULL);
+ ugd->display_timer = ecore_timer_add(5.0, (Ecore_Task_Cb)_connect_failed_peers_display_cb, ugd);
+ }
+
+ count = 0;
+ for (i = 0; i < ugd->raw_discovered_peer_cnt; i++)
+ {
+ if (!__wfd_is_device_busy(ugd, &ugd->raw_discovered_peers[i]) &&
+ ugd->raw_discovered_peers[i].conn_status == PEER_CONN_STATUS_FAILED_TO_CONNECT)
+ {
+ if (ugd->gl_connected_failed_peers[count].gl_item)
+ elm_object_item_del(ugd->gl_connected_failed_peers[count].gl_item);
+
+ memcpy(&ugd->gl_connected_failed_peers[count], &ugd->raw_discovered_peers[i], sizeof(device_type_s));
+
+ ugd->gl_connected_failed_peers[count].gl_item =
+ elm_genlist_item_append(ugd->genlist, &peer_conn_failed_itc, (void*) &(ugd->gl_connected_failed_peers[count]), NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, ugd);
+ elm_genlist_item_select_mode_set(ugd->gl_connected_failed_peers[count].gl_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ count++;
+ }
+ }
+
+ ugd->conn_failed_wfd_sep_item = elm_genlist_item_append(ugd->genlist, &sep_itc, NULL, NULL,
+ ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+ }
+ }
+ _create_about_genlist(ugd);
+
+ __FUNC_EXIT__;
+}
+
+
+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;
+ Elm_Object_Item *item = 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;
+ }
+ elm_object_style_set (ugd->genlist, "dialogue");
+ evas_object_show(ugd->genlist);
+ wfd_refresh_wifi_direct_state(ugd);
+ if (ugd->wfd_status > WIFI_DIRECT_STATE_ACTIVATING)
+ ugd->wfd_onoff = TRUE;
+
+ navi_item = elm_naviframe_item_push(ugd->naviframe, _("IDS_WFD_HEADER_WIFI_DIRECT"), back_btn, NULL, ugd->genlist, NULL); // dgettext("sys_string", "IDS_COM_OPT1_WI_FI_DIRECT")
+
+ 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);
+ item = elm_toolbar_item_append(control_bar, NULL, NULL, NULL, NULL);
+ elm_object_item_disabled_set(item, EINA_TRUE);
+
+ elm_object_item_disabled_set(ugd->scan_btn, !ugd->wfd_onoff);
+
+ elm_object_item_part_content_set(navi_item, "controlbar", control_bar);
+
+ __FUNC_EXIT__;
+}
diff --git a/ug-wifidirect/src/wfd_ug_multiconnect_view.c b/ug-wifidirect/src/wfd_ug_multiconnect_view.c
new file mode 100755
index 0000000..aea5ce5
--- /dev/null
+++ b/ug-wifidirect/src/wfd_ug_multiconnect_view.c
@@ -0,0 +1,695 @@
+/*
+* WiFi-Direct UG
+*
+* 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.
+*
+*/
+
+#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 select_all_itc;
+Elm_Gen_Item_Class device_itc;
+
+
+void _multiconnect_view_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;
+ }
+
+ ugd->multiconn_view_genlist = NULL;
+ elm_naviframe_item_pop(ugd->naviframe);
+
+ __FUNC_EXIT__;
+ return;
+}
+
+void reset_multi_conn_dev_list(void *data)
+{
+ struct ug_data *ugd = (struct ug_data*) data;
+ int i;
+ for (i = 0; i < MAX_PEER_NUM; i++)
+ {
+ ugd->multi_conn_dev_list[i].dev_sel_state = FALSE;
+ ugd->multi_conn_dev_list[i].peer.gl_item = NULL;
+ }
+ ugd->gl_available_dev_cnt_at_multiconn_view = 0;
+}
+
+gboolean __wfd_multi_connect_reset_cb(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ ugd->multi_connect_mode = WFD_MULTI_CONNECT_MODE_NONE;
+ ugd->raw_multi_selected_peer_cnt = 0;
+ wfd_ug_view_update_peers(ugd);
+
+ __FUNC_EXIT__;
+ return false;
+}
+
+int wfd_stop_multi_connect(void *data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ ugd->multi_connect_mode = WFD_MULTI_CONNECT_MODE_COMPLETED;
+ wfd_client_set_p2p_group_owner_intent(7);
+
+ g_timeout_add(1000 /*ms*/, __wfd_multi_connect_reset_cb, ugd);
+
+ __FUNC_EXIT__;
+ return 0;
+}
+
+int wfd_start_multi_connect(void* data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+ int i;
+ int res;
+
+ if (ugd->raw_multi_selected_peer_cnt > 0)
+ {
+ ugd->multi_connect_mode = WFD_MULTI_CONNECT_MODE_IN_PROGRESS;
+ if (wfd_client_set_p2p_group_owner_intent(15) == WIFI_DIRECT_ERROR_NONE)
+ {
+ for (i=0;i<ugd->raw_multi_selected_peer_cnt; i++)
+ {
+ res = wfd_client_connect(ugd->raw_multi_selected_peers[i].mac_addr);
+ if (res == -1)
+ {
+ DBG(LOG_VERBOSE, "Failed to connect [%s].\n", ugd->raw_multi_selected_peers[i].ssid);
+ ugd->raw_multi_selected_peers[i].conn_status = PEER_CONN_STATUS_FAILED_TO_CONNECT;
+ }
+ else
+ {
+ ugd->raw_multi_selected_peers[i].conn_status = PEER_CONN_STATUS_CONNECTING;
+ break;
+ }
+ }
+
+ if (i >= ugd->raw_multi_selected_peer_cnt)
+ {
+ wfd_client_set_p2p_group_owner_intent(7);
+
+ DBG(LOG_VERBOSE, "All connect trails are failed.\n");
+ return -1;
+ }
+ }
+ else
+ {
+ // error popup...
+ DBG(LOG_VERBOSE, "Setting GO intent is failed.\n");
+ return -1;
+ }
+
+ }
+ else
+ {
+ DBG(LOG_VERBOSE, "No selected peers.\n");
+ return -1;
+ }
+
+ __FUNC_EXIT__;
+ return 0;
+}
+
+gboolean wfd_multi_connect_next_cb(void* data)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+ int i;
+ int res;
+
+ // Reset g_source handler..
+ ugd->g_source_multi_connect_next = 0;
+
+ if (ugd->raw_multi_selected_peer_cnt > 0)
+ {
+ ugd->multi_connect_mode = WFD_MULTI_CONNECT_MODE_IN_PROGRESS;
+ for (i=0;i<ugd->raw_multi_selected_peer_cnt; i++)
+ {
+ if (ugd->raw_multi_selected_peers[i].conn_status == PEER_CONN_STATUS_WAIT_FOR_CONNECT)
+ {
+ res = wfd_client_connect(ugd->raw_multi_selected_peers[i].mac_addr);
+ if (res == -1)
+ {
+ DBG(LOG_VERBOSE, "Failed to connect [%s].\n", ugd->raw_multi_selected_peers[i].ssid);
+ ugd->raw_multi_selected_peers[i].conn_status = PEER_CONN_STATUS_FAILED_TO_CONNECT;
+ }
+ else
+ {
+ ugd->raw_multi_selected_peers[i].conn_status = PEER_CONN_STATUS_CONNECTING;
+ break;
+ }
+ }
+ }
+
+ if (i >= ugd->raw_multi_selected_peer_cnt)
+ {
+ // All selected peers are touched.
+ DBG(LOG_VERBOSE, "Stop Multi Connect...\n");
+ wfd_stop_multi_connect(ugd);
+ }
+ }
+ else
+ {
+ DBG(LOG_VERBOSE, "No selected peers.\n");
+ return -1;
+ }
+
+ __FUNC_EXIT__;
+ return false;
+}
+
+
+void _connect_btn_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+ int i = 0;
+ int count = 0;
+ char popup_text[MAX_POPUP_TEXT_SIZE] = {0};
+ DBG(LOG_VERBOSE, "_connect_btn_cb \n");
+
+ for (i = 0; i < ugd->gl_available_peer_cnt ; i++)
+ {
+ if (TRUE == ugd->multi_conn_dev_list[i].dev_sel_state)
+ {
+ DBG(LOG_VERBOSE, "ugd->peers[i].mac_addr = %s, i = %d\n", ugd->multi_conn_dev_list[i].peer.mac_addr, i);
+
+ memcpy(&ugd->raw_multi_selected_peers[count], &ugd->multi_conn_dev_list[i].peer,sizeof(device_type_s));
+ ugd->raw_multi_selected_peers[count].conn_status = PEER_CONN_STATUS_WAIT_FOR_CONNECT;
+ count++;
+ }
+ }
+
+ ugd->raw_multi_selected_peer_cnt = count;
+
+ /* if more than 7 device selected, show the popup */
+ if (count > MAX_POPUP_PEER_NUM) {
+ snprintf(popup_text, MAX_POPUP_TEXT_SIZE, _("IDS_WFD_POP_MULTI_CONNECT"), count);
+ wfd_ug_warn_popup(ugd, popup_text, POP_TYPE_MULTI_CONNECT_POPUP);
+ }
+
+ if (wfd_start_multi_connect(ugd) != -1)
+ {
+ wfd_ug_view_update_peers(ugd);
+ }
+
+ elm_naviframe_item_pop(ugd->naviframe);
+
+ //ToDo: Do we need to free multiconn_view_genlist?
+ ugd->multiconn_view_genlist = NULL;
+ _change_multi_button_title(ugd);
+
+ __FUNC_EXIT__;
+ return;
+}
+
+
+
+static void _wfd_gl_multi_sel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+
+ int i = 0;
+ int index = 0;
+ int sel_count = 0;
+ bool is_sel = FALSE;
+ bool is_selct_all = TRUE;
+ Eina_Bool state = 0;
+ Evas_Object *chk_box = NULL;
+ char msg[MAX_POPUP_TEXT_SIZE] = {0};
+ struct ug_data *ugd = (struct ug_data*) data;
+ Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+
+ if (NULL == ugd || NULL == item) {
+ DBG(LOG_ERROR, "The param is NULL\n");
+ return;
+ }
+
+ elm_genlist_item_selected_set(item, EINA_FALSE);
+ index = elm_genlist_item_index_get(item) - 3; /* subtract the previous items */
+ DBG(LOG_VERBOSE, "selected index = %d \n", index);
+ if (index < 0) {
+ DBG(LOG_ERROR, "The index is invalid.\n");
+ return;
+ }
+
+ chk_box = elm_object_item_part_content_get((Elm_Object_Item *)event_info, "elm.icon.1");
+ state = elm_check_state_get(chk_box);
+ DBG(LOG_VERBOSE, "state = %d \n", state);
+ elm_check_state_set(chk_box, !state);
+
+ ugd->multi_conn_dev_list[index].dev_sel_state = !state;
+ DBG(LOG_VERBOSE, "ptr->dev_sel_state = %d \n", ugd->multi_conn_dev_list[index].dev_sel_state);
+ DBG(LOG_VERBOSE, "ptr->peer.mac_addr = %s \n", ugd->multi_conn_dev_list[index].peer.mac_addr);
+
+ /* update the checkbox and button */
+ for (; i < ugd->gl_available_dev_cnt_at_multiconn_view; i++) {
+ if (ugd->multi_conn_dev_list[i].dev_sel_state) {
+ is_sel = TRUE;
+ sel_count++;
+ } else {
+ is_selct_all = FALSE;
+ }
+ }
+
+ chk_box = elm_object_item_part_content_get(ugd->mcview_select_all_item, "elm.icon");
+ elm_check_state_set(chk_box, is_selct_all);
+
+ if (ugd->multi_connect_btn) {
+ wfd_ug_view_refresh_button(ugd->multi_connect_btn, _("IDS_WFD_BUTTON_CONNECT"), is_sel);
+ }
+
+ if (sel_count > 0) {
+ snprintf(msg, MAX_POPUP_TEXT_SIZE, _("IDS_WFD_POP_SELECTED_DEVICE_NUM"), sel_count);
+ wfd_ug_tickernoti_popup(msg);
+ }
+
+ __FUNC_EXIT__;
+}
+
+static void _wfd_gl_sel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ int sel_count = 0;
+ char msg[MAX_POPUP_TEXT_SIZE] = {0};
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ elm_genlist_item_selected_set((Elm_Object_Item *)event_info, EINA_FALSE);
+
+ if (NULL == ugd || NULL == obj) {
+ DBG(LOG_ERROR, "NULL parameters.\n");
+ return;
+ }
+
+ Evas_Object *sel_chkbox = elm_object_item_part_content_get(ugd->mcview_select_all_item, "elm.icon");
+ if (sel_chkbox==NULL)
+ {
+ DBG(LOG_VERBOSE, "select-all chkbox is NULL\n");
+ return;
+ }
+ Eina_Bool state = elm_check_state_get(sel_chkbox);
+
+ if (state==TRUE)
+ state = FALSE;
+ else
+ state = TRUE;
+ elm_check_state_set(sel_chkbox, state);
+
+ DBG(LOG_VERBOSE, "state = %d \n", state);
+
+ int i = 0;
+ bool is_sel = FALSE;
+ Elm_Object_Item *item = NULL;
+ Evas_Object *chk_box = NULL;
+
+ /* set the state of all the available devices */
+ for (i = 0; i < ugd->gl_available_dev_cnt_at_multiconn_view; i++) {
+ is_sel = state;
+ ugd->multi_conn_dev_list[i].dev_sel_state = state;
+ item = ugd->multi_conn_dev_list[i].peer.gl_item;
+ chk_box = elm_object_item_part_content_get(item, "elm.icon.1");
+ elm_check_state_set(chk_box, state);
+
+ if (state) {
+ sel_count++;
+ }
+ }
+
+ /* update the connect button */
+ if (ugd->multi_connect_btn) {
+ wfd_ug_view_refresh_button(ugd->multi_connect_btn, _("IDS_WFD_BUTTON_CONNECT"), is_sel);
+ }
+
+ /* tickernoti popup */
+ if (sel_count > 0) {
+ snprintf(msg, MAX_POPUP_TEXT_SIZE, _("IDS_WFD_POP_SELECTED_DEVICE_NUM"), sel_count);
+ wfd_ug_tickernoti_popup(msg);
+ }
+
+ //elm_check_state_set(ugd->mcview_select_all_icon, EINA_FALSE);
+}
+
+
+static char *_wfd_gl_device_label_get(void *data, Evas_Object *obj, const char *part)
+{
+ DBG(LOG_VERBOSE, "part %s", part);
+ device_type_s *peer = (device_type_s*) data;
+
+ if (NULL == peer)
+ return NULL;
+
+ if (!strcmp(part, "elm.text")) {
+ return strdup(peer->ssid);
+ }
+ return NULL;
+}
+
+
+static char *__wfd_get_device_icon_path(device_type_s *peer)
+{
+ char *img_path = NULL;
+
+ switch(peer->category)
+ {
+ case WFD_DEVICE_TYPE_COMPUTER:
+ img_path = WFD_ICON_DEVICE_COMPUTER;
+ break;
+ case WFD_DEVICE_TYPE_INPUT_DEVICE:
+ img_path = WFD_ICON_DEVICE_INPUT_DEVICE;
+ break;
+ case WFD_DEVICE_TYPE_PRINTER:
+ img_path = WFD_ICON_DEVICE_PRINTER;
+ break;
+ case WFD_DEVICE_TYPE_CAMERA:
+ img_path = WFD_ICON_DEVICE_CAMERA;
+ break;
+ case WFD_DEVICE_TYPE_STORAGE:
+ img_path = WFD_ICON_DEVICE_STORAGE;
+ break;
+ case WFD_DEVICE_TYPE_NW_INFRA:
+ img_path = WFD_ICON_DEVICE_NETWORK_INFRA;
+ break;
+ case WFD_DEVICE_TYPE_DISPLAYS:
+ img_path = WFD_ICON_DEVICE_DISPLAY;
+ break;
+ case WFD_DEVICE_TYPE_MM_DEVICES:
+ img_path = WFD_ICON_DEVICE_MULTIMEDIA_DEVICE;
+ break;
+ case WFD_DEVICE_TYPE_GAME_DEVICES:
+ img_path = WFD_ICON_DEVICE_GAMING_DEVICE;
+ break;
+ case WFD_DEVICE_TYPE_TELEPHONE:
+ img_path = WFD_ICON_DEVICE_TELEPHONE;
+ break;
+ case WFD_DEVICE_TYPE_AUDIO:
+ img_path = WFD_ICON_DEVICE_AUDIO_DEVICE;
+ break;
+ default:
+ img_path = WFD_ICON_DEVICE_COMPUTER;
+ break;
+ }
+
+ return img_path;
+}
+
+
+
+static void _wfd_check_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ struct ug_data *ugd = (struct ug_data*) data;
+ if (NULL == ugd || NULL == obj) {
+ DBG(LOG_ERROR, "NULL parameters.\n");
+ return;
+ }
+
+ int i = 0;
+ bool is_sel = FALSE;
+ Elm_Object_Item *item = NULL;
+ Evas_Object *chk_box = NULL;
+ Eina_Bool state = elm_check_state_get(obj);
+ elm_check_state_set(obj, !state);
+
+ DBG(LOG_VERBOSE, "state = %d \n", state);
+
+#if 0
+ /* set the state of all the available devices */
+ for (i = 0; i < ugd->gl_available_dev_cnt_at_multiconn_view; i++) {
+ is_sel = state;
+ ugd->multi_conn_dev_list[i].dev_sel_state = state;
+ item = ugd->multi_conn_dev_list[i].peer.gl_item;
+ chk_box = elm_object_item_part_content_get(item, "elm.icon.1");
+ elm_check_state_set(chk_box, state);
+ }
+
+ /* update the connect button */
+ wfd_ug_view_refresh_button(ugd->multi_connect_btn, _("IDS_WFD_BUTTON_CONNECT"), is_sel);
+#endif
+}
+
+
+static Evas_Object *_wfd_gl_device_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+ char *img_path = NULL;
+ device_type_s *peer = (device_type_s*) data;
+ Evas_Object* icon = NULL;
+
+ DBG(LOG_VERBOSE, "Part %s", part);
+
+ if (!strcmp(part, "elm.icon.1")) {
+ DBG(LOG_VERBOSE, "Part %s", part);
+ icon = elm_check_add(obj);
+ elm_check_state_set(icon, EINA_FALSE);
+ evas_object_smart_callback_add(icon, "changed", _wfd_check_clicked_cb, (void *)data);
+ } else if (!strcmp(part, "elm.icon.2")) {
+ img_path = __wfd_get_device_icon_path(peer);
+ 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);
+ }
+
+ return icon;
+}
+
+
+static char *_wfd_gl_select_all_label_get(void *data, Evas_Object *obj, const char *part)
+{
+ if (!strcmp(part, "elm.text")) {
+ DBG(LOG_VERBOSE, "Adding text %s", part);
+ return strdup("Select all");
+ }
+ return NULL;
+}
+
+static Evas_Object *_wfd_gl_select_all_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+ struct ug_data *ugd = (struct ug_data*) data;
+ Evas_Object* icon = NULL;
+
+ if (!strcmp(part, "elm.icon")) {
+ DBG(LOG_VERBOSE, "Part %s", part);
+ icon = elm_check_add(obj);
+ elm_check_state_set(icon, EINA_FALSE);
+ evas_object_smart_callback_add(icon, "changed", _wfd_check_clicked_cb, (void *)data);
+ }
+
+ return icon;
+}
+
+
+
+
+int _wfd_free_multiconnect_device(struct ug_data *ugd)
+{
+ __FUNC_ENTER__;
+
+ int count = 0;
+ int i = 0;
+
+ if (ugd->multiconn_view_genlist == NULL)
+ {
+ return 0;
+ }
+
+ if (ugd->mcview_title_item != NULL)
+ {
+ elm_object_item_del(ugd->mcview_title_item);
+ ugd->mcview_title_item = NULL;
+ }
+
+ if (ugd->mcview_select_all_item != NULL)
+ {
+ elm_object_item_del(ugd->mcview_select_all_item);
+ ugd->mcview_select_all_item = NULL;
+ }
+
+ if (ugd->mcview_nodevice_item != NULL)
+ {
+ elm_object_item_del(ugd->mcview_nodevice_item);
+ ugd->mcview_nodevice_item = NULL;
+ }
+
+ for(i = 0; i < ugd->gl_available_dev_cnt_at_multiconn_view; i++)
+ {
+ if (ugd->multi_conn_dev_list[i].peer.gl_item != NULL)
+ {
+ elm_object_item_del(ugd->multi_conn_dev_list[i].peer.gl_item);
+ ugd->multi_conn_dev_list[i].peer.gl_item = NULL;
+ }
+ }
+ ugd->gl_available_dev_cnt_at_multiconn_view = 0;
+
+ __FUNC_EXIT__;
+ return 0;
+}
+
+int _wfd_update_multiconnect_device(struct ug_data *ugd)
+{
+ __FUNC_ENTER__;
+
+ int count = 0;
+ device_type_s *device = NULL;
+ Evas_Object *genlist = NULL;
+ int i = 0;
+
+ genlist = ugd->multiconn_view_genlist;
+ if (ugd->multiconn_view_genlist == NULL)
+ {
+ return 0;
+ }
+
+ _wfd_free_multiconnect_device(ugd);
+
+ count = 0;
+ for(i = 0; i < ugd->raw_discovered_peer_cnt; i++)
+ {
+ device = &ugd->raw_discovered_peers[i];
+ if (device->is_connected == FALSE)
+ {
+ count++;
+ }
+ }
+ ugd->gl_available_dev_cnt_at_multiconn_view = count;
+
+ if (ugd->gl_available_dev_cnt_at_multiconn_view == 0)
+ {
+ DBG(LOG_ERROR, "There are No peers\n");
+ ugd->mcview_title_item = elm_genlist_item_append(genlist, &title_itc, ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(ugd->mcview_title_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ ugd->mcview_nodevice_item = elm_genlist_item_append(genlist, &noitem_itc, (void*)ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(ugd->mcview_nodevice_item , ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ }
+ else
+ {
+ ugd->mcview_title_item = elm_genlist_item_append(genlist, &title_itc, ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(ugd->mcview_title_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ ugd->mcview_select_all_item = elm_genlist_item_append(genlist, &select_all_itc, ugd, NULL, ELM_GENLIST_ITEM_NONE, _wfd_gl_sel_cb, ugd);
+
+ count = 0;
+ for(i = 0; i < ugd->raw_discovered_peer_cnt; i++)
+ {
+ device = &ugd->raw_discovered_peers[i];
+ if (device->is_connected == FALSE)
+ {
+ DBG(LOG_VERBOSE, "%dth peer being added on genlist\n", i);
+
+ if (ugd->multi_conn_dev_list[count].peer.gl_item != NULL)
+ elm_object_item_del(ugd->multi_conn_dev_list[count].peer.gl_item);
+ ugd->multi_conn_dev_list[count].peer.gl_item = NULL;
+
+ memcpy(&ugd->multi_conn_dev_list[count].peer, device, sizeof(device_type_s));
+
+ ugd->multi_conn_dev_list[count].dev_sel_state = FALSE;
+ ugd->multi_conn_dev_list[count].peer.gl_item =
+ elm_genlist_item_append(genlist, &device_itc, (void*) &ugd->multi_conn_dev_list[count].peer,
+ NULL, ELM_GENLIST_ITEM_NONE, _wfd_gl_multi_sel_cb, ugd);
+ count++;
+ }
+ }
+ }
+
+ __FUNC_EXIT__;
+ return 0;
+}
+
+void _wifid_create_multiconnect_view(struct ug_data *ugd)
+{
+ __FUNC_ENTER__;
+
+ Evas_Object *back_btn = NULL;
+ Evas_Object *control_bar = NULL;
+ Evas_Object *genlist = NULL;
+
+ Elm_Object_Item *navi_item = NULL;
+ Elm_Object_Item *item = NULL;
+
+ if(ugd == NULL)
+ {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)");
+ return;
+ }
+
+ select_all_itc.item_style = "1text.1icon.3";
+ select_all_itc.func.text_get = _wfd_gl_select_all_label_get;
+ select_all_itc.func.content_get = _wfd_gl_select_all_icon_get;
+ select_all_itc.func.state_get = NULL;
+ select_all_itc.func.del = NULL;
+
+ device_itc.item_style = "1text.2icon.2";
+ device_itc.func.text_get = _wfd_gl_device_label_get;
+ device_itc.func.content_get = _wfd_gl_device_icon_get;
+ device_itc.func.state_get = NULL;
+ device_itc.func.del = NULL;
+
+ DBG(LOG_VERBOSE, "_wifid_create_multiconnect_view");
+ 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", _multiconnect_view_back_btn_cb, (void*) ugd);
+ elm_object_focus_allow_set(back_btn, EINA_FALSE);
+
+ genlist = elm_genlist_add(ugd->naviframe);
+ ugd->multiconn_view_genlist = genlist;
+ elm_object_style_set(ugd->multiconn_view_genlist, "dialogue");
+
+ ugd->mcview_title_item = NULL;
+
+ _wfd_update_multiconnect_device(ugd);
+
+ evas_object_show(genlist);
+
+ navi_item = elm_naviframe_item_push(ugd->naviframe, _("Multi connect"), back_btn, NULL, 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->multi_scan_btn = elm_toolbar_item_append(control_bar, NULL, _("IDS_WFD_BUTTON_SCAN"), _scan_btn_cb, (void*) ugd);
+ item = elm_toolbar_item_append(control_bar, NULL, NULL, NULL, NULL);
+ elm_object_item_disabled_set(item, EINA_TRUE);
+ ugd->multi_connect_btn = elm_toolbar_item_append(control_bar, NULL, _("IDS_WFD_BUTTON_CONNECT"), _connect_btn_cb, (void*) ugd);
+
+ if (ugd->multi_connect_btn) {
+ wfd_ug_view_refresh_button(ugd->multi_connect_btn, _("IDS_WFD_BUTTON_CONNECT"), FALSE);
+ }
+
+ item = elm_toolbar_item_append(control_bar, NULL, NULL, NULL, NULL);
+ elm_object_item_disabled_set(item, EINA_TRUE);
+ elm_object_item_part_content_set(navi_item, "controlbar", control_bar);
+
+ __FUNC_EXIT__;
+}
diff --git a/ug-wifidirect/src/wfd_ug_popup.c b/ug-wifidirect/src/wfd_ug_popup.c
new file mode 100755
index 0000000..0c20c0f
--- /dev/null
+++ b/ug-wifidirect/src/wfd_ug_popup.c
@@ -0,0 +1,399 @@
+/*
+* WiFi-Direct UG
+*
+* 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.
+*
+*/
+
+#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"
+
+static void _wfd_ug_act_popup_hotspot_ok_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ // TODO: Turn off Hotspot
+ ugd->wfd_status = WFD_LINK_STATUS_DEACTIVATED;
+ wfd_mobile_ap_off(ugd);
+
+ evas_object_del(ugd->act_popup);
+ ugd->act_popup = NULL;
+ __FUNC_EXIT__;
+}
+
+static void _wfd_ug_act_popup_hotspot_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ // TODO: set genlist head item as "WiFi Direct"
+ 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__;
+}
+
+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;
+
+ // TODO: Turn off WiFi
+ ugd->wfd_status = WFD_LINK_STATUS_DEACTIVATED;
+ wfd_wifi_off(ugd);
+
+ 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;
+
+ // TODO: set genlist head item as "WiFi Direct"
+ 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__;
+}
+
+static void _wfd_ug_act_popup_disconnect_ok_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+
+ char *mac_addr = NULL;
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ if (NULL == ugd) {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return;
+ }
+
+ if (ugd->gl_connected_peer_cnt < 1) {
+ DBG(LOG_ERROR, "No connected peer\n");
+ evas_object_del(ugd->act_popup);
+ ugd->act_popup = NULL;
+ return;
+ }
+
+ /* just one peer */
+ mac_addr = ugd->gl_connected_peers[0].mac_addr;
+ wfd_client_disconnect(mac_addr);
+ if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_IN_PROGRESS) {
+ wfd_stop_multi_connect(ugd);
+ }
+
+ evas_object_del(ugd->act_popup);
+ ugd->act_popup = NULL;
+
+ __FUNC_EXIT__;
+}
+
+static void _wfd_ug_act_popup_disconnect_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data*) data;
+ if (NULL == ugd) {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return;
+ }
+
+ evas_object_del(ugd->act_popup);
+ ugd->act_popup = NULL;
+
+ __FUNC_EXIT__;
+}
+
+static void _wfd_ug_act_popup_disconnect_all_ok_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data*) data;
+ if (NULL == ugd) {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return;
+ }
+
+ wfd_client_disconnect(NULL);
+ if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_IN_PROGRESS) {
+ wfd_stop_multi_connect(ugd);
+ }
+
+ evas_object_del(ugd->act_popup);
+ ugd->act_popup = NULL;
+
+ __FUNC_EXIT__;
+}
+
+static void _wfd_ug_act_popup_disconnect_all_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data*) data;
+ if (NULL == ugd) {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return;
+ }
+
+ evas_object_del(ugd->act_popup);
+ ugd->act_popup = NULL;
+
+ __FUNC_EXIT__;
+}
+
+static void _wfd_ug_act_popup_scan_again_ok_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data*) data;
+ if (NULL == ugd) {
+ DBG(LOG_ERROR, "Incorrect parameter(NULL)\n");
+ return;
+ }
+
+ if (ugd->conn_wfd_item != NULL) {
+ elm_object_item_del(ugd->conn_wfd_item);
+ ugd->conn_wfd_item = NULL;
+ }
+
+ /* cancel the current connection */
+ wfd_client_disconnect(NULL);
+ if (ugd->multi_connect_mode == WFD_MULTI_CONNECT_MODE_IN_PROGRESS) {
+ wfd_stop_multi_connect(ugd);
+ }
+
+ /* start discovery again */
+ wfd_client_start_discovery(ugd);
+ evas_object_del(ugd->act_popup);
+ ugd->act_popup = NULL;
+
+ __FUNC_EXIT__;
+}
+
+static void _wfd_ug_act_popup_scan_again_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ __FUNC_ENTER__;
+
+ struct ug_data *ugd = (struct ug_data*) data;
+
+ 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);
+ btn2 = elm_button_add(popup);
+ elm_object_style_set(btn1, "popup_button/default");
+ elm_object_style_set(btn2, "popup_button/default");
+
+ /* set the different text by type */
+ if (popup_type == POPUP_TYPE_WIFI_OFF || popup_type == POPUP_TYPE_HOTSPOT_OFF) {
+ elm_object_text_set(btn1, S_("IDS_COM_SK_YES"));
+ elm_object_text_set(btn2, S_("IDS_COM_SK_NO"));
+ } else {
+ elm_object_text_set(btn1, S_("IDS_COM_SK_OK"));
+ elm_object_text_set(btn2, S_("IDS_COM_SK_CANCEL"));
+ }
+
+ elm_object_part_content_set(popup, "button1", btn1);
+ elm_object_part_content_set(popup, "button2", btn2);
+
+ /* set the different callback by type */
+ if (popup_type == POPUP_TYPE_WIFI_OFF) {
+ evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_wifi_ok_cb, (void*) ugd);
+ evas_object_smart_callback_add(btn2, "clicked", _wfd_ug_act_popup_wifi_cancel_cb, (void*) ugd);
+ } else if (popup_type == POPUP_TYPE_HOTSPOT_OFF) {
+ evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_hotspot_ok_cb, (void*) ugd);
+ evas_object_smart_callback_add(btn2, "clicked", _wfd_ug_act_popup_hotspot_cancel_cb, (void*) ugd);
+ } else if (popup_type == POP_TYPE_DISCONNECT) {
+ //evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_disconnect_ok_cb, (void*) ugd);
+ evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_disconnect_all_ok_cb, (void*) ugd);
+ evas_object_smart_callback_add(btn2, "clicked", _wfd_ug_act_popup_disconnect_cancel_cb, (void*) ugd);
+ } else if (popup_type == POP_TYPE_DISCONNECT_ALL) {
+ evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_disconnect_all_ok_cb, (void*) ugd);
+ evas_object_smart_callback_add(btn2, "clicked", _wfd_ug_act_popup_disconnect_all_cancel_cb, (void*) ugd);
+ } else if (popup_type == POP_TYPE_SCAN_AGAIN) {
+ evas_object_smart_callback_add(btn1, "clicked", _wfd_ug_act_popup_scan_again_ok_cb, (void*) ugd);
+ evas_object_smart_callback_add(btn2, "clicked", _wfd_ug_act_popup_scan_again_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_style_set(btn, "popup_button/default");
+ 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__;
+}
+
+
+void wfd_ug_tickernoti_popup(char *msg)
+{
+ __FUNC_ENTER__;
+
+ int ret = -1;
+ bundle *b = NULL;
+
+ b = bundle_create();
+ if (!b) {
+ DBG(LOG_ERROR, "FAIL: bundle_create()\n");
+ return;
+ }
+
+ /* tickernoti style */
+ ret = bundle_add(b, "0", "info");
+ if (ret) {
+ DBG(LOG_ERROR, "Fail to add tickernoti style\n");
+ bundle_free(b);
+ return;
+ }
+
+ /* popup text */
+ ret = bundle_add(b, "1", msg);
+ if (ret) {
+ DBG(LOG_ERROR, "Fail to add popup text\n");
+ bundle_free(b);
+ return;
+ }
+
+ /* orientation of tickernoti */
+ ret = bundle_add(b, "2", "1");
+ if (ret) {
+ DBG(LOG_ERROR, "Fail to add orientation of tickernoti\n");
+ bundle_free(b);
+ return;
+ }
+
+ /* timeout(second) of tickernoti */
+ ret = bundle_add(b, "3", "3");
+ if (ret) {
+ DBG(LOG_ERROR, "Fail to add timeout of tickernoti\n");
+ bundle_free(b);
+ return;
+ }
+
+ /* launch tickernoti */
+ ret = syspopup_launch(TICKERNOTI_SYSPOPUP, b);
+ if (ret) {
+ DBG(LOG_ERROR, "Fail to launch syspopup\n");
+ }
+
+ bundle_free(b);
+ __FUNC_EXIT__;
+}
+
diff --git a/ug-wifidirect/src/wfd_ug_view.c b/ug-wifidirect/src/wfd_ug_view.c
deleted file mode 100644
index 7322477..0000000
--- a/ug-wifidirect/src/wfd_ug_view.c
+++ /dev/null
@@ -1,874 +0,0 @@
-/*
- * 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__;
-}