diff --git a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java index 076956815..b18de5822 100644 --- a/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/StartConversationActivity.java @@ -1310,6 +1310,21 @@ public class StartConversationActivity extends XmppActivity implements XmppConne } } + protected void startOtrChat() { + int position = contact_context_id; + Contact contact = (Contact) contacts.get(position); + + Conversation conversation = xmppConnectionService.findOrCreateConversation(contact.getAccount(), contact.getJid(), null, false, false, false, null); + + selectPresence(conversation, + () -> { + Conversation c = xmppConnectionService.findOrCreateConversation(contact.getAccount(), contact.getJid(), null, false, false, false, conversation.getNextCounterpart()); + conversation.setNextCounterpart(null); + if (c != null) { + switchToConversation(c); + } + }); + } private void setRefreshing(boolean refreshing) { MyListFragment fragment = (MyListFragment) mListPagerAdapter.getItem(0); @@ -1451,9 +1466,12 @@ public class StartConversationActivity extends XmppActivity implements XmppConne final MenuItem blockUnblockItem = menu.findItem(R.id.context_contact_block_unblock); final MenuItem showContactDetailsItem = menu.findItem(R.id.context_contact_details); final MenuItem deleteContactMenuItem = menu.findItem(R.id.context_delete_contact); + final MenuItem startSecrectChat = menu.findItem(R.id.context_contact_start_secrect_chat); if (contact.isSelf()) { showContactDetailsItem.setVisible(false); + startSecrectChat.setVisible(false); } + deleteContactMenuItem.setVisible(contact.showInRoster() && !contact.getOption(Contact.Options.SYNCED_VIA_OTHER)); final XmppConnection xmpp = contact.getAccount().getXmppConnection(); if (xmpp != null && xmpp.getFeatures().blocking() && !contact.isSelf()) { @@ -1492,6 +1510,8 @@ public class StartConversationActivity extends XmppActivity implements XmppConne break; case R.id.context_delete_conference: activity.deleteConference(); + case R.id.context_contact_start_secrect_chat: + activity.startOtrChat(); } return true; } diff --git a/src/main/res/menu/contact_context.xml b/src/main/res/menu/contact_context.xml index e6da36f45..87ab17a8c 100644 --- a/src/main/res/menu/contact_context.xml +++ b/src/main/res/menu/contact_context.xml @@ -4,6 +4,11 @@ + + +