Add retract message menu item

Stephen Paul Weber created

Change summary

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java | 12 +
src/main/res/menu/message_context.xml                             |  6 
src/main/res/values/strings.xml                                   |  1 
3 files changed, 18 insertions(+), 1 deletion(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/ConversationFragment.java πŸ”—

@@ -1325,6 +1325,7 @@ public class ConversationFragment extends XmppFragment
             MenuItem quoteMessage = menu.findItem(R.id.quote_message);
             MenuItem retryDecryption = menu.findItem(R.id.retry_decryption);
             MenuItem correctMessage = menu.findItem(R.id.correct_message);
+            MenuItem retractMessage = menu.findItem(R.id.retract_message);
             MenuItem shareWith = menu.findItem(R.id.share_with);
             MenuItem sendAgain = menu.findItem(R.id.send_again);
             MenuItem copyUrl = menu.findItem(R.id.copy_url);
@@ -1362,6 +1363,7 @@ public class ConversationFragment extends XmppFragment
                     && relevantForCorrection.isLastCorrectableMessage()
                     && m.getConversation() instanceof Conversation) {
                 correctMessage.setVisible(true);
+                if (!relevantForCorrection.getBody().equals("") && !relevantForCorrection.getBody().equals(" ")) retractMessage.setVisible(true);
             }
             if ((m.isFileOrImage() && !deleted && !receiving)
                     || (m.getType() == Message.TYPE_TEXT && !m.treatAsDownloadable())
@@ -1427,6 +1429,16 @@ public class ConversationFragment extends XmppFragment
             case R.id.correct_message:
                 correctMessage(selectedMessage);
                 return true;
+            case R.id.retract_message:
+                Message message = selectedMessage;
+                while (message.mergeable(message.next())) {
+                    message = message.next();
+                }
+                message.setBody(" ");
+                message.putEdited(message.getUuid(), message.getServerMsgId());
+                message.setServerMsgId(null);
+                message.setUuid(UUID.randomUUID().toString());
+                sendMessage(message);
             case R.id.copy_message:
                 ShareUtil.copyToClipboard(activity, selectedMessage);
                 return true;

src/main/res/menu/message_context.xml πŸ”—

@@ -33,6 +33,10 @@
         android:id="@+id/correct_message"
         android:title="@string/correct_message"
         android:visible="false" />
+    <item
+        android:id="@+id/retract_message"
+        android:title="@string/retract_message"
+        android:visible="false" />
     <item
         android:id="@+id/copy_url"
         android:title="@string/copy_original_url"
@@ -57,4 +61,4 @@
         android:id="@+id/delete_file"
         android:title="@string/delete_x_file"
         android:visible="false" />
-</menu>
+</menu>

src/main/res/values/strings.xml πŸ”—

@@ -533,6 +533,7 @@
     <string name="no_accounts">(No activated accounts)</string>
     <string name="this_field_is_required">This field is required</string>
     <string name="correct_message">Correct message</string>
+    <string name="retract_message">Retract message</string>
     <string name="send_corrected_message">Send corrected message</string>
     <string name="no_keys_just_confirm">You have already validated this persons fingerprint securely to confirm trust. By selecting β€œDone” you are just confirming that %s is part of this group chat.</string>
     <string name="this_account_is_disabled">You have disabled this account</string>