Skip to content

Commit

Permalink
Always delete all messages when deleting a conversation.
Browse files Browse the repository at this point in the history
  • Loading branch information
alan-signal committed Feb 24, 2021
1 parent 8950100 commit be4b687
Showing 1 changed file with 62 additions and 47 deletions.
Expand Up @@ -240,35 +240,6 @@ public void updateSnippet(long threadId, String snippet, @Nullable Uri attachmen
notifyConversationListListeners();
}

private void deleteThread(long threadId) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete(TABLE_NAME, ID_WHERE, new String[] {threadId + ""});
notifyConversationListListeners();
ConversationUtil.clearShortcuts(context, Collections.singleton(threadId));
}

private void deleteThreads(Set<Long> threadIds) {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
String where = "";

for (long threadId : threadIds) {
where += ID + " = '" + threadId + "' OR ";
}

where = where.substring(0, where.length() - 4);

db.delete(TABLE_NAME, where, null);
notifyConversationListListeners();
ConversationUtil.clearShortcuts(context, threadIds);
}

private void deleteAllThreads() {
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete(TABLE_NAME, null, null);
notifyConversationListListeners();
ConversationUtil.clearAllShortcuts(context);
}

public void trimAllThreads(int length, long trimBeforeDate) {
if (length == NO_TRIM_MESSAGE_COUNT_SET && trimBeforeDate == NO_TRIM_BEFORE_DATE_SET) {
return;
Expand Down Expand Up @@ -978,28 +949,74 @@ public int getConversationMessageCount(long threadId) {
}

public void deleteConversation(long threadId) {
DatabaseFactory.getSmsDatabase(context).deleteThread(threadId);
DatabaseFactory.getMmsDatabase(context).deleteThread(threadId);
DatabaseFactory.getDraftDatabase(context).clearDrafts(threadId);
deleteThread(threadId);
notifyConversationListeners(threadId);
SQLiteDatabase db = databaseHelper.getWritableDatabase();

db.beginTransaction();
try {
DatabaseFactory.getSmsDatabase(context).deleteThread(threadId);
DatabaseFactory.getMmsDatabase(context).deleteThread(threadId);
DatabaseFactory.getDraftDatabase(context).clearDrafts(threadId);

db.delete(TABLE_NAME, ID_WHERE, new String[]{threadId + ""});

db.setTransactionSuccessful();
} finally {
db.endTransaction();
}

notifyConversationListListeners();
notifyConversationListeners(threadId);
ConversationUtil.clearShortcuts(context, Collections.singleton(threadId));
}

public void deleteConversations(Set<Long> selectedConversations) {
DatabaseFactory.getSmsDatabase(context).deleteThreads(selectedConversations);
DatabaseFactory.getMmsDatabase(context).deleteThreads(selectedConversations);
DatabaseFactory.getDraftDatabase(context).clearDrafts(selectedConversations);
deleteThreads(selectedConversations);
notifyConversationListeners(selectedConversations);
SQLiteDatabase db = databaseHelper.getWritableDatabase();

db.beginTransaction();
try {
DatabaseFactory.getSmsDatabase(context).deleteThreads(selectedConversations);
DatabaseFactory.getMmsDatabase(context).deleteThreads(selectedConversations);
DatabaseFactory.getDraftDatabase(context).clearDrafts(selectedConversations);

StringBuilder where = new StringBuilder();

for (long threadId : selectedConversations) {
if (where.length() > 0) {
where.append(" OR ");
}
where.append(ID + " = '").append(threadId).append("'");
}

db.delete(TABLE_NAME, where.toString(), null);

db.setTransactionSuccessful();
} finally {
db.endTransaction();
}

notifyConversationListListeners();
notifyConversationListeners(selectedConversations);
ConversationUtil.clearShortcuts(context, selectedConversations);
}

public void deleteAllConversations() {
DatabaseFactory.getSmsDatabase(context).deleteAllThreads();
DatabaseFactory.getMmsDatabase(context).deleteAllThreads();
DatabaseFactory.getDraftDatabase(context).clearAllDrafts();
deleteAllThreads();
SQLiteDatabase db = databaseHelper.getWritableDatabase();

db.beginTransaction();
try {
DatabaseFactory.getSmsDatabase(context).deleteAllThreads();
DatabaseFactory.getMmsDatabase(context).deleteAllThreads();
DatabaseFactory.getDraftDatabase(context).clearAllDrafts();

db.delete(TABLE_NAME, null, null);

db.setTransactionSuccessful();
} finally {
db.endTransaction();
}

notifyConversationListListeners();
ConversationUtil.clearAllShortcuts(context);
}

public long getThreadIdIfExistsFor(@NonNull RecipientId recipientId) {
Expand Down Expand Up @@ -1229,8 +1246,7 @@ public boolean update(long threadId, boolean unarchive, boolean allowDeletion) {

if (count == 0) {
if (allowDeletion) {
deleteThread(threadId);
notifyConversationListListeners();
deleteConversation(threadId);
}
return true;
}
Expand All @@ -1249,8 +1265,7 @@ public boolean update(long threadId, boolean unarchive, boolean allowDeletion) {
notifyConversationListListeners();
return false;
} else {
deleteThread(threadId);
notifyConversationListListeners();
deleteConversation(threadId);
return true;
}
} finally {
Expand Down

0 comments on commit be4b687

Please sign in to comment.