diff options
author | Daniel Gultsch <daniel.gultsch@rwth-aachen.de> | 2014-04-26 12:40:21 +0200 |
---|---|---|
committer | Daniel Gultsch <daniel.gultsch@rwth-aachen.de> | 2014-04-26 12:40:21 +0200 |
commit | f36f2184698b2c0dc7ace4073ed018cdf3122b5b (patch) | |
tree | cd66b99f8685c57e44c63e020f635a9d6d46dacc | |
parent | a55ddb889efb2645b5d72df23edca5bfdf4b8951 (diff) |
unified presence selection for otr and file transfer
Diffstat (limited to '')
-rw-r--r-- | res/values/strings.xml | 10 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/ConversationActivity.java | 99 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/ConversationFragment.java | 64 | ||||
-rw-r--r-- | src/eu/siacs/conversations/ui/OnPresenceSelected.java | 1 |
4 files changed, 100 insertions, 74 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index 1bc03a91..70bc8f57 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -68,4 +68,14 @@ <string name="download_image">Download Image</string> <string name="error_loading_image">Error loading image (File not found)</string> <string name="image_offered_for_download"><i>Image file offered for download</i></string> + <string name="not_connected">Not Connected</string> + <string name="you_are_offline">You have to be online to send %s but your account assoziated with this Conversation is currently offline.</string> + <string name="you_are_offline_blank">You can not perform this action while being offline</string> + <string name="files">files</string> + <string name="otr_messages">OTR encrypted messages</string> + <string name="manage_account">Manage account</string> + <string name="contact_offline">Your Contact is Offline</string> + <string name="contact_offline_otr">Sending OTR encrypted messages to an offline contact is unfortunately not supported.\nWould you like to send the message in plain text?</string> + <string name="contact_offline_file">Sending files to an offline contact is unfortunately not supported.</string> + <string name="send_unencrypted">Send unencrypted</string> </resources> diff --git a/src/eu/siacs/conversations/ui/ConversationActivity.java b/src/eu/siacs/conversations/ui/ConversationActivity.java index 220c2461..fc19ecc7 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); + 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 { + 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 { - Hashtable<String, Integer> 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); + Contact contact = conversation.getContact(); + if (contact==null) { + showAddToRosterDialog(conversation); + listener.onPresenceSelected(false,null); } 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() { - + Hashtable<String, Integer> 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 5ade8a53..270aa031 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<String, Integer> 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() { - - @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() { + 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) { - 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 7e424b2e..b3a995dc 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(); } |