add options for hiding service types in wireless gadget

fix T5975
This commit is contained in:
Mike Blumenkrantz 2017-09-08 14:53:49 -04:00
parent 340350fbbc
commit 2b7bfe657c
3 changed files with 127 additions and 1 deletions

View File

@ -1,4 +1,4 @@
#include "e.h"
#include "wireless.h"
EINTERN void wireless_gadget_init(void);
EINTERN void wireless_gadget_shutdown(void);
@ -7,6 +7,8 @@ EINTERN void connman_init(void);
EINTERN void connman_shutdown(void);
EINTERN Eldbus_Connection *dbus_conn;
static E_Config_DD *edd;
EINTERN Wireless_Config *wireless_config;
E_API E_Module_Api e_modapi =
{
@ -20,6 +22,16 @@ e_modapi_init(E_Module *m)
dbus_conn = eldbus_connection_get(ELDBUS_CONNECTION_TYPE_SYSTEM);
connman_init();
wireless_gadget_init();
edd = E_CONFIG_DD_NEW("Wireless_Config", Wireless_Config);
#undef T
#undef D
#define T Wireless_Config
#define D edd
E_CONFIG_VAL(D, T, disabled_types, UINT);
wireless_config = e_config_domain_load("module.wireless", edd);
if (!wireless_config) wireless_config = E_NEW(Wireless_Config, 1);
return m;
}
@ -29,5 +41,14 @@ e_modapi_shutdown(E_Module *m EINA_UNUSED)
wireless_gadget_shutdown();
connman_shutdown();
E_FREE_FUNC(dbus_conn, eldbus_connection_unref);
E_CONFIG_DD_FREE(edd);
E_FREE(wireless_config);
return 1;
}
E_API int
e_modapi_save(E_Module *m EINA_UNUSED)
{
e_config_domain_save("module.wireless", edd, wireless_config);
return 1;
}

View File

@ -587,6 +587,96 @@ _wireless_gadget_edit_dnstime(void)
evas_object_hide(elm_table_child_get(tb, 0, 6));
}
static void
_wireless_gadget_edit_services_type(Evas_Object *obj, Wireless_Service_Type type)
{
Eina_Bool state = elm_check_state_get(obj);
if (state)
wireless_config->disabled_types |= (1 << type);
else
wireless_config->disabled_types &= ~(1 << type);
e_config_save_queue();
}
static void
_wireless_gadget_edit_services_wifi(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
_wireless_gadget_edit_services_type(obj, WIRELESS_SERVICE_TYPE_WIFI);
}
static void
_wireless_gadget_edit_services_bluetooth(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
_wireless_gadget_edit_services_type(obj, WIRELESS_SERVICE_TYPE_BLUETOOTH);
}
static void
_wireless_gadget_edit_services_cellular(void *data EINA_UNUSED, Evas_Object *obj, void *event_info EINA_UNUSED)
{
_wireless_gadget_edit_services_type(obj, WIRELESS_SERVICE_TYPE_CELLULAR);
}
static void
_wireless_gadget_edit_services(void)
{
Evas_Object *tb, *bx, *ck, *fr, *r;
int row = 0;
wireless_popup.content = tb = elm_table_add(wireless_popup.popup);
elm_table_homogeneous_set(tb, 1);
E_FILL(tb);
E_EXPAND(tb);
evas_object_show(tb);
elm_box_pack_end(wireless_popup.box, tb);
fr = elm_frame_add(tb);
E_EXPAND(fr);
E_FILL(fr);
evas_object_show(fr);
elm_object_text_set(fr, _("Hide Service Types"));
elm_table_pack(tb, fr, 0, row++, 2, 1);
bx = elm_box_add(fr);
E_EXPAND(bx);
E_FILL(bx);
evas_object_show(bx);
elm_object_content_set(fr, bx);
ck = elm_check_add(tb);
E_EXPAND(ck);
E_FILL(ck);
elm_object_text_set(ck, _("Hide Wifi"));
elm_check_state_set(ck, (wireless_config->disabled_types &
(1 << WIRELESS_SERVICE_TYPE_WIFI)) == (1 << WIRELESS_SERVICE_TYPE_WIFI));
evas_object_smart_callback_add(ck, "changed", _wireless_gadget_edit_services_wifi, NULL);
evas_object_show(ck);
elm_box_pack_end(bx, ck);
ck = elm_check_add(tb);
E_EXPAND(ck);
E_FILL(ck);
elm_object_text_set(ck, _("Hide Bluetooth"));
elm_check_state_set(ck, (wireless_config->disabled_types &
(1 << WIRELESS_SERVICE_TYPE_BLUETOOTH)) == (1 << WIRELESS_SERVICE_TYPE_BLUETOOTH));
evas_object_smart_callback_add(ck, "changed", _wireless_gadget_edit_services_bluetooth, NULL);
evas_object_show(ck);
elm_box_pack_end(bx, ck);
ck = elm_check_add(tb);
E_EXPAND(ck);
E_FILL(ck);
elm_object_text_set(ck, _("Hide Cellular"));
elm_check_state_set(ck, (wireless_config->disabled_types &
(1 << WIRELESS_SERVICE_TYPE_CELLULAR)) == (1 << WIRELESS_SERVICE_TYPE_CELLULAR));
evas_object_smart_callback_add(ck, "changed", _wireless_gadget_edit_services_cellular, NULL);
evas_object_show(ck);
elm_box_pack_end(bx, ck);
r = evas_object_rectangle_add(e_comp->evas);
elm_table_pack(tb, r, 0, row++, 2, 1);
}
static Evas_Object *
_wireless_gadget_edit_basic(void)
{
@ -693,6 +783,13 @@ _wireless_gadget_edit_select_dnstime(void *data EINA_UNUSED, Evas_Object *obj EI
_wireless_gadget_edit_dnstime();
}
static void
_wireless_gadget_edit_select_services(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
{
_wireless_gadget_edit_select_pre();
_wireless_gadget_edit_services();
}
static void
_wireless_gadget_edit(int type)
{
@ -798,6 +895,7 @@ _wireless_gadget_edit(int type)
elm_list_item_selected_set(it, 1);
elm_list_item_append(list, _("Proxy"), NULL, NULL, _wireless_gadget_edit_select_proxy, NULL);
elm_list_item_append(list, _("DNS/Time"), NULL, NULL, _wireless_gadget_edit_select_dnstime, NULL);
elm_list_item_append(list, _("Services"), NULL, NULL, _wireless_gadget_edit_select_services, NULL);
elm_list_go(list);
evas_object_show(list);
@ -1124,6 +1222,7 @@ _wireless_gadget_refresh(Instance *inst)
for (type = WIRELESS_SERVICE_TYPE_WIFI; type < WIRELESS_SERVICE_TYPE_LAST; type++)
{
if (!inst->icon[type]) continue;
if ((wireless_config->disabled_types & (1U << type)) == (1U << type)) continue;
if (wireless_type_enabled[type] && (!wireless_network_count[type])) continue;
elm_box_pack_end(inst->box, inst->icon[type]);

View File

@ -66,6 +66,11 @@ typedef struct Wireless_Network Wireless_Network;
typedef Eina_Bool (*Wireless_Network_Connect_Cb)(Wireless_Network *);
typedef struct Wireless_Config
{
unsigned int disabled_types;
} Wireless_Config;
struct Wireless_Network
{
Eina_Stringshare *path;//dbus path
@ -112,6 +117,7 @@ typedef struct Wireless_Connection
typedef void (*Wireless_Auth_Cb)(void *data, const Eina_Array *fields);
extern Eldbus_Connection *dbus_conn;
extern Wireless_Config *wireless_config;
EINTERN void wireless_service_type_available_set(Eina_Bool *avail);
EINTERN void wireless_service_type_enabled_set(Eina_Bool *enabled);