Search in sources :

Example 31 with Jid

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

the class UriHandlerActivity method handleUri.

private boolean handleUri(final Uri uri, final boolean scanned) {
    final Intent intent;
    final XmppUri xmppUri = new XmppUri(uri);
    final List<Jid> accounts = DatabaseBackend.getInstance(this).getAccountJids(true);
    if (SignupUtils.isSupportTokenRegistry() && xmppUri.isValidJid()) {
        final String preAuth = xmppUri.getParameter(XmppUri.PARAMETER_PRE_AUTH);
        final Jid jid = xmppUri.getJid();
        if (xmppUri.isAction(XmppUri.ACTION_REGISTER)) {
            if (jid.getEscapedLocal() != null && accounts.contains(jid.asBareJid())) {
                showError(R.string.account_already_exists);
                return false;
            }
            intent = SignupUtils.getTokenRegistrationIntent(this, jid, preAuth);
            startActivity(intent);
            return true;
        }
        if (accounts.size() == 0 && xmppUri.isAction(XmppUri.ACTION_ROSTER) && "y".equals(xmppUri.getParameter(XmppUri.PARAMETER_IBR))) {
            intent = SignupUtils.getTokenRegistrationIntent(this, jid.getDomain(), preAuth);
            intent.putExtra(StartConversationActivity.EXTRA_INVITE_URI, xmppUri.toString());
            startActivity(intent);
            return true;
        }
    } else if (xmppUri.isAction(XmppUri.ACTION_REGISTER)) {
        showError(R.string.account_registrations_are_not_supported);
        return false;
    }
    if (accounts.size() == 0) {
        if (xmppUri.isValidJid()) {
            intent = SignupUtils.getSignUpIntent(this);
            intent.putExtra(StartConversationActivity.EXTRA_INVITE_URI, xmppUri.toString());
            startActivity(intent);
            return true;
        } else {
            showError(R.string.invalid_jid);
            return false;
        }
    }
    if (xmppUri.isAction(XmppUri.ACTION_MESSAGE)) {
        final Jid jid = xmppUri.getJid();
        final String body = xmppUri.getBody();
        if (jid != null) {
            final Class<?> clazz = findShareViaAccountClass();
            if (clazz != null) {
                intent = new Intent(this, clazz);
                intent.putExtra("contact", jid.toEscapedString());
                intent.putExtra("body", body);
            } else {
                intent = new Intent(this, StartConversationActivity.class);
                intent.setAction(Intent.ACTION_VIEW);
                intent.setData(uri);
                intent.putExtra("account", accounts.get(0).toEscapedString());
            }
        } else {
            intent = new Intent(this, ShareWithActivity.class);
            intent.setAction(Intent.ACTION_SEND);
            intent.setType("text/plain");
            intent.putExtra(Intent.EXTRA_TEXT, body);
        }
    } else if (accounts.contains(xmppUri.getJid())) {
        intent = new Intent(getApplicationContext(), EditAccountActivity.class);
        intent.setAction(Intent.ACTION_VIEW);
        intent.putExtra("jid", xmppUri.getJid().asBareJid().toString());
        intent.setData(uri);
        intent.putExtra("scanned", scanned);
    } else if (xmppUri.isValidJid()) {
        intent = new Intent(getApplicationContext(), StartConversationActivity.class);
        intent.setAction(Intent.ACTION_VIEW);
        intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        intent.putExtra("scanned", scanned);
        intent.setData(uri);
    } else {
        showError(R.string.invalid_jid);
        return false;
    }
    startActivity(intent);
    return true;
}
Also used : XmppUri(eu.siacs.conversations.utils.XmppUri) Jid(eu.siacs.conversations.xmpp.Jid) Intent(android.content.Intent)

Example 32 with Jid

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

the class MessageAdapter method displayTextMessage.

private void displayTextMessage(final ViewHolder viewHolder, final Message message, boolean darkBackground, int type) {
    viewHolder.download_button.setVisibility(View.GONE);
    viewHolder.image.setVisibility(View.GONE);
    viewHolder.audioPlayer.setVisibility(View.GONE);
    viewHolder.messageBody.setVisibility(View.VISIBLE);
    if (darkBackground) {
        viewHolder.messageBody.setTextAppearance(getContext(), R.style.TextAppearance_Conversations_Body1_OnDark);
    } else {
        viewHolder.messageBody.setTextAppearance(getContext(), R.style.TextAppearance_Conversations_Body1);
    }
    viewHolder.messageBody.setHighlightColor(ContextCompat.getColor(activity, darkBackground ? (type == SENT || !mUseGreenBackground ? R.color.black26 : R.color.grey800) : R.color.grey500));
    viewHolder.messageBody.setTypeface(null, Typeface.NORMAL);
    if (message.getBody() != null) {
        final String nick = UIHelper.getMessageDisplayName(message);
        SpannableStringBuilder body = message.getMergedBody();
        boolean hasMeCommand = message.hasMeCommand();
        if (hasMeCommand) {
            body = body.replace(0, Message.ME_COMMAND.length(), nick + " ");
        }
        if (body.length() > Config.MAX_DISPLAY_MESSAGE_CHARS) {
            body = new SpannableStringBuilder(body, 0, Config.MAX_DISPLAY_MESSAGE_CHARS);
            body.append("\u2026");
        }
        Message.MergeSeparator[] mergeSeparators = body.getSpans(0, body.length(), Message.MergeSeparator.class);
        for (Message.MergeSeparator mergeSeparator : mergeSeparators) {
            int start = body.getSpanStart(mergeSeparator);
            int end = body.getSpanEnd(mergeSeparator);
            body.setSpan(new DividerSpan(true), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        }
        boolean startsWithQuote = handleTextQuotes(body, darkBackground);
        if (!message.isPrivateMessage()) {
            if (hasMeCommand) {
                body.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 0, nick.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        } else {
            String privateMarker;
            if (message.getStatus() <= Message.STATUS_RECEIVED) {
                privateMarker = activity.getString(R.string.private_message);
            } else {
                Jid cp = message.getCounterpart();
                privateMarker = activity.getString(R.string.private_message_to, Strings.nullToEmpty(cp == null ? null : cp.getResource()));
            }
            body.insert(0, privateMarker);
            int privateMarkerIndex = privateMarker.length();
            if (startsWithQuote) {
                body.insert(privateMarkerIndex, "\n\n");
                body.setSpan(new DividerSpan(false), privateMarkerIndex, privateMarkerIndex + 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            } else {
                body.insert(privateMarkerIndex, " ");
            }
            body.setSpan(new ForegroundColorSpan(getMessageTextColor(darkBackground, false)), 0, privateMarkerIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            body.setSpan(new StyleSpan(Typeface.BOLD), 0, privateMarkerIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            if (hasMeCommand) {
                body.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), privateMarkerIndex + 1, privateMarkerIndex + 1 + nick.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }
        if (message.getConversation().getMode() == Conversation.MODE_MULTI && message.getStatus() == Message.STATUS_RECEIVED) {
            if (message.getConversation() instanceof Conversation) {
                final Conversation conversation = (Conversation) message.getConversation();
                Pattern pattern = NotificationService.generateNickHighlightPattern(conversation.getMucOptions().getActualNick());
                Matcher matcher = pattern.matcher(body);
                while (matcher.find()) {
                    body.setSpan(new StyleSpan(Typeface.BOLD), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }
        }
        Matcher matcher = Emoticons.getEmojiPattern(body).matcher(body);
        while (matcher.find()) {
            if (matcher.start() < matcher.end()) {
                body.setSpan(new RelativeSizeSpan(1.2f), matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
            }
        }
        StylingHelper.format(body, viewHolder.messageBody.getCurrentTextColor());
        if (highlightedTerm != null) {
            StylingHelper.highlight(activity, body, highlightedTerm, StylingHelper.isDarkText(viewHolder.messageBody));
        }
        MyLinkify.addLinks(body, true);
        viewHolder.messageBody.setAutoLinkMask(0);
        viewHolder.messageBody.setText(EmojiWrapper.transform(body));
        viewHolder.messageBody.setMovementMethod(ClickableMovementMethod.getInstance());
    } else {
        viewHolder.messageBody.setText("");
        viewHolder.messageBody.setTextIsSelectable(false);
    }
}
Also used : Pattern(java.util.regex.Pattern) Message(eu.siacs.conversations.entities.Message) Jid(eu.siacs.conversations.xmpp.Jid) ForegroundColorSpan(android.text.style.ForegroundColorSpan) Matcher(java.util.regex.Matcher) Conversation(eu.siacs.conversations.entities.Conversation) SpannableString(android.text.SpannableString) RelativeSizeSpan(android.text.style.RelativeSizeSpan) StyleSpan(android.text.style.StyleSpan) DividerSpan(eu.siacs.conversations.ui.text.DividerSpan) SpannableStringBuilder(android.text.SpannableStringBuilder)

Example 33 with Jid

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

the class RtpSessionActivity method retry.

private void retry(View view) {
    final Intent intent = getIntent();
    final Account account = extractAccount(intent);
    final Jid with = Jid.ofEscaped(intent.getStringExtra(EXTRA_WITH));
    final String lastAction = intent.getStringExtra(EXTRA_LAST_ACTION);
    final String action = intent.getAction();
    final Set<Media> media = actionToMedia(lastAction == null ? action : lastAction);
    this.rtpConnectionReference = null;
    Log.d(Config.LOGTAG, "attempting retry with " + with.toEscapedString());
    proposeJingleRtpSession(account, with, media);
}
Also used : Account(eu.siacs.conversations.entities.Account) Jid(eu.siacs.conversations.xmpp.Jid) Media(eu.siacs.conversations.xmpp.jingle.Media) Intent(android.content.Intent)

Example 34 with Jid

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

the class RtpSessionActivity method retractSessionProposal.

private void retractSessionProposal() {
    final Intent intent = getIntent();
    final String action = intent.getAction();
    final Account account = extractAccount(intent);
    final Jid with = Jid.ofEscaped(intent.getStringExtra(EXTRA_WITH));
    final String state = intent.getStringExtra(EXTRA_LAST_REPORTED_STATE);
    if (!Intent.ACTION_VIEW.equals(action) || state == null || !END_CARD.contains(RtpEndUserState.valueOf(state))) {
        resetIntent(account, with, RtpEndUserState.RETRACTED, actionToMedia(intent.getAction()));
    }
    xmppConnectionService.getJingleConnectionManager().retractSessionProposal(account, with.asBareJid());
}
Also used : Account(eu.siacs.conversations.entities.Account) Jid(eu.siacs.conversations.xmpp.Jid) Intent(android.content.Intent)

Example 35 with Jid

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

the class MessageParser method extractStanzaId.

private static String extractStanzaId(Element packet, boolean isTypeGroupChat, Conversation conversation) {
    final Jid by;
    final boolean safeToExtract;
    if (isTypeGroupChat) {
        by = conversation.getJid().asBareJid();
        safeToExtract = conversation.getMucOptions().hasFeature(Namespace.STANZA_IDS);
    } else {
        Account account = conversation.getAccount();
        by = account.getJid().asBareJid();
        safeToExtract = account.getXmppConnection().getFeatures().stanzaIds();
    }
    return safeToExtract ? extractStanzaId(packet, by) : null;
}
Also used : Account(eu.siacs.conversations.entities.Account) InvalidJid(eu.siacs.conversations.xmpp.InvalidJid) Jid(eu.siacs.conversations.xmpp.Jid)

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