diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1bc03a919..70bc8f57a 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -68,4 +68,14 @@
Download Image
Error loading image (File not found)
Image file offered for download
+ Not Connected
+ You have to be online to send %s but your account assoziated with this Conversation is currently offline.
+ You can not perform this action while being offline
+ files
+ OTR encrypted messages
+ Manage account
+ Your Contact is Offline
+ Sending OTR encrypted messages to an offline contact is unfortunately not supported.\nWould you like to send the message in plain text?
+ Sending files to an offline contact is unfortunately not supported.
+ Send unencrypted
diff --git a/src/eu/siacs/conversations/ui/ConversationActivity.java b/src/eu/siacs/conversations/ui/ConversationActivity.java
index 220c24616..fc19ecc7b 100644
--- a/src/eu/siacs/conversations/ui/ConversationActivity.java
+++ b/src/eu/siacs/conversations/ui/ConversationActivity.java
@@ -332,7 +332,13 @@ public class ConversationActivity extends XmppActivity {
startActivityForResult(chooser, ATTACH_FILE);
}
}
- });
+
+ @Override
+ public void onSendPlainTextInstead() {
+ // TODO Auto-generated method stub
+
+ }
+ },"file");
break;
case R.id.action_add:
startActivity(new Intent(this, ContactsActivity.class));
@@ -589,36 +595,77 @@ public class ConversationActivity extends XmppActivity {
listView.invalidateViews();
}
- public void selectPresence(final Conversation conversation, final OnPresenceSelected listener) {
- Contact contact = conversation.getContact();
- if (contact==null) {
- showAddToRosterDialog(conversation);
- listener.onPresenceSelected(false,null);
- } else {
- Hashtable presences = contact.getPresences();
- if (presences.size() == 0) {
- listener.onPresenceSelected(false, null);
- } else if (presences.size() == 1) {
- String presence = (String) presences.keySet().toArray()[0];
- conversation.setNextPresence(presence);
- listener.onPresenceSelected(true, presence);
+ public void selectPresence(final Conversation conversation, final OnPresenceSelected listener, String reason) {
+ Account account = conversation.getAccount();
+ if (account.getStatus() != Account.STATUS_ONLINE) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(getString(R.string.not_connected));
+ builder.setIconAttribute(android.R.attr.alertDialogIcon);
+ if ("otr".equals(reason)) {
+ builder.setMessage(getString(R.string.you_are_offline,getString(R.string.otr_messages)));
+ } else if ("file".equals(reason)) {
+ builder.setMessage(getString(R.string.you_are_offline,getString(R.string.files)));
} else {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setTitle(getString(R.string.choose_presence));
- final String[] presencesArray = new String[presences.size()];
- presences.keySet().toArray(presencesArray);
- builder.setItems(presencesArray,
- new DialogInterface.OnClickListener() {
-
+ builder.setMessage(getString(R.string.you_are_offline_blank));
+ }
+ builder.setNegativeButton(getString(R.string.cancel), null);
+ builder.setPositiveButton(getString(R.string.manage_account), new OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ startActivity(new Intent(activity, ManageAccountActivity.class));
+ }
+ });
+ builder.create().show();
+ listener.onPresenceSelected(false, null);
+ } else {
+ Contact contact = conversation.getContact();
+ if (contact==null) {
+ showAddToRosterDialog(conversation);
+ listener.onPresenceSelected(false,null);
+ } else {
+ Hashtable presences = contact.getPresences();
+ if (presences.size() == 0) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(getString(R.string.contact_offline));
+ if ("otr".equals(reason)) {
+ builder.setMessage(getString(R.string.contact_offline_otr));
+ builder.setPositiveButton(getString(R.string.send_unencrypted), new OnClickListener() {
+
@Override
- public void onClick(DialogInterface dialog,
- int which) {
- String presence = presencesArray[which];
- conversation.setNextPresence(presence);
- listener.onPresenceSelected(true,presence);
+ public void onClick(DialogInterface dialog, int which) {
+ listener.onSendPlainTextInstead();
}
});
- builder.create().show();
+ } else if ("file".equals(reason)) {
+ builder.setMessage(getString(R.string.contact_offline_file));
+ }
+ builder.setIconAttribute(android.R.attr.alertDialogIcon);
+ builder.setNegativeButton(getString(R.string.cancel), null);
+ builder.create().show();
+ listener.onPresenceSelected(false, null);
+ } else if (presences.size() == 1) {
+ String presence = (String) presences.keySet().toArray()[0];
+ conversation.setNextPresence(presence);
+ listener.onPresenceSelected(true, presence);
+ } else {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(getString(R.string.choose_presence));
+ final String[] presencesArray = new String[presences.size()];
+ presences.keySet().toArray(presencesArray);
+ builder.setItems(presencesArray,
+ new DialogInterface.OnClickListener() {
+
+ @Override
+ public void onClick(DialogInterface dialog,
+ int which) {
+ String presence = presencesArray[which];
+ conversation.setNextPresence(presence);
+ listener.onPresenceSelected(true,presence);
+ }
+ });
+ builder.create().show();
+ }
}
}
}
diff --git a/src/eu/siacs/conversations/ui/ConversationFragment.java b/src/eu/siacs/conversations/ui/ConversationFragment.java
index 5ade8a53d..270aa0315 100644
--- a/src/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/eu/siacs/conversations/ui/ConversationFragment.java
@@ -616,55 +616,23 @@ public class ConversationFragment extends Fragment {
activity.xmppConnectionService.sendMessage(message, null);
chatMsg.setText("");
} else {
- Hashtable presences;
- if (conversation.getContact() != null) {
- presences = conversation.getContact().getPresences();
- } else {
- presences = null;
- }
- if ((presences == null) || (presences.size() == 0)) {
- AlertDialog.Builder builder = new AlertDialog.Builder(
- getActivity());
- builder.setTitle("Contact is offline");
- builder.setIconAttribute(android.R.attr.alertDialogIcon);
- builder.setMessage("Sending OTR encrypted messages to an offline contact is impossible.");
- builder.setPositiveButton("Send plain text",
- new DialogInterface.OnClickListener() {
+ activity.selectPresence(message.getConversation(), new OnPresenceSelected() {
+
+ @Override
+ public void onPresenceSelected(boolean success, String presence) {
+ if (success) {
+ xmppService.sendMessage(message,presence);
+ chatMsg.setText("");
+ }
+ }
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- conversation.nextMessageEncryption = Message.ENCRYPTION_NONE;
- message.setEncryption(Message.ENCRYPTION_NONE);
- xmppService.sendMessage(message, null);
- chatMsg.setText("");
- }
- });
- builder.setNegativeButton("Cancel", null);
- builder.create().show();
- } else if (presences.size() == 1) {
- xmppService.sendMessage(message, (String) presences.keySet()
- .toArray()[0]);
- chatMsg.setText("");
- } else {
- AlertDialog.Builder builder = new AlertDialog.Builder(
- getActivity());
- builder.setTitle("Choose Presence");
- final String[] presencesArray = new String[presences.size()];
- presences.keySet().toArray(presencesArray);
- builder.setItems(presencesArray,
- new DialogInterface.OnClickListener() {
-
- @Override
- public void onClick(DialogInterface dialog,
- int which) {
- xmppService.sendMessage(message,
- presencesArray[which]);
- chatMsg.setText("");
- }
- });
- builder.create().show();
- }
+ @Override
+ public void onSendPlainTextInstead() {
+ message.setEncryption(Message.ENCRYPTION_NONE);
+ xmppService.sendMessage(message,null);
+ chatMsg.setText("");
+ }
+ },"otr");
}
}
diff --git a/src/eu/siacs/conversations/ui/OnPresenceSelected.java b/src/eu/siacs/conversations/ui/OnPresenceSelected.java
index 7e424b2e8..b3a995dc1 100644
--- a/src/eu/siacs/conversations/ui/OnPresenceSelected.java
+++ b/src/eu/siacs/conversations/ui/OnPresenceSelected.java
@@ -2,4 +2,5 @@ package eu.siacs.conversations.ui;
public interface OnPresenceSelected {
public void onPresenceSelected(boolean success, String presence);
+ public void onSendPlainTextInstead();
}