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]);
25 _free_genlist_itc(&client->dev_itc[TETHERING_TYPE_WIFI]);
26 _free_genlist_itc(&client->dev_itc[TETHERING_TYPE_BT]);
27 _free_genlist_itc(&client->dev_itc[TETHERING_TYPE_USB]);
29 evas_object_del(client->genlist);
30 client->genlist = NULL;
31 client->navi_it = NULL;
32 _stop_update_device_conn_time(ad);
34 __MOBILE_AP_FUNC_EXIT__;
37 static void __update_connected_client_view(mh_appdata_t *ad)
39 __MOBILE_AP_FUNC_ENTER__;
42 ERR("Invalid param\n");
46 Elm_Object_Item *item = NULL;
47 tethering_type_e connection_type = 0;
49 tethering_client_h *handle;
51 mh_conn_client_view_t *cli_view = &(ad->connected_device);
53 elm_genlist_clear(cli_view->genlist);
55 for (l = ad->client_list; l != NULL; l = g_slist_next(l)) {
56 handle = (tethering_client_h *)l->data;
57 tethering_client_get_tethering_type(handle, &connection_type);
59 item = elm_genlist_item_append(cli_view->genlist,
60 cli_view->dev_itc[connection_type],
62 NULL, ELM_GENLIST_ITEM_NONE,
65 ERR("elm_genlist_item_append is failed\n");
68 cli_view->station_items[count++] = item;
69 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
71 cli_view->no_of_clients = count;
72 _start_update_device_conn_time(ad);
73 __MOBILE_AP_FUNC_EXIT__;
77 void _update_conn_clients(mh_appdata_t *ad)
79 __MOBILE_AP_FUNC_ENTER__;
82 ERR("Invalid param\n");
85 unsigned int no_of_dev = 0;
86 no_of_dev = _get_list_clients_count(ad);
89 __deconstruct_conn_clients_view(ad);
90 elm_naviframe_item_pop(ad->naviframe);
92 __update_connected_client_view(ad);
94 __MOBILE_AP_FUNC_EXIT__;
98 static char *__get_diff_time(time_t connection_time)
101 char buf[MH_LABEL_LENGTH_MAX] = {0, };
109 diff = difftime(current_time, connection_time);
110 day = diff / (60 * 60 * 24);
111 diff = diff - (day * 60 * 60 * 24);
112 hour = diff / (60 * 60);
113 diff = diff - (hour * 60 * 60);
115 diff = diff - (min * 60);
119 hour = hour + day * 24;
122 snprintf(buf, sizeof(buf), "%02d:%02d:%02d", hour, min, sec);
124 snprintf(buf, sizeof(buf), "%02d:%02d", min, sec);
126 return g_strdup(buf);
129 static char *__gl_get_dev_label(void *data, Evas_Object *obj, const char *part)
131 __MOBILE_AP_FUNC_ENTER__;
133 tethering_client_h client = (tethering_client_h)data;
135 char *dev_name = NULL;
138 if (data == NULL || obj == NULL || part == NULL) {
139 ERR("Invalid param\n");
143 if (!strcmp("elm.text", part)) {
144 tethering_client_get_name(client, &name);
148 if (!strcmp(name, "UNKNOWN")) {
150 return strdup(STR_NO_NAME);
153 dev_name = elm_entry_utf8_to_markup(name);
156 } else if (!strcmp("elm.text.sub", part)) {
157 tethering_client_get_time(client, &tm);
158 return __get_diff_time(tm);
161 __MOBILE_AP_FUNC_EXIT__;
165 static Evas_Object *__gl_get_dev_wifi_icon(void *data, Evas_Object *obj,
168 Evas_Object *ly = NULL;
169 Evas_Object *icon = NULL;
171 if (!strcmp("elm.swallow.icon", part)) {
172 ly = elm_layout_add(obj);
173 elm_layout_theme_set(ly, "layout", "list/C/type.1", "default");
175 icon = elm_icon_add(obj);
176 elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, WIFI_ICON);
177 evas_object_color_set(icon, 2, 61, 132, 255);
178 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
179 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
180 elm_layout_content_set(ly, "elm.swallow.content", icon);
186 static Evas_Object *__gl_get_dev_usb_icon(void *data, Evas_Object *obj,
189 Evas_Object *ly = NULL;
190 Evas_Object *icon = NULL;
192 if (!strcmp("elm.swallow.icon", part)) {
193 ly = elm_layout_add(obj);
194 elm_layout_theme_set(ly, "layout", "list/C/type.1", "default");
196 icon = elm_icon_add(obj);
197 elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, USB_ICON);
198 evas_object_color_set(icon, 2, 61, 132, 255);
199 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
200 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
201 elm_layout_content_set(ly, "elm.swallow.content", icon);
207 static Evas_Object *__gl_get_dev_bt_icon(void *data, Evas_Object *obj,
210 Evas_Object *ly = NULL;
211 Evas_Object *icon = NULL;
213 if (!strcmp("elm.swallow.icon", part)) {
214 ly = elm_layout_add(obj);
215 elm_layout_theme_set(ly, "layout", "list/C/type.1", "default");
217 icon = elm_image_add(obj);
218 elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, BT_ICON);
219 evas_object_color_set(icon, 2, 61, 132, 255);
220 evas_object_size_hint_align_set(icon, EVAS_HINT_FILL, EVAS_HINT_FILL);
221 evas_object_size_hint_weight_set(icon, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
222 elm_layout_content_set(ly, "elm.swallow.content", icon);
228 static void __set_genlist_itc(mh_appdata_t *ad)
230 __MOBILE_AP_FUNC_ENTER__;
232 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI] = elm_genlist_item_class_new();
233 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->item_style = MH_GENLIST_2LINE_TOP_TEXT_ICON_STYLE;
234 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.text_get = __gl_get_dev_label;
235 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.content_get = __gl_get_dev_wifi_icon;
236 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.state_get = NULL;
237 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.del = NULL;
239 ad->connected_device.dev_itc[TETHERING_TYPE_USB] = elm_genlist_item_class_new();
240 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->item_style = MH_GENLIST_2LINE_TOP_TEXT_ICON_STYLE;
241 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.text_get = __gl_get_dev_label;
242 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.content_get = __gl_get_dev_usb_icon;
243 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.state_get = NULL;
244 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.del = NULL;
246 ad->connected_device.dev_itc[TETHERING_TYPE_BT] = elm_genlist_item_class_new();
247 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->item_style = MH_GENLIST_2LINE_TOP_TEXT_ICON_STYLE;
248 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.text_get = __gl_get_dev_label;
249 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.content_get = __gl_get_dev_bt_icon;
250 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.state_get = NULL;
251 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.del = NULL;
253 __MOBILE_AP_FUNC_EXIT__;
256 static void __scroll_start_cb(void *data, Evas_Object *obj, void *event_info)
258 __MOBILE_AP_FUNC_ENTER__;
260 _stop_update_device_conn_time((mh_appdata_t *)data);
261 __MOBILE_AP_FUNC_EXIT__;
264 static void __scroll_stop_cb(void *data, Evas_Object *obj, void *event_info)
266 __MOBILE_AP_FUNC_ENTER__;
268 _start_update_device_conn_time((mh_appdata_t *)data);
269 __MOBILE_AP_FUNC_EXIT__;
272 static void __create_genlist(mh_appdata_t *ad)
274 __MOBILE_AP_FUNC_ENTER__;
281 Evas_Object *genlist;
282 Elm_Object_Item *item = NULL;
283 tethering_type_e connection_type = 0;
285 tethering_client_h *handle;
288 mh_conn_client_view_t *client = &ad->connected_device;
290 genlist = elm_genlist_add(ad->naviframe);
291 if (genlist == NULL) {
292 ERR("genlist is NULL\n");
296 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
297 client->genlist = genlist;
299 __set_genlist_itc(ad);
301 for (l = ad->client_list; l != NULL; l = g_slist_next(l)) {
302 handle = (tethering_client_h *)l->data;
303 tethering_client_get_tethering_type(handle, &connection_type);
305 item = elm_genlist_item_append(client->genlist,
306 client->dev_itc[connection_type],
308 NULL, ELM_GENLIST_ITEM_NONE,
311 ERR("elm_genlist_item_append is failed\n");
314 client->station_items[count++] = item;
315 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
317 evas_object_smart_callback_add(genlist, "scroll,anim,start",
318 __scroll_start_cb, ad);
319 evas_object_smart_callback_add(genlist, "scroll,drag,start",
320 __scroll_start_cb, ad);
321 evas_object_smart_callback_add(genlist, "scroll,anim,stop",
322 __scroll_stop_cb, ad);
323 evas_object_smart_callback_add(genlist, "scroll,drag,stop",
324 __scroll_stop_cb, ad);
326 client->no_of_clients = count;
327 _start_update_device_conn_time(ad);
329 __MOBILE_AP_FUNC_EXIT__;
332 static Eina_Bool __back_btn_cb(void *data, Elm_Object_Item *navi_item)
337 ERR("The param is NULL\n");
341 mh_appdata_t *ad = (mh_appdata_t *)data;
343 __deconstruct_conn_clients_view(ad);
349 void _create_connected_client_view(mh_appdata_t *ad)
357 mh_conn_client_view_t *client = &ad->connected_device;
359 if (client->navi_it != NULL) {
360 ERR("connected device view already exists\n");
364 __create_genlist(ad);
365 if (client->genlist == NULL) {
366 ERR("__create_genlist failed NULL\n");
370 client->navi_it = elm_naviframe_item_push(ad->naviframe, STR_CONN_DEVICES, NULL, NULL, client->genlist, NULL);
371 elm_object_item_domain_text_translatable_set(client->navi_it, PKGNAME, EINA_TRUE);
373 elm_naviframe_item_pop_cb_set(client->navi_it, __back_btn_cb, (void *)ad);