From 90d02d48da0817d7587e6e2ece4a07a39540983b Mon Sep 17 00:00:00 2001 From: Lucas De Marchi Date: Mon, 3 Sep 2012 21:58:20 +0000 Subject: [PATCH] e/connman: update manager information on UI SVN revision: 76032 --- src/modules/connman/E_Connman.h | 4 ++ src/modules/connman/e_connman.c | 10 ++++- src/modules/connman/e_mod_main.c | 71 ++++++++++++++++++++++++++++++++ 3 files changed, 83 insertions(+), 2 deletions(-) diff --git a/src/modules/connman/E_Connman.h b/src/modules/connman/E_Connman.h index 62c27e185..e3be3c9a9 100644 --- a/src/modules/connman/E_Connman.h +++ b/src/modules/connman/E_Connman.h @@ -71,4 +71,8 @@ extern int E_CONNMAN_EVENT_MANAGER_OUT; unsigned int e_connman_system_init(E_DBus_Connection *edbus_conn) EINA_ARG_NONNULL(1); unsigned int e_connman_system_shutdown(void); +/* UI calls from econnman */ + +void econnman_mod_manager_update(struct Connman_Manager *cm); + #endif /* E_CONNMAN_H */ diff --git a/src/modules/connman/e_connman.c b/src/modules/connman/e_connman.c index 09b6de06d..e23901c49 100644 --- a/src/modules/connman/e_connman.c +++ b/src/modules/connman/e_connman.c @@ -239,7 +239,7 @@ static void _manager_get_services_cb(void *data, DBusMessage *reply, } } -static void _manager_parse_prop_changed(struct Connman_Manager *cm, +static bool _manager_parse_prop_changed(struct Connman_Manager *cm, const char *name, DBusMessageIter *value) { @@ -253,7 +253,13 @@ static void _manager_parse_prop_changed(struct Connman_Manager *cm, else if (strcmp(name, "OfflineMode") == 0) cm->offline_mode = _dbus_bool_get(value); else - DBG("Unhandled property '%s'", name); + { + DBG("Unhandled property '%s'", name); + return false; + } + + econnman_mod_manager_update(cm); + return true; } static void _manager_prop_changed(void *data, DBusMessage *msg) diff --git a/src/modules/connman/e_mod_main.c b/src/modules/connman/e_mod_main.c index 1b65e0a11..77c937635 100644 --- a/src/modules/connman/e_mod_main.c +++ b/src/modules/connman/e_mod_main.c @@ -1,6 +1,8 @@ #include "e.h" #include "e_mod_main.h" +#include "E_Connman.h" + static E_Module *connman_mod; static char tmpbuf[4096]; /* general purpose buffer, just use immediately */ @@ -25,6 +27,75 @@ e_connman_theme_path(void) #undef TF } +static void _econnman_mod_manager_update_inst(E_Connman_Module_Context *ctxt, + E_Connman_Instance *inst, + enum Connman_State state, + enum Connman_Service_Type type) +{ + Evas_Object *o = inst->ui.gadget; + + switch (state) + { + case CONNMAN_STATE_ONLINE: + edje_object_signal_emit(o, "e,changed,connected,yes", "e"); + edje_object_signal_emit(o, "e,changed,state,online", "e"); + break; + case CONNMAN_STATE_READY: + edje_object_signal_emit(o, "e,changed,connected,yes", "e"); + edje_object_signal_emit(o, "e,changed,state,ready", "e"); + break; + case CONNMAN_STATE_IDLE: + edje_object_signal_emit(o, "e,changed,connected,no", "e"); + edje_object_signal_emit(o, "e,changed,state,idle", "e"); + break; + case CONNMAN_STATE_OFFLINE: + edje_object_signal_emit(o, "e,changed,connected,no", "e"); + edje_object_signal_emit(o, "e,changed,state,disconnect", "e"); + break; + case CONNMAN_STATE_NONE: + edje_object_signal_emit(o, "e,changed,connected,no", "e"); + edje_object_signal_emit(o, "e,changed,state,failure", "e"); + break; + } + + switch (type) + { + case CONNMAN_SERVICE_TYPE_ETHERNET: + edje_object_signal_emit(o, "e,changed,technology,ethernet", "e"); + break; + case CONNMAN_SERVICE_TYPE_WIFI: + edje_object_signal_emit(o, "e,changed,technology,wifi", "e"); + break; + case CONNMAN_SERVICE_TYPE_NONE: + edje_object_signal_emit(o, "e,changed,technology,none", "e"); + break; + } + + DBG("state=%d type=%d", state, type); +} + +void econnman_mod_manager_update(struct Connman_Manager *cm) +{ + enum Connman_Service_Type type; + E_Connman_Module_Context *ctxt = connman_mod->data; + E_Connman_Instance *inst; + Eina_List *l; + + DBG("cm->services=%p", cm->services); + + if (cm->services) + { + struct Connman_Service *cs = EINA_INLIST_CONTAINER_GET(cm->services, + struct Connman_Service); + type = cs->type; + } + else + type = CONNMAN_SERVICE_TYPE_NONE; + + EINA_LIST_FOREACH(ctxt->instances, l, inst) + _econnman_mod_manager_update_inst(ctxt, inst, cm->state, type); +} + static void _econnman_gadget_setup(E_Connman_Instance *inst) { E_Connman_Module_Context *ctxt = inst->ctxt;