diff options
author | allu.haribabu <allu.haribabu@gmail.com> | 2016-05-19 14:55:51 +0530 |
---|---|---|
committer | Gerrit Code Review <gerrit@cyanogenmod.org> | 2016-05-24 16:50:18 -0700 |
commit | 88b174ec24c702fe82b41bed285eb9d9d3e7bc60 (patch) | |
tree | ac9469ecef37dc4146966c2708270bf3c9d92464 | |
parent | 54374cf69dd80bc21aea0574c4f91706b810a5be (diff) | |
download | android_packages_apps_Messaging-88b174ec24c702fe82b41bed285eb9d9d3e7bc60.tar.gz android_packages_apps_Messaging-88b174ec24c702fe82b41bed285eb9d9d3e7bc60.tar.bz2 android_packages_apps_Messaging-88b174ec24c702fe82b41bed285eb9d9d3e7bc60.zip |
[SMS] Replace message content can't be replaced
SMS replacing feature is missing on 13.0
Added support for this.
Change-Id: Ib03111685f420c205542b7af28c553ff18480358
Issue-Id: FEIJ-401
3 files changed, 57 insertions, 6 deletions
diff --git a/src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java b/src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java index b8c97b9..ea70250 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,18 +46,21 @@ 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 protected Object executeAction() { final Context context = Factory.get().getApplicationContext(); final ContentValues messageValues = actionParameters.getParcelable(KEY_MESSAGE_VALUES); + final boolean mReplaceable = actionParameters.getBoolean(KEY_MESSAGE_REPLACEABLE); final DatabaseWrapper db = DataModel.get().getDatabase(); // Get the SIM subscription ID @@ -109,9 +114,47 @@ 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); + LogUtil.d("MessageReplaceFeature", "cursor != null " + cursor.getCount()); + if (cursor != null) { + 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 { + messageUri = context.getContentResolver().insert(Sms.Inbox.CONTENT_URI, + messageValues); + } if (messageUri != null) { if (LogUtil.isLoggable(TAG, LogUtil.DEBUG)) { LogUtil.d(TAG, "ReceiveSmsMessageAction: Inserted SMS message into telephony, " diff --git a/src/com/android/messaging/receiver/SmsReceiver.java b/src/com/android/messaging/receiver/SmsReceiver.java index db9b4bb..a8f25b7 100644 --- a/src/com/android/messaging/receiver/SmsReceiver.java +++ b/src/com/android/messaging/receiver/SmsReceiver.java @@ -199,6 +199,14 @@ public final class SmsReceiver extends BroadcastReceiver { public static void deliverSmsMessages(final Context context, final int subId, final int errorCode, final android.telephony.SmsMessage[] messages) { + final android.telephony.SmsMessage sms = messages[0]; + boolean isReplaceable = false; + LogUtil.d("MessageReplaceFeature", "Is SMS Message Replaceable : " + sms.isReplace()); + if(sms.isReplace()) { + isReplaceable = true; + } else { + isReplaceable = false; + } final ContentValues messageValues = MmsUtils.parseReceivedSmsMessage(context, messages, errorCode); @@ -220,7 +228,7 @@ public final class SmsReceiver extends BroadcastReceiver { DebugUtils.debugClassZeroSmsEnabled()) { Factory.get().getUIIntents().launchClassZeroActivity(context, messageValues); } else { - final ReceiveSmsMessageAction action = new ReceiveSmsMessageAction(messageValues); + final ReceiveSmsMessageAction action = new ReceiveSmsMessageAction(messageValues, isReplaceable); action.start(); } } diff --git a/src/com/android/messaging/ui/ClassZeroActivity.java b/src/com/android/messaging/ui/ClassZeroActivity.java index ccb15a0..7698ce6 100644 --- a/src/com/android/messaging/ui/ClassZeroActivity.java +++ b/src/com/android/messaging/ui/ClassZeroActivity.java @@ -107,7 +107,7 @@ public class ClassZeroActivity extends Activity { private void saveMessage() { mMessageValues.put(Sms.Inbox.READ, mRead ? Integer.valueOf(1) : Integer.valueOf(0)); - final ReceiveSmsMessageAction action = new ReceiveSmsMessageAction(mMessageValues); + final ReceiveSmsMessageAction action = new ReceiveSmsMessageAction(mMessageValues, false); action.start(); } |