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) {
|
public static Message createStatusMessage(Conversation conversation, String body) {
|
||||||
Message message = new Message();
|
final Message message = new Message();
|
||||||
message.setType(Message.TYPE_STATUS);
|
message.setType(Message.TYPE_STATUS);
|
||||||
message.setConversation(conversation);
|
message.setConversation(conversation);
|
||||||
message.setBody(body);
|
message.setBody(body);
|
||||||
|
|
|
@ -6,6 +6,7 @@ import eu.siacs.conversations.crypto.PgpEngine;
|
||||||
import eu.siacs.conversations.entities.Account;
|
import eu.siacs.conversations.entities.Account;
|
||||||
import eu.siacs.conversations.entities.Contact;
|
import eu.siacs.conversations.entities.Contact;
|
||||||
import eu.siacs.conversations.entities.Conversation;
|
import eu.siacs.conversations.entities.Conversation;
|
||||||
|
import eu.siacs.conversations.entities.Message;
|
||||||
import eu.siacs.conversations.entities.MucOptions;
|
import eu.siacs.conversations.entities.MucOptions;
|
||||||
import eu.siacs.conversations.entities.Presences;
|
import eu.siacs.conversations.entities.Presences;
|
||||||
import eu.siacs.conversations.generator.PresenceGenerator;
|
import eu.siacs.conversations.generator.PresenceGenerator;
|
||||||
|
@ -44,8 +45,8 @@ public class PresenceParser extends AbstractParser implements
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void parseContactPresence(PresencePacket packet, Account account) {
|
public void parseContactPresence(final PresencePacket packet, final Account account) {
|
||||||
PresenceGenerator mPresenceGenerator = mXmppConnectionService.getPresenceGenerator();
|
final PresenceGenerator mPresenceGenerator = mXmppConnectionService.getPresenceGenerator();
|
||||||
final Jid from = packet.getFrom();
|
final Jid from = packet.getFrom();
|
||||||
if (from == null) {
|
if (from == null) {
|
||||||
return;
|
return;
|
||||||
|
@ -93,6 +94,17 @@ public class PresenceParser extends AbstractParser implements
|
||||||
mPresenceGenerator.sendPresenceUpdatesTo(contact));
|
mPresenceGenerator.sendPresenceUpdatesTo(contact));
|
||||||
} else {
|
} else {
|
||||||
contact.setOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST);
|
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();
|
mXmppConnectionService.updateRosterUi();
|
||||||
|
|
|
@ -1322,6 +1322,13 @@ public class XmppConnectionService extends Service implements OnPhoneContactsLoa
|
||||||
leaveMuc(conversation);
|
leaveMuc(conversation);
|
||||||
} else {
|
} else {
|
||||||
conversation.endOtrIfNeeded();
|
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.databaseBackend.updateConversation(conversation);
|
||||||
this.conversations.remove(conversation);
|
this.conversations.remove(conversation);
|
||||||
|
|
Loading…
Reference in a new issue