diff options
Diffstat (limited to 'src/com/android/bluetooth/mapclient/MceStateMachine.java')
-rw-r--r-- | src/com/android/bluetooth/mapclient/MceStateMachine.java | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/com/android/bluetooth/mapclient/MceStateMachine.java b/src/com/android/bluetooth/mapclient/MceStateMachine.java index 0a428b418..9b86aaef1 100644 --- a/src/com/android/bluetooth/mapclient/MceStateMachine.java +++ b/src/com/android/bluetooth/mapclient/MceStateMachine.java @@ -42,7 +42,6 @@ package com.android.bluetooth.mapclient; import android.app.Activity; import android.app.PendingIntent; -import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothMapClient; import android.bluetooth.BluetoothProfile; @@ -59,6 +58,7 @@ import android.util.Log; import com.android.bluetooth.BluetoothMetricsProto; import com.android.bluetooth.btservice.MetricsLogger; import com.android.bluetooth.btservice.ProfileService; +import com.android.bluetooth.map.BluetoothMapbMessageMime; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.IState; import com.android.internal.util.State; @@ -69,7 +69,6 @@ import com.android.vcard.VCardProperty; import java.util.ArrayList; import java.util.Calendar; -import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.concurrent.ConcurrentHashMap; @@ -347,7 +346,9 @@ final class MceStateMachine extends StateMachine { void setDefaultMessageType(SdpMasRecord sdpMasRecord) { int supportedMessageTypes = sdpMasRecord.getSupportedMessageTypes(); synchronized (mDefaultMessageType) { - if ((supportedMessageTypes & SdpMasRecord.MessageType.SMS_CDMA) > 0) { + if ((supportedMessageTypes & SdpMasRecord.MessageType.MMS) > 0) { + mDefaultMessageType = Bmessage.Type.MMS; + } else if ((supportedMessageTypes & SdpMasRecord.MessageType.SMS_CDMA) > 0) { mDefaultMessageType = Bmessage.Type.SMS_CDMA; } else if ((supportedMessageTypes & SdpMasRecord.MessageType.SMS_GSM) > 0) { mDefaultMessageType = Bmessage.Type.SMS_GSM; @@ -473,6 +474,11 @@ final class MceStateMachine extends StateMachine { } break; + case MSG_MAS_DISCONNECTED: + deferMessage(message); + transitionTo(mDisconnecting); + break; + case MSG_OUTBOUND_MESSAGE: mMasClient.makeRequest( new RequestPushMessage(FOLDER_OUTBOX, (Bmessage) message.obj, null, @@ -625,9 +631,12 @@ final class MceStateMachine extends StateMachine { } ArrayList<com.android.bluetooth.mapclient.Message> messageListing = request.getList(); if (messageListing != null) { - for (com.android.bluetooth.mapclient.Message msg : messageListing) { + // Message listings by spec arrive ordered newest first but we wish to broadcast as + // oldest first. Iterate in reverse order so we initiate requests oldest first. + for (int i = messageListing.size() - 1; i >= 0; i--) { + com.android.bluetooth.mapclient.Message msg = messageListing.get(i); if (DBG) { - Log.d(TAG, "getting message "); + Log.d(TAG, "getting message for handle " + msg.getHandle()); } // A message listing coming from the server should always have up to date data mMessages.put(msg.getHandle(), new MessageMetadata(msg.getHandle(), @@ -665,6 +674,7 @@ final class MceStateMachine extends StateMachine { switch (message.getType()) { case SMS_CDMA: case SMS_GSM: + case MMS: if (DBG) { Log.d(TAG, "Body: " + message.getBodyContent()); } @@ -705,6 +715,12 @@ final class MceStateMachine extends StateMachine { intent.putExtra(BluetoothMapClient.EXTRA_SENDER_CONTACT_NAME, originator.getDisplayName()); } + if (message.getType() == Bmessage.Type.MMS) { + BluetoothMapbMessageMime mmsBmessage = new BluetoothMapbMessageMime(); + mmsBmessage.parseMsgPart(message.getBodyContent()); + intent.putExtra(android.content.Intent.EXTRA_TEXT, + mmsBmessage.getMessageAsText()); + } // Only send to the current default SMS app if one exists String defaultMessagingPackage = Telephony.Sms.getDefaultSmsPackage(mService); if (defaultMessagingPackage != null) { @@ -712,8 +728,6 @@ final class MceStateMachine extends StateMachine { } mService.sendBroadcast(intent, android.Manifest.permission.RECEIVE_SMS); break; - - case MMS: case EMAIL: default: Log.e(TAG, "Received unhandled type" + message.getType().toString()); |