Show status message when contact requests presence
Remove presence when conversation closed
This commit is contained in:
parent
e1aeb376ac
commit
a3eb540f05
|
@ -171,7 +171,7 @@ public class Message extends AbstractEntity {
|
|||
}
|
||||
|
||||
public static Message createStatusMessage(Conversation conversation, String body) {
|
||||
Message message = new Message();
|
||||
final Message message = new Message();
|
||||
message.setType(Message.TYPE_STATUS);
|
||||
message.setConversation(conversation);
|
||||
message.setBody(body);
|
||||
|
|
|
@ -6,6 +6,7 @@ import eu.siacs.conversations.crypto.PgpEngine;
|
|||
import eu.siacs.conversations.entities.Account;
|
||||
import eu.siacs.conversations.entities.Contact;
|
||||
import eu.siacs.conversations.entities.Conversation;
|
||||
import eu.siacs.conversations.entities.Message;
|
||||
import eu.siacs.conversations.entities.MucOptions;
|
||||
import eu.siacs.conversations.entities.Presences;
|
||||
import eu.siacs.conversations.generator.PresenceGenerator;
|
||||
|
@ -44,8 +45,8 @@ public class PresenceParser extends AbstractParser implements
|
|||
}
|
||||
}
|
||||
|
||||
public void parseContactPresence(PresencePacket packet, Account account) {
|
||||
PresenceGenerator mPresenceGenerator = mXmppConnectionService.getPresenceGenerator();
|
||||
public void parseContactPresence(final PresencePacket packet, final Account account) {
|
||||
final PresenceGenerator mPresenceGenerator = mXmppConnectionService.getPresenceGenerator();
|
||||
final Jid from = packet.getFrom();
|
||||
if (from == null) {
|
||||
return;
|
||||
|
@ -93,6 +94,17 @@ public class PresenceParser extends AbstractParser implements
|
|||
mPresenceGenerator.sendPresenceUpdatesTo(contact));
|
||||
} else {
|
||||
contact.setOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST);
|
||||
final String statusMessage = packet.findChildContent("status");
|
||||
if (statusMessage != null && !statusMessage.isEmpty()) {
|
||||
final Conversation conversation = mXmppConnectionService.findOrCreateConversation(
|
||||
account, contact.getJid().toBareJid(), false);
|
||||
conversation.add(new Message(
|
||||
conversation,
|
||||
statusMessage,
|
||||
Message.ENCRYPTION_NONE,
|
||||
Message.STATUS_RECEIVED
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
mXmppConnectionService.updateRosterUi();
|
||||
|
|
|
@ -1322,6 +1322,13 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
|
|||
leaveMuc(conversation);
|
||||
} else {
|
||||
conversation.endOtrIfNeeded();
|
||||
if (conversation.getContact().getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) {
|
||||
Log.d(Config.LOGTAG, "Canceling presence request from " + conversation.getJid().toString());
|
||||
sendPresencePacket(
|
||||
conversation.getAccount(),
|
||||
mPresenceGenerator.stopPresenceUpdatesTo(conversation.getContact())
|
||||
);
|
||||
}
|
||||
}
|
||||
this.databaseBackend.updateConversation(conversation);
|
||||
this.conversations.remove(conversation);
|
||||
|
|
Loading…
Reference in a new issue