Fix wrong sync message issue for pending outgoing messages

If sync operation is occurred between ResendMessageAction and
SendMessageAction, the pending outgoing messages in local db are deleted
and new messages are added from remote db.

To fix this issue, ResendMessageAction will update RETRY_TIMESTAMP only.
And RECEIVED_TIMESTAMP and SENT_TIMESTAMP will be updated in
SendMessageAction when the message is queued.

Test: manual

Change-Id: I0ffa6f46a7094ec3dfd2954d4313b78dd57d6994
Signed-off-by: Taesu Lee <taesu82.lee@samsung.com>
diff --git a/src/com/android/messaging/datamodel/action/ResendMessageAction.java b/src/com/android/messaging/datamodel/action/ResendMessageAction.java
index 0943f72..b442ae6 100644
--- a/src/com/android/messaging/datamodel/action/ResendMessageAction.java
+++ b/src/com/android/messaging/datamodel/action/ResendMessageAction.java
@@ -80,8 +80,6 @@
 
             final ContentValues values = new ContentValues();
             values.put(MessageColumns.STATUS, MessageData.BUGLE_STATUS_OUTGOING_YET_TO_SEND);
-            values.put(MessageColumns.RECEIVED_TIMESTAMP, timestamp);
-            values.put(MessageColumns.SENT_TIMESTAMP, timestamp);
             values.put(MessageColumns.RETRY_START_TIMESTAMP, timestamp);
 
             // Row must exist as was just loaded above (on ActionService thread)
diff --git a/src/com/android/messaging/datamodel/action/SendMessageAction.java b/src/com/android/messaging/datamodel/action/SendMessageAction.java
index 35e6280..44c661d 100644
--- a/src/com/android/messaging/datamodel/action/SendMessageAction.java
+++ b/src/com/android/messaging/datamodel/action/SendMessageAction.java
@@ -95,13 +95,17 @@
     private boolean queueAction(final String messageId, final Action processingAction) {
         actionParameters.putString(KEY_MESSAGE_ID, messageId);
 
-        final long timestamp = System.currentTimeMillis();
         final DatabaseWrapper db = DataModel.get().getDatabase();
 
         final MessageData message = BugleDatabaseOperations.readMessage(db, messageId);
         // Check message can be resent
         if (message != null && message.canSendMessage()) {
-            final boolean isSms = (message.getProtocol() == MessageData.PROTOCOL_SMS);
+            final boolean isSms = message.getIsSms();
+            long timestamp = System.currentTimeMillis();
+            if (!isSms) {
+                // MMS expects timestamp rounded to nearest second
+                timestamp = 1000 * ((timestamp + 500) / 1000);
+            }
 
             final ParticipantData self = BugleDatabaseOperations.getExistingParticipant(
                     db, message.getSelfId());
@@ -110,8 +114,13 @@
 
             // Update message status
             if (message.getYetToSend()) {
-                // Initial sending of message
-                message.markMessageSending(timestamp);
+                if (message.getReceivedTimeStamp() == message.getRetryStartTimestamp()) {
+                    // Initial sending of message
+                    message.markMessageSending(timestamp);
+                } else {
+                    // Manual resend of message
+                    message.markMessageManualResend(timestamp);
+                }
             } else {
                 // Automatic resend of message
                 message.markMessageResending(timestamp);