diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
index b464d23182a3556fe044592a6ae7e2aa0560d6c8..1cd5507b5ace0ee9b27024aa406a739fc2482ffa 100644
--- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
+++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java
@@ -608,6 +608,7 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
MenuItem shareWith = menu.findItem(R.id.share_with);
MenuItem sendAgain = menu.findItem(R.id.send_again);
MenuItem copyUrl = menu.findItem(R.id.copy_url);
+ MenuItem downloadFile = menu.findItem(R.id.download_file);
MenuItem cancelTransmission = menu.findItem(R.id.cancel_transmission);
MenuItem deleteFile = menu.findItem(R.id.delete_file);
MenuItem showErrorMessage = menu.findItem(R.id.show_error_message);
@@ -637,6 +638,10 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
|| (t != null && t instanceof HttpDownloadConnection)) {
copyUrl.setVisible(true);
}
+ if ((m.isFileOrImage() && t instanceof TransferablePlaceholder && m.hasFileOnRemoteHost())) {
+ downloadFile.setVisible(true);
+ downloadFile.setTitle(activity.getString(R.string.download_x_file,UIHelper.getFileDescriptionString(activity, m)));
+ }
boolean waitingOfferedSending = m.getStatus() == Message.STATUS_WAITING
|| m.getStatus() == Message.STATUS_UNSEND
|| m.getStatus() == Message.STATUS_OFFERED;
@@ -677,6 +682,9 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
case R.id.copy_url:
copyUrl(selectedMessage);
return true;
+ case R.id.download_file:
+ downloadFile(selectedMessage);
+ return true;
case R.id.cancel_transmission:
cancelTransmission(selectedMessage);
return true;
@@ -798,6 +806,10 @@ public class ConversationFragment extends Fragment implements EditMessage.Keyboa
}
}
+ private void downloadFile(Message message) {
+ activity.xmppConnectionService.getHttpConnectionManager().createNewDownloadConnection(message,true);
+ }
+
private void cancelTransmission(Message message) {
Transferable transferable = message.getTransferable();
if (transferable != null) {
diff --git a/src/main/res/menu/message_context.xml b/src/main/res/menu/message_context.xml
index 3ba14e084a521901c9f80202885dffdf6d7c32d7..283d3f2fceaa00491588e3e5b9e30cb065c6692a 100644
--- a/src/main/res/menu/message_context.xml
+++ b/src/main/res/menu/message_context.xml
@@ -33,6 +33,10 @@
android:id="@+id/send_again"
android:title="@string/send_again"
android:visible="false"/>
+