mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 09:49:30 +01:00
Update how we mark messages as read.
This commit is contained in:
committed by
Greyson Parrelli
parent
fdf4ad9543
commit
393e54ce91
@@ -46,6 +46,7 @@ public abstract class MessagingDatabase extends Database implements MmsSmsColumn
|
||||
protected abstract String getTableName();
|
||||
protected abstract String getTypeField();
|
||||
protected abstract String getDateSentColumnName();
|
||||
protected abstract String getDateReceivedColumnName();
|
||||
|
||||
public abstract void markExpireStarted(long messageId);
|
||||
public abstract void markExpireStarted(long messageId, long startTime);
|
||||
@@ -144,12 +145,16 @@ public abstract class MessagingDatabase extends Database implements MmsSmsColumn
|
||||
return String.format(Locale.ENGLISH, "(%s OR %s) AND %s", isSent, isReceived, isSecure);
|
||||
}
|
||||
|
||||
public void setReactionsSeen(long threadId) {
|
||||
public void setReactionsSeen(long threadId, long sinceTimestamp) {
|
||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||
ContentValues values = new ContentValues();
|
||||
String whereClause = THREAD_ID + " = ? AND " + REACTIONS_UNREAD + " = ?";
|
||||
String[] whereArgs = new String[]{String.valueOf(threadId), "1"};
|
||||
|
||||
if (sinceTimestamp > -1) {
|
||||
whereClause += " AND " + getDateReceivedColumnName() + " <= " + sinceTimestamp;
|
||||
}
|
||||
|
||||
values.put(REACTIONS_UNREAD, 0);
|
||||
values.put(REACTIONS_LAST_SEEN, System.currentTimeMillis());
|
||||
|
||||
|
||||
@@ -248,6 +248,11 @@ public class MmsDatabase extends MessagingDatabase {
|
||||
return DATE_SENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getDateReceivedColumnName() {
|
||||
return DATE_RECEIVED;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTypeField() {
|
||||
return MESSAGE_BOX;
|
||||
@@ -632,12 +637,14 @@ public class MmsDatabase extends MessagingDatabase {
|
||||
database.update(TABLE_NAME, contentValues, ID_WHERE, new String[] {String.valueOf(id)});
|
||||
}
|
||||
|
||||
|
||||
public List<MarkedMessageInfo> setMessagesRead(long threadId) {
|
||||
return setMessagesRead(THREAD_ID + " = ? AND " + READ + " = 0", new String[] {String.valueOf(threadId)});
|
||||
public List<MarkedMessageInfo> setMessagesReadSince(long threadId, long sinceTimestamp) {
|
||||
if (sinceTimestamp == -1) {
|
||||
return setMessagesRead(THREAD_ID + " = ? AND " + READ + " = 0", new String[] {String.valueOf(threadId)});
|
||||
} else {
|
||||
return setMessagesRead(THREAD_ID + " = ? AND " + READ + " = 0 AND " + DATE_RECEIVED + " <= ?", new String[]{String.valueOf(threadId), String.valueOf(sinceTimestamp)});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public List<MarkedMessageInfo> setEntireThreadRead(long threadId) {
|
||||
return setMessagesRead(THREAD_ID + " = ?", new String[] {String.valueOf(threadId)});
|
||||
}
|
||||
|
||||
@@ -150,6 +150,11 @@ public class SmsDatabase extends MessagingDatabase {
|
||||
return DATE_SENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getDateReceivedColumnName() {
|
||||
return DATE_RECEIVED;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTypeField() {
|
||||
return TYPE;
|
||||
@@ -509,8 +514,12 @@ public class SmsDatabase extends MessagingDatabase {
|
||||
return setMessagesRead(THREAD_ID + " = ?", new String[] {String.valueOf(threadId)});
|
||||
}
|
||||
|
||||
public List<MarkedMessageInfo> setMessagesRead(long threadId) {
|
||||
return setMessagesRead(THREAD_ID + " = ? AND " + READ + " = 0", new String[] {String.valueOf(threadId)});
|
||||
public List<MarkedMessageInfo> setMessagesReadSince(long threadId, long sinceTimestamp) {
|
||||
if (sinceTimestamp == -1) {
|
||||
return setMessagesRead(THREAD_ID + " = ? AND " + READ + " = 0", new String[] {String.valueOf(threadId)});
|
||||
} else {
|
||||
return setMessagesRead(THREAD_ID + " = ? AND " + READ + " = 0 AND " + DATE_RECEIVED + " <= ?", new String[] {String.valueOf(threadId),String.valueOf(sinceTimestamp)});
|
||||
}
|
||||
}
|
||||
|
||||
public List<MarkedMessageInfo> setAllMessagesRead() {
|
||||
|
||||
@@ -340,10 +340,18 @@ public class ThreadDatabase extends Database {
|
||||
}
|
||||
|
||||
public List<MarkedMessageInfo> setRead(long threadId, boolean lastSeen) {
|
||||
return setRead(Collections.singletonList(threadId), lastSeen);
|
||||
return setReadInternal(Collections.singletonList(threadId), lastSeen, -1);
|
||||
}
|
||||
|
||||
public List<MarkedMessageInfo> setReadSince(long threadId, boolean lastSeen, long sinceTimestamp) {
|
||||
return setReadInternal(Collections.singletonList(threadId), lastSeen, sinceTimestamp);
|
||||
}
|
||||
|
||||
public List<MarkedMessageInfo> setRead(Collection<Long> threadIds, boolean lastSeen) {
|
||||
return setReadInternal(threadIds, lastSeen, -1);
|
||||
}
|
||||
|
||||
private List<MarkedMessageInfo> setReadInternal(Collection<Long> threadIds, boolean lastSeen, long sinceTimestamp) {
|
||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||
|
||||
List<MarkedMessageInfo> smsRecords = new LinkedList<>();
|
||||
@@ -354,20 +362,23 @@ public class ThreadDatabase extends Database {
|
||||
try {
|
||||
ContentValues contentValues = new ContentValues(2);
|
||||
contentValues.put(READ, ReadStatus.READ.serialize());
|
||||
contentValues.put(UNREAD_COUNT, 0);
|
||||
|
||||
if (lastSeen) {
|
||||
contentValues.put(LAST_SEEN, System.currentTimeMillis());
|
||||
contentValues.put(LAST_SEEN, sinceTimestamp == -1 ? System.currentTimeMillis() : sinceTimestamp);
|
||||
}
|
||||
|
||||
for (long threadId : threadIds) {
|
||||
smsRecords.addAll(DatabaseFactory.getSmsDatabase(context).setMessagesReadSince(threadId, sinceTimestamp));
|
||||
mmsRecords.addAll(DatabaseFactory.getMmsDatabase(context).setMessagesReadSince(threadId, sinceTimestamp));
|
||||
|
||||
DatabaseFactory.getSmsDatabase(context).setReactionsSeen(threadId, sinceTimestamp);
|
||||
DatabaseFactory.getMmsDatabase(context).setReactionsSeen(threadId, sinceTimestamp);
|
||||
|
||||
int unreadCount = DatabaseFactory.getMmsSmsDatabase(context).getUnreadCount(threadId);
|
||||
|
||||
contentValues.put(UNREAD_COUNT, unreadCount);
|
||||
|
||||
db.update(TABLE_NAME, contentValues, ID_WHERE, new String[]{threadId + ""});
|
||||
|
||||
smsRecords.addAll(DatabaseFactory.getSmsDatabase(context).setMessagesRead(threadId));
|
||||
mmsRecords.addAll(DatabaseFactory.getMmsDatabase(context).setMessagesRead(threadId));
|
||||
|
||||
DatabaseFactory.getSmsDatabase(context).setReactionsSeen(threadId);
|
||||
DatabaseFactory.getMmsDatabase(context).setReactionsSeen(threadId);
|
||||
}
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
|
||||
Reference in New Issue
Block a user