Fix crash when sending media message as first message in conversation.

This commit is contained in:
Cody Henthorne
2021-08-13 12:50:45 -04:00
parent 7448183ff4
commit 0838c0be27
9 changed files with 57 additions and 40 deletions

View File

@@ -468,7 +468,10 @@ public class AttachmentDatabase extends Database {
String selectAllMmsIds = "SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME;
String where = MMS_ID + " != " + PREUPLOAD_MESSAGE_ID + " AND " + MMS_ID + " NOT IN (" + selectAllMmsIds + ")";
db.delete(TABLE_NAME, where, null);
int deletes = db.delete(TABLE_NAME, where, null);
if (deletes > 0) {
Log.i(TAG, "Trimmed " + deletes + " abandoned attachments.");
}
}
public int deleteAbandonedAttachmentFiles() {

View File

@@ -172,7 +172,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
public abstract boolean deleteMessage(long messageId);
abstract void deleteThread(long threadId);
abstract boolean deleteMessagesInThreadBeforeDate(long threadId, long date);
abstract int deleteMessagesInThreadBeforeDate(long threadId, long date);
abstract void deleteThreads(@NonNull Set<Long> threadIds);
abstract void deleteAllThreads();
abstract void deleteAbandonedMessages();

View File

@@ -1451,7 +1451,7 @@ public class MmsDatabase extends MessageDatabase {
DatabaseFactory.getThreadDatabase(context).incrementUnread(threadId, 1);
}
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
TrimThreadJob.enqueueAsync(threadId);
}
@Override
@@ -1797,11 +1797,11 @@ public class MmsDatabase extends MessageDatabase {
}
@Override
boolean deleteMessagesInThreadBeforeDate(long threadId, long date) {
int deleteMessagesInThreadBeforeDate(long threadId, long date) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
String where = THREAD_ID + " = ? AND " + DATE_RECEIVED + " < " + date;
return db.delete(TABLE_NAME, where, SqlUtil.buildArgs(threadId)) > 0;
return db.delete(TABLE_NAME, where, SqlUtil.buildArgs(threadId));
}
@Override
@@ -1809,7 +1809,10 @@ public class MmsDatabase extends MessageDatabase {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
String where = THREAD_ID + " NOT IN (SELECT _id FROM " + ThreadDatabase.TABLE_NAME + ")";
db.delete(TABLE_NAME, where, null);
int deletes = db.delete(TABLE_NAME, where, null);
if (deletes > 0) {
Log.i(TAG, "Deleted " + deletes + " abandoned messages");
}
}
@Override

View File

@@ -589,11 +589,11 @@ public class MmsSmsDatabase extends Database {
DatabaseFactory.getMmsDatabase(context).setNotifiedTimestamp(timestamp, mmsIds);
}
public boolean deleteMessagesInThreadBeforeDate(long threadId, long trimBeforeDate) {
public int deleteMessagesInThreadBeforeDate(long threadId, long trimBeforeDate) {
Log.d(TAG, "deleteMessagesInThreadBeforeData(" + threadId + ", " + trimBeforeDate + ")");
boolean deletedSms = DatabaseFactory.getSmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
boolean deletedMms = DatabaseFactory.getMmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
return deletedSms || deletedMms;
int deletes = DatabaseFactory.getSmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
deletes += DatabaseFactory.getMmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
return deletes;
}
public void deleteAbandonedMessages() {

View File

@@ -749,7 +749,7 @@ public class SmsDatabase extends MessageDatabase {
}
notifyConversationListeners(threadId);
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
TrimThreadJob.enqueueAsync(threadId);
}
@Override
@@ -826,7 +826,7 @@ public class SmsDatabase extends MessageDatabase {
}
notifyConversationListeners(threadId);
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
TrimThreadJob.enqueueAsync(threadId);
}
@Override
@@ -892,7 +892,7 @@ public class SmsDatabase extends MessageDatabase {
}
notifyConversationListeners(threadId);
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
TrimThreadJob.enqueueAsync(threadId);
return new Pair<>(messageId, threadId);
}
@@ -979,7 +979,7 @@ public class SmsDatabase extends MessageDatabase {
Stream.of(threadIdsToUpdate)
.withoutNulls()
.forEach(threadId -> ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId)));
.forEach(TrimThreadJob::enqueueAsync);
}
@Override
@@ -994,7 +994,7 @@ public class SmsDatabase extends MessageDatabase {
}
notifyConversationListeners(threadId);
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
TrimThreadJob.enqueueAsync(threadId);
}
private void insertGroupV1MigrationNotification(@NonNull RecipientId recipientId, long threadId) {
@@ -1119,7 +1119,7 @@ public class SmsDatabase extends MessageDatabase {
notifyConversationListeners(threadId);
if (!silent) {
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
TrimThreadJob.enqueueAsync(threadId);
}
return Optional.of(new InsertResult(messageId, threadId));
@@ -1156,7 +1156,7 @@ public class SmsDatabase extends MessageDatabase {
notifyConversationListeners(threadId);
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
TrimThreadJob.enqueueAsync(threadId);
return new InsertResult(messageId, threadId);
}
@@ -1180,7 +1180,7 @@ public class SmsDatabase extends MessageDatabase {
notifyConversationListeners(threadId);
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
TrimThreadJob.enqueueAsync(threadId);
}
@Override
@@ -1335,11 +1335,11 @@ public class SmsDatabase extends MessageDatabase {
}
@Override
boolean deleteMessagesInThreadBeforeDate(long threadId, long date) {
int deleteMessagesInThreadBeforeDate(long threadId, long date) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
String where = THREAD_ID + " = ? AND " + DATE_RECEIVED + " < " + date;
return db.delete(TABLE_NAME, where, SqlUtil.buildArgs(threadId)) > 0;
return db.delete(TABLE_NAME, where, SqlUtil.buildArgs(threadId));
}
@Override
@@ -1347,7 +1347,10 @@ public class SmsDatabase extends MessageDatabase {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
String where = THREAD_ID + " NOT IN (SELECT _id FROM " + ThreadDatabase.TABLE_NAME + ")";
db.delete(TABLE_NAME, where, null);
int deletes = db.delete(TABLE_NAME, where, null);
if (deletes > 0) {
Log.i(TAG, "Deleted " + deletes + " abandoned messages");
}
}
@Override

View File

@@ -340,12 +340,15 @@ public class ThreadDatabase extends Database {
if (trimBeforeDate != NO_TRIM_BEFORE_DATE_SET) {
Log.i(TAG, "Trimming thread: " + threadId + " before: " + trimBeforeDate);
boolean deletedMessages = DatabaseFactory.getMmsSmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
int deletes = DatabaseFactory.getMmsSmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
if (deletedMessages) {
if (deletes > 0) {
Log.i(TAG, "Trimming deleted " + deletes + " messages thread: " + threadId);
setLastScrolled(threadId, 0);
update(threadId, false);
notifyConversationListeners(threadId);
} else {
Log.i(TAG, "Trimming deleted no messages thread: " + threadId);
}
}
}