Indicate a message was delivered via push in its delivery status.

This commit is contained in:
Moxie Marlinspike
2014-02-20 16:14:58 -08:00
parent 918f223149
commit ff238a1ce9
16 changed files with 65 additions and 29 deletions

View File

@@ -284,6 +284,15 @@ public class MmsDatabase extends Database implements MmsSmsColumns {
notifyConversationListeners(getThreadIdForMessage(messageId));
}
public void markDeliveryStatus(long messageId, int status) {
SQLiteDatabase database = databaseHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(STATUS, status);
database.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {messageId + ""});
notifyConversationListeners(getThreadIdForMessage(messageId));
}
public void markAsNoSession(long messageId, long threadId) {
updateMailboxBitmask(messageId, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_NO_SESSION_BIT);
notifyConversationListeners(threadId);
@@ -855,6 +864,7 @@ public class MmsDatabase extends Database implements MmsSmsColumns {
long threadId = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.THREAD_ID));
String address = cursor.getString(cursor.getColumnIndexOrThrow(MmsDatabase.ADDRESS));
int addressDeviceId = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.ADDRESS_DEVICE_ID));
int status = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.STATUS));
DisplayRecord.Body body = getBody(cursor);
int partCount = cursor.getInt(cursor.getColumnIndexOrThrow(MmsDatabase.PART_COUNT));
Recipients recipients = getRecipientsFor(address);
@@ -863,7 +873,7 @@ public class MmsDatabase extends Database implements MmsSmsColumns {
return new MediaMmsMessageRecord(context, id, recipients, recipients.getPrimaryRecipient(),
addressDeviceId, dateSent, dateReceived, threadId, body,
slideDeck, partCount, box);
slideDeck, partCount, status, box);
}
private Recipients getRecipientsFor(String address) {

View File

@@ -467,9 +467,10 @@ public class SmsDatabase extends Database implements MmsSmsColumns {
public static class Status {
public static final int STATUS_NONE = -1;
public static final int STATUS_COMPLETE = 0;
public static final int STATUS_PENDING = 32;
public static final int STATUS_FAILED = 64;
public static final int STATUS_COMPLETE = 0;
public static final int STATUS_PENDING = 0x20;
public static final int STATUS_FAILED = 0x40;
public static final int STATUS_SENT_PUSH = 0x8000;
}
public Reader readerFor(Cursor cursor) {

View File

@@ -18,10 +18,10 @@ package org.thoughtcrime.securesms.database.model;
import android.content.Context;
import android.text.SpannableString;
import android.util.Log;
import org.thoughtcrime.securesms.R;
import org.thoughtcrime.securesms.database.MmsDatabase;
import org.thoughtcrime.securesms.database.SmsDatabase;
import org.thoughtcrime.securesms.mms.SlideDeck;
import org.thoughtcrime.securesms.recipients.Recipient;
import org.thoughtcrime.securesms.recipients.Recipients;
@@ -45,10 +45,10 @@ public class MediaMmsMessageRecord extends MessageRecord {
Recipient individualRecipient, int recipientDeviceId,
long dateSent, long dateReceived, long threadId, Body body,
ListenableFutureTask<SlideDeck> slideDeck,
int partCount, long mailbox)
int partCount, int deliveryStatus, long mailbox)
{
super(context, id, body, recipients, individualRecipient, recipientDeviceId,
dateSent, dateReceived, threadId, DELIVERY_STATUS_NONE, mailbox);
dateSent, dateReceived, threadId, getGenericDeliveryStatus(deliveryStatus), mailbox);
this.context = context.getApplicationContext();
this.partCount = partCount;
@@ -82,4 +82,8 @@ public class MediaMmsMessageRecord extends MessageRecord {
return super.getDisplayBody();
}
private static int getGenericDeliveryStatus(int status) {
return status == SmsDatabase.Status.STATUS_SENT_PUSH ? DELVIERY_STATUS_PUSH : DELIVERY_STATUS_NONE;
}
}

View File

@@ -17,10 +17,8 @@
package org.thoughtcrime.securesms.database.model;
import android.content.Context;
import android.graphics.Color;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.text.style.TextAppearanceSpan;
@@ -46,6 +44,7 @@ public abstract class MessageRecord extends DisplayRecord {
public static final int DELIVERY_STATUS_RECEIVED = 1;
public static final int DELIVERY_STATUS_PENDING = 2;
public static final int DELIVERY_STATUS_FAILED = 3;
public static final int DELVIERY_STATUS_PUSH = 4;
private final Recipient individualRecipient;
private final int recipientDeviceId;
@@ -109,6 +108,10 @@ public abstract class MessageRecord extends DisplayRecord {
return getDeliveryStatus() == DELIVERY_STATUS_RECEIVED;
}
public boolean isPushSent() {
return getDeliveryStatus() == DELVIERY_STATUS_PUSH;
}
public boolean isStaleKeyExchange() {
return SmsDatabase.Types.isStaleKeyExchange(type);
}

View File

@@ -97,6 +97,8 @@ public class SmsMessageRecord extends MessageRecord {
private static int getGenericDeliveryStatus(int status) {
if (status == SmsDatabase.Status.STATUS_NONE) {
return MessageRecord.DELIVERY_STATUS_NONE;
} else if (status >= SmsDatabase.Status.STATUS_SENT_PUSH) {
return MessageRecord.DELVIERY_STATUS_PUSH;
} else if (status >= SmsDatabase.Status.STATUS_FAILED) {
return MessageRecord.DELIVERY_STATUS_FAILED;
} else if (status >= SmsDatabase.Status.STATUS_PENDING) {