diff --git a/res/values/strings.xml b/res/values/strings.xml index 1486b9bc7..1153abbea 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -243,5 +243,7 @@ Unable to decrypt OTR message Delete Fingerprint Are you sure you would like to delete this fingerprint? + Ignore + Warning: Sending this without mutual presence updates could cause unexpected problems.\n\nGo to contact details to verify your presence subscriptions. \ No newline at end of file diff --git a/src/eu/siacs/conversations/services/XmppConnectionService.java b/src/eu/siacs/conversations/services/XmppConnectionService.java index 2b2616e28..fc885d704 100644 --- a/src/eu/siacs/conversations/services/XmppConnectionService.java +++ b/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); } diff --git a/src/eu/siacs/conversations/ui/ConversationActivity.java b/src/eu/siacs/conversations/ui/ConversationActivity.java index 17e410f22..0409fedaa 100644 --- a/src/eu/siacs/conversations/ui/ConversationActivity.java +++ b/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) { diff --git a/src/eu/siacs/conversations/ui/XmppActivity.java b/src/eu/siacs/conversations/ui/XmppActivity.java index a2567176b..b7cce11da 100644 --- a/src/eu/siacs/conversations/ui/XmppActivity.java +++ b/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);