unified presence selection for otr and file transfer
This commit is contained in:
parent
a55ddb889e
commit
f36f218469
|
@ -68,4 +68,14 @@
|
||||||
<string name="download_image">Download Image</string>
|
<string name="download_image">Download Image</string>
|
||||||
<string name="error_loading_image">Error loading image (File not found)</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="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>
|
</resources>
|
||||||
|
|
|
@ -332,7 +332,13 @@ public class ConversationActivity extends XmppActivity {
|
||||||
startActivityForResult(chooser, ATTACH_FILE);
|
startActivityForResult(chooser, ATTACH_FILE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
|
||||||
|
@Override
|
||||||
|
public void onSendPlainTextInstead() {
|
||||||
|
// TODO Auto-generated method stub
|
||||||
|
|
||||||
|
}
|
||||||
|
},"file");
|
||||||
break;
|
break;
|
||||||
case R.id.action_add:
|
case R.id.action_add:
|
||||||
startActivity(new Intent(this, ContactsActivity.class));
|
startActivity(new Intent(this, ContactsActivity.class));
|
||||||
|
@ -589,7 +595,30 @@ public class ConversationActivity extends XmppActivity {
|
||||||
listView.invalidateViews();
|
listView.invalidateViews();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void selectPresence(final Conversation conversation, final OnPresenceSelected listener) {
|
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 {
|
||||||
Contact contact = conversation.getContact();
|
Contact contact = conversation.getContact();
|
||||||
if (contact==null) {
|
if (contact==null) {
|
||||||
showAddToRosterDialog(conversation);
|
showAddToRosterDialog(conversation);
|
||||||
|
@ -597,6 +626,23 @@ public class ConversationActivity extends XmppActivity {
|
||||||
} else {
|
} else {
|
||||||
Hashtable<String, Integer> presences = contact.getPresences();
|
Hashtable<String, Integer> presences = contact.getPresences();
|
||||||
if (presences.size() == 0) {
|
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) {
|
||||||
|
listener.onSendPlainTextInstead();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} 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);
|
listener.onPresenceSelected(false, null);
|
||||||
} else if (presences.size() == 1) {
|
} else if (presences.size() == 1) {
|
||||||
String presence = (String) presences.keySet().toArray()[0];
|
String presence = (String) presences.keySet().toArray()[0];
|
||||||
|
@ -622,6 +668,7 @@ public class ConversationActivity extends XmppActivity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void showAddToRosterDialog(final Conversation conversation) {
|
private void showAddToRosterDialog(final Conversation conversation) {
|
||||||
String jid = conversation.getContactJid();
|
String jid = conversation.getContactJid();
|
||||||
|
|
|
@ -616,55 +616,23 @@ public class ConversationFragment extends Fragment {
|
||||||
activity.xmppConnectionService.sendMessage(message, null);
|
activity.xmppConnectionService.sendMessage(message, null);
|
||||||
chatMsg.setText("");
|
chatMsg.setText("");
|
||||||
} else {
|
} else {
|
||||||
Hashtable<String, Integer> presences;
|
activity.selectPresence(message.getConversation(), new OnPresenceSelected() {
|
||||||
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
|
@Override
|
||||||
public void onClick(DialogInterface dialog,
|
public void onPresenceSelected(boolean success, String presence) {
|
||||||
int which) {
|
if (success) {
|
||||||
conversation.nextMessageEncryption = Message.ENCRYPTION_NONE;
|
xmppService.sendMessage(message,presence);
|
||||||
|
chatMsg.setText("");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSendPlainTextInstead() {
|
||||||
message.setEncryption(Message.ENCRYPTION_NONE);
|
message.setEncryption(Message.ENCRYPTION_NONE);
|
||||||
xmppService.sendMessage(message,null);
|
xmppService.sendMessage(message,null);
|
||||||
chatMsg.setText("");
|
chatMsg.setText("");
|
||||||
}
|
}
|
||||||
});
|
},"otr");
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,4 +2,5 @@ package eu.siacs.conversations.ui;
|
||||||
|
|
||||||
public interface OnPresenceSelected {
|
public interface OnPresenceSelected {
|
||||||
public void onPresenceSelected(boolean success, String presence);
|
public void onPresenceSelected(boolean success, String presence);
|
||||||
|
public void onSendPlainTextInstead();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue