r3689 - in trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . src/phone-kit
chris at sita.openmoko.org
chris at sita.openmoko.org
Wed Dec 19 13:29:47 CET 2007
Author: chris
Date: 2007-12-19 13:29:45 +0100 (Wed, 19 Dec 2007)
New Revision: 3689
Modified:
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer.c
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.c
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.h
trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c
Log:
* configure.ac:
Add AC_GNU_SOURCE for basename(), add libnotify
* src/phone-kit/Makefile.am:
Add libnotify
* src/phone-kit/dialer-main.c: (main):
Initialise libnotify
* src/phone-kit/moko-dialer.c: (moko_dialer_init):
Use moko_notify_get_default()
* src/phone-kit/moko-notify.c: (moko_notify_start),
(moko_notify_stop), (moko_notify_init), (moko_notify_get_default):
* src/phone-kit/moko-notify.h:
Add moko_notify_get_default() to share MokoNotify with other objects
* src/phone-kit/moko-sms.c: (update_notification), (note_added_cb),
(note_modified_cb), (note_removed_cb), (sms_store_opened_cb),
(moko_sms_init):
Add notifications with libnotify
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog 2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog 2007-12-19 12:29:45 UTC (rev 3689)
@@ -1,3 +1,27 @@
+2007-12-19 Chris Lord <chris at openedhand.com>
+
+ * configure.ac:
+ Add AC_GNU_SOURCE for basename(), add libnotify
+
+ * src/phone-kit/Makefile.am:
+ Add libnotify
+
+ * src/phone-kit/dialer-main.c: (main):
+ Initialise libnotify
+
+ * src/phone-kit/moko-dialer.c: (moko_dialer_init):
+ Use moko_notify_get_default()
+
+ * src/phone-kit/moko-notify.c: (moko_notify_start),
+ (moko_notify_stop), (moko_notify_init), (moko_notify_get_default):
+ * src/phone-kit/moko-notify.h:
+ Add moko_notify_get_default() to share MokoNotify with other objects
+
+ * src/phone-kit/moko-sms.c: (update_notification), (note_added_cb),
+ (note_modified_cb), (note_removed_cb), (sms_store_opened_cb),
+ (moko_sms_init):
+ Add notifications with libnotify
+
2007-12-04 Thomas Wood <thomas at openedhand.com>
* src/phone-kit/moko-network.c: (on_network_registered),
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac 2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac 2007-12-19 12:29:45 UTC (rev 3689)
@@ -9,6 +9,7 @@
AC_PROG_CC
AC_STDC_HEADERS
AC_PROG_LIBTOOL
+AC_GNU_SOURCE
# base deps
PKG_CHECK_MODULES(DIALER,
@@ -21,6 +22,7 @@
libpulse)
PKG_CHECK_MODULES(JANA, libjana libjana-ecal)
+PKG_CHECK_MODULES(NOTIFY, libnotify)
old_cflags=$CFLAGS
CFLAGS=$DIALER_CFLAGS
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am 2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am 2007-12-19 12:29:45 UTC (rev 3689)
@@ -1,5 +1,5 @@
AM_CPPFLAGS = -DDATADIR=\"$(datadir)\" -DPKGDATADIR=\"$(pkgdatadir)\"
-AM_CFLAGS = -Wall @DIALER_CFLAGS@ @JANA_CFLAGS@
+AM_CFLAGS = -Wall @DIALER_CFLAGS@ @JANA_CFLAGS@ @NOTIFY_CFLAGS@
INCLUDES = -I$(top_srcdir)/src/common
@@ -17,7 +17,7 @@
moko-pin.c moko-pin.h \
moko-mcc-dc.h
-phone_kit_LDADD = @DIALER_LIBS@ @JANA_LIBS@ $(top_srcdir)/src/common/libdialer-common.a
+phone_kit_LDADD = @DIALER_LIBS@ @JANA_LIBS@ @NOTIFY_LIBS@ $(top_srcdir)/src/common/libdialer-common.a
%-glue.h: %-dbus.xml
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c 2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c 2007-12-19 12:29:45 UTC (rev 3689)
@@ -13,12 +13,18 @@
* GNU Lesser Public License for more details.
*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include <stdio.h>
#include <stdlib.h>
+#include <string.h>
#include <gtk/gtk.h>
#include <dbus/dbus-glib.h>
#include <dbus/dbus-glib-bindings.h>
#include <glib-object.h>
+#include <libnotify/notify.h>
#include "moko-network.h"
#include "moko-dialer.h"
@@ -64,6 +70,7 @@
DBusGProxy *proxy;
GError *error = NULL;
guint32 ret;
+ char *prog;
/* initialise type system */
g_type_init ();
@@ -110,6 +117,9 @@
/* Initialize Threading & GTK+ */
gtk_init (&argc, &argv);
+
+ /* Initialise libnotify */
+ notify_init (basename (argv[0]));
/* Create the PhoneKit objects */
network = moko_network_get_default ();
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer.c 2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer.c 2007-12-19 12:29:45 UTC (rev 3689)
@@ -811,7 +811,7 @@
priv->contacts = moko_contacts_get_default ();
/* Load the notification object */
- priv->notify = moko_notify_new ();
+ priv->notify = moko_notify_get_default ();
/* Talking: This is the object that handles interaction with the user */
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.c 2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.c 2007-12-19 12:29:45 UTC (rev 3689)
@@ -42,7 +42,7 @@
struct _MokoNotifyPrivate
{
- gboolean started;
+ int started;
/* Sound stuff */
pa_context *pac;
@@ -254,9 +254,9 @@
g_return_if_fail (MOKO_IS_NOTIFY (notify));
priv = notify->priv;
- if (priv->started)
+ priv->started ++;
+ if (priv->started != 1)
return;
- priv->started = TRUE;
moko_notify_check_brightness ();
moko_notify_start_vibrate ();
@@ -274,10 +274,12 @@
if (!priv->started)
return;
- priv->started = FALSE;
+ priv->started --;
- moko_notify_stop_vibrate ();
- moko_notify_stop_ringtone (notify);
+ if (!priv->started) {
+ moko_notify_stop_vibrate ();
+ moko_notify_stop_ringtone (notify);
+ }
}
/* GObject functions */
@@ -313,7 +315,7 @@
priv = notify->priv = MOKO_NOTIFY_GET_PRIVATE (notify);
- priv->started = FALSE;
+ priv->started = 0;
priv->pac = NULL;
/* Start up pulse audio */
@@ -344,3 +346,13 @@
return notify;
}
+MokoNotify*
+moko_notify_get_default (void)
+{
+ static MokoNotify *notify = NULL;
+
+ if (!notify) notify = moko_notify_new ();
+
+ return notify;
+}
+
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.h 2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-notify.h 2007-12-19 12:29:45 UTC (rev 3689)
@@ -66,6 +66,9 @@
MokoNotify*
moko_notify_new (void);
+MokoNotify*
+moko_notify_get_default (void);
+
void
moko_notify_start (MokoNotify *notify);
Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c 2007-12-19 11:00:11 UTC (rev 3688)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-sms.c 2007-12-19 12:29:45 UTC (rev 3689)
@@ -26,6 +26,10 @@
#include <libjana/jana.h>
#include <libjana-ecal/jana-ecal.h>
+#include <libnotify/notification.h>
+
+#include <libmokoui2/moko-stock.h>
+
#include "moko-sms.h"
#include "moko-network.h"
#include "moko-listener.h"
@@ -63,6 +67,9 @@
JanaStore *sms_store;
gboolean sms_store_open;
JanaNote *last_msg;
+
+ GList *unread_uids;
+ NotifyNotification *notification;
};
static void start_handling_sms (MokoSms *sms);
@@ -400,6 +407,100 @@
}
static void
+update_notification (MokoSms *sms, gboolean show)
+{
+ gchar *body;
+ MokoSmsPrivate *priv = sms->priv;
+
+ if (!priv->unread_uids) {
+ notify_notification_close (priv->notification, NULL);
+ return;
+ }
+
+ body = g_strdup_printf ("%d unread message(s)",
+ g_list_length (priv->unread_uids));
+ g_object_set (G_OBJECT (priv->notification), "body", body, NULL);
+ g_free (body);
+
+ /* Show notification */
+ if (show) notify_notification_show (priv->notification, NULL);
+}
+
+static void
+note_added_cb (JanaStoreView *store_view, GList *components, MokoSms *sms)
+{
+ MokoSmsPrivate *priv = sms->priv;
+ gboolean update = FALSE;
+
+ for (; components; components = components->next) {
+ JanaComponent *comp = JANA_COMPONENT (components->data);
+
+ if (!comp) continue;
+
+ if (!jana_utils_component_has_category (comp, "Read")) {
+ gchar *uid = jana_component_get_uid (comp);
+ priv->unread_uids = g_list_prepend (priv->unread_uids, uid);
+ update = TRUE;
+ }
+ }
+
+ /* TODO: Put this in an idle? */
+ if (update) update_notification (sms, TRUE);
+}
+
+static void
+note_modified_cb (JanaStoreView *store_view, GList *components, MokoSms *sms)
+{
+ MokoSmsPrivate *priv = sms->priv;
+ gboolean update = FALSE;
+
+ for (; components; components = components->next) {
+ gchar *uid;
+ GList *found;
+ JanaComponent *comp = JANA_COMPONENT (components->data);
+
+ if (!comp) continue;
+
+ uid = jana_component_get_uid (comp);
+ if ((found = g_list_find_custom (
+ priv->unread_uids, uid, (GCompareFunc)strcmp))) {
+ g_free (uid);
+ if (jana_utils_component_has_category (comp, "Read")) {
+ g_free (found->data);
+ priv->unread_uids = g_list_delete_link (priv->unread_uids, found);
+ update = TRUE;
+ }
+ } else if (!jana_utils_component_has_category (comp, "Read")) {
+ priv->unread_uids = g_list_prepend (priv->unread_uids, uid);
+ update = TRUE;
+ } else {
+ g_free (uid);
+ }
+ }
+
+ if (update) update_notification (sms, FALSE);
+}
+
+static void
+note_removed_cb (JanaStoreView *store_view, GList *uids, MokoSms *sms)
+{
+ MokoSmsPrivate *priv = sms->priv;
+ gboolean update = FALSE;
+
+ for (; uids; uids = uids->next) {
+ GList *found = g_list_find_custom (priv->unread_uids, uids->data,
+ (GCompareFunc)strcmp);
+ if (found) {
+ g_free (found->data);
+ priv->unread_uids = g_list_delete_link (priv->unread_uids, found);
+ update = TRUE;
+ }
+ }
+
+ if (update) update_notification (sms, FALSE);
+}
+
+static void
start_handling_sms (MokoSms *sms)
{
MokoSmsPrivate *priv = sms->priv;
@@ -421,9 +522,17 @@
static void
sms_store_opened_cb (JanaStore *store, MokoSms *self)
{
+ JanaStoreView *view;
MokoSmsPrivate *priv = self->priv;
priv->sms_store_open = TRUE;
+ /* Hook onto added/modified/removed signals for SMS notification */
+ view = jana_store_get_view (store);
+ g_signal_connect (view, "added", G_CALLBACK (note_added_cb), self);
+ g_signal_connect (view, "modified", G_CALLBACK (note_modified_cb), self);
+ g_signal_connect (view, "removed", G_CALLBACK (note_removed_cb), self);
+ jana_store_view_start (view);
+
if (!priv->handling_sms) start_handling_sms (self);
if (priv->got_subscriber_number)
g_signal_emit (self, signals[STATUS_CHANGED], 0, PK_SMS_READY);
@@ -435,6 +544,10 @@
MokoSmsPrivate *priv;
priv = sms->priv = MOKO_SMS_GET_PRIVATE (sms);
+ priv->notification = notify_notification_new ("New SMS message",
+ "",
+ MOKO_STOCK_SMS_NEW,
+ NULL);
/* Get the SMS note store */
priv->sms_store = jana_ecal_store_new (JANA_COMPONENT_NOTE);
More information about the commitlog
mailing list