aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoriNPUTmice <daniel@gultsch.de>2014-09-08 12:46:48 +0200
committeriNPUTmice <daniel@gultsch.de>2014-09-08 12:46:48 +0200
commit19f98f5143059d48bfb1fac9b376acec9cf412b2 (patch)
treec3fbb2d05d7c1d760149acd4a1eecff69e587664
parent409fdd8596f217e6f4101064342273268425edfb (diff)
warn on missing presence subscription
-rw-r--r--res/values/strings.xml2
-rw-r--r--src/eu/siacs/conversations/services/XmppConnectionService.java2
-rw-r--r--src/eu/siacs/conversations/ui/ConversationActivity.java2
-rw-r--r--src/eu/siacs/conversations/ui/XmppActivity.java36
4 files changed, 29 insertions, 13 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1486b9bc..1153abbe 100644
--- a/res/values/strings.xml
+++ b/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> \ 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 2b2616e2..fc885d70 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 17e410f2..0409feda 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 a2567176..b7cce11d 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);