diff --git a/src/eu/siacs/conversations/parser/PresenceParser.java b/src/eu/siacs/conversations/parser/PresenceParser.java index 2003d4cd..8cc57bad 100644 --- a/src/eu/siacs/conversations/parser/PresenceParser.java +++ b/src/eu/siacs/conversations/parser/PresenceParser.java @@ -37,7 +37,10 @@ public class PresenceParser extends AbstractParser { } public void parseContactPresence(PresencePacket packet, Account account) { - String[] fromParts = packet.getAttribute("from").split("/"); + if (packet.getFrom()==null) { + return; + } + String[] fromParts = packet.getFrom().split("/"); String type = packet.getAttribute("type"); if (fromParts[0].equals(account.getJid())) { if (fromParts.length == 2) { diff --git a/src/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java index d89c35f1..bee93713 100644 --- a/src/eu/siacs/conversations/ui/ContactDetailsActivity.java +++ b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java @@ -305,68 +305,70 @@ public class ContactDetailsActivity extends XmppActivity { protected void onStop() { super.onStop(); boolean updated = false; - boolean online = contact.getAccount().getStatus() == Account.STATUS_ONLINE; - if (contact.getOption(Contact.Options.FROM)) { - if (!send.isChecked()) { - if (online) { - contact.resetOption(Contact.Options.FROM); - contact.resetOption(Contact.Options.PREEMPTIVE_GRANT); - activity.xmppConnectionService.stopPresenceUpdatesTo(contact); - } - updated = true; - } - } else { - if (contact - .getOption(Contact.Options.PREEMPTIVE_GRANT)) { + if (contact!=null) { + boolean online = contact.getAccount().getStatus() == Account.STATUS_ONLINE; + if (contact.getOption(Contact.Options.FROM)) { if (!send.isChecked()) { if (online) { + contact.resetOption(Contact.Options.FROM); contact.resetOption(Contact.Options.PREEMPTIVE_GRANT); + activity.xmppConnectionService.stopPresenceUpdatesTo(contact); } updated = true; } } else { - if (send.isChecked()) { - if (online) { - contact.setOption(Contact.Options.PREEMPTIVE_GRANT); + if (contact + .getOption(Contact.Options.PREEMPTIVE_GRANT)) { + if (!send.isChecked()) { + if (online) { + contact.resetOption(Contact.Options.PREEMPTIVE_GRANT); + } + updated = true; + } + } else { + if (send.isChecked()) { + if (online) { + contact.setOption(Contact.Options.PREEMPTIVE_GRANT); + } + updated = true; } - updated = true; } } - } - if (contact.getOption(Contact.Options.TO)) { - if (!receive.isChecked()) { - if (online) { - contact.resetOption(Contact.Options.TO); - activity.xmppConnectionService.stopPresenceUpdatesFrom(contact); - } - updated = true; - } - } else { - if (contact.getOption(Contact.Options.ASKING)) { + if (contact.getOption(Contact.Options.TO)) { if (!receive.isChecked()) { if (online) { - contact.resetOption(Contact.Options.ASKING); - activity.xmppConnectionService - .stopPresenceUpdatesFrom(contact); + contact.resetOption(Contact.Options.TO); + activity.xmppConnectionService.stopPresenceUpdatesFrom(contact); } updated = true; } } else { - if (receive.isChecked()) { - if (online) { - contact.setOption(Contact.Options.ASKING); - activity.xmppConnectionService - .requestPresenceUpdatesFrom(contact); + if (contact.getOption(Contact.Options.ASKING)) { + if (!receive.isChecked()) { + if (online) { + contact.resetOption(Contact.Options.ASKING); + activity.xmppConnectionService + .stopPresenceUpdatesFrom(contact); + } + updated = true; + } + } else { + if (receive.isChecked()) { + if (online) { + contact.setOption(Contact.Options.ASKING); + activity.xmppConnectionService + .requestPresenceUpdatesFrom(contact); + } + updated = true; } - updated = true; } } - } - if (updated) { - if (online) { - Toast.makeText(getApplicationContext(), getString(R.string.subscription_updated), Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(getApplicationContext(), getString(R.string.subscription_not_updated_offline), Toast.LENGTH_SHORT).show(); + if (updated) { + if (online) { + Toast.makeText(getApplicationContext(), getString(R.string.subscription_updated), Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(getApplicationContext(), getString(R.string.subscription_not_updated_offline), Toast.LENGTH_SHORT).show(); + } } } }