Asking confirmation before connecting to the GPRS network when roaming

This commit is contained in:
Pierre Pronchery 2011-08-28 17:00:08 +00:00
parent 559f9ce30d
commit 9858e2cdeb
2 changed files with 44 additions and 1 deletions

View File

@ -34,6 +34,7 @@ typedef struct _Debug
GtkWidget * window; GtkWidget * window;
GtkWidget * status; GtkWidget * status;
GtkWidget * operator; GtkWidget * operator;
GtkWidget * roaming;
GtkWidget * number; GtkWidget * number;
GtkWidget * folder; GtkWidget * folder;
GtkWidget * message; GtkWidget * message;
@ -129,6 +130,13 @@ static int _debug_init(ModemPlugin * modem)
_debug_on_operator_set), modem); _debug_on_operator_set), modem);
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
hbox = gtk_hbox_new(FALSE, 4);
widget = gtk_label_new(NULL);
gtk_size_group_add_widget(group, widget);
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
debug->roaming = gtk_check_button_new_with_mnemonic("_Roaming");
gtk_box_pack_start(GTK_BOX(hbox), debug->roaming, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
/* message */ /* message */
hbox = gtk_hbox_new(FALSE, 4); hbox = gtk_hbox_new(FALSE, 4);
widget = gtk_label_new("Number: "); widget = gtk_label_new("Number: ");
@ -358,5 +366,7 @@ static void _debug_on_operator_set(gpointer data)
event.type = MODEM_EVENT_TYPE_REGISTRATION; event.type = MODEM_EVENT_TYPE_REGISTRATION;
event.registration.status = MODEM_REGISTRATION_STATUS_REGISTERED; event.registration.status = MODEM_REGISTRATION_STATUS_REGISTERED;
event.registration._operator = p; event.registration._operator = p;
event.registration.roaming = gtk_toggle_button_get_active(
GTK_TOGGLE_BUTTON(debug->roaming));
modem->helper->event(modem->helper->modem, &event); modem->helper->event(modem->helper->modem, &event);
} }

View File

@ -28,6 +28,7 @@
typedef struct _GPRS typedef struct _GPRS
{ {
guint source; guint source;
gboolean roaming;
gboolean connected; gboolean connected;
gboolean active; gboolean active;
@ -88,6 +89,7 @@ static int _gprs_init(PhonePlugin * plugin)
return 1; return 1;
plugin->priv = gprs; plugin->priv = gprs;
gprs->source = 0; gprs->source = 0;
gprs->roaming = FALSE;
gprs->connected = FALSE; gprs->connected = FALSE;
gprs->active = FALSE; gprs->active = FALSE;
gprs->window = NULL; gprs->window = NULL;
@ -114,11 +116,17 @@ static int _gprs_event_modem(PhonePlugin * plugin, ModemEvent * event);
static int _gprs_event(PhonePlugin * plugin, PhoneEvent * event) static int _gprs_event(PhonePlugin * plugin, PhoneEvent * event)
{ {
GPRS * gprs = plugin->priv;
switch(event->type) switch(event->type)
{ {
case PHONE_EVENT_TYPE_MODEM_EVENT: case PHONE_EVENT_TYPE_MODEM_EVENT:
return _gprs_event_modem(plugin, return _gprs_event_modem(plugin,
event->modem_event.event); event->modem_event.event);
case PHONE_EVENT_TYPE_OFFLINE:
case PHONE_EVENT_TYPE_UNAVAILABLE:
gprs->roaming = FALSE;
return 0;
default: /* not relevant */ default: /* not relevant */
return 0; return 0;
} }
@ -142,6 +150,7 @@ static int _gprs_event_modem(PhonePlugin * plugin, ModemEvent * event)
event->connection.out); event->connection.out);
return 0; return 0;
case MODEM_EVENT_TYPE_REGISTRATION: case MODEM_EVENT_TYPE_REGISTRATION:
gprs->roaming = event->registration.roaming;
if(gprs->active != FALSE) if(gprs->active != FALSE)
break; break;
if(event->registration.status if(event->registration.status
@ -425,15 +434,39 @@ static int _gprs_access_point(PhonePlugin * plugin)
/* gprs_connect */ /* gprs_connect */
static int _gprs_connect(PhonePlugin * plugin) static int _gprs_connect(PhonePlugin * plugin)
{ {
GPRS * gprs = plugin->priv;
GtkDialogFlags flags = GTK_DIALOG_MODAL
| GTK_DIALOG_DESTROY_WITH_PARENT;
char const message[] = "You are currently roaming, and additional"
" charges are therefore likely to apply.\n"
"Do you really want to connect?";
GtkWidget * widget;
int res;
ModemRequest request; ModemRequest request;
if(_gprs_access_point(plugin) != 0) if(_gprs_access_point(plugin) != 0)
return -1; return -1;
if(gprs->roaming)
{
widget = gtk_message_dialog_new(GTK_WINDOW(gprs->window), flags,
GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO,
#if GTK_CHECK_VERSION(2, 6, 0)
"Warning");
gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(
widget),
#endif
message);
gtk_window_set_title(GTK_WINDOW(widget), "Warning");
res = gtk_dialog_run(GTK_DIALOG(widget));
gtk_widget_destroy(widget);
if(res != GTK_RESPONSE_YES)
return 0;
}
_gprs_set_connected(plugin, TRUE, "Connecting...", 0, 0); _gprs_set_connected(plugin, TRUE, "Connecting...", 0, 0);
memset(&request, 0, sizeof(request)); memset(&request, 0, sizeof(request));
request.type = MODEM_REQUEST_CALL; request.type = MODEM_REQUEST_CALL;
request.call.call_type = MODEM_CALL_TYPE_DATA; request.call.call_type = MODEM_CALL_TYPE_DATA;
request.call.number = "*99***1#"; request.call.number = "*99***1#"; /* XXX specific to GSM/GPRS */
return plugin->helper->request(plugin->helper->phone, &request); return plugin->helper->request(plugin->helper->phone, &request);
} }