summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeepak Kundra <deepakkundra@gmail.com>2016-05-19 14:55:51 +0530
committerDeepak Kundra <deepakkundra@gmail.com>2016-05-27 14:15:23 -0700
commitfc0349f045eed9cc9937a28afe7051cb2cdeb046 (patch)
tree93f09a957f96a1b6e1e1e760b008490519eb6440
parentbf778562bea584f7b2983d131ef240e08074165b (diff)
downloadandroid_packages_apps_Messaging-fc0349f045eed9cc9937a28afe7051cb2cdeb046.tar.gz
android_packages_apps_Messaging-fc0349f045eed9cc9937a28afe7051cb2cdeb046.tar.bz2
android_packages_apps_Messaging-fc0349f045eed9cc9937a28afe7051cb2cdeb046.zip
[SMS] Replace message content for protocol 0x41-0x47
SMS replacing feature is missing on 13.0 Added support for this. Issue-Id: FEIJ-401 Change-Id: I33d07a4accd6f95263199d87c192b7f33d3b2a96 (cherry picked from commit ddf7c99754cbee56bc1b1079cdc0692d03ac0e15)
-rw-r--r--src/com/android/messaging/datamodel/action/ReceiveSmsMessageAction.java65
-rw-r--r--src/com/android/messaging/receiver/SmsReceiver.java12
-rw-r--r--src/com/android/messaging/ui/ClassZeroActivity.java12
-rw-r--r--src/com/android/messaging/ui/UIIntents.java6
-rw-r--r--src/com/android/messaging/ui/UIIntentsImpl.java4
5 files changed, 89 insertions, 10 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)) {
diff --git a/src/com/android/messaging/receiver/SmsReceiver.java b/src/com/android/messaging/receiver/SmsReceiver.java
index db9b4bb..7a5ee48 100644
--- a/src/com/android/messaging/receiver/SmsReceiver.java
+++ b/src/com/android/messaging/receiver/SmsReceiver.java
@@ -199,11 +199,13 @@ 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 = sms.isReplace();
+ LogUtil.d("SmsReceiver.deliverSmsMessages", "Is SMS Message Replaceable : " +
+ isReplaceable);
final ContentValues messageValues =
MmsUtils.parseReceivedSmsMessage(context, messages, errorCode);
- LogUtil.v(TAG, "SmsReceiver.deliverSmsMessages");
-
final long nowInMillis = System.currentTimeMillis();
final long receivedTimestampMs = MmsUtils.getMessageDate(messages[0], nowInMillis);
@@ -218,9 +220,11 @@ public final class SmsReceiver extends BroadcastReceiver {
if (messages[0].getMessageClass() == android.telephony.SmsMessage.MessageClass.CLASS_0 ||
DebugUtils.debugClassZeroSmsEnabled()) {
- Factory.get().getUIIntents().launchClassZeroActivity(context, messageValues);
+ Factory.get().getUIIntents().launchClassZeroActivity(context, messageValues,
+ isReplaceable);
} 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..209ec25 100644
--- a/src/com/android/messaging/ui/ClassZeroActivity.java
+++ b/src/com/android/messaging/ui/ClassZeroActivity.java
@@ -80,6 +80,12 @@ public class ClassZeroActivity extends Activity {
private boolean queueMsgFromIntent(final Intent msgIntent) {
final ContentValues messageValues =
msgIntent.getParcelableExtra(UIIntents.UI_INTENT_EXTRA_MESSAGE_VALUES);
+ final boolean isReplaceable =
+ msgIntent.getBooleanExtra(UIIntents.UI_INTENT_EXTRA_MESSAGE_REPLACEABLE, false);
+ messageValues.put(UIIntents.UI_INTENT_EXTRA_MESSAGE_REPLACEABLE, isReplaceable);
+ if (VERBOSE) {
+ Log.d(TAG, "queueMsgFromIntent isReplaceable = " + isReplaceable);
+ }
// that takes the format argument is a hidden API right now.
final String message = messageValues.getAsString(Sms.BODY);
if (TextUtils.isEmpty(message)) {
@@ -107,7 +113,11 @@ 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 boolean isReplaceable =
+ mMessageValues.getAsBoolean(UIIntents.UI_INTENT_EXTRA_MESSAGE_REPLACEABLE);
+ mMessageValues.remove(UIIntents.UI_INTENT_EXTRA_MESSAGE_REPLACEABLE);
+ final ReceiveSmsMessageAction action = new ReceiveSmsMessageAction(mMessageValues,
+ isReplaceable);
action.start();
}
diff --git a/src/com/android/messaging/ui/UIIntents.java b/src/com/android/messaging/ui/UIIntents.java
index e5f8a52..c8fde48 100644
--- a/src/com/android/messaging/ui/UIIntents.java
+++ b/src/com/android/messaging/ui/UIIntents.java
@@ -57,6 +57,9 @@ public abstract class UIIntents {
// Sending class zero message to its activity
public static final String UI_INTENT_EXTRA_MESSAGE_VALUES = "message_values";
+ // Sending class zero message to its activity and notifying if it should be replaced
+ public static final String UI_INTENT_EXTRA_MESSAGE_REPLACEABLE = "message_replaceable";
+
// For the widget to go to the ConversationList from the Conversation.
public static final String UI_INTENT_EXTRA_GOTO_CONVERSATION_LIST = "goto_conv_list";
@@ -198,7 +201,8 @@ public abstract class UIIntents {
/**
* Launch an activity to show a class zero message
*/
- public abstract void launchClassZeroActivity(Context context, ContentValues messageValues);
+ public abstract void launchClassZeroActivity(Context context, ContentValues messageValues,
+ boolean isReplaceable);
/**
* Launch an activity to let the user forward a message
diff --git a/src/com/android/messaging/ui/UIIntentsImpl.java b/src/com/android/messaging/ui/UIIntentsImpl.java
index b7db719..8f1b74e 100644
--- a/src/com/android/messaging/ui/UIIntentsImpl.java
+++ b/src/com/android/messaging/ui/UIIntentsImpl.java
@@ -263,9 +263,11 @@ public class UIIntentsImpl extends UIIntents {
}
@Override
- public void launchClassZeroActivity(final Context context, final ContentValues messageValues) {
+ public void launchClassZeroActivity(final Context context, final ContentValues messageValues,
+ boolean isReplaceable) {
final Intent classZeroIntent = new Intent(context, ClassZeroActivity.class)
.putExtra(UI_INTENT_EXTRA_MESSAGE_VALUES, messageValues)
+ .putExtra(UI_INTENT_EXTRA_MESSAGE_REPLACEABLE, isReplaceable)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
context.startActivity(classZeroIntent);
}