diff --git a/res/menu/profile_context.xml b/res/menu/profile_context.xml
index 8c3b3ec5e..408771636 100644
--- a/res/menu/profile_context.xml
+++ b/res/menu/profile_context.xml
@@ -27,4 +27,8 @@
+
+
diff --git a/src/org/thoughtcrime/securesms/ConversationFragment.java b/src/org/thoughtcrime/securesms/ConversationFragment.java
index ab1e47415..96db5476d 100644
--- a/src/org/thoughtcrime/securesms/ConversationFragment.java
+++ b/src/org/thoughtcrime/securesms/ConversationFragment.java
@@ -478,20 +478,6 @@ public class ConversationFragment extends MessageSelectorFragment
}
}
- private void handleResendMessage(final Set dcMsgsSet) {
- int[] ids = DcMsg.msgSetToIds(dcMsgsSet);
- if (dcContext.resendMsgs(ids)) {
- actionMode.finish();
- Toast.makeText(getContext(), R.string.sending, Toast.LENGTH_SHORT).show();
- } else {
- new AlertDialog.Builder(getContext())
- .setMessage(dcContext.getLastError())
- .setCancelable(false)
- .setPositiveButton(android.R.string.ok, null)
- .show();
- }
- }
-
private void reloadList() {
reloadList(false);
}
diff --git a/src/org/thoughtcrime/securesms/MessageSelectorFragment.java b/src/org/thoughtcrime/securesms/MessageSelectorFragment.java
index e3ce36c9c..3451ceb05 100644
--- a/src/org/thoughtcrime/securesms/MessageSelectorFragment.java
+++ b/src/org/thoughtcrime/securesms/MessageSelectorFragment.java
@@ -7,6 +7,7 @@ import android.os.AsyncTask;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;
+import android.widget.Toast;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.view.ActionMode;
@@ -115,4 +116,18 @@ public abstract class MessageSelectorFragment
protected void handleShare(final DcMsg dcMsg) {
DcHelper.openForViewOrShare(getContext(), dcMsg.getId(), Intent.ACTION_SEND);
}
+
+ protected void handleResendMessage(final Set dcMsgsSet) {
+ int[] ids = DcMsg.msgSetToIds(dcMsgsSet);
+ if (dcContext.resendMsgs(ids)) {
+ actionMode.finish();
+ Toast.makeText(getContext(), R.string.sending, Toast.LENGTH_SHORT).show();
+ } else {
+ new AlertDialog.Builder(getContext())
+ .setMessage(dcContext.getLastError())
+ .setCancelable(false)
+ .setPositiveButton(android.R.string.ok, null)
+ .show();
+ }
+ }
}
diff --git a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java b/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java
index d9c405061..12eb90ab4 100644
--- a/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java
+++ b/src/org/thoughtcrime/securesms/ProfileDocumentsFragment.java
@@ -204,6 +204,15 @@ public class ProfileDocumentsFragment
menu.findItem(R.id.show_in_chat).setVisible(singleSelection);
menu.findItem(R.id.share).setVisible(singleSelection);
+ boolean canResend = true;
+ for (DcMsg messageRecord : messageRecords) {
+ if (!messageRecord.isOutgoing()) {
+ canResend = false;
+ break;
+ }
+ }
+ menu.findItem(R.id.menu_resend).setVisible(canResend);
+
boolean webxdcApp = singleSelection && messageRecords.iterator().next().getType() == DcMsg.DC_MSG_WEBXDC;
menu.findItem(R.id.menu_add_to_home_screen).setVisible(webxdcApp);
}
@@ -259,6 +268,9 @@ public class ProfileDocumentsFragment
case R.id.save:
handleSaveAttachment(getListAdapter().getSelectedMedia());
return true;
+ case R.id.menu_resend:
+ handleResendMessage(getListAdapter().getSelectedMedia());
+ return true;
}
return false;
}
diff --git a/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java b/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java
index cf4c15884..8118f572b 100644
--- a/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java
+++ b/src/org/thoughtcrime/securesms/ProfileGalleryFragment.java
@@ -197,6 +197,15 @@ public class ProfileGalleryFragment
menu.findItem(R.id.details).setVisible(singleSelection);
menu.findItem(R.id.show_in_chat).setVisible(singleSelection);
menu.findItem(R.id.share).setVisible(singleSelection);
+
+ boolean canResend = true;
+ for (DcMsg messageRecord : messageRecords) {
+ if (!messageRecord.isOutgoing()) {
+ canResend = false;
+ break;
+ }
+ }
+ menu.findItem(R.id.menu_resend).setVisible(canResend);
}
private ProfileGalleryAdapter getListAdapter() {
@@ -246,6 +255,9 @@ public class ProfileGalleryFragment
case R.id.save:
handleSaveAttachment(getListAdapter().getSelectedMedia());
return true;
+ case R.id.menu_resend:
+ handleResendMessage(getListAdapter().getSelectedMedia());
+ return true;
}
return false;
}
diff --git a/src/org/thoughtcrime/securesms/ProfileSettingsFragment.java b/src/org/thoughtcrime/securesms/ProfileSettingsFragment.java
index 43b726f3e..553cfab71 100644
--- a/src/org/thoughtcrime/securesms/ProfileSettingsFragment.java
+++ b/src/org/thoughtcrime/securesms/ProfileSettingsFragment.java
@@ -271,6 +271,7 @@ public class ProfileSettingsFragment extends Fragment
menu.findItem(R.id.show_in_chat).setVisible(false);
menu.findItem(R.id.save).setVisible(false);
menu.findItem(R.id.share).setVisible(false);
+ menu.findItem(R.id.menu_resend).setVisible(false);
mode.setTitle("1");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {