aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/eu/siacs/conversations/parser/PresenceParser.java5
-rw-r--r--src/eu/siacs/conversations/ui/ContactDetailsActivity.java88
2 files changed, 49 insertions, 44 deletions
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();
+ }
}
}
}