diff --git a/src/cheogram/java/com/cheogram/android/MessageTextActionModeCallback.java b/src/cheogram/java/com/cheogram/android/MessageTextActionModeCallback.java new file mode 100644 index 0000000000000000000000000000000000000000..5f3bad642b3faa2f13accdb3f4d492cc0efd2a45 --- /dev/null +++ b/src/cheogram/java/com/cheogram/android/MessageTextActionModeCallback.java @@ -0,0 +1,49 @@ +package com.cheogram.android; + +import android.content.Context; +import android.text.TextUtils; +import android.view.ActionMode; +import android.view.Menu; +import android.view.MenuInflater; +import android.view.MenuItem; +import android.widget.TextView; + +import eu.siacs.conversations.R; +import eu.siacs.conversations.ui.adapter.MessageAdapter; + +public class MessageTextActionModeCallback implements ActionMode.Callback { + final MessageAdapter adapter; + final TextView text; + + public MessageTextActionModeCallback(MessageAdapter adapter, TextView text) { + this.adapter = adapter; + this.text = text; + } + + @Override + public boolean onCreateActionMode(final ActionMode mode, final Menu menu) { + final MenuInflater inflater = mode.getMenuInflater(); + inflater.inflate(R.menu.message_text_actions, menu); + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) { + if (item.getItemId() == R.id.quote) { + int start = text.getSelectionStart(); + int end = text.getSelectionEnd(); + if (start < 0 || end < 0) return false; + adapter.quoteText(text.getText().subSequence(start, end).toString()); + return true; + } + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) {} +} diff --git a/src/cheogram/res/menu/message_text_actions.xml b/src/cheogram/res/menu/message_text_actions.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b7af93876830ba620e191923fca28c506225773 --- /dev/null +++ b/src/cheogram/res/menu/message_text_actions.xml @@ -0,0 +1,9 @@ + +
diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index ab81bb1087fea5cd0e8b1dfae4e7628a9962a611..4c347a95312bca5711f00ff888ce1cfbbc179ad7 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -1358,6 +1358,7 @@ public class ConversationFragment extends XmppFragment messageListAdapter.setOnContactPictureClicked(this); messageListAdapter.setOnContactPictureLongClicked(this); messageListAdapter.setOnInlineImageLongClicked(this); + messageListAdapter.setConversationFragment(this); binding.messagesView.setAdapter(messageListAdapter); registerForContextMenu(binding.messagesView); @@ -1483,11 +1484,12 @@ public class ConversationFragment extends XmppFragment messageListAdapter.setOnContactPictureClicked(null); messageListAdapter.setOnContactPictureLongClicked(null); messageListAdapter.setOnInlineImageLongClicked(null); + messageListAdapter.setConversationFragment(null); binding.conversationViewPager.setAdapter(null); if (conversation != null) conversation.setupViewPager(null, null, false, null); } - private void quoteText(String text) { + public void quoteText(String text) { if (binding.textinput.isEnabled()) { binding.textinput.insertAsQuote(text); binding.textinput.requestFocus(); diff --git a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java index 4ba064de815373b7e7d449a8d11141ce2fd49a82..dc3c7b74f3e3828dc0fdfbb0d809e56b320fa0ef 100644 --- a/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java +++ b/src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java @@ -43,6 +43,7 @@ import androidx.core.content.ContextCompat; import androidx.core.content.res.ResourcesCompat; import com.cheogram.android.BobTransfer; +import com.cheogram.android.MessageTextActionModeCallback; import com.cheogram.android.SwipeDetector; import com.cheogram.android.WebxdcPage; import com.cheogram.android.WebxdcUpdate; @@ -117,6 +118,7 @@ public class MessageAdapter extends ArrayAdapter