Search in sources :

Example 66 with Jid

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

the class RtpSessionActivity method onNewIntent.

@Override
public void onNewIntent(final Intent intent) {
    Log.d(Config.LOGTAG, this.getClass().getName() + ".onNewIntent()");
    super.onNewIntent(intent);
    setIntent(intent);
    if (xmppConnectionService == null) {
        Log.d(Config.LOGTAG, "RtpSessionActivity: background service wasn't bound in onNewIntent()");
        return;
    }
    final Account account = extractAccount(intent);
    final String action = intent.getAction();
    final Jid with = Jid.ofEscaped(intent.getStringExtra(EXTRA_WITH));
    final String sessionId = intent.getStringExtra(EXTRA_SESSION_ID);
    if (sessionId != null) {
        Log.d(Config.LOGTAG, "reinitializing from onNewIntent()");
        if (initializeActivityWithRunningRtpSession(account, with, sessionId)) {
            return;
        }
        if (ACTION_ACCEPT_CALL.equals(intent.getAction())) {
            Log.d(Config.LOGTAG, "accepting call from onNewIntent()");
            requestPermissionsAndAcceptCall();
            resetIntent(intent.getExtras());
        }
    } else if (asList(ACTION_MAKE_VIDEO_CALL, ACTION_MAKE_VOICE_CALL).contains(action)) {
        proposeJingleRtpSession(account, with, actionToMedia(action));
        binding.with.setText(account.getRoster().getContact(with).getDisplayName());
    } else {
        throw new IllegalStateException("received onNewIntent without sessionId");
    }
}
Also used : Account(eu.siacs.conversations.entities.Account) Jid(eu.siacs.conversations.xmpp.Jid)

Example 67 with Jid

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

the class RtpSessionActivity method recordVoiceMail.

private void recordVoiceMail(final View view) {
    final Intent intent = getIntent();
    final Account account = extractAccount(intent);
    final Jid with = Jid.ofEscaped(intent.getStringExtra(EXTRA_WITH));
    final Conversation conversation = xmppConnectionService.findOrCreateConversation(account, with, false, true);
    final Intent launchIntent = new Intent(this, ConversationsActivity.class);
    launchIntent.setAction(ConversationsActivity.ACTION_VIEW_CONVERSATION);
    launchIntent.putExtra(ConversationsActivity.EXTRA_CONVERSATION, conversation.getUuid());
    launchIntent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_CLEAR_TOP);
    launchIntent.putExtra(ConversationsActivity.EXTRA_POST_INIT_ACTION, ConversationsActivity.POST_ACTION_RECORD_VOICE);
    startActivity(launchIntent);
    finish();
}
Also used : Account(eu.siacs.conversations.entities.Account) Jid(eu.siacs.conversations.xmpp.Jid) Intent(android.content.Intent) Conversation(eu.siacs.conversations.entities.Conversation)

Example 68 with Jid

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

the class ChannelSearchResultAdapter method onBindViewHolder.

@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int position) {
    final Room searchResult = getItem(position);
    viewHolder.binding.name.setText(searchResult.getName());
    final String description = searchResult.getDescription();
    final String language = searchResult.getLanguage();
    if (TextUtils.isEmpty(description)) {
        viewHolder.binding.description.setVisibility(View.GONE);
    } else {
        viewHolder.binding.description.setText(description);
        viewHolder.binding.description.setVisibility(View.VISIBLE);
    }
    if (language == null || language.length() != 2) {
        viewHolder.binding.language.setVisibility(View.GONE);
    } else {
        viewHolder.binding.language.setText(language.toUpperCase(Locale.ENGLISH));
        viewHolder.binding.language.setVisibility(View.VISIBLE);
    }
    final Jid room = searchResult.getRoom();
    viewHolder.binding.room.setText(room != null ? room.asBareJid().toString() : "");
    AvatarWorkerTask.loadAvatar(searchResult, viewHolder.binding.avatar, R.dimen.avatar);
    final View root = viewHolder.binding.getRoot();
    root.setTag(searchResult);
    root.setOnClickListener(v -> listener.onChannelSearchResult(searchResult));
    root.setOnCreateContextMenuListener(this);
}
Also used : Jid(eu.siacs.conversations.xmpp.Jid) Room(eu.siacs.conversations.entities.Room) View(android.view.View) RecyclerView(androidx.recyclerview.widget.RecyclerView)

Example 69 with Jid

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

the class MessageAdapter method toggleWhisperInfo.

private void toggleWhisperInfo(ViewHolder viewHolder, final Message message, final boolean darkBackground) {
    if (message.isPrivateMessage()) {
        final 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()));
        }
        final SpannableString body = new SpannableString(privateMarker);
        body.setSpan(new ForegroundColorSpan(getMessageTextColor(darkBackground, false)), 0, privateMarker.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        body.setSpan(new StyleSpan(Typeface.BOLD), 0, privateMarker.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        viewHolder.messageBody.setText(body);
        viewHolder.messageBody.setVisibility(View.VISIBLE);
    } else {
        viewHolder.messageBody.setVisibility(View.GONE);
    }
}
Also used : SpannableString(android.text.SpannableString) Jid(eu.siacs.conversations.xmpp.Jid) ForegroundColorSpan(android.text.style.ForegroundColorSpan) StyleSpan(android.text.style.StyleSpan) SpannableString(android.text.SpannableString)

Example 70 with Jid

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

the class ConversationAdapter method onBindViewHolder.

@Override
public void onBindViewHolder(@NonNull ConversationViewHolder viewHolder, int position) {
    Conversation conversation = conversations.get(position);
    if (conversation == null) {
        return;
    }
    CharSequence name = conversation.getName();
    if (name instanceof Jid) {
        viewHolder.binding.conversationName.setText(IrregularUnicodeDetector.style(activity, (Jid) name));
    } else {
        viewHolder.binding.conversationName.setText(EmojiWrapper.transform(name));
    }
    if (conversation == ConversationFragment.getConversation(activity)) {
        viewHolder.binding.frame.setBackgroundColor(StyledAttributes.getColor(activity, R.attr.color_background_tertiary));
    } else {
        viewHolder.binding.frame.setBackgroundColor(StyledAttributes.getColor(activity, R.attr.color_background_primary));
    }
    Message message = conversation.getLatestMessage();
    final int unreadCount = conversation.unreadCount();
    final boolean isRead = conversation.isRead();
    final Conversation.Draft draft = isRead ? conversation.getDraft() : null;
    if (unreadCount > 0) {
        viewHolder.binding.unreadCount.setVisibility(View.VISIBLE);
        viewHolder.binding.unreadCount.setUnreadCount(unreadCount);
    } else {
        viewHolder.binding.unreadCount.setVisibility(View.GONE);
    }
    if (isRead) {
        viewHolder.binding.conversationName.setTypeface(null, Typeface.NORMAL);
    } else {
        viewHolder.binding.conversationName.setTypeface(null, Typeface.BOLD);
    }
    if (draft != null) {
        viewHolder.binding.conversationLastmsgImg.setVisibility(View.GONE);
        viewHolder.binding.conversationLastmsg.setText(EmojiWrapper.transform(draft.getMessage()));
        viewHolder.binding.senderName.setText(R.string.draft);
        viewHolder.binding.senderName.setVisibility(View.VISIBLE);
        viewHolder.binding.conversationLastmsg.setTypeface(null, Typeface.NORMAL);
        viewHolder.binding.senderName.setTypeface(null, Typeface.ITALIC);
    } else {
        final boolean fileAvailable = !message.isDeleted();
        final boolean showPreviewText;
        if (fileAvailable && (message.isFileOrImage() || message.treatAsDownloadable() || message.isGeoUri())) {
            final int imageResource;
            if (message.isGeoUri()) {
                imageResource = activity.getThemeResource(R.attr.ic_attach_location, R.drawable.ic_attach_location);
                showPreviewText = false;
            } else {
                // TODO move this into static MediaPreview method and use same icons as in MediaAdapter
                final String mime = message.getMimeType();
                switch(mime == null ? "" : mime.split("/")[0]) {
                    case "image":
                        imageResource = activity.getThemeResource(R.attr.ic_attach_photo, R.drawable.ic_attach_photo);
                        showPreviewText = false;
                        break;
                    case "video":
                        imageResource = activity.getThemeResource(R.attr.ic_attach_videocam, R.drawable.ic_attach_videocam);
                        showPreviewText = false;
                        break;
                    case "audio":
                        imageResource = activity.getThemeResource(R.attr.ic_attach_record, R.drawable.ic_attach_record);
                        showPreviewText = false;
                        break;
                    default:
                        imageResource = activity.getThemeResource(R.attr.ic_attach_document, R.drawable.ic_attach_document);
                        showPreviewText = true;
                        break;
                }
            }
            viewHolder.binding.conversationLastmsgImg.setImageResource(imageResource);
            viewHolder.binding.conversationLastmsgImg.setVisibility(View.VISIBLE);
        } else {
            viewHolder.binding.conversationLastmsgImg.setVisibility(View.GONE);
            showPreviewText = true;
        }
        final Pair<CharSequence, Boolean> preview = UIHelper.getMessagePreview(activity, message, viewHolder.binding.conversationLastmsg.getCurrentTextColor());
        if (showPreviewText) {
            viewHolder.binding.conversationLastmsg.setText(EmojiWrapper.transform(UIHelper.shorten(preview.first)));
        } else {
            viewHolder.binding.conversationLastmsgImg.setContentDescription(preview.first);
        }
        viewHolder.binding.conversationLastmsg.setVisibility(showPreviewText ? View.VISIBLE : View.GONE);
        if (preview.second) {
            if (isRead) {
                viewHolder.binding.conversationLastmsg.setTypeface(null, Typeface.ITALIC);
                viewHolder.binding.senderName.setTypeface(null, Typeface.NORMAL);
            } else {
                viewHolder.binding.conversationLastmsg.setTypeface(null, Typeface.BOLD_ITALIC);
                viewHolder.binding.senderName.setTypeface(null, Typeface.BOLD);
            }
        } else {
            if (isRead) {
                viewHolder.binding.conversationLastmsg.setTypeface(null, Typeface.NORMAL);
                viewHolder.binding.senderName.setTypeface(null, Typeface.NORMAL);
            } else {
                viewHolder.binding.conversationLastmsg.setTypeface(null, Typeface.BOLD);
                viewHolder.binding.senderName.setTypeface(null, Typeface.BOLD);
            }
        }
        if (message.getStatus() == Message.STATUS_RECEIVED) {
            if (conversation.getMode() == Conversation.MODE_MULTI) {
                viewHolder.binding.senderName.setVisibility(View.VISIBLE);
                viewHolder.binding.senderName.setText(UIHelper.getMessageDisplayName(message).split("\\s+")[0] + ':');
            } else {
                viewHolder.binding.senderName.setVisibility(View.GONE);
            }
        } else if (message.getType() != Message.TYPE_STATUS) {
            viewHolder.binding.senderName.setVisibility(View.VISIBLE);
            viewHolder.binding.senderName.setText(activity.getString(R.string.me) + ':');
        } else {
            viewHolder.binding.senderName.setVisibility(View.GONE);
        }
    }
    final Optional<OngoingRtpSession> ongoingCall;
    if (conversation.getMode() == Conversational.MODE_MULTI) {
        ongoingCall = Optional.absent();
    } else {
        ongoingCall = activity.xmppConnectionService.getJingleConnectionManager().getOngoingRtpConnection(conversation.getContact());
    }
    if (ongoingCall.isPresent()) {
        viewHolder.binding.notificationStatus.setVisibility(View.VISIBLE);
        final int ic_ongoing_call = activity.getThemeResource(R.attr.ic_ongoing_call_hint, R.drawable.ic_phone_in_talk_black_18dp);
        viewHolder.binding.notificationStatus.setImageResource(ic_ongoing_call);
    } else {
        final long muted_till = conversation.getLongAttribute(Conversation.ATTRIBUTE_MUTED_TILL, 0);
        if (muted_till == Long.MAX_VALUE) {
            viewHolder.binding.notificationStatus.setVisibility(View.VISIBLE);
            int ic_notifications_off = activity.getThemeResource(R.attr.icon_notifications_off, R.drawable.ic_notifications_off_black_24dp);
            viewHolder.binding.notificationStatus.setImageResource(ic_notifications_off);
        } else if (muted_till >= System.currentTimeMillis()) {
            viewHolder.binding.notificationStatus.setVisibility(View.VISIBLE);
            int ic_notifications_paused = activity.getThemeResource(R.attr.icon_notifications_paused, R.drawable.ic_notifications_paused_black_24dp);
            viewHolder.binding.notificationStatus.setImageResource(ic_notifications_paused);
        } else if (conversation.alwaysNotify()) {
            viewHolder.binding.notificationStatus.setVisibility(View.GONE);
        } else {
            viewHolder.binding.notificationStatus.setVisibility(View.VISIBLE);
            int ic_notifications_none = activity.getThemeResource(R.attr.icon_notifications_none, R.drawable.ic_notifications_none_black_24dp);
            viewHolder.binding.notificationStatus.setImageResource(ic_notifications_none);
        }
    }
    long timestamp;
    if (draft != null) {
        timestamp = draft.getTimestamp();
    } else {
        timestamp = conversation.getLatestMessage().getTimeSent();
    }
    viewHolder.binding.pinnedOnTop.setVisibility(conversation.getBooleanAttribute(Conversation.ATTRIBUTE_PINNED_ON_TOP, false) ? View.VISIBLE : View.GONE);
    viewHolder.binding.conversationLastupdate.setText(UIHelper.readableTimeDifference(activity, timestamp));
    AvatarWorkerTask.loadAvatar(conversation, viewHolder.binding.conversationImage, R.dimen.avatar_on_conversation_overview);
    viewHolder.itemView.setOnClickListener(v -> listener.onConversationClick(v, conversation));
}
Also used : Jid(eu.siacs.conversations.xmpp.Jid) Message(eu.siacs.conversations.entities.Message) Conversation(eu.siacs.conversations.entities.Conversation) OngoingRtpSession(eu.siacs.conversations.xmpp.jingle.OngoingRtpSession)

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