diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/SMSReceiver.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/SMSReceiver.java index 321514490..7056b20b9 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/SMSReceiver.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/externalevents/SMSReceiver.java @@ -26,6 +26,9 @@ import android.os.Bundle; import android.os.PowerManager; import android.telephony.SmsMessage; +import java.util.LinkedHashMap; +import java.util.Map; + import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.model.NotificationSpec; import nodomain.freeyourgadget.gadgetbridge.model.NotificationType; @@ -54,12 +57,22 @@ public class SMSReceiver extends BroadcastReceiver { if (bundle != null) { Object[] pdus = (Object[]) bundle.get("pdus"); if (pdus != null) { - for (Object pdu1 : pdus) { - byte[] pdu = (byte[]) pdu1; - SmsMessage message = SmsMessage.createFromPdu(pdu); - notificationSpec.body = message.getDisplayMessageBody(); - notificationSpec.phoneNumber = message.getOriginatingAddress(); - if (notificationSpec.phoneNumber != null) { + int pduSize = pdus.length; + Map messageMap = new LinkedHashMap<>(); + SmsMessage[] messages = new SmsMessage[pduSize]; + for (int i = 0; i < pduSize; i++) { + messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); + String originatingAddress = messages[i].getOriginatingAddress(); + if (!messageMap.containsKey(originatingAddress)) { + messageMap.put(originatingAddress, new StringBuilder()); + } + messageMap.get(originatingAddress).append(messages[i].getMessageBody()); + } + for (Map.Entry entry : messageMap.entrySet()) { + String originatingAddress = entry.getKey(); + if (originatingAddress != null) { + notificationSpec.body = entry.getValue().toString(); + notificationSpec.phoneNumber = originatingAddress; switch (GBApplication.getGrantedInterruptionFilter()) { case NotificationManager.INTERRUPTION_FILTER_ALL: break;