aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/java/eu
diff options
context:
space:
mode:
authorOlivier Mehani <shtrom@ssji.net>2014-11-10 23:40:16 +1100
committerOlivier Mehani <shtrom@ssji.net>2015-01-05 23:06:46 +1100
commitf1ebece8669768910707d3cc696b98390bddbfc0 (patch)
treea32c2c24c65c748b9c1ebdb6e932fe45bfc250c2 /src/main/java/eu
parent2723c9ccb938e073b4c8cd26e39553a31bcbfdbe (diff)
Send notification to Pebble on new message
This implements basic notifications to the Pebble through the app (using an intent). This simply hooks into NotificationService.notify(). This is pretty basic, but it works (I haven't tested to see how the intent is received when the Pebble app is not around, though). More fancy stuff could probably be added to avoid getting flooded, but the Pebble app already does a good job a filtering notification (e.g., screen on or quiet times). Signed-off-by: Olivier Mehani <shtrom@ssji.net>
Diffstat (limited to 'src/main/java/eu')
-rw-r--r--src/main/java/eu/siacs/conversations/services/NotificationService.java30
1 files changed, 28 insertions, 2 deletions
diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java
index a30cf2f1..594b356f 100644
--- a/src/main/java/eu/siacs/conversations/services/NotificationService.java
+++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java
@@ -21,11 +21,15 @@ import android.util.Log;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Calendar;
+import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.json.JSONArray;
+import org.json.JSONObject;
+
import eu.siacs.conversations.Config;
import eu.siacs.conversations.R;
import eu.siacs.conversations.entities.Account;
@@ -65,6 +69,24 @@ public class NotificationService {
);
}
+ public void notifyPebble(Message message) {
+ final Intent i = new Intent("com.getpebble.action.SEND_NOTIFICATION");
+
+ final HashMap data = new HashMap();
+ final Conversation conversation = message.getConversation();
+ data.put("title", conversation.getName());
+ data.put("body", message.getBody());
+ final JSONObject jsonData = new JSONObject(data);
+ final String notificationData = new JSONArray().put(jsonData).toString();
+
+ i.putExtra("messageType", "PEBBLE_ALERT");
+ i.putExtra("sender", "Conversations"); /* XXX: Shouldn't be hardcoded, e.g., AbstractGenerator.APP_NAME); */
+ i.putExtra("notificationData", notificationData);
+
+ mXmppConnectionService.sendBroadcast(i);
+ }
+
+
public boolean notificationsEnabled() {
return mXmppConnectionService.getPreferences().getBoolean("show_notification", true);
}
@@ -110,9 +132,13 @@ public class NotificationService {
notifications.put(conversationUuid, mList);
}
final Account account = message.getConversation().getAccount();
- updateNotification((!(this.mIsInForeground && this.mOpenConversation == null) || !isScreenOn)
+ final boolean doNotify = (!(this.mIsInForeground && this.mOpenConversation == null) || !isScreenOn)
&& !account.inGracePeriod()
- && !this.inMiniGracePeriod(account));
+ && !this.inMiniGracePeriod(account);
+ updateNotification(doNotify);
+ if (doNotify) {
+ notifyPebble(message);
+ }
}
}