2 * mh_connected_client.c
4 * Created on: 05-Sep-2014
9 #include "mh_view_main.h"
10 #include "mobile_hotspot.h"
11 #include "mh_string.h"
13 static void __deconstruct_conn_clients_view(mh_appdata_t *ad)
15 __MOBILE_AP_FUNC_ENTER__;
17 mh_conn_client_view_t *client = &ad->connected_device;
21 no_of_dev = _get_list_clients_count(ad);
22 for (i = 0; i < no_of_dev; i++) {
23 _free_genlist_item(&ad->connected_device.station_items[i]);
26 _free_genlist_itc(&client->dev_itc[TETHERING_TYPE_WIFI]);
27 _free_genlist_itc(&client->dev_itc[TETHERING_TYPE_BT]);
28 _free_genlist_itc(&client->dev_itc[TETHERING_TYPE_USB]);
30 evas_object_del(client->genlist);
31 client->genlist = NULL;
32 client->navi_it = NULL;
33 _stop_update_device_conn_time(ad);
35 __MOBILE_AP_FUNC_EXIT__;
38 static void __update_connected_client_view(mh_appdata_t *ad)
40 __MOBILE_AP_FUNC_ENTER__;
43 ERR("Invalid param\n");
47 Elm_Object_Item *item = NULL;
48 tethering_type_e connection_type = 0;
50 tethering_client_h *handle;
52 mh_conn_client_view_t *cli_view = &(ad->connected_device);
54 elm_genlist_clear(cli_view->genlist);
56 for (l = ad->client_list; l != NULL; l = g_slist_next(l) ) {
57 handle = (tethering_client_h *)l->data;
58 tethering_client_get_tethering_type(handle, &connection_type);
60 item = elm_genlist_item_append(cli_view->genlist,
61 cli_view->dev_itc[connection_type],
63 NULL, ELM_GENLIST_ITEM_NONE,
66 ERR("elm_genlist_item_append is failed\n");
69 cli_view->station_items[count++] = item;
70 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
72 cli_view->no_of_clients = count;
73 _start_update_device_conn_time(ad);
74 __MOBILE_AP_FUNC_EXIT__;
78 void _update_conn_clients(mh_appdata_t *ad)
80 __MOBILE_AP_FUNC_ENTER__;
83 ERR("Invalid param\n");
86 unsigned int no_of_dev = 0;
87 no_of_dev = _get_list_clients_count(ad);
90 __deconstruct_conn_clients_view(ad);
91 elm_naviframe_item_pop(ad->naviframe);
93 __update_connected_client_view(ad);
95 __MOBILE_AP_FUNC_EXIT__;
99 static char *__get_diff_time(time_t connection_time)
102 char buf[MH_LABEL_LENGTH_MAX] = {0, };
110 diff = difftime(current_time, connection_time);
111 day = diff / (60 * 60 * 24);
112 diff = diff - (day * 60 * 60 * 24);
113 hour = diff / (60 * 60);
114 diff = diff - (hour * 60 * 60);
116 diff = diff - (min * 60);
120 hour = hour + day * 24;
123 snprintf(buf, sizeof(buf), "%02d:%02d:%02d", hour, min, sec);
125 snprintf(buf, sizeof(buf), "%02d:%02d", min, sec);
127 return g_strdup(buf);
130 static char *__gl_get_dev_label(void *data, Evas_Object *obj, const char *part)
132 __MOBILE_AP_FUNC_ENTER__;
134 tethering_client_h client = (tethering_client_h)data;
136 char *dev_name = NULL;
139 if (data == NULL || obj == NULL || part == NULL) {
140 ERR("Invalid param\n");
144 if (!strcmp("elm.text", part)) {
145 tethering_client_get_name(client, &name);
150 if (!strcmp(name, "UNKNOWN")) {
152 return strdup(STR_NO_NAME);
155 dev_name = elm_entry_utf8_to_markup(name);
158 } else if (!strcmp("elm.text.sub", part)) {
159 tethering_client_get_time(client, &tm);
160 return __get_diff_time(tm);
163 __MOBILE_AP_FUNC_EXIT__;
167 static Evas_Object *__gl_get_dev_wifi_icon(void *data, Evas_Object *obj,
170 Evas_Object *ly = NULL;
171 Evas_Object *icon = NULL;
173 if (!strcmp("elm.swallow.icon", part)) {
174 ly = elm_layout_add(obj);
175 elm_layout_theme_set(ly, "layout", "list/C/type.1", "default");
177 icon = elm_icon_add(obj);
178 elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, WIFI_ICON);
179 evas_object_color_set(icon, 2, 61, 132, 255);
180 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
181 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
182 elm_layout_content_set(ly, "elm.swallow.content", icon);
188 static Evas_Object *__gl_get_dev_usb_icon(void *data, Evas_Object *obj,
191 Evas_Object *ly = NULL;
192 Evas_Object *icon = NULL;
194 if (!strcmp("elm.swallow.icon", part)) {
195 ly = elm_layout_add(obj);
196 elm_layout_theme_set(ly, "layout", "list/C/type.1", "default");
198 icon = elm_icon_add(obj);
199 elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, USB_ICON);
200 evas_object_color_set(icon, 2, 61, 132, 255);
201 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
202 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
203 elm_layout_content_set(ly, "elm.swallow.content", icon);
209 static Evas_Object *__gl_get_dev_bt_icon(void *data, Evas_Object *obj,
212 Evas_Object *ly = NULL;
213 Evas_Object *icon = NULL;
215 if (!strcmp("elm.swallow.icon", part)) {
216 ly = elm_layout_add(obj);
217 elm_layout_theme_set(ly, "layout", "list/C/type.1", "default");
219 icon = elm_image_add(obj);
220 elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, BT_ICON);
221 evas_object_color_set(icon, 2, 61, 132, 255);
222 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
223 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
224 elm_layout_content_set(ly, "elm.swallow.content", icon);
230 static void __set_genlist_itc(mh_appdata_t *ad)
232 __MOBILE_AP_FUNC_ENTER__;
234 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI] = elm_genlist_item_class_new();
235 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->item_style = MH_GENLIST_2LINE_TOP_TEXT_ICON_STYLE;
236 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.text_get = __gl_get_dev_label;
237 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.content_get = __gl_get_dev_wifi_icon;
238 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.state_get = NULL;
239 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.del = NULL;
241 ad->connected_device.dev_itc[TETHERING_TYPE_USB] = elm_genlist_item_class_new();
242 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->item_style = MH_GENLIST_2LINE_TOP_TEXT_ICON_STYLE;
243 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.text_get = __gl_get_dev_label;
244 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.content_get = __gl_get_dev_usb_icon;
245 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.state_get = NULL;
246 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.del = NULL;
248 ad->connected_device.dev_itc[TETHERING_TYPE_BT] = elm_genlist_item_class_new();
249 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->item_style = MH_GENLIST_2LINE_TOP_TEXT_ICON_STYLE;
250 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.text_get = __gl_get_dev_label;
251 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.content_get = __gl_get_dev_bt_icon;
252 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.state_get = NULL;
253 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.del = NULL;
255 __MOBILE_AP_FUNC_EXIT__;
258 static void __scroll_start_cb(void *data, Evas_Object *obj, void *event_info)
260 __MOBILE_AP_FUNC_ENTER__;
262 _stop_update_device_conn_time((mh_appdata_t *)data);
263 __MOBILE_AP_FUNC_EXIT__;
266 static void __scroll_stop_cb(void *data, Evas_Object *obj, void *event_info)
268 __MOBILE_AP_FUNC_ENTER__;
270 _start_update_device_conn_time((mh_appdata_t *)data);
271 __MOBILE_AP_FUNC_EXIT__;
274 static void __create_genlist(mh_appdata_t *ad)
276 __MOBILE_AP_FUNC_ENTER__;
283 Evas_Object *genlist;
284 Elm_Object_Item *item = NULL;
285 tethering_type_e connection_type = 0;
287 tethering_client_h *handle;
290 mh_conn_client_view_t *client = &ad->connected_device;
292 genlist = elm_genlist_add(ad->naviframe);
293 if (genlist == NULL) {
294 ERR("genlist is NULL\n");
298 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
299 client->genlist = genlist;
301 __set_genlist_itc(ad);
303 for (l = ad->client_list; l != NULL; l = g_slist_next(l) ) {
304 handle = (tethering_client_h *)l->data;
305 tethering_client_get_tethering_type(handle, &connection_type);
307 item = elm_genlist_item_append(client->genlist,
308 client->dev_itc[connection_type],
310 NULL, ELM_GENLIST_ITEM_NONE,
313 ERR("elm_genlist_item_append is failed\n");
316 client->station_items[count++] = item;
317 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
319 evas_object_smart_callback_add(genlist, "scroll,anim,start",
320 __scroll_start_cb, ad);
321 evas_object_smart_callback_add(genlist, "scroll,drag,start",
322 __scroll_start_cb, ad);
323 evas_object_smart_callback_add(genlist, "scroll,anim,stop",
324 __scroll_stop_cb, ad);
325 evas_object_smart_callback_add(genlist, "scroll,drag,stop",
326 __scroll_stop_cb, ad);
328 client->no_of_clients = count;
329 _start_update_device_conn_time(ad);
331 __MOBILE_AP_FUNC_EXIT__;
334 static Eina_Bool __back_btn_cb(void *data, Elm_Object_Item *navi_item)
339 ERR("The param is NULL\n");
343 mh_appdata_t *ad = (mh_appdata_t *)data;
345 __deconstruct_conn_clients_view(ad);
351 void _create_connected_client_view(mh_appdata_t *ad)
359 mh_conn_client_view_t *client = &ad->connected_device;
361 if (client->navi_it != NULL) {
362 ERR("connected device view already exists\n");
366 __create_genlist(ad);
367 if (client->genlist == NULL) {
368 ERR("__create_genlist failed NULL\n");
372 client->navi_it = elm_naviframe_item_push(ad->naviframe, STR_CONN_DEVICES, NULL, NULL, client->genlist, NULL);
373 elm_object_item_domain_text_translatable_set(client->navi_it, PKGNAME, EINA_TRUE);
375 elm_naviframe_item_pop_cb_set(client->navi_it, __back_btn_cb, (void *)ad);