warn on missing presence subscription

iNPUTmice created

Change summary

res/values/strings.xml                                         |  2 
src/eu/siacs/conversations/services/XmppConnectionService.java |  2 
src/eu/siacs/conversations/ui/ConversationActivity.java        |  2 
src/eu/siacs/conversations/ui/XmppActivity.java                | 36 ++-
4 files changed, 29 insertions(+), 13 deletions(-)

Detailed changes

res/values/strings.xml 🔗

@@ -243,5 +243,7 @@
     <string name="unable_to_decrypt_otr_message">Unable to decrypt OTR message</string>
     <string name="delete_fingerprint">Delete Fingerprint</string>
     <string name="sure_delete_fingerprint">Are you sure you would like to delete this fingerprint?</string>
+    <string name="ignore">Ignore</string>
+    <string name="without_mutual_presence_updates"><b>Warning:</b> Sending this without mutual presence updates could cause unexpected problems.\n\n<small>Go to contact details to verify your presence subscriptions.</small></string>
 
 </resources>

src/eu/siacs/conversations/services/XmppConnectionService.java 🔗

@@ -115,7 +115,7 @@ public class XmppConnectionService extends Service {
 		public void onContactStatusChanged(Contact contact, boolean online) {
 			Conversation conversation = find(getConversations(), contact);
 			if (conversation != null) {
-				conversation.endOtrIfNeeded();
+				conversation.resetOtrSession();
 				if (online && (contact.getPresences().size() == 1)) {
 					sendUnsendMessages(conversation);
 				}

src/eu/siacs/conversations/ui/ConversationActivity.java 🔗

@@ -760,7 +760,7 @@ public class ConversationActivity extends XmppActivity {
 	public void updateConversationList() {
 		xmppConnectionService
 				.populateWithOrderedConversations(conversationList);
-		listView.invalidateViews();
+		listAdapter.notifyDataSetChanged();
 	}
 
 	public void runIntent(PendingIntent pi, int requestCode) {

src/eu/siacs/conversations/ui/XmppActivity.java 🔗

@@ -41,7 +41,6 @@ import android.view.View;
 import android.view.inputmethod.InputMethodManager;
 import android.widget.EditText;
 import android.widget.ImageView;
-import android.widget.Toast;
 
 public abstract class XmppActivity extends Activity {
 
@@ -303,8 +302,8 @@ public abstract class XmppActivity extends Activity {
 		AlertDialog.Builder builder = new AlertDialog.Builder(this);
 		builder.setTitle(contact.getJid());
 		builder.setMessage(R.string.request_presence_updates);
-		builder.setNegativeButton(getString(R.string.cancel), null);
-		builder.setPositiveButton(getString(R.string.request_now),
+		builder.setNegativeButton(R.string.cancel, null);
+		builder.setPositiveButton(R.string.request_now,
 				new DialogInterface.OnClickListener() {
 
 					@Override
@@ -318,6 +317,24 @@ public abstract class XmppActivity extends Activity {
 				});
 		builder.create().show();
 	}
+	
+	private void warnMutalPresenceSubscription(final Conversation conversation,final OnPresenceSelected listener) {
+		AlertDialog.Builder builder = new AlertDialog.Builder(this);
+		builder.setTitle(conversation.getContact().getJid());
+		builder.setMessage(R.string.without_mutual_presence_updates);
+		builder.setNegativeButton(R.string.cancel, null);
+		builder.setPositiveButton(R.string.ignore, new OnClickListener() {
+			
+			@Override
+			public void onClick(DialogInterface dialog, int which) {
+				conversation.setNextPresence(null);
+				if (listener!=null) {
+					listener.onPresenceSelected();
+				}
+			}
+		});
+		builder.create().show();
+	}
 
 	protected void quickEdit(String previousValue, OnValueEdited callback) {
 		quickEdit(previousValue, callback, false);
@@ -371,15 +388,12 @@ public abstract class XmppActivity extends Activity {
 						&& !contact.getOption(Contact.Options.ASKING)
 						&& contact.getAccount().getStatus() == Account.STATUS_ONLINE) {
 					showAskForPresenceDialog(contact);
-					return;
-				} else if (!contact.getOption(Contact.Options.TO)) {
-					Toast toast = Toast.makeText(this,
-							R.string.missing_presence_updates,
-							Toast.LENGTH_LONG);
-					toast.show();
+				} else if (!contact.getOption(Contact.Options.TO) || !contact.getOption(Contact.Options.FROM)) {
+					warnMutalPresenceSubscription(conversation,listener);
+				} else {
+					conversation.setNextPresence(null);
+					listener.onPresenceSelected();
 				}
-				conversation.setNextPresence(null);
-				listener.onPresenceSelected();
 			} else if (presences.size() == 1) {
 				String presence = (String) presences.asStringArray()[0];
 				conversation.setNextPresence(presence);