2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include "indicator.h"
23 #include "indicator_icon_util.h"
25 #include "indicator_ui.h"
27 #define ICON_PRIORITY INDICATOR_PRIORITY_NON_FIXED_5
28 #define MODULE_NAME "wifi_direct"
30 extern void show_trnsfr_icon(void *data);
31 extern void hide_trnsfr_icon(void);
33 static int register_wifi_direct_module(void *data);
34 static int unregister_wifi_direct_module(void);
36 Indicator_Icon_Object wifi_direct = {
37 .type = INDICATOR_IMG_ICON,
39 .priority = ICON_PRIORITY,
40 .always_top = EINA_TRUE,
41 .exist_in_view = EINA_FALSE,
44 .obj_exist = EINA_FALSE,
46 .init = register_wifi_direct_module,
47 .fini = unregister_wifi_direct_module,
50 static Eina_Bool wifi_direct_transferring = EINA_FALSE;
53 WIFI_DIRECT_ACTIVATE = 0,
54 WIFI_DIRECT_CONNECTED,
55 WIFI_DIRECT_DISCOVERING,
56 WIFI_DIRECT_GROUP_OWNER,
60 #define WIFI_D_ICON_NOT_CONNECTED \
61 "Bluetooth_NFC_GPS/B03_Wi-fi_direct_On_not_connected.png"
63 #define WIFI_D_ICON_CONNECTED \
64 "Bluetooth_NFC_GPS/B03_Wi-fi_direct_On_connected.png"
66 static const char *icon_path[WIFI_DIRECT_MAX] = {
67 [WIFI_DIRECT_ACTIVATE] = WIFI_D_ICON_NOT_CONNECTED,
68 [WIFI_DIRECT_CONNECTED] = WIFI_D_ICON_CONNECTED,
69 [WIFI_DIRECT_DISCOVERING] = NULL,
70 [WIFI_DIRECT_GROUP_OWNER] = WIFI_D_ICON_CONNECTED,
74 static void show_icon(void *data, int i)
76 if (i < WIFI_DIRECT_ACTIVATE || i >= WIFI_DIRECT_MAX)
77 i = WIFI_DIRECT_ACTIVATE;
79 wifi_direct.img_obj.data = icon_path[i];
80 indicator_util_icon_show(&wifi_direct);
83 static void hide_icon(void)
85 indicator_util_icon_hide(&wifi_direct);
88 static void indicator_wifi_direct_change_cb(keynode_t *node, void *data)
93 retif(data == NULL, , "Invalid parameter!");
95 ret = vconf_get_int(VCONFKEY_WIFI_DIRECT_STATE, &status);
98 INFO("wifi_direct STATUS: %d", status);
101 case VCONFKEY_WIFI_DIRECT_ACTIVATED:
102 show_icon(data, WIFI_DIRECT_ACTIVATE);
104 case VCONFKEY_WIFI_DIRECT_CONNECTED:
105 show_icon(data, WIFI_DIRECT_CONNECTED);
107 case VCONFKEY_WIFI_DIRECT_DISCOVERING:
109 case VCONFKEY_WIFI_DIRECT_GROUP_OWNER:
110 show_icon(data, WIFI_DIRECT_GROUP_OWNER);
125 indicator_wifi_direct_transfer_change_cb(keynode_t *node, void *data)
130 retif(data == NULL, , "Invalid parameter!");
132 ret = vconf_get_int(VCONFKEY_WIFI_DIRECT_TRANSFER_STATE, &status);
135 INFO("wifi_direct transferring STATUS: %d", status);
137 case VCONFKEY_WIFI_DIRECT_TRANSFER_START:
138 if (wifi_direct_transferring != EINA_TRUE) {
139 show_trnsfr_icon(data);
140 wifi_direct_transferring = EINA_TRUE;
143 case VCONFKEY_WIFI_DIRECT_TRANSFER_FAIL:
144 if (wifi_direct_transferring == EINA_TRUE) {
146 wifi_direct_transferring = EINA_FALSE;
149 case VCONFKEY_WIFI_DIRECT_TRANSFER_FINISH:
150 if (wifi_direct_transferring == EINA_TRUE) {
152 wifi_direct_transferring = EINA_FALSE;
159 static int register_wifi_direct_module(void *data)
163 retif(data == NULL, FAIL, "Invalid parameter!");
165 ret = vconf_notify_key_changed(VCONFKEY_WIFI_DIRECT_STATE,
166 indicator_wifi_direct_change_cb, data);
168 ERR("Failed to register callback! : %s",
169 VCONFKEY_WIFI_DIRECT_STATE);
171 ret = vconf_notify_key_changed(VCONFKEY_WIFI_DIRECT_TRANSFER_STATE,
172 indicator_wifi_direct_transfer_change_cb, data);
174 indicator_wifi_direct_change_cb(NULL, data);
175 indicator_wifi_direct_transfer_change_cb(NULL, data);
180 static int unregister_wifi_direct_module(void)
184 ret = vconf_ignore_key_changed(VCONFKEY_WIFI_DIRECT_STATE,
185 indicator_wifi_direct_change_cb);
187 ERR("Failed to unregister callback!");
189 ret = vconf_ignore_key_changed(VCONFKEY_WIFI_DIRECT_TRANSFER_STATE,
190 indicator_wifi_direct_transfer_change_cb);
192 ERR("Failed to unregister callback!");
194 if (wifi_direct_transferring == EINA_TRUE) {
196 wifi_direct_transferring = EINA_FALSE;