allow to destroy secret chat

This commit is contained in:
kosyak 2024-10-29 17:29:12 +07:00
parent e72b866fce
commit 82134599ef
4 changed files with 31 additions and 0 deletions

View file

@ -2705,6 +2705,16 @@ public class XmppConnectionService extends Service {
archiveConversation(conversation, true); archiveConversation(conversation, true);
} }
public void destroyConversation(Conversation conversation) {
archiveConversation(conversation);
final Runnable runnable = () -> {
if (!databaseBackend.deleteConversation(conversation.getAccount(), conversation.getContactJid().asBareJid(), conversation.getNextCounterpart())) {
Log.d(Config.LOGTAG, conversation.getJid().asBareJid() + ": unable to delete conversation");
}
};
mDatabaseWriterExecutor.execute(runnable);
}
private void archiveConversation(Conversation conversation, final boolean maySynchronizeWithBookmarks) { private void archiveConversation(Conversation conversation, final boolean maySynchronizeWithBookmarks) {
getNotificationService().clear(conversation); getNotificationService().clear(conversation);
conversation.setStatus(Conversation.STATUS_ARCHIVED); conversation.setStatus(Conversation.STATUS_ARCHIVED);
@ -2733,6 +2743,7 @@ public class XmppConnectionService extends Service {
stopPresenceUpdatesTo(conversation.getContact()); stopPresenceUpdatesTo(conversation.getContact());
} }
} }
conversation.endOtrIfNeeded();
updateConversation(conversation); updateConversation(conversation);
this.conversations.remove(conversation); this.conversations.remove(conversation);
updateConversationUi(); updateConversationUi();

View file

@ -1408,12 +1408,15 @@ public class ConversationFragment extends XmppFragment
final MenuItem menuTogglePinned = menu.findItem(R.id.action_toggle_pinned); final MenuItem menuTogglePinned = menu.findItem(R.id.action_toggle_pinned);
final MenuItem deleteCustomBg = menu.findItem(R.id.action_delete_custom_bg); final MenuItem deleteCustomBg = menu.findItem(R.id.action_delete_custom_bg);
final MenuItem startSecretChat = menu.findItem(R.id.action_start_secret_chat); final MenuItem startSecretChat = menu.findItem(R.id.action_start_secret_chat);
final MenuItem destroySecretChat = menu.findItem(R.id.action_destroy_secret_chat);
final MenuItem encryption = menu.findItem(R.id.action_security); final MenuItem encryption = menu.findItem(R.id.action_security);
if (conversation != null) { if (conversation != null) {
boolean considerAsSecretChat = conversation.getMode() == Conversational.MODE_SINGLE && boolean considerAsSecretChat = conversation.getMode() == Conversational.MODE_SINGLE &&
conversation.getNextCounterpart() != null && conversation.hasPermanentCounterpart(); conversation.getNextCounterpart() != null && conversation.hasPermanentCounterpart();
destroySecretChat.setVisible(false);
if (conversation.getMode() == Conversation.MODE_MULTI) { if (conversation.getMode() == Conversation.MODE_MULTI) {
menuContactDetails.setVisible(false); menuContactDetails.setVisible(false);
menuInviteContact.setVisible(conversation.getMucOptions().canInvite() && conversation.getNextCounterpart() == null); menuInviteContact.setVisible(conversation.getMucOptions().canInvite() && conversation.getNextCounterpart() == null);
@ -1427,6 +1430,7 @@ public class ConversationFragment extends XmppFragment
} else { } else {
if (considerAsSecretChat) { if (considerAsSecretChat) {
startSecretChat.setVisible(false); startSecretChat.setVisible(false);
destroySecretChat.setVisible(true);
} }
menuMucParticipants.setVisible(false); menuMucParticipants.setVisible(false);
final XmppConnectionService service = final XmppConnectionService service =
@ -2065,6 +2069,9 @@ public class ConversationFragment extends XmppFragment
case R.id.action_start_secret_chat: case R.id.action_start_secret_chat:
startOtrChat(); startOtrChat();
break; break;
case R.id.action_destroy_secret_chat:
destroySecrectChat();
break;
case R.id.action_contact_details: case R.id.action_contact_details:
activity.switchToContactDetails(conversation.getContact()); activity.switchToContactDetails(conversation.getContact());
break; break;
@ -4013,6 +4020,12 @@ public class ConversationFragment extends XmppFragment
}); });
} }
private void destroySecrectChat() {
conversation.endOtrIfNeeded();
activity.xmppConnectionService.destroyConversation(conversation);
activity.onBackPressed();
}
protected void sendPgpMessage(final Message message) { protected void sendPgpMessage(final Message message) {
final XmppConnectionService xmppService = activity.xmppConnectionService; final XmppConnectionService xmppService = activity.xmppConnectionService;
final Contact contact = message.getConversation().getContact(); final Contact contact = message.getConversation().getContact();

View file

@ -126,6 +126,12 @@
android:orderInCategory="65" android:orderInCategory="65"
android:title="@string/action_start_secret_chat" android:title="@string/action_start_secret_chat"
app:showAsAction="never" /> app:showAsAction="never" />
<item
android:id="@+id/action_destroy_secret_chat"
android:orderInCategory="66"
android:title="@string/action_destroy_secret_chat"
app:showAsAction="never" />
<item <item
android:orderInCategory="70" android:orderInCategory="70"
android:title="@string/more_options"> android:title="@string/more_options">

View file

@ -7,6 +7,7 @@
<string name="action_account">Manage account</string> <string name="action_account">Manage account</string>
<string name="action_end_conversation">Close conversation</string> <string name="action_end_conversation">Close conversation</string>
<string name="action_start_secret_chat">Start secret chat</string> <string name="action_start_secret_chat">Start secret chat</string>
<string name="action_destroy_secret_chat">Destroy secret chat</string>
<string name="action_contact_details">Contact details</string> <string name="action_contact_details">Contact details</string>
<string name="action_muc_details">Group chat details</string> <string name="action_muc_details">Group chat details</string>
<string name="channel_details">Channel details</string> <string name="channel_details">Channel details</string>