diff --git a/src/org/kde/kdeconnect/Plugins/TelepathyPlugin/TelepathyPlugin.java b/src/org/kde/kdeconnect/Plugins/TelepathyPlugin/TelepathyPlugin.java --- a/src/org/kde/kdeconnect/Plugins/TelepathyPlugin/TelepathyPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/TelepathyPlugin/TelepathyPlugin.java @@ -23,6 +23,8 @@ import android.telephony.SmsManager; import android.util.Log; +import java.util.ArrayList; + import org.kde.kdeconnect.NetworkPackage; import org.kde.kdeconnect.Plugins.Plugin; import org.kde.kdeconnect.Plugins.TelephonyPlugin.TelephonyPlugin; @@ -64,7 +66,13 @@ String sms = np.getString("messageBody"); try { SmsManager smsManager = SmsManager.getDefault(); - smsManager.sendTextMessage(phoneNo, null, sms, null, null); + + ArrayList parts = smsManager.divideMessage(sms); + + // If this message turns out to fit in a single SMS, sendMultpartTextMessage + // properly handles that case + smsManager.sendMultipartTextMessage(phoneNo, null, parts, null, null); + //TODO: Notify other end } catch (Exception e) { //TODO: Notify other end diff --git a/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java b/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java --- a/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java +++ b/src/org/kde/kdeconnect/Plugins/TelephonyPlugin/TelephonyPlugin.java @@ -34,8 +34,10 @@ import org.kde.kdeconnect.Helpers.ContactsHelper; import org.kde.kdeconnect.NetworkPackage; import org.kde.kdeconnect.Plugins.Plugin; +import org.kde.kdeconnect_tp.BuildConfig; import org.kde.kdeconnect_tp.R; +import java.util.ArrayList; import java.util.Map; import java.util.Timer; import java.util.TimerTask; @@ -72,11 +74,19 @@ final Bundle bundle = intent.getExtras(); if (bundle == null) return; final Object[] pdus = (Object[]) bundle.get("pdus"); + ArrayList messages = new ArrayList(); + for (Object pdu : pdus) { - SmsMessage message = SmsMessage.createFromPdu((byte[])pdu); - smsBroadcastReceived(message); + // I hope, but am not sure, that the pdus array is in the order that the parts + // of the SMS message should be + // If it is not, I belive the pdu contains the information necessary to put it + // in order, but in my testing the order seems to be correct, so I won't worry + // about it now. + messages.add(SmsMessage.createFromPdu((byte[])pdu)); } + smsBroadcastReceived(messages); + } else if (TelephonyManager.ACTION_PHONE_STATE_CHANGED.equals(action)) { String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE); @@ -194,20 +204,33 @@ lastState = state; } - private void smsBroadcastReceived(SmsMessage message) { + private void smsBroadcastReceived(ArrayList messages) { + + if (BuildConfig.DEBUG) { + if (!(messages.size() > 0)) + { + throw new AssertionError("This method requires at least one message"); + } + } //Log.e("SmsBroadcastReceived", message.toString()); NetworkPackage np = new NetworkPackage(PACKAGE_TYPE_TELEPHONY); np.set("event","sms"); - String messageBody = message.getMessageBody(); + String messageBody = new String(); + + for (int index = 0; index < messages.size(); index ++) + { + messageBody += messages.get(index).getMessageBody(); + } + if (messageBody != null) { np.set("messageBody",messageBody); } - String phoneNumber = message.getOriginatingAddress(); + String phoneNumber = messages.get(0).getOriginatingAddress(); Map contactInfo = ContactsHelper.phoneNumberLookup(context, phoneNumber); if (phoneNumber != null) { np.set("phoneNumber", phoneNumber);