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 *icon = NULL;
170 if (!strcmp("elm.swallow.icon", part)) {
171 icon = elm_icon_add(obj);
172 elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, WIFI_ICON);
173 evas_object_color_set(icon, 2, 61, 132, 204);
174 evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(DEFAULT_ICON_SIZE), ELM_SCALE_SIZE(DEFAULT_ICON_SIZE));
179 static Evas_Object *__gl_get_dev_usb_icon(void *data, Evas_Object *obj,
182 Evas_Object *icon = NULL;
184 if (!strcmp("elm.swallow.icon", part)) {
185 icon = elm_icon_add(obj);
186 elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, USB_ICON);
187 evas_object_color_set(icon, 2, 61, 132, 204);
188 evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(DEFAULT_ICON_SIZE), ELM_SCALE_SIZE(DEFAULT_ICON_SIZE));
193 static Evas_Object *__gl_get_dev_bt_icon(void *data, Evas_Object *obj,
196 Evas_Object *icon = NULL;
198 if (!strcmp("elm.swallow.icon", part)) {
199 icon = elm_image_add(obj);
200 elm_image_file_set(icon, EDJDIR"/"TETHERING_IMAGES_EDJ, BT_ICON);
201 evas_object_color_set(icon, 2, 61, 132, 204);
202 evas_object_size_hint_min_set(icon, ELM_SCALE_SIZE(DEFAULT_ICON_SIZE), ELM_SCALE_SIZE(DEFAULT_ICON_SIZE));
207 static void __set_genlist_itc(mh_appdata_t *ad)
209 __MOBILE_AP_FUNC_ENTER__;
211 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI] = elm_genlist_item_class_new();
212 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->item_style = MH_GENLIST_2LINE_TOP_TEXT_ICON_STYLE;
213 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.text_get = __gl_get_dev_label;
214 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.content_get = __gl_get_dev_wifi_icon;
215 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.state_get = NULL;
216 ad->connected_device.dev_itc[TETHERING_TYPE_WIFI]->func.del = NULL;
218 ad->connected_device.dev_itc[TETHERING_TYPE_USB] = elm_genlist_item_class_new();
219 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->item_style = MH_GENLIST_2LINE_TOP_TEXT_ICON_STYLE;
220 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.text_get = __gl_get_dev_label;
221 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.content_get = __gl_get_dev_usb_icon;
222 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.state_get = NULL;
223 ad->connected_device.dev_itc[TETHERING_TYPE_USB]->func.del = NULL;
225 ad->connected_device.dev_itc[TETHERING_TYPE_BT] = elm_genlist_item_class_new();
226 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->item_style = MH_GENLIST_2LINE_TOP_TEXT_ICON_STYLE;
227 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.text_get = __gl_get_dev_label;
228 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.content_get = __gl_get_dev_bt_icon;
229 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.state_get = NULL;
230 ad->connected_device.dev_itc[TETHERING_TYPE_BT]->func.del = NULL;
232 __MOBILE_AP_FUNC_EXIT__;
235 static void __scroll_start_cb(void *data, Evas_Object *obj, void *event_info)
237 __MOBILE_AP_FUNC_ENTER__;
239 _stop_update_device_conn_time((mh_appdata_t *)data);
240 __MOBILE_AP_FUNC_EXIT__;
243 static void __scroll_stop_cb(void *data, Evas_Object *obj, void *event_info)
245 __MOBILE_AP_FUNC_ENTER__;
247 _start_update_device_conn_time((mh_appdata_t *)data);
248 __MOBILE_AP_FUNC_EXIT__;
251 static void __create_genlist(mh_appdata_t *ad)
253 __MOBILE_AP_FUNC_ENTER__;
260 Evas_Object *genlist;
261 Elm_Object_Item *item = NULL;
262 tethering_type_e connection_type = 0;
264 tethering_client_h *handle;
267 mh_conn_client_view_t *client = &ad->connected_device;
269 genlist = elm_genlist_add(ad->naviframe);
270 if (genlist == NULL) {
271 ERR("genlist is NULL\n");
275 elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
276 client->genlist = genlist;
278 __set_genlist_itc(ad);
280 for (l = ad->client_list; l != NULL; l = g_slist_next(l)) {
281 handle = (tethering_client_h *)l->data;
282 tethering_client_get_tethering_type(handle, &connection_type);
284 item = elm_genlist_item_append(client->genlist,
285 client->dev_itc[connection_type],
287 NULL, ELM_GENLIST_ITEM_NONE,
290 ERR("elm_genlist_item_append is failed\n");
293 client->station_items[count++] = item;
294 elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
296 evas_object_smart_callback_add(genlist, "scroll,anim,start",
297 __scroll_start_cb, ad);
298 evas_object_smart_callback_add(genlist, "scroll,drag,start",
299 __scroll_start_cb, ad);
300 evas_object_smart_callback_add(genlist, "scroll,anim,stop",
301 __scroll_stop_cb, ad);
302 evas_object_smart_callback_add(genlist, "scroll,drag,stop",
303 __scroll_stop_cb, ad);
305 client->no_of_clients = count;
306 _start_update_device_conn_time(ad);
308 __MOBILE_AP_FUNC_EXIT__;
311 static Eina_Bool __back_btn_cb(void *data, Elm_Object_Item *navi_item)
316 ERR("The param is NULL\n");
320 mh_appdata_t *ad = (mh_appdata_t *)data;
322 __deconstruct_conn_clients_view(ad);
323 _ctxpopup_more_button_callback_add(ad);
329 void _create_connected_client_view(mh_appdata_t *ad)
337 mh_conn_client_view_t *client = &ad->connected_device;
339 if (client->navi_it != NULL) {
340 ERR("connected device view already exists\n");
344 __create_genlist(ad);
345 if (client->genlist == NULL) {
346 ERR("__create_genlist failed NULL\n");
350 client->navi_it = elm_naviframe_item_push(ad->naviframe, STR_CONN_DEVICES, NULL, NULL, client->genlist, NULL);
351 elm_object_item_domain_text_translatable_set(client->navi_it, PKGNAME, EINA_TRUE);
353 elm_naviframe_item_pop_cb_set(client->navi_it, __back_btn_cb, (void *)ad);