Merge pull request #838 from shtrom/pebble-notifications-squash

Daniel Gultsch created

Send notification to Pebble on new message

Change summary

src/main/java/eu/siacs/conversations/services/NotificationService.java | 30 
1 file changed, 28 insertions(+), 2 deletions(-)

Detailed changes

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);
+			}
 		}
 
 	}