From 11f5a79205d6a513c26d6a9c391ee663a89e7534 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Wed, 30 Oct 2024 13:55:06 -0500 Subject: [PATCH] Initial B and I option in menu for formatting Can't get them to have icons for some reason... --- ...ditMessageSelectionActionModeCallback.java | 60 +++++++++++++++++++ .../res/drawable/format_bold_24dp.xml | 10 ++++ .../res/drawable/format_italic_24dp.xml | 10 ++++ .../menu/edit_message_selection_actions.xml | 16 +++++ .../ui/ConversationFragment.java | 3 + 5 files changed, 99 insertions(+) create mode 100644 src/cheogram/java/com/cheogram/android/EditMessageSelectionActionModeCallback.java create mode 100644 src/cheogram/res/drawable/format_bold_24dp.xml create mode 100644 src/cheogram/res/drawable/format_italic_24dp.xml create mode 100644 src/cheogram/res/menu/edit_message_selection_actions.xml diff --git a/src/cheogram/java/com/cheogram/android/EditMessageSelectionActionModeCallback.java b/src/cheogram/java/com/cheogram/android/EditMessageSelectionActionModeCallback.java new file mode 100644 index 0000000000000000000000000000000000000000..66b5253aac535a1c575efb31bb67571b5500dce7 --- /dev/null +++ b/src/cheogram/java/com/cheogram/android/EditMessageSelectionActionModeCallback.java @@ -0,0 +1,60 @@ +package com.cheogram.android; + +import android.content.ClipData; +import android.content.ClipboardManager; +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 eu.siacs.conversations.R; +import eu.siacs.conversations.ui.widget.EditMessage; + +public class EditMessageSelectionActionModeCallback implements ActionMode.Callback { + + private final EditMessage editMessage; + + public EditMessageSelectionActionModeCallback(EditMessage editMessage) { + this.editMessage = editMessage; + } + + @Override + public boolean onCreateActionMode(final ActionMode mode, final Menu menu) { + final MenuInflater inflater = mode.getMenuInflater(); + inflater.inflate(R.menu.edit_message_selection_actions, menu); + return true; + } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + menu.findItem(R.id.bold).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + menu.findItem(R.id.italic).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); + return true; + } + + @Override + public boolean onActionItemClicked(final ActionMode mode, final MenuItem item) { + if (item.getItemId() == R.id.bold) { + final var start = editMessage.getSelectionStart(); + final var end = editMessage.getSelectionEnd(); + if (start < 0 || end < 0) return false; + editMessage.getText().insert(start, "*"); + editMessage.getText().insert(end+1, "*"); + return true; + } + if (item.getItemId() == R.id.italic) { + final var start = editMessage.getSelectionStart(); + final var end = editMessage.getSelectionEnd(); + if (start < 0 || end < 0) return false; + editMessage.getText().insert(start, "_"); + editMessage.getText().insert(end+1, "_"); + return true; + } + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) {} +} diff --git a/src/cheogram/res/drawable/format_bold_24dp.xml b/src/cheogram/res/drawable/format_bold_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..da195445d93cd40f164a8156011daa56ede8752c --- /dev/null +++ b/src/cheogram/res/drawable/format_bold_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/src/cheogram/res/drawable/format_italic_24dp.xml b/src/cheogram/res/drawable/format_italic_24dp.xml new file mode 100644 index 0000000000000000000000000000000000000000..41527dd4749535899f50869829b2ebfc2234f3b4 --- /dev/null +++ b/src/cheogram/res/drawable/format_italic_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/src/cheogram/res/menu/edit_message_selection_actions.xml b/src/cheogram/res/menu/edit_message_selection_actions.xml new file mode 100644 index 0000000000000000000000000000000000000000..02a3fe0910a126411c7f8f49c9479484d910a58f --- /dev/null +++ b/src/cheogram/res/menu/edit_message_selection_actions.xml @@ -0,0 +1,16 @@ + + + + + + + + diff --git a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java index cfbf83fe6171c2601a970ff85b6f6ebe4198acd6..f9ac888b00d0078cf8a7014554edbe77bc833cde 100644 --- a/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java +++ b/src/main/java/eu/siacs/conversations/ui/ConversationFragment.java @@ -89,6 +89,7 @@ import androidx.viewpager.widget.ViewPager; import com.cheogram.android.BobTransfer; import com.cheogram.android.EmojiSearch; +import com.cheogram.android.EditMessageSelectionActionModeCallback; import com.cheogram.android.WebxdcPage; import com.cheogram.android.WebxdcStore; @@ -1469,6 +1470,8 @@ public class ConversationFragment extends XmppFragment if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { this.binding.textinput.setCustomInsertionActionModeCallback( new EditMessageActionModeCallback(this.binding.textinput)); + this.binding.textinput.setCustomSelectionActionModeCallback( + new EditMessageSelectionActionModeCallback(this.binding.textinput)); } messageListAdapter.setOnMessageBoxClicked(message -> {