Merge lp:~mfisch/powerd/proximity-sensor-fix into lp:powerd

Proposed by Matt Fischer
Status: Merged
Approved by: Seth Forshee
Approved revision: 51
Merged at revision: 47
Proposed branch: lp:~mfisch/powerd/proximity-sensor-fix
Merge into: lp:powerd
Diff against target: 230 lines (+129/-24)
4 files modified
debian/changelog (+8/-2)
src/powerd-internal.h (+6/-2)
src/powerd-object.c (+20/-4)
src/powerd.cpp (+95/-16)
To merge this branch: bzr merge lp:~mfisch/powerd/proximity-sensor-fix
Reviewer Review Type Date Requested Status
Seth Forshee (community) Approve
PS Jenkins bot continuous-integration Approve
Review via email: mp+169290@code.launchpad.net

Commit message

  * Only enable proximity sensor when the call is answered (LP: #1189945)
  * Clean up some of the signal handling code by separating the signal
    handlers, which should be slightly more performant

Description of the change

Listen for active/disconnected from VoiceCall and only en/disable proximity sensor on those events. This ensures that the proximity sensor is only enabled when a call is answered, not when it is incoming but not yet picked up.

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
47. By Matt Fischer

Cleanup and add comments

48. By Matt Fischer

Merge from trunk

49. By Matt Fischer

removing unused code per code review comment

Revision history for this message
Seth Forshee (sforshee) wrote :

173 + if (!strcmp(signal_name, "PropertyChanged")) {
174 + g_variant_get(parameters, "(&sv)", &prop_name, &value);
175 + if (!strcmp(prop_name,"State")) {
176 + g_variant_get(value, "&s", &prop_value);
177 + powerd_debug("Call State = %s", prop_value);
178 + if ((!strcmp(prop_value,"active")) ||
179 + (!strcmp(prop_value,"alerting"))) {
180 + //call is active, enable sensor
181 + if (powerd_add_display_request(&prox_sensor_req))
182 + powerd_warn("Request to use proximity sensor failed");
183 + }

For an outbound call won't we make 2 requests here? If so, the second will overwrite the cookie for the first, and so the first will never be released.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
50. By Matt Fischer

Making CR changes, don't make a request for alerting and active

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
51. By Matt Fischer

Fixing indentation

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Approve (continuous-integration)
Revision history for this message
Seth Forshee (sforshee) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'debian/changelog'
2--- debian/changelog 2013-06-12 14:57:44 +0000
3+++ debian/changelog 2013-06-14 16:29:27 +0000
4@@ -1,12 +1,18 @@
5-powerd (0.13daily13.06.12-0ubuntu2) UNRELEASED; urgency=low
6+powerd (0.13daily13.06.12-0ubuntu3) UNRELEASED; urgency=low
7
8+ [ Seth Forshee ]
9 * Change display request support to not update the display state
10 when added/removed requests cause no aggregate change
11 * Emit a signal when the display state changes
12 * Fix errant "Unknown signal from powerd" messages when running
13 'powerd-cli listen'
14
15- -- Seth Forshee <seth.forshee@canonical.com> Wed, 12 Jun 2013 09:52:59 -0500
16+ [ Matthew Fischer ]
17+ * Only enable proximity sensor when the call is answered (LP: #1189945)
18+ * Clean up some of the signal handling code by separating the signal
19+ handlers, which should be slightly more performant
20+
21+ -- Matthew Fischer <matthew.fischer@canonical.com> Thu, 13 Jun 2013 14:14:27 -0600
22
23 powerd (0.13daily13.06.12-0ubuntu1) saucy; urgency=low
24
25
26=== modified file 'src/powerd-internal.h'
27--- src/powerd-internal.h 2013-06-13 20:18:18 +0000
28+++ src/powerd-internal.h 2013-06-14 16:29:27 +0000
29@@ -102,8 +102,12 @@
30 gpointer user_data);
31
32 /* dbus signal handlers */
33-void on_ofono_signal(GDBusProxy *proxy, gchar *sender_name, gchar *signal_name,
34- GVariant *parameters, gpointer user_data);
35+void on_ofono_voicecallmanager_signal(GDBusProxy *proxy, gchar *sender_name,
36+ gchar *signal_name, GVariant *parameters, gpointer user_data);
37+void on_ofono_messagemanager_signal(GDBusProxy *proxy, gchar *sender_name,
38+ gchar *signal_name, GVariant *parameters, gpointer user_data);
39+void on_ofono_voicecall_signal(GDBusProxy *proxy, gchar *sender_name,
40+ gchar *signal_name, GVariant *parameters, gpointer user_data);
41
42 /* dbus proxy async setup */
43 void ofono_proxy_connect_cb(GObject *source_object, GAsyncResult *res,
44
45=== modified file 'src/powerd-object.c'
46--- src/powerd-object.c 2013-06-13 19:23:44 +0000
47+++ src/powerd-object.c 2013-06-14 16:29:27 +0000
48@@ -195,15 +195,31 @@
49 {
50 GError *error = NULL;
51 GDBusProxy *ofono_proxy = NULL;
52- powerd_debug("ofono_proxy_async called");
53+ const char *interface_name = "";
54
55 ofono_proxy = g_dbus_proxy_new_finish (res, &error);
56 if (error) {
57- powerd_warn("ofono_proxy_finish failed: %s", error->message);
58+ powerd_warn("ofono_proxy_connect_cb failed: %s", error->message);
59 g_error_free(error);
60 }
61 else {
62- g_signal_connect(ofono_proxy, "g-signal", G_CALLBACK (on_ofono_signal), NULL);
63- powerd_debug("ofono_proxy_finish succeeded");
64+ interface_name = g_dbus_proxy_get_interface_name(ofono_proxy);
65+ powerd_debug("ofono_proxy_connect_cb: proxy is %s", interface_name);
66+ if (!strcmp(interface_name,"org.ofono.VoiceCall")) {
67+ g_signal_connect(ofono_proxy, "g-signal",
68+ G_CALLBACK (on_ofono_voicecall_signal), NULL);
69+ }
70+ else if (!strcmp(interface_name,"org.ofono.VoiceCallManager")) {
71+ g_signal_connect(ofono_proxy, "g-signal",
72+ G_CALLBACK (on_ofono_voicecallmanager_signal), NULL);
73+ }
74+ else if (!strcmp(interface_name,"org.ofono.MessageManager")) {
75+ g_signal_connect(ofono_proxy, "g-signal",
76+ G_CALLBACK (on_ofono_messagemanager_signal), NULL);
77+ }
78+ else {
79+ powerd_warn("unknown interface name for this proxy, ignoring");
80+ }
81+ powerd_debug("ofono_proxy_connect_cb succeeded");
82 }
83 }
84
85=== modified file 'src/powerd.cpp'
86--- src/powerd.cpp 2013-06-13 18:47:27 +0000
87+++ src/powerd.cpp 2013-06-14 16:29:27 +0000
88@@ -206,27 +206,93 @@
89 }
90
91 void
92-on_ofono_signal (GDBusProxy *proxy,
93- gchar *sender_name,
94- gchar *signal_name,
95- GVariant *parameters,
96- gpointer user_data)
97-{
98- powerd_debug("we get signal from %s: %s", sender_name, signal_name);
99+on_ofono_voicecallmanager_signal (GDBusProxy *proxy,
100+ gchar *sender_name,
101+ gchar *signal_name,
102+ GVariant *parameters,
103+ gpointer user_data)
104+{
105+ powerd_debug("we get signal from %s: %s", sender_name, signal_name);
106+ /* from org.ofono.VoiceCallManager - a call was added */
107+ if (!strcmp(signal_name, "CallAdded")) {
108+ powerd_debug("Waking up the device - Incoming Call");
109+ powerd_reset_activity_timer(1);
110+ }
111+}
112+
113+void
114+on_ofono_messagemanager_signal (GDBusProxy *proxy,
115+ gchar *sender_name,
116+ gchar *signal_name,
117+ GVariant *parameters,
118+ gpointer user_data)
119+{
120+ powerd_debug("we get signal from %s: %s", sender_name, signal_name);
121+ /* from org.ofono.MessageManager */
122 if ((!strcmp(signal_name, "IncomingMessage")) ||
123 (!strcmp(signal_name, "ImmediateMessage"))) {
124 powerd_debug("Waking up the device - Incoming SMS");
125 powerd_reset_activity_timer(1);
126 }
127- else if (!strcmp(signal_name, "CallAdded")) {
128- powerd_debug("Waking up the device - Incoming Call");
129- if (powerd_add_display_request(&prox_sensor_req))
130- powerd_warn("Request to use proximity sensor failed");
131- powerd_reset_activity_timer(1);
132- }
133- else if (!strcmp(signal_name, "CallRemoved")) {
134- powerd_debug("Call over");
135- powerd_remove_display_request(prox_sensor_req.cookie);
136+}
137+
138+void
139+on_ofono_voicecall_signal (GDBusProxy *proxy,
140+ gchar *sender_name,
141+ gchar *signal_name,
142+ GVariant *parameters,
143+ gpointer user_data)
144+{
145+ GVariant *value = NULL;
146+ const char *prop_name;
147+ const char *prop_value;
148+ static gboolean alerted = FALSE;
149+
150+ powerd_debug("we get signal from %s: %s", sender_name, signal_name);
151+
152+ /* This function enables and disables the proximity sensor based
153+ * on the state of the call.
154+ *
155+ * Active - meaning, the call is in progress --> Proximity On
156+ * Alerting - a signal made on outbound calls only which means that
157+ * the phone is ringing on the other side, but has not
158+ * been picked up. --> Proximity On (this signal is not
159+ * sent on inbound calls)
160+ * Disconnected - the call is over. --> Proximity Off.
161+ *
162+ * For more details on states see voicecall-api.txt in the ofono source
163+ */
164+
165+ /* Note: As of June 13, 2013, the phone cannot successfully
166+ * accept a call while another call is in progress. When this is fixed
167+ * the code below will need to be rewritten to handle multiple
168+ * active/disconnected signals. LP: #1191033 (mfisch) */
169+
170+ if (!strcmp(signal_name, "PropertyChanged")) {
171+ g_variant_get(parameters, "(&sv)", &prop_name, &value);
172+ if (!strcmp(prop_name,"State")) {
173+ g_variant_get(value, "&s", &prop_value);
174+ powerd_debug("Call State = %s", prop_value);
175+ if (!strcmp(prop_value,"active")) {
176+ if (!alerted) {
177+ //call is active, enable sensor
178+ if (powerd_add_display_request(&prox_sensor_req))
179+ powerd_warn("Request to use proximity sensor failed");
180+ }
181+ }
182+ if (!strcmp(prop_value,"alerting")) {
183+ alerted = TRUE;
184+ //call is altering, enable sensor
185+ if (powerd_add_display_request(&prox_sensor_req))
186+ powerd_warn("Request to use proximity sensor failed");
187+ }
188+ else if (!strcmp(prop_value,"disconnected")) {
189+ alerted = FALSE;
190+ //call is disconnected, disable sensor
191+ powerd_remove_display_request(prox_sensor_req.cookie);
192+ }
193+ g_variant_unref(value);
194+ }
195 }
196 }
197
198@@ -269,6 +335,7 @@
199 powerd_name_acquired_cb, powerd_name_lost_cb, NULL, NULL);
200 powerd_debug("owner id: %u", name_id);
201
202+ /* for incoming SMS signals */
203 g_dbus_proxy_new_for_bus(G_BUS_TYPE_SYSTEM,
204 G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
205 NULL,
206@@ -279,6 +346,7 @@
207 (GAsyncReadyCallback)ofono_proxy_connect_cb,
208 NULL);
209
210+ /* for incoming calls Added/Removed signals */
211 g_dbus_proxy_new_for_bus(G_BUS_TYPE_SYSTEM,
212 G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
213 NULL,
214@@ -289,6 +357,17 @@
215 (GAsyncReadyCallback)ofono_proxy_connect_cb,
216 NULL);
217
218+ /* for answering a call/hanging up signals */
219+ g_dbus_proxy_new_for_bus(G_BUS_TYPE_SYSTEM,
220+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES,
221+ NULL,
222+ "org.ofono",
223+ "/ril_0/voicecall01",
224+ "org.ofono.VoiceCall",
225+ NULL,
226+ (GAsyncReadyCallback)ofono_proxy_connect_cb,
227+ NULL);
228+
229 activity_timeout = get_activity_timeout_from_gsettings();
230 powerd_debug("Activity Timeout is %d seconds\n", activity_timeout);
231

Subscribers

People subscribed via source and target branches