diff options
Diffstat (limited to 'src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java')
-rw-r--r-- | src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java | 65 |
1 files changed, 62 insertions, 3 deletions
diff --git a/src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java b/src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java index b8c97b9..b1800be 100644 --- a/src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java +++ b/src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java @@ -17,7 +17,9 @@ package com.android.messaging.datamodel.action; import android.content.ContentValues; +import android.content.ContentUris; import android.content.Context; +import android.database.Cursor; import android.net.Uri; import android.os.Parcel; import android.os.Parcelable; @@ -44,12 +46,14 @@ public class ReceiveSmsMessageAction extends Action implements Parcelable { private static final String TAG = LogUtil.BUGLE_DATAMODEL_TAG; private static final String KEY_MESSAGE_VALUES = "message_values"; + private static final String KEY_MESSAGE_REPLACEABLE = "message_replaceable"; /** * Create a message received from a particular number in a particular conversation */ - public ReceiveSmsMessageAction(final ContentValues messageValues) { + public ReceiveSmsMessageAction(final ContentValues messageValues, final boolean isReplaceable) { actionParameters.putParcelable(KEY_MESSAGE_VALUES, messageValues); + actionParameters.putBoolean(KEY_MESSAGE_REPLACEABLE, isReplaceable); } @Override @@ -57,6 +61,7 @@ public class ReceiveSmsMessageAction extends Action implements Parcelable { final Context context = Factory.get().getApplicationContext(); final ContentValues messageValues = actionParameters.getParcelable(KEY_MESSAGE_VALUES); final DatabaseWrapper db = DataModel.get().getDatabase(); + boolean mReplaceable = actionParameters.getBoolean(KEY_MESSAGE_REPLACEABLE); // Get the SIM subscription ID Integer subId = messageValues.getAsInteger(Sms.SUBSCRIPTION_ID); @@ -109,8 +114,62 @@ public class ReceiveSmsMessageAction extends Action implements Parcelable { messageValues.put(Sms.Inbox.SEEN, 1); // Insert into telephony - final Uri messageUri = context.getContentResolver().insert(Sms.Inbox.CONTENT_URI, - messageValues); + Uri messageUri = null; + LogUtil.d("MessageReplaceFeature", "SMS Message Replaceable : " + mReplaceable); + if (mReplaceable) { + // This must match the column IDs below. + String[] REPLACE_PROJECTION = new String[]{ + Sms._ID, + Sms.ADDRESS, + Sms.PROTOCOL + }; + int REPLACE_COLUMN_ID = 0; + String selection; + String[] selectionArgs; + selection = Sms.ADDRESS + " = ? AND " + + Sms.PROTOCOL + " = ? AND " + + Sms.SUBSCRIPTION_ID + " = ? "; + selectionArgs = new String[]{ + messageValues.getAsString(Sms.ADDRESS), + messageValues.getAsString(Sms.PROTOCOL), + messageValues.getAsString(Sms.SUBSCRIPTION_ID) + }; + + Cursor cursor = context.getContentResolver().query(Sms.Inbox.CONTENT_URI, + REPLACE_PROJECTION, selection, selectionArgs, null); + if (cursor != null && cursor.getCount() > 0) { + LogUtil.d("MessageReplaceFeature", "cursor != null " + cursor.getCount()); + if (cursor.getCount() > 1) { + //Same protocol should never have more than 1 message stored, LOG ERROR + LogUtil.wtf("MessageReplaceFeature", "MessageReplaceFeature : WTF count = " + + cursor.getCount()); + } + + try { + if (cursor.moveToFirst()) { + long messageId = cursor.getLong(REPLACE_COLUMN_ID); + messageUri = ContentUris.withAppendedId( + Sms.CONTENT_URI, messageId); + LogUtil.d("MessageReplaceFeature", "sms messageUri : " + + messageUri.toString()); + context.getContentResolver().update(messageUri, + messageValues, null, null); + } + } finally { + cursor.close(); + } + } else { + //Either cursor is NULL or count == 0 + if(cursor != null) cursor.close(); + LogUtil.d("MessageReplaceFeature", "MessageReplaceFeature : Add NEW Msg"); + mReplaceable = false; + } + } + + if (!mReplaceable) { + messageUri = context.getContentResolver().insert(Sms.Inbox.CONTENT_URI, + messageValues); + } if (messageUri != null) { if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) { |