error msg on offline subscription changes

Daniel Gultsch created

Change summary

res/values/strings.xml                                    |  1 
src/eu/siacs/conversations/ui/ContactDetailsActivity.java | 41 ++++++--
2 files changed, 30 insertions(+), 12 deletions(-)

Detailed changes

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>

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();
+			}
 		}
 	}