Search in sources :

Example 51 with Jid

use of eu.siacs.conversations.xmpp.Jid in project Conversations by siacs.

the class ConversationFragment method onContactPictureLongClicked.

@Override
public void onContactPictureLongClicked(View v, final Message message) {
    final String fingerprint;
    if (message.getEncryption() == Message.ENCRYPTION_PGP || message.getEncryption() == Message.ENCRYPTION_DECRYPTED) {
        fingerprint = "pgp";
    } else {
        fingerprint = message.getFingerprint();
    }
    final PopupMenu popupMenu = new PopupMenu(getActivity(), v);
    final Contact contact = message.getContact();
    if (message.getStatus() <= Message.STATUS_RECEIVED && (contact == null || !contact.isSelf())) {
        if (message.getConversation().getMode() == Conversation.MODE_MULTI) {
            final Jid cp = message.getCounterpart();
            if (cp == null || cp.isBareJid()) {
                return;
            }
            final Jid tcp = message.getTrueCounterpart();
            final User userByRealJid = tcp != null ? conversation.getMucOptions().findOrCreateUserByRealJid(tcp, cp) : null;
            final User user = userByRealJid != null ? userByRealJid : conversation.getMucOptions().findUserByFullJid(cp);
            popupMenu.inflate(R.menu.muc_details_context);
            final Menu menu = popupMenu.getMenu();
            MucDetailsContextMenuHelper.configureMucDetailsContextMenu(activity, menu, conversation, user);
            popupMenu.setOnMenuItemClickListener(menuItem -> MucDetailsContextMenuHelper.onContextItemSelected(menuItem, user, activity, fingerprint));
        } else {
            popupMenu.inflate(R.menu.one_on_one_context);
            popupMenu.setOnMenuItemClickListener(item -> {
                switch(item.getItemId()) {
                    case R.id.action_contact_details:
                        activity.switchToContactDetails(message.getContact(), fingerprint);
                        break;
                    case R.id.action_show_qr_code:
                        activity.showQrCode("xmpp:" + message.getContact().getJid().asBareJid().toEscapedString());
                        break;
                }
                return true;
            });
        }
    } else {
        popupMenu.inflate(R.menu.account_context);
        final Menu menu = popupMenu.getMenu();
        menu.findItem(R.id.action_manage_accounts).setVisible(QuickConversationsService.isConversations());
        popupMenu.setOnMenuItemClickListener(item -> {
            final XmppActivity activity = this.activity;
            if (activity == null) {
                Log.e(Config.LOGTAG, "Unable to perform action. no context provided");
                return true;
            }
            switch(item.getItemId()) {
                case R.id.action_show_qr_code:
                    activity.showQrCode(conversation.getAccount().getShareableUri());
                    break;
                case R.id.action_account_details:
                    activity.switchToAccount(message.getConversation().getAccount(), fingerprint);
                    break;
                case R.id.action_manage_accounts:
                    AccountUtils.launchManageAccounts(activity);
                    break;
            }
            return true;
        });
    }
    popupMenu.show();
}
Also used : User(eu.siacs.conversations.entities.MucOptions.User) Jid(eu.siacs.conversations.xmpp.Jid) PopupMenu(android.widget.PopupMenu) Menu(android.view.Menu) ContextMenu(android.view.ContextMenu) PopupMenu(android.widget.PopupMenu) Contact(eu.siacs.conversations.entities.Contact)

Example 52 with Jid

use of eu.siacs.conversations.xmpp.Jid in project Conversations by siacs.

the class ConversationFragment method processExtras.

private void processExtras(final Bundle extras) {
    final String downloadUuid = extras.getString(ConversationsActivity.EXTRA_DOWNLOAD_UUID);
    final String text = extras.getString(Intent.EXTRA_TEXT);
    final String nick = extras.getString(ConversationsActivity.EXTRA_NICK);
    final String postInitAction = extras.getString(ConversationsActivity.EXTRA_POST_INIT_ACTION);
    final boolean asQuote = extras.getBoolean(ConversationsActivity.EXTRA_AS_QUOTE);
    final boolean pm = extras.getBoolean(ConversationsActivity.EXTRA_IS_PRIVATE_MESSAGE, false);
    final boolean doNotAppend = extras.getBoolean(ConversationsActivity.EXTRA_DO_NOT_APPEND, false);
    final String type = extras.getString(ConversationsActivity.EXTRA_TYPE);
    final List<Uri> uris = extractUris(extras);
    if (uris != null && uris.size() > 0) {
        if (uris.size() == 1 && "geo".equals(uris.get(0).getScheme())) {
            mediaPreviewAdapter.addMediaPreviews(Attachment.of(getActivity(), uris.get(0), Attachment.Type.LOCATION));
        } else {
            final List<Uri> cleanedUris = cleanUris(new ArrayList<>(uris));
            mediaPreviewAdapter.addMediaPreviews(Attachment.of(getActivity(), cleanedUris, type));
        }
        toggleInputMethod();
        return;
    }
    if (nick != null) {
        if (pm) {
            Jid jid = conversation.getJid();
            try {
                Jid next = Jid.of(jid.getLocal(), jid.getDomain(), nick);
                privateMessageWith(next);
            } catch (final IllegalArgumentException ignored) {
            // do nothing
            }
        } else {
            final MucOptions mucOptions = conversation.getMucOptions();
            if (mucOptions.participating() || conversation.getNextCounterpart() != null) {
                highlightInConference(nick);
            }
        }
    } else {
        if (text != null && GeoHelper.GEO_URI.matcher(text).matches()) {
            mediaPreviewAdapter.addMediaPreviews(Attachment.of(getActivity(), Uri.parse(text), Attachment.Type.LOCATION));
            toggleInputMethod();
            return;
        } else if (text != null && asQuote) {
            quoteText(text);
        } else {
            appendText(text, doNotAppend);
        }
    }
    if (ConversationsActivity.POST_ACTION_RECORD_VOICE.equals(postInitAction)) {
        attachFile(ATTACHMENT_CHOICE_RECORD_VOICE, false);
        return;
    }
    final Message message = downloadUuid == null ? null : conversation.findMessageWithFileAndUuid(downloadUuid);
    if (message != null) {
        startDownloadable(message);
    }
}
Also used : MucOptions(eu.siacs.conversations.entities.MucOptions) Jid(eu.siacs.conversations.xmpp.Jid) EditMessage(eu.siacs.conversations.ui.widget.EditMessage) Message(eu.siacs.conversations.entities.Message) Uri(android.net.Uri)

Example 53 with Jid

use of eu.siacs.conversations.xmpp.Jid in project Conversations by siacs.

the class EnterJidDialog method handleEnter.

private void handleEnter(EnterJidDialogBinding binding, String account) {
    final Jid accountJid;
    if (!binding.account.isEnabled() && account == null) {
        return;
    }
    try {
        if (Config.DOMAIN_LOCK != null) {
            accountJid = Jid.ofEscaped((String) binding.account.getSelectedItem(), Config.DOMAIN_LOCK, null);
        } else {
            accountJid = Jid.ofEscaped((String) binding.account.getSelectedItem());
        }
    } catch (final IllegalArgumentException e) {
        return;
    }
    final Jid contactJid;
    try {
        contactJid = Jid.ofEscaped(binding.jid.getText().toString());
    } catch (final IllegalArgumentException e) {
        binding.jidLayout.setError(getActivity().getString(R.string.invalid_jid));
        return;
    }
    if (!issuedWarning && sanityCheckJid) {
        if (contactJid.isDomainJid()) {
            binding.jidLayout.setError(getActivity().getString(R.string.this_looks_like_a_domain));
            dialog.getButton(AlertDialog.BUTTON_POSITIVE).setText(R.string.add_anway);
            issuedWarning = true;
            return;
        }
        if (suspiciousSubDomain(contactJid.getDomain().toEscapedString())) {
            binding.jidLayout.setError(getActivity().getString(R.string.this_looks_like_channel));
            dialog.getButton(AlertDialog.BUTTON_POSITIVE).setText(R.string.add_anway);
            issuedWarning = true;
            return;
        }
    }
    if (mListener != null) {
        try {
            if (mListener.onEnterJidDialogPositive(accountJid, contactJid)) {
                dialog.dismiss();
            }
        } catch (JidError error) {
            binding.jidLayout.setError(error.toString());
            dialog.getButton(AlertDialog.BUTTON_POSITIVE).setText(R.string.add);
            issuedWarning = false;
        }
    }
}
Also used : Jid(eu.siacs.conversations.xmpp.Jid)

Example 54 with Jid

use of eu.siacs.conversations.xmpp.Jid in project Conversations by siacs.

the class ChannelDiscoveryActivity method joinChannelSearchResult.

public void joinChannelSearchResult(String selectedAccount, Room result) {
    final Jid jid = Config.DOMAIN_LOCK == null ? Jid.ofEscaped(selectedAccount) : Jid.ofLocalAndDomainEscaped(selectedAccount, Config.DOMAIN_LOCK);
    final boolean syncAutoJoin = getBooleanPreference("autojoin", R.bool.autojoin);
    final Account account = xmppConnectionService.findAccountByJid(jid);
    final Conversation conversation = xmppConnectionService.findOrCreateConversation(account, result.getRoom(), true, true, true);
    Bookmark bookmark = conversation.getBookmark();
    if (bookmark != null) {
        if (!bookmark.autojoin() && syncAutoJoin) {
            bookmark.setAutojoin(true);
            xmppConnectionService.createBookmark(account, bookmark);
        }
    } else {
        bookmark = new Bookmark(account, conversation.getJid().asBareJid());
        bookmark.setAutojoin(syncAutoJoin);
        xmppConnectionService.createBookmark(account, bookmark);
    }
    switchToConversation(conversation);
}
Also used : Account(eu.siacs.conversations.entities.Account) Jid(eu.siacs.conversations.xmpp.Jid) Bookmark(eu.siacs.conversations.entities.Bookmark) Conversation(eu.siacs.conversations.entities.Conversation)

Example 55 with Jid

use of eu.siacs.conversations.xmpp.Jid in project Conversations by siacs.

the class ChooseContactActivity method create.

public static Intent create(Activity activity, Conversation conversation) {
    final Intent intent = new Intent(activity, ChooseContactActivity.class);
    List<String> contacts = new ArrayList<>();
    if (conversation.getMode() == Conversation.MODE_MULTI) {
        for (MucOptions.User user : conversation.getMucOptions().getUsers(false)) {
            Jid jid = user.getRealJid();
            if (jid != null) {
                contacts.add(jid.asBareJid().toString());
            }
        }
    } else {
        contacts.add(conversation.getJid().asBareJid().toString());
    }
    intent.putExtra(EXTRA_FILTERED_CONTACTS, contacts.toArray(new String[contacts.size()]));
    intent.putExtra(EXTRA_CONVERSATION, conversation.getUuid());
    intent.putExtra(EXTRA_SELECT_MULTIPLE, true);
    intent.putExtra(EXTRA_SHOW_ENTER_JID, true);
    intent.putExtra(EXTRA_ACCOUNT, conversation.getAccount().getJid().asBareJid().toEscapedString());
    return intent;
}
Also used : MucOptions(eu.siacs.conversations.entities.MucOptions) Jid(eu.siacs.conversations.xmpp.Jid) ArrayList(java.util.ArrayList) Intent(android.content.Intent)

Aggregations

Jid (eu.siacs.conversations.xmpp.Jid)106 Account (eu.siacs.conversations.entities.Account)35 Element (eu.siacs.conversations.xml.Element)24 Conversation (eu.siacs.conversations.entities.Conversation)22 Contact (eu.siacs.conversations.entities.Contact)17 InvalidJid (eu.siacs.conversations.xmpp.InvalidJid)16 IqPacket (eu.siacs.conversations.xmpp.stanzas.IqPacket)16 Intent (android.content.Intent)15 ArrayList (java.util.ArrayList)13 MucOptions (eu.siacs.conversations.entities.MucOptions)12 Bookmark (eu.siacs.conversations.entities.Bookmark)10 AxolotlService (eu.siacs.conversations.crypto.axolotl.AxolotlService)7 Message (eu.siacs.conversations.entities.Message)7 OnIqPacketReceived (eu.siacs.conversations.xmpp.OnIqPacketReceived)6 MessagePacket (eu.siacs.conversations.xmpp.stanzas.MessagePacket)6 Map (java.util.Map)6 XmppUri (eu.siacs.conversations.utils.XmppUri)5 XmppConnectionService (eu.siacs.conversations.services.XmppConnectionService)4 Avatar (eu.siacs.conversations.xmpp.pep.Avatar)4 HashMap (java.util.HashMap)4