Send array of URIs for group MMS conversations
Bug: 145691706
Test: Tested with changes in Car/Messenger (b/145803615) to use this
API, verified it worked by sending group MMS messages to a
BT connected Android phone.
Change-Id: I839ae9590d39322e77f7a7a4b9976a8cc3367bf1
diff --git a/src/com/android/bluetooth/mapclient/MceStateMachine.java b/src/com/android/bluetooth/mapclient/MceStateMachine.java
index 85ba60e..1095135 100644
--- a/src/com/android/bluetooth/mapclient/MceStateMachine.java
+++ b/src/com/android/bluetooth/mapclient/MceStateMachine.java
@@ -70,7 +70,9 @@
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
/* The MceStateMachine is responsible for setting up and maintaining a connection to a single
@@ -720,6 +722,11 @@
mmsBmessage.parseMsgPart(message.getBodyContent());
intent.putExtra(android.content.Intent.EXTRA_TEXT,
mmsBmessage.getMessageAsText());
+ ArrayList<VCardEntry> recipients = message.getRecipients();
+ if (recipients != null && !recipients.isEmpty()) {
+ intent.putExtra(android.content.Intent.EXTRA_CC,
+ getRecipientsUri(recipients));
+ }
}
// Only send to the current default SMS app if one exists
String defaultMessagingPackage = Telephony.Sms.getDefaultSmsPackage(mService);
@@ -735,6 +742,29 @@
}
}
+ /**
+ * Retrieves the URIs of all the participants of a group conversation, besides the sender
+ * of the message.
+ * @param recipients
+ * @return
+ */
+ private String[] getRecipientsUri(ArrayList<VCardEntry> recipients) {
+ Set<String> uris = new HashSet<>();
+
+ for (VCardEntry recipient : recipients) {
+ List<VCardEntry.PhoneData> phoneData = recipient.getPhoneList();
+ if (phoneData != null && phoneData.size() > 0) {
+ String phoneNumber = phoneData.get(0).getNumber();
+ if (DBG) {
+ Log.d(TAG, "CC Recipient number: " + phoneNumber);
+ }
+ uris.add(getContactURIFromPhone(phoneNumber));
+ }
+ }
+ String[] stringUris = new String[uris.size()];
+ return uris.toArray(stringUris);
+ }
+
private void notifySentMessageStatus(String handle, EventReport.Type status) {
if (DBG) {
Log.d(TAG, "got a status for " + handle + " Status = " + status);