From bc28990a96673afe8e68289d5c41ae46a3408406 Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Sat, 29 Apr 2017 23:22:03 +0200 Subject: [PATCH] Parse the EXTRA_MESSAGE bundle in the notification, if present. This way notifications are updating for the Conversations app. --- .../externalevents/NotificationListener.java | 31 ++++++++++++++++--- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java index 0d34375bc..0f1cb7fc1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/NotificationListener.java @@ -31,6 +31,7 @@ import android.content.pm.PackageManager; import android.media.MediaMetadata; import android.media.session.PlaybackState; import android.os.Bundle; +import android.os.Parcelable; import android.os.PowerManager; import android.os.RemoteException; import android.service.notification.NotificationListenerService; @@ -260,10 +261,32 @@ public class NotificationListener extends NotificationListenerService { } CharSequence contentCS = null; - if (preferBigText && extras.containsKey(Notification.EXTRA_BIG_TEXT)) { - contentCS = extras.getCharSequence(NotificationCompat.EXTRA_BIG_TEXT); - } else if (extras.containsKey(Notification.EXTRA_TEXT)) { - contentCS = extras.getCharSequence(NotificationCompat.EXTRA_TEXT); + if (extras.containsKey(Notification.EXTRA_MESSAGES)) { + Parcelable[] parcelables = extras.getParcelableArray(NotificationCompat.EXTRA_MESSAGES); + String contentBuilder = ""; + CharSequence sender; + CharSequence prevSender = ""; + CharSequence message; + for (Parcelable p : parcelables) { + if (!(p instanceof Bundle)) + continue; + sender = ((Bundle) p).getCharSequence("sender"); + message = ((Bundle) p).getCharSequence("text"); + if (sender == null || message == null) + continue; + if (!sender.equals(prevSender) && !sender.equals(notificationSpec.title)) { + contentBuilder += sender.toString() + ": "; + prevSender = sender; + } + contentBuilder += message.toString() + "\n"; + } + contentCS = contentBuilder; + } else { + if (preferBigText && extras.containsKey(Notification.EXTRA_BIG_TEXT)) { + contentCS = extras.getCharSequence(NotificationCompat.EXTRA_BIG_TEXT); + } else if (extras.containsKey(Notification.EXTRA_TEXT)) { + contentCS = extras.getCharSequence(NotificationCompat.EXTRA_TEXT); + } } if (contentCS != null) { notificationSpec.body = contentCS.toString();