Search in sources :

Example 1 with ChatState

use of eu.siacs.conversations.xmpp.chatstate.ChatState in project Conversations by siacs.

the class ConversationFragment method updateStatusMessages.

protected void updateStatusMessages() {
    synchronized (this.messageList) {
        if (showLoadMoreMessages(conversation)) {
            this.messageList.add(0, Message.createLoadMoreMessage(conversation));
        }
        if (conversation.getMode() == Conversation.MODE_SINGLE) {
            ChatState state = conversation.getIncomingChatState();
            if (state == ChatState.COMPOSING) {
                this.messageList.add(Message.createStatusMessage(conversation, getString(R.string.contact_is_typing, conversation.getName())));
            } else if (state == ChatState.PAUSED) {
                this.messageList.add(Message.createStatusMessage(conversation, getString(R.string.contact_has_stopped_typing, conversation.getName())));
            } else {
                for (int i = this.messageList.size() - 1; i >= 0; --i) {
                    if (this.messageList.get(i).getStatus() == Message.STATUS_RECEIVED) {
                        return;
                    } else {
                        if (this.messageList.get(i).getStatus() == Message.STATUS_SEND_DISPLAYED) {
                            this.messageList.add(i + 1, Message.createStatusMessage(conversation, getString(R.string.contact_has_read_up_to_this_point, conversation.getName())));
                            return;
                        }
                    }
                }
            }
        } else {
            ChatState state = ChatState.COMPOSING;
            List<MucOptions.User> users = conversation.getMucOptions().getUsersWithChatState(state, 5);
            if (users.size() == 0) {
                state = ChatState.PAUSED;
                users = conversation.getMucOptions().getUsersWithChatState(state, 5);
            }
            if (users.size() > 0) {
                Message statusMessage;
                if (users.size() == 1) {
                    MucOptions.User user = users.get(0);
                    int id = state == ChatState.COMPOSING ? R.string.contact_is_typing : R.string.contact_has_stopped_typing;
                    statusMessage = Message.createStatusMessage(conversation, getString(id, UIHelper.getDisplayName(user)));
                    statusMessage.setTrueCounterpart(user.getRealJid());
                    statusMessage.setCounterpart(user.getFullJid());
                } else {
                    StringBuilder builder = new StringBuilder();
                    for (MucOptions.User user : users) {
                        if (builder.length() != 0) {
                            builder.append(", ");
                        }
                        builder.append(UIHelper.getDisplayName(user));
                    }
                    int id = state == ChatState.COMPOSING ? R.string.contacts_are_typing : R.string.contacts_have_stopped_typing;
                    statusMessage = Message.createStatusMessage(conversation, getString(id, builder.toString()));
                }
                this.messageList.add(statusMessage);
            }
        }
    }
}
Also used : ChatState(eu.siacs.conversations.xmpp.chatstate.ChatState) MucOptions(eu.siacs.conversations.entities.MucOptions) Message(eu.siacs.conversations.entities.Message)

Example 2 with ChatState

use of eu.siacs.conversations.xmpp.chatstate.ChatState in project Conversations by siacs.

the class MessageParser method extractChatState.

private boolean extractChatState(Conversation c, final boolean isTypeGroupChat, final MessagePacket packet) {
    ChatState state = ChatState.parse(packet);
    if (state != null && c != null) {
        final Account account = c.getAccount();
        Jid from = packet.getFrom();
        if (from.toBareJid().equals(account.getJid().toBareJid())) {
            c.setOutgoingChatState(state);
            if (state == ChatState.ACTIVE || state == ChatState.COMPOSING) {
                mXmppConnectionService.markRead(c);
                activateGracePeriod(account);
            }
            return false;
        } else {
            if (isTypeGroupChat) {
                MucOptions.User user = c.getMucOptions().findUserByFullJid(from);
                if (user != null) {
                    return user.setChatState(state);
                } else {
                    return false;
                }
            } else {
                return c.setIncomingChatState(state);
            }
        }
    }
    return false;
}
Also used : ChatState(eu.siacs.conversations.xmpp.chatstate.ChatState) Account(eu.siacs.conversations.entities.Account) MucOptions(eu.siacs.conversations.entities.MucOptions) Jid(eu.siacs.conversations.xmpp.jid.Jid)

Example 3 with ChatState

use of eu.siacs.conversations.xmpp.chatstate.ChatState in project Conversations by siacs.

the class ConversationFragment method updateChatState.

private void updateChatState(final Conversation conversation, final String msg) {
    ChatState state = msg.length() == 0 ? Config.DEFAULT_CHATSTATE : ChatState.PAUSED;
    Account.State status = conversation.getAccount().getStatus();
    if (status == Account.State.ONLINE && conversation.setOutgoingChatState(state)) {
        activity.xmppConnectionService.sendChatState(conversation);
    }
}
Also used : ChatState(eu.siacs.conversations.xmpp.chatstate.ChatState) Account(eu.siacs.conversations.entities.Account)

Aggregations

ChatState (eu.siacs.conversations.xmpp.chatstate.ChatState)3 Account (eu.siacs.conversations.entities.Account)2 MucOptions (eu.siacs.conversations.entities.MucOptions)2 Message (eu.siacs.conversations.entities.Message)1 Jid (eu.siacs.conversations.xmpp.jid.Jid)1