diff options
-rw-r--r-- | res/values/strings.xml | 3 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/XmppActivity.java | 34 |
2 files changed, 37 insertions, 0 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index f655c1a8..5e8d4f55 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -241,5 +241,8 @@ <string name="enable">Enable</string> <string name="conference_requires_password">Conference requires password</string> <string name="enter_password">Enter password</string> + <string name="missing_presence_updates">Missing presence updates from contact</string> + <string name="request_presence_updates">Please request presence updates from your contact first.\n\n<small>This will be used to determine what client(s) your contact is using.</small></string> + <string name="request_now">Request now</string> </resources>
\ No newline at end of file diff --git a/src/eu/siacs/conversations/ui/XmppActivity.java b/src/eu/siacs/conversations/ui/XmppActivity.java index 72902c65..7d903e86 100644 --- a/src/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/eu/siacs/conversations/ui/XmppActivity.java @@ -36,11 +36,13 @@ import android.os.IBinder; import android.text.InputType; import android.util.DisplayMetrics; import android.util.Log; +import android.view.Gravity; import android.view.MenuItem; 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 { @@ -298,6 +300,26 @@ public abstract class XmppActivity extends Activity { builder.create().show(); } + private void showAskForPresenceDialog(final Contact contact) { + 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), + new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + if (xmppConnectionServiceBound) { + xmppConnectionService.sendPresencePacket(contact.getAccount(), + xmppConnectionService.getPresenceGenerator() + .requestPresenceUpdatesFrom(contact)); + } + } + }); + builder.create().show(); + } + protected void quickEdit(String previousValue, OnValueEdited callback) { quickEdit(previousValue, callback, false); } @@ -346,6 +368,18 @@ public abstract class XmppActivity extends Activity { } else { Presences presences = contact.getPresences(); if (presences.size() == 0) { + if (!contact.getOption(Contact.Options.TO) + && !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.setGravity(Gravity.CENTER_VERTICAL, 0, 0); + toast.show(); + } conversation.setNextPresence(null); listener.onPresenceSelected(); } else if (presences.size() == 1) { |