aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--res/values/strings.xml1
-rw-r--r--src/eu/siacs/conversations/ui/ContactDetailsActivity.java41
2 files changed, 30 insertions, 12 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 5ac2514d..13e43f5f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -213,4 +213,5 @@
<string name="muc_details_conference_subject">Conference Subject</string>
<string name="muc_details_your_nickname">Your nickname</string>
<string name="muc_details_other_members">Other Members</string>
+ <string name="subscription_not_updated_offline">Account offline. Could not update subscription</string>
</resources> \ No newline at end of file
diff --git a/src/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java
index 83ae99d9..154533db 100644
--- a/src/eu/siacs/conversations/ui/ContactDetailsActivity.java
+++ b/src/eu/siacs/conversations/ui/ContactDetailsActivity.java
@@ -301,52 +301,69 @@ 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()) {
- contact.resetOption(Contact.Options.FROM);
- contact.resetOption(Contact.Options.PREEMPTIVE_GRANT);
- activity.xmppConnectionService.stopPresenceUpdatesTo(contact);
+ 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 (!send.isChecked()) {
- contact.resetOption(Contact.Options.PREEMPTIVE_GRANT);
+ if (online) {
+ contact.resetOption(Contact.Options.PREEMPTIVE_GRANT);
+ }
updated = true;
}
} else {
if (send.isChecked()) {
- contact.setOption(Contact.Options.PREEMPTIVE_GRANT);
+ if (online) {
+ contact.setOption(Contact.Options.PREEMPTIVE_GRANT);
+ }
updated = true;
}
}
}
if (contact.getOption(Contact.Options.TO)) {
if (!receive.isChecked()) {
- contact.resetOption(Contact.Options.TO);
- activity.xmppConnectionService.stopPresenceUpdatesFrom(contact);
+ if (online) {
+ contact.resetOption(Contact.Options.TO);
+ activity.xmppConnectionService.stopPresenceUpdatesFrom(contact);
+ }
updated = true;
}
} else {
if (contact.getOption(Contact.Options.ASKING)) {
if (!receive.isChecked()) {
- contact.resetOption(Contact.Options.ASKING);
- activity.xmppConnectionService
+ if (online) {
+ contact.resetOption(Contact.Options.ASKING);
+ activity.xmppConnectionService
.stopPresenceUpdatesFrom(contact);
+ }
updated = true;
}
} else {
if (receive.isChecked()) {
- contact.setOption(Contact.Options.ASKING);
- activity.xmppConnectionService
+ if (online) {
+ contact.setOption(Contact.Options.ASKING);
+ activity.xmppConnectionService
.requestPresenceUpdatesFrom(contact);
+ }
updated = true;
}
}
}
if (updated) {
- Toast.makeText(getApplicationContext(), getString(R.string.subscription_updated), Toast.LENGTH_SHORT).show();
+ 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();
+ }
}
}